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

struct  S1503C5_nt  {
  int s1503c5f0[2];
  void  mf1503c5(); // _ZN10S1503C5_nt8mf1503c5Ev
};
//SIG(-1 S1503C5_nt) C1{ m Fi[2]}


void  S1503C5_nt ::mf1503c5(){}

//skip512 S1503C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1503C4_nt  {
  int s1503c4f0;
  __tsi64 s1503c4f1;
  void *s1503c4f2[4];
  int s1503c4f3[2];
  void *s1503c4f4;
  ::S1503C5_nt s1503c4f5;
  void *s1503c4f6[2];
  virtual  ~S1503C4_nt(); // _ZN10S1503C4_ntD1Ev
  virtual void  v6(); // _ZN10S1503C4_nt2v6Ev
  virtual void  v7(); // _ZN10S1503C4_nt2v7Ev
  virtual void  v8(); // _ZN10S1503C4_nt2v8Ev
  virtual void  v9(); // _ZN10S1503C4_nt2v9Ev
  virtual void  v10(); // _ZN10S1503C4_nt3v10Ev
  virtual void  v11(); // _ZN10S1503C4_nt3v11Ev
  virtual void  v12(); // _ZN10S1503C4_nt3v12Ev
  virtual void  v13(); // _ZN10S1503C4_nt3v13Ev
  virtual void  v14(); // _ZN10S1503C4_nt3v14Ev
  virtual void  v15(); // _ZN10S1503C4_nt3v15Ev
  virtual void  v16(); // _ZN10S1503C4_nt3v16Ev
  virtual void  v17(); // _ZN10S1503C4_nt3v17Ev
  virtual void  v18(); // _ZN10S1503C4_nt3v18Ev
  virtual void  v19(); // _ZN10S1503C4_nt3v19Ev
  virtual void  v20(); // _ZN10S1503C4_nt3v20Ev
  virtual void  v21(); // _ZN10S1503C4_nt3v21Ev
  virtual void  v22(); // _ZN10S1503C4_nt3v22Ev
  virtual void  v23(); // _ZN10S1503C4_nt3v23Ev
  virtual void  v24(); // _ZN10S1503C4_nt3v24Ev
  virtual void  v25(); // _ZN10S1503C4_nt3v25Ev
  virtual void  v26(); // _ZN10S1503C4_nt3v26Ev
  virtual void  v27(); // _ZN10S1503C4_nt3v27Ev
  virtual void  v28(); // _ZN10S1503C4_nt3v28Ev
  virtual void  v29(); // _ZN10S1503C4_nt3v29Ev
  virtual void  v30(); // _ZN10S1503C4_nt3v30Ev
  virtual void  v31(); // _ZN10S1503C4_nt3v31Ev
  virtual void  v32(); // _ZN10S1503C4_nt3v32Ev
  virtual void  v33(); // _ZN10S1503C4_nt3v33Ev
  virtual void  v34(); // _ZN10S1503C4_nt3v34Ev
  virtual void  v35(); // _ZN10S1503C4_nt3v35Ev
  virtual void  v36(); // _ZN10S1503C4_nt3v36Ev
  virtual void  v37(); // _ZN10S1503C4_nt3v37Ev
  virtual void  v38(); // _ZN10S1503C4_nt3v38Ev
  virtual void  v39(); // _ZN10S1503C4_nt3v39Ev
  virtual void  v40(); // _ZN10S1503C4_nt3v40Ev
  virtual void  v41(); // _ZN10S1503C4_nt3v41Ev
  virtual void  v42(); // _ZN10S1503C4_nt3v42Ev
  virtual void  v43(); // _ZN10S1503C4_nt3v43Ev
  virtual void  v44(); // _ZN10S1503C4_nt3v44Ev
  virtual void  v45(); // _ZN10S1503C4_nt3v45Ev
  virtual void  v46(); // _ZN10S1503C4_nt3v46Ev
  virtual void  v47(); // _ZN10S1503C4_nt3v47Ev
  virtual void  v48(); // _ZN10S1503C4_nt3v48Ev
  virtual void  v49(); // _ZN10S1503C4_nt3v49Ev
  virtual void  v50(); // _ZN10S1503C4_nt3v50Ev
  virtual void  v51(); // _ZN10S1503C4_nt3v51Ev
  virtual void  v52(); // _ZN10S1503C4_nt3v52Ev
  virtual void  v53(); // _ZN10S1503C4_nt3v53Ev
  virtual void  v54(); // _ZN10S1503C4_nt3v54Ev
  virtual void  v55(); // _ZN10S1503C4_nt3v55Ev
  virtual void  v56(); // _ZN10S1503C4_nt3v56Ev
  virtual void  v57(); // _ZN10S1503C4_nt3v57Ev
  virtual void  v58(); // _ZN10S1503C4_nt3v58Ev
  virtual void  v59(); // _ZN10S1503C4_nt3v59Ev
  virtual void  v60(); // _ZN10S1503C4_nt3v60Ev
  virtual void  v61(); // _ZN10S1503C4_nt3v61Ev
  virtual void  v62(); // _ZN10S1503C4_nt3v62Ev
  virtual void  v63(); // _ZN10S1503C4_nt3v63Ev
  virtual void  v64(); // _ZN10S1503C4_nt3v64Ev
  virtual void  v65(); // _ZN10S1503C4_nt3v65Ev
  virtual void  v66(); // _ZN10S1503C4_nt3v66Ev
  virtual void  v67(); // _ZN10S1503C4_nt3v67Ev
  virtual void  v68(); // _ZN10S1503C4_nt3v68Ev
  virtual void  v69(); // _ZN10S1503C4_nt3v69Ev
  S1503C4_nt(); // tgen
};
//SIG(-1 S1503C4_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]}


 S1503C4_nt ::~S1503C4_nt(){ note_dtor("S1503C4_nt", this);}
void  S1503C4_nt ::v6(){vfunc_called(this, "_ZN10S1503C4_nt2v6Ev");}
void  S1503C4_nt ::v7(){vfunc_called(this, "_ZN10S1503C4_nt2v7Ev");}
void  S1503C4_nt ::v8(){vfunc_called(this, "_ZN10S1503C4_nt2v8Ev");}
void  S1503C4_nt ::v9(){vfunc_called(this, "_ZN10S1503C4_nt2v9Ev");}
void  S1503C4_nt ::v10(){vfunc_called(this, "_ZN10S1503C4_nt3v10Ev");}
void  S1503C4_nt ::v11(){vfunc_called(this, "_ZN10S1503C4_nt3v11Ev");}
void  S1503C4_nt ::v12(){vfunc_called(this, "_ZN10S1503C4_nt3v12Ev");}
void  S1503C4_nt ::v13(){vfunc_called(this, "_ZN10S1503C4_nt3v13Ev");}
void  S1503C4_nt ::v14(){vfunc_called(this, "_ZN10S1503C4_nt3v14Ev");}
void  S1503C4_nt ::v15(){vfunc_called(this, "_ZN10S1503C4_nt3v15Ev");}
void  S1503C4_nt ::v16(){vfunc_called(this, "_ZN10S1503C4_nt3v16Ev");}
void  S1503C4_nt ::v17(){vfunc_called(this, "_ZN10S1503C4_nt3v17Ev");}
void  S1503C4_nt ::v18(){vfunc_called(this, "_ZN10S1503C4_nt3v18Ev");}
void  S1503C4_nt ::v19(){vfunc_called(this, "_ZN10S1503C4_nt3v19Ev");}
void  S1503C4_nt ::v20(){vfunc_called(this, "_ZN10S1503C4_nt3v20Ev");}
void  S1503C4_nt ::v21(){vfunc_called(this, "_ZN10S1503C4_nt3v21Ev");}
void  S1503C4_nt ::v22(){vfunc_called(this, "_ZN10S1503C4_nt3v22Ev");}
void  S1503C4_nt ::v23(){vfunc_called(this, "_ZN10S1503C4_nt3v23Ev");}
void  S1503C4_nt ::v24(){vfunc_called(this, "_ZN10S1503C4_nt3v24Ev");}
void  S1503C4_nt ::v25(){vfunc_called(this, "_ZN10S1503C4_nt3v25Ev");}
void  S1503C4_nt ::v26(){vfunc_called(this, "_ZN10S1503C4_nt3v26Ev");}
void  S1503C4_nt ::v27(){vfunc_called(this, "_ZN10S1503C4_nt3v27Ev");}
void  S1503C4_nt ::v28(){vfunc_called(this, "_ZN10S1503C4_nt3v28Ev");}
void  S1503C4_nt ::v29(){vfunc_called(this, "_ZN10S1503C4_nt3v29Ev");}
void  S1503C4_nt ::v30(){vfunc_called(this, "_ZN10S1503C4_nt3v30Ev");}
void  S1503C4_nt ::v31(){vfunc_called(this, "_ZN10S1503C4_nt3v31Ev");}
void  S1503C4_nt ::v32(){vfunc_called(this, "_ZN10S1503C4_nt3v32Ev");}
void  S1503C4_nt ::v33(){vfunc_called(this, "_ZN10S1503C4_nt3v33Ev");}
void  S1503C4_nt ::v34(){vfunc_called(this, "_ZN10S1503C4_nt3v34Ev");}
void  S1503C4_nt ::v35(){vfunc_called(this, "_ZN10S1503C4_nt3v35Ev");}
void  S1503C4_nt ::v36(){vfunc_called(this, "_ZN10S1503C4_nt3v36Ev");}
void  S1503C4_nt ::v37(){vfunc_called(this, "_ZN10S1503C4_nt3v37Ev");}
void  S1503C4_nt ::v38(){vfunc_called(this, "_ZN10S1503C4_nt3v38Ev");}
void  S1503C4_nt ::v39(){vfunc_called(this, "_ZN10S1503C4_nt3v39Ev");}
void  S1503C4_nt ::v40(){vfunc_called(this, "_ZN10S1503C4_nt3v40Ev");}
void  S1503C4_nt ::v41(){vfunc_called(this, "_ZN10S1503C4_nt3v41Ev");}
void  S1503C4_nt ::v42(){vfunc_called(this, "_ZN10S1503C4_nt3v42Ev");}
void  S1503C4_nt ::v43(){vfunc_called(this, "_ZN10S1503C4_nt3v43Ev");}
void  S1503C4_nt ::v44(){vfunc_called(this, "_ZN10S1503C4_nt3v44Ev");}
void  S1503C4_nt ::v45(){vfunc_called(this, "_ZN10S1503C4_nt3v45Ev");}
void  S1503C4_nt ::v46(){vfunc_called(this, "_ZN10S1503C4_nt3v46Ev");}
void  S1503C4_nt ::v47(){vfunc_called(this, "_ZN10S1503C4_nt3v47Ev");}
void  S1503C4_nt ::v48(){vfunc_called(this, "_ZN10S1503C4_nt3v48Ev");}
void  S1503C4_nt ::v49(){vfunc_called(this, "_ZN10S1503C4_nt3v49Ev");}
void  S1503C4_nt ::v50(){vfunc_called(this, "_ZN10S1503C4_nt3v50Ev");}
void  S1503C4_nt ::v51(){vfunc_called(this, "_ZN10S1503C4_nt3v51Ev");}
void  S1503C4_nt ::v52(){vfunc_called(this, "_ZN10S1503C4_nt3v52Ev");}
void  S1503C4_nt ::v53(){vfunc_called(this, "_ZN10S1503C4_nt3v53Ev");}
void  S1503C4_nt ::v54(){vfunc_called(this, "_ZN10S1503C4_nt3v54Ev");}
void  S1503C4_nt ::v55(){vfunc_called(this, "_ZN10S1503C4_nt3v55Ev");}
void  S1503C4_nt ::v56(){vfunc_called(this, "_ZN10S1503C4_nt3v56Ev");}
void  S1503C4_nt ::v57(){vfunc_called(this, "_ZN10S1503C4_nt3v57Ev");}
void  S1503C4_nt ::v58(){vfunc_called(this, "_ZN10S1503C4_nt3v58Ev");}
void  S1503C4_nt ::v59(){vfunc_called(this, "_ZN10S1503C4_nt3v59Ev");}
void  S1503C4_nt ::v60(){vfunc_called(this, "_ZN10S1503C4_nt3v60Ev");}
void  S1503C4_nt ::v61(){vfunc_called(this, "_ZN10S1503C4_nt3v61Ev");}
void  S1503C4_nt ::v62(){vfunc_called(this, "_ZN10S1503C4_nt3v62Ev");}
void  S1503C4_nt ::v63(){vfunc_called(this, "_ZN10S1503C4_nt3v63Ev");}
void  S1503C4_nt ::v64(){vfunc_called(this, "_ZN10S1503C4_nt3v64Ev");}
void  S1503C4_nt ::v65(){vfunc_called(this, "_ZN10S1503C4_nt3v65Ev");}
void  S1503C4_nt ::v66(){vfunc_called(this, "_ZN10S1503C4_nt3v66Ev");}
void  S1503C4_nt ::v67(){vfunc_called(this, "_ZN10S1503C4_nt3v67Ev");}
void  S1503C4_nt ::v68(){vfunc_called(this, "_ZN10S1503C4_nt3v68Ev");}
void  S1503C4_nt ::v69(){vfunc_called(this, "_ZN10S1503C4_nt3v69Ev");}
S1503C4_nt ::S1503C4_nt(){ note_ctor("S1503C4_nt", this);} // tgen

//skip512 S1503C4_nt

#else // __cplusplus

extern void _ZN10S1503C4_ntC1Ev();
extern void _ZN10S1503C4_ntD1Ev();
Name_Map name_map_S1503C4_nt[] = {
  NSPAIR(_ZN10S1503C4_ntC1Ev),
  NSPAIR(_ZN10S1503C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1503C4_nt[];
extern void _ZN10S1503C4_ntD1Ev();
extern void _ZN10S1503C4_ntD0Ev();
extern void _ZN10S1503C4_nt2v6Ev();
extern void _ZN10S1503C4_nt2v7Ev();
extern void _ZN10S1503C4_nt2v8Ev();
extern void _ZN10S1503C4_nt2v9Ev();
extern void _ZN10S1503C4_nt3v10Ev();
extern void _ZN10S1503C4_nt3v11Ev();
extern void _ZN10S1503C4_nt3v12Ev();
extern void _ZN10S1503C4_nt3v13Ev();
extern void _ZN10S1503C4_nt3v14Ev();
extern void _ZN10S1503C4_nt3v15Ev();
extern void _ZN10S1503C4_nt3v16Ev();
extern void _ZN10S1503C4_nt3v17Ev();
extern void _ZN10S1503C4_nt3v18Ev();
extern void _ZN10S1503C4_nt3v19Ev();
extern void _ZN10S1503C4_nt3v20Ev();
extern void _ZN10S1503C4_nt3v21Ev();
extern void _ZN10S1503C4_nt3v22Ev();
extern void _ZN10S1503C4_nt3v23Ev();
extern void _ZN10S1503C4_nt3v24Ev();
extern void _ZN10S1503C4_nt3v25Ev();
extern void _ZN10S1503C4_nt3v26Ev();
extern void _ZN10S1503C4_nt3v27Ev();
extern void _ZN10S1503C4_nt3v28Ev();
extern void _ZN10S1503C4_nt3v29Ev();
extern void _ZN10S1503C4_nt3v30Ev();
extern void _ZN10S1503C4_nt3v31Ev();
extern void _ZN10S1503C4_nt3v32Ev();
extern void _ZN10S1503C4_nt3v33Ev();
extern void _ZN10S1503C4_nt3v34Ev();
extern void _ZN10S1503C4_nt3v35Ev();
extern void _ZN10S1503C4_nt3v36Ev();
extern void _ZN10S1503C4_nt3v37Ev();
extern void _ZN10S1503C4_nt3v38Ev();
extern void _ZN10S1503C4_nt3v39Ev();
extern void _ZN10S1503C4_nt3v40Ev();
extern void _ZN10S1503C4_nt3v41Ev();
extern void _ZN10S1503C4_nt3v42Ev();
extern void _ZN10S1503C4_nt3v43Ev();
extern void _ZN10S1503C4_nt3v44Ev();
extern void _ZN10S1503C4_nt3v45Ev();
extern void _ZN10S1503C4_nt3v46Ev();
extern void _ZN10S1503C4_nt3v47Ev();
extern void _ZN10S1503C4_nt3v48Ev();
extern void _ZN10S1503C4_nt3v49Ev();
extern void _ZN10S1503C4_nt3v50Ev();
extern void _ZN10S1503C4_nt3v51Ev();
extern void _ZN10S1503C4_nt3v52Ev();
extern void _ZN10S1503C4_nt3v53Ev();
extern void _ZN10S1503C4_nt3v54Ev();
extern void _ZN10S1503C4_nt3v55Ev();
extern void _ZN10S1503C4_nt3v56Ev();
extern void _ZN10S1503C4_nt3v57Ev();
extern void _ZN10S1503C4_nt3v58Ev();
extern void _ZN10S1503C4_nt3v59Ev();
extern void _ZN10S1503C4_nt3v60Ev();
extern void _ZN10S1503C4_nt3v61Ev();
extern void _ZN10S1503C4_nt3v62Ev();
extern void _ZN10S1503C4_nt3v63Ev();
extern void _ZN10S1503C4_nt3v64Ev();
extern void _ZN10S1503C4_nt3v65Ev();
extern void _ZN10S1503C4_nt3v66Ev();
extern void _ZN10S1503C4_nt3v67Ev();
extern void _ZN10S1503C4_nt3v68Ev();
extern void _ZN10S1503C4_nt3v69Ev();
static  VTBL_ENTRY vtc_S1503C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1503C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S1503C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v69Ev,
};
extern VTBL_ENTRY _ZTI10S1503C4_nt[];
VTBL_ENTRY *P__ZTI10S1503C4_nt = _ZTI10S1503C4_nt; 
extern  VTBL_ENTRY _ZTV10S1503C4_nt[];
Class_Descriptor cd_S1503C4_nt = {  "S1503C4_nt", // class name
  0,0,//no base classes
  &(vtc_S1503C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI10S1503C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1503C4_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  S1503C8_nt  {
  void *s1503c8f0;
  int s1503c8f1[2];
  void  mf1503c8(); // _ZN10S1503C8_nt8mf1503c8Ev
};
//SIG(-1 S1503C8_nt) C1{ m Fp Fi[2]}


void  S1503C8_nt ::mf1503c8(){}

//skip512 S1503C8_nt

#else // __cplusplus

Class_Descriptor cd_S1503C8_nt = {  "S1503C8_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  S1503C7_nt  : S1503C8_nt {
};
//SIG(-1 S1503C7_nt) C1{ BC2{ m Fp Fi[2]}}



//skip512 S1503C7_nt

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
static Base_Class bases_S1503C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1503C7_nt = {  "S1503C7_nt", // class name
  bases_S1503C7_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  S1503C6_nt  : S1503C7_nt {
};
//SIG(-1 S1503C6_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S1503C6_nt

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
extern Class_Descriptor cd_S1503C7_nt;
static Base_Class bases_S1503C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S1503C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S1503C9_nt  {
  int s1503c9f0;
  void  mf1503c9(); // _ZN10S1503C9_nt8mf1503c9Ev
};
//SIG(-1 S1503C9_nt) C1{ m Fi}


void  S1503C9_nt ::mf1503c9(){}

//skip512 S1503C9_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S1503C9_nt[];
VTBL_ENTRY *P__ZTI10S1503C9_nt = _ZTI10S1503C9_nt; 
Class_Descriptor cd_S1503C9_nt = {  "S1503C9_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI10S1503C9_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  S1503C13  : S1503C8_nt {
};
//SIG(-1 S1503C13) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1503C13()
{
  extern Class_Descriptor cd_S1503C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1503C13, buf);
    S1503C13 &lv = *(new (buf) S1503C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1503C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1503C13)");
    check_base_class_offset(lv, (S1503C8_nt*), 0, "S1503C13");
    test_class_info(&lv, &cd_S1503C13);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1503C13(Test_S1503C13, "S1503C13", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
static Base_Class bases_S1503C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1503C13 = {  "S1503C13", // class name
  bases_S1503C13, 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  S1503C12  : S1503C13 {
};
//SIG(-1 S1503C12) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1503C12()
{
  extern Class_Descriptor cd_S1503C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1503C12, buf);
    S1503C12 &lv = *(new (buf) S1503C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1503C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1503C12)");
    check_base_class_offset(lv, (S1503C8_nt*)(S1503C13*), 0, "S1503C12");
    check_base_class_offset(lv, (S1503C13*), 0, "S1503C12");
    test_class_info(&lv, &cd_S1503C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1503C12(Test_S1503C12, "S1503C12", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
extern Class_Descriptor cd_S1503C13;
static Base_Class bases_S1503C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S1503C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1503C12 = {  "S1503C12", // class name
  bases_S1503C12, 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  S1503C14_nt  {
  int s1503c14f0[3];
  void  mf1503c14(); // _ZN11S1503C14_nt9mf1503c14Ev
};
//SIG(-1 S1503C14_nt) C1{ m Fi[3]}


void  S1503C14_nt ::mf1503c14(){}

//skip512 S1503C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S1503C19()
{
  extern Class_Descriptor cd_S1503C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1503C19, buf);
    S1503C19 &lv = *(new (buf) S1503C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1503C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1503C19)");
    check_base_class_offset(lv, (S1503C8_nt*), 0, "S1503C19");
    test_class_info(&lv, &cd_S1503C19);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1503C19(Test_S1503C19, "S1503C19", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
static Base_Class bases_S1503C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1503C19 = {  "S1503C19", // class name
  bases_S1503C19, 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  S1503C18  : S1503C19 {
};
//SIG(-1 S1503C18) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1503C18()
{
  extern Class_Descriptor cd_S1503C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1503C18, buf);
    S1503C18 &lv = *(new (buf) S1503C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1503C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1503C18)");
    check_base_class_offset(lv, (S1503C8_nt*)(S1503C19*), 0, "S1503C18");
    check_base_class_offset(lv, (S1503C19*), 0, "S1503C18");
    test_class_info(&lv, &cd_S1503C18);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1503C18(Test_S1503C18, "S1503C18", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
extern Class_Descriptor cd_S1503C19;
static Base_Class bases_S1503C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S1503C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1503C18 = {  "S1503C18", // class name
  bases_S1503C18, 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  S1503C3_nt  : S1503C4_nt {
  ::S1503C6_nt s1503c3f0;
  ::S1503C6_nt s1503c3f1;
  ::S1503C9_nt s1503c3f2;
  int s1503c3f3;
  char s1503c3f4[4];
  void *s1503c3f5[2];
  ::S1503C6_nt s1503c3f6;
  unsigned int s1503c3f7:1;
  unsigned int s1503c3f8:1;
  unsigned int s1503c3f9:1;
  unsigned int s1503c3f10:1;
  unsigned int s1503c3f11:1;
  unsigned int s1503c3f12:1;
  unsigned int s1503c3f13:1;
  unsigned int s1503c3f14:1;
  unsigned int s1503c3f15:1;
  unsigned int s1503c3f16:1;
  unsigned int s1503c3f17:1;
  unsigned int s1503c3f18:1;
  unsigned int s1503c3f19:1;
  unsigned int s1503c3f20:1;
  unsigned int s1503c3f21:1;
  unsigned int s1503c3f22:1;
  unsigned int s1503c3f23:1;
  unsigned int s1503c3f24:1;
  unsigned int s1503c3f25:1;
  unsigned int s1503c3f26:1;
  unsigned int s1503c3f27:1;
  unsigned int s1503c3f28:1;
  unsigned int s1503c3f29:1;
  unsigned int s1503c3f30:1;
  unsigned int s1503c3f31:1;
  unsigned int s1503c3f32:1;
  unsigned int s1503c3f33:1;
  unsigned int s1503c3f34:1;
  unsigned int s1503c3f35:1;
  unsigned int s1503c3f36:1;
  unsigned int s1503c3f37:1;
  unsigned int s1503c3f38:1;
  unsigned int s1503c3f39:1;
  unsigned int s1503c3f40:1;
  unsigned int s1503c3f41:1;
  unsigned int s1503c3f42:1;
  unsigned int s1503c3f43:1;
  unsigned int s1503c3f44:1;
  unsigned int s1503c3f45:1;
  unsigned int s1503c3f46:1;
  unsigned int s1503c3f47:1;
  unsigned int s1503c3f48:1;
  unsigned int s1503c3f49:1;
  unsigned int s1503c3f50:1;
  unsigned int s1503c3f51:1;
  unsigned int s1503c3f52:1;
  unsigned int s1503c3f53:1;
  unsigned int s1503c3f54:1;
  unsigned int s1503c3f55:1;
  unsigned int s1503c3f56:1;
  unsigned int s1503c3f57:1;
  unsigned int s1503c3f58:1;
  unsigned int s1503c3f59:1;
  unsigned int s1503c3f60:1;
  unsigned int s1503c3f61:1;
  unsigned int s1503c3f62:1;
  unsigned int s1503c3f63:1;
  unsigned int s1503c3f64:1;
  unsigned int s1503c3f65:1;
  unsigned int s1503c3f66:1;
  unsigned int s1503c3f67:1;
  unsigned int s1503c3f68:1;
  unsigned int s1503c3f69:1;
  unsigned int s1503c3f70:1;
  unsigned int s1503c3f71:1;
  unsigned int s1503c3f72:1;
  unsigned int s1503c3f73:1;
  unsigned int s1503c3f74:1;
  unsigned int s1503c3f75:1;
  unsigned int s1503c3f76:1;
  unsigned int s1503c3f77:1;
  unsigned int s1503c3f78:1;
  unsigned int s1503c3f79:1;
  unsigned int s1503c3f80:1;
  unsigned int s1503c3f81:1;
  unsigned int s1503c3f82:1;
  unsigned int s1503c3f83:1;
  int s1503c3f84[5];
  void *s1503c3f85[2];
  int s1503c3f86[3];
  ::S1503C5_nt s1503c3f87;
  ::S1503C5_nt s1503c3f88;
  ::S1503C5_nt s1503c3f89;
  ::S1503C12 s1503c3f90;
  ::S1503C12 s1503c3f91;
  int s1503c3f92;
  void *s1503c3f93[2];
  ::S1503C14_nt s1503c3f94;
  ::S1503C14_nt s1503c3f95;
  ::S1503C14_nt s1503c3f96;
  ::S1503C14_nt s1503c3f97;
  void *s1503c3f98;
  ::S1503C5_nt s1503c3f99;
  ::S1503C12 s1503c3f100;
  ::S1503C14_nt s1503c3f101;
  ::S1503C14_nt s1503c3f102;
  int s1503c3f103;
  ::S1503C14_nt s1503c3f104;
  ::S1503C14_nt s1503c3f105;
  void *s1503c3f106;
  int s1503c3f107;
  char s1503c3f108;
  ::S1503C14_nt s1503c3f109;
  ::S1503C14_nt s1503c3f110;
  void *s1503c3f111;
  int s1503c3f112;
  void *s1503c3f113;
  ::S1503C12 s1503c3f114;
  ::S1503C18 s1503c3f115;
  ::S1503C18 s1503c3f116;
  virtual  ~S1503C3_nt(); // _ZN10S1503C3_ntD1Ev
  virtual void  v70(); // _ZN10S1503C3_nt3v70Ev
  virtual void  v71(); // _ZN10S1503C3_nt3v71Ev
  virtual void  v72(); // _ZN10S1503C3_nt3v72Ev
  virtual void  v73(); // _ZN10S1503C3_nt3v73Ev
  virtual void  v74(); // _ZN10S1503C3_nt3v74Ev
  virtual void  v75(); // _ZN10S1503C3_nt3v75Ev
  virtual void  v76(); // _ZN10S1503C3_nt3v76Ev
  virtual void  v77(); // _ZN10S1503C3_nt3v77Ev
  virtual void  v78(); // _ZN10S1503C3_nt3v78Ev
  virtual void  v79(); // _ZN10S1503C3_nt3v79Ev
  virtual void  v80(); // _ZN10S1503C3_nt3v80Ev
  virtual void  v81(); // _ZN10S1503C3_nt3v81Ev
  virtual void  v82(); // _ZN10S1503C3_nt3v82Ev
  virtual void  v83(); // _ZN10S1503C3_nt3v83Ev
  virtual void  v84(); // _ZN10S1503C3_nt3v84Ev
  virtual void  v85(); // _ZN10S1503C3_nt3v85Ev
  virtual void  v86(); // _ZN10S1503C3_nt3v86Ev
  virtual void  v87(); // _ZN10S1503C3_nt3v87Ev
  virtual void  v88(); // _ZN10S1503C3_nt3v88Ev
  virtual void  v89(); // _ZN10S1503C3_nt3v89Ev
  virtual void  v90(); // _ZN10S1503C3_nt3v90Ev
  virtual void  v91(); // _ZN10S1503C3_nt3v91Ev
  virtual void  v92(); // _ZN10S1503C3_nt3v92Ev
  virtual void  v93(); // _ZN10S1503C3_nt3v93Ev
  virtual void  v94(); // _ZN10S1503C3_nt3v94Ev
  virtual void  v95(); // _ZN10S1503C3_nt3v95Ev
  virtual void  v96(); // _ZN10S1503C3_nt3v96Ev
  virtual void  v97(); // _ZN10S1503C3_nt3v97Ev
  virtual void  v98(); // _ZN10S1503C3_nt3v98Ev
  virtual void  v99(); // _ZN10S1503C3_nt3v99Ev
  virtual void  v100(); // _ZN10S1503C3_nt4v100Ev
  virtual void  v101(); // _ZN10S1503C3_nt4v101Ev
  virtual void  v102(); // _ZN10S1503C3_nt4v102Ev
  virtual void  v103(); // _ZN10S1503C3_nt4v103Ev
  virtual void  v104(); // _ZN10S1503C3_nt4v104Ev
  virtual void  v105(); // _ZN10S1503C3_nt4v105Ev
  virtual void  v106(); // _ZN10S1503C3_nt4v106Ev
  virtual void  v107(); // _ZN10S1503C3_nt4v107Ev
  virtual void  v108(); // _ZN10S1503C3_nt4v108Ev
  virtual void  v109(); // _ZN10S1503C3_nt4v109Ev
  virtual void  v110(); // _ZN10S1503C3_nt4v110Ev
  virtual void  v111(); // _ZN10S1503C3_nt4v111Ev
  virtual void  v112(); // _ZN10S1503C3_nt4v112Ev
  virtual void  v113(); // _ZN10S1503C3_nt4v113Ev
  virtual void  v114(); // _ZN10S1503C3_nt4v114Ev
  virtual void  v115(); // _ZN10S1503C3_nt4v115Ev
  virtual void  v116(); // _ZN10S1503C3_nt4v116Ev
  virtual void  v117(); // _ZN10S1503C3_nt4v117Ev
  virtual void  v118(); // _ZN10S1503C3_nt4v118Ev
  virtual void  v119(); // _ZN10S1503C3_nt4v119Ev
  virtual void  v120(); // _ZN10S1503C3_nt4v120Ev
  virtual void  v121(); // _ZN10S1503C3_nt4v121Ev
  virtual void  v122(); // _ZN10S1503C3_nt4v122Ev
  virtual void  v123(); // _ZN10S1503C3_nt4v123Ev
  virtual void  v124(); // _ZN10S1503C3_nt4v124Ev
  virtual void  v125(); // _ZN10S1503C3_nt4v125Ev
  virtual void  v126(); // _ZN10S1503C3_nt4v126Ev
  virtual void  v127(); // _ZN10S1503C3_nt4v127Ev
  virtual void  v128(); // _ZN10S1503C3_nt4v128Ev
  virtual void  v129(); // _ZN10S1503C3_nt4v129Ev
  virtual void  v130(); // _ZN10S1503C3_nt4v130Ev
  virtual void  v131(); // _ZN10S1503C3_nt4v131Ev
  virtual void  v132(); // _ZN10S1503C3_nt4v132Ev
  virtual void  v133(); // _ZN10S1503C3_nt4v133Ev
  virtual void  v134(); // _ZN10S1503C3_nt4v134Ev
  virtual void  v135(); // _ZN10S1503C3_nt4v135Ev
  virtual void  v136(); // _ZN10S1503C3_nt4v136Ev
  virtual void  v137(); // _ZN10S1503C3_nt4v137Ev
  virtual void  v138(); // _ZN10S1503C3_nt4v138Ev
  virtual void  v139(); // _ZN10S1503C3_nt4v139Ev
  virtual void  v140(); // _ZN10S1503C3_nt4v140Ev
  virtual void  v141(); // _ZN10S1503C3_nt4v141Ev
  virtual void  v142(); // _ZN10S1503C3_nt4v142Ev
  virtual void  v143(); // _ZN10S1503C3_nt4v143Ev
  virtual void  v144(); // _ZN10S1503C3_nt4v144Ev
  virtual void  v145(); // _ZN10S1503C3_nt4v145Ev
  virtual void  v146(); // _ZN10S1503C3_nt4v146Ev
  virtual void  v147(); // _ZN10S1503C3_nt4v147Ev
  virtual void  v148(); // _ZN10S1503C3_nt4v148Ev
  virtual void  v149(); // _ZN10S1503C3_nt4v149Ev
  virtual void  v150(); // _ZN10S1503C3_nt4v150Ev
  virtual void  v151(); // _ZN10S1503C3_nt4v151Ev
  virtual void  v152(); // _ZN10S1503C3_nt4v152Ev
  virtual void  v153(); // _ZN10S1503C3_nt4v153Ev
  virtual void  v154(); // _ZN10S1503C3_nt4v154Ev
  virtual void  v155(); // _ZN10S1503C3_nt4v155Ev
  virtual void  v156(); // _ZN10S1503C3_nt4v156Ev
  virtual void  v157(); // _ZN10S1503C3_nt4v157Ev
  virtual void  v158(); // _ZN10S1503C3_nt4v158Ev
  virtual void  v159(); // _ZN10S1503C3_nt4v159Ev
  virtual void  v160(); // _ZN10S1503C3_nt4v160Ev
  virtual void  v161(); // _ZN10S1503C3_nt4v161Ev
  virtual void  v162(); // _ZN10S1503C3_nt4v162Ev
  virtual void  v163(); // _ZN10S1503C3_nt4v163Ev
  virtual void  v164(); // _ZN10S1503C3_nt4v164Ev
  virtual void  v165(); // _ZN10S1503C3_nt4v165Ev
  virtual void  v166(); // _ZN10S1503C3_nt4v166Ev
  virtual void  v167(); // _ZN10S1503C3_nt4v167Ev
  virtual void  v168(); // _ZN10S1503C3_nt4v168Ev
  virtual void  v169(); // _ZN10S1503C3_nt4v169Ev
  virtual void  v170(); // _ZN10S1503C3_nt4v170Ev
  virtual void  v171(); // _ZN10S1503C3_nt4v171Ev
  virtual void  v172(); // _ZN10S1503C3_nt4v172Ev
  virtual void  v173(); // _ZN10S1503C3_nt4v173Ev
  virtual void  v174(); // _ZN10S1503C3_nt4v174Ev
  virtual void  v175(); // _ZN10S1503C3_nt4v175Ev
  virtual void  v176(); // _ZN10S1503C3_nt4v176Ev
  virtual void  v177(); // _ZN10S1503C3_nt4v177Ev
  virtual void  v178(); // _ZN10S1503C3_nt4v178Ev
  virtual void  v179(); // _ZN10S1503C3_nt4v179Ev
  virtual void  v180(); // _ZN10S1503C3_nt4v180Ev
  virtual void  v181(); // _ZN10S1503C3_nt4v181Ev
  virtual void  v182(); // _ZN10S1503C3_nt4v182Ev
  virtual void  v183(); // _ZN10S1503C3_nt4v183Ev
  virtual void  v184(); // _ZN10S1503C3_nt4v184Ev
  virtual void  v185(); // _ZN10S1503C3_nt4v185Ev
  virtual void  v186(); // _ZN10S1503C3_nt4v186Ev
  virtual void  v187(); // _ZN10S1503C3_nt4v187Ev
  virtual void  v188(); // _ZN10S1503C3_nt4v188Ev
  virtual void  v189(); // _ZN10S1503C3_nt4v189Ev
  virtual void  v190(); // _ZN10S1503C3_nt4v190Ev
  virtual void  v191(); // _ZN10S1503C3_nt4v191Ev
  virtual void  v192(); // _ZN10S1503C3_nt4v192Ev
  virtual void  v193(); // _ZN10S1503C3_nt4v193Ev
  virtual void  v194(); // _ZN10S1503C3_nt4v194Ev
  virtual void  v195(); // _ZN10S1503C3_nt4v195Ev
  virtual void  v196(); // _ZN10S1503C3_nt4v196Ev
  virtual void  v197(); // _ZN10S1503C3_nt4v197Ev
  virtual void  v198(); // _ZN10S1503C3_nt4v198Ev
  virtual void  v199(); // _ZN10S1503C3_nt4v199Ev
  virtual void  v200(); // _ZN10S1503C3_nt4v200Ev
  virtual void  v201(); // _ZN10S1503C3_nt4v201Ev
  virtual void  v202(); // _ZN10S1503C3_nt4v202Ev
  virtual void  v203(); // _ZN10S1503C3_nt4v203Ev
  virtual void  v204(); // _ZN10S1503C3_nt4v204Ev
  virtual void  v205(); // _ZN10S1503C3_nt4v205Ev
  virtual void  v206(); // _ZN10S1503C3_nt4v206Ev
  virtual void  v207(); // _ZN10S1503C3_nt4v207Ev
  virtual void  v208(); // _ZN10S1503C3_nt4v208Ev
  virtual void  v209(); // _ZN10S1503C3_nt4v209Ev
  virtual void  v210(); // _ZN10S1503C3_nt4v210Ev
  virtual void  v211(); // _ZN10S1503C3_nt4v211Ev
  virtual void  v212(); // _ZN10S1503C3_nt4v212Ev
  S1503C3_nt(); // tgen
};
//SIG(-1 S1503C3_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}


 S1503C3_nt ::~S1503C3_nt(){ note_dtor("S1503C3_nt", this);}
void  S1503C3_nt ::v70(){vfunc_called(this, "_ZN10S1503C3_nt3v70Ev");}
void  S1503C3_nt ::v71(){vfunc_called(this, "_ZN10S1503C3_nt3v71Ev");}
void  S1503C3_nt ::v72(){vfunc_called(this, "_ZN10S1503C3_nt3v72Ev");}
void  S1503C3_nt ::v73(){vfunc_called(this, "_ZN10S1503C3_nt3v73Ev");}
void  S1503C3_nt ::v74(){vfunc_called(this, "_ZN10S1503C3_nt3v74Ev");}
void  S1503C3_nt ::v75(){vfunc_called(this, "_ZN10S1503C3_nt3v75Ev");}
void  S1503C3_nt ::v76(){vfunc_called(this, "_ZN10S1503C3_nt3v76Ev");}
void  S1503C3_nt ::v77(){vfunc_called(this, "_ZN10S1503C3_nt3v77Ev");}
void  S1503C3_nt ::v78(){vfunc_called(this, "_ZN10S1503C3_nt3v78Ev");}
void  S1503C3_nt ::v79(){vfunc_called(this, "_ZN10S1503C3_nt3v79Ev");}
void  S1503C3_nt ::v80(){vfunc_called(this, "_ZN10S1503C3_nt3v80Ev");}
void  S1503C3_nt ::v81(){vfunc_called(this, "_ZN10S1503C3_nt3v81Ev");}
void  S1503C3_nt ::v82(){vfunc_called(this, "_ZN10S1503C3_nt3v82Ev");}
void  S1503C3_nt ::v83(){vfunc_called(this, "_ZN10S1503C3_nt3v83Ev");}
void  S1503C3_nt ::v84(){vfunc_called(this, "_ZN10S1503C3_nt3v84Ev");}
void  S1503C3_nt ::v85(){vfunc_called(this, "_ZN10S1503C3_nt3v85Ev");}
void  S1503C3_nt ::v86(){vfunc_called(this, "_ZN10S1503C3_nt3v86Ev");}
void  S1503C3_nt ::v87(){vfunc_called(this, "_ZN10S1503C3_nt3v87Ev");}
void  S1503C3_nt ::v88(){vfunc_called(this, "_ZN10S1503C3_nt3v88Ev");}
void  S1503C3_nt ::v89(){vfunc_called(this, "_ZN10S1503C3_nt3v89Ev");}
void  S1503C3_nt ::v90(){vfunc_called(this, "_ZN10S1503C3_nt3v90Ev");}
void  S1503C3_nt ::v91(){vfunc_called(this, "_ZN10S1503C3_nt3v91Ev");}
void  S1503C3_nt ::v92(){vfunc_called(this, "_ZN10S1503C3_nt3v92Ev");}
void  S1503C3_nt ::v93(){vfunc_called(this, "_ZN10S1503C3_nt3v93Ev");}
void  S1503C3_nt ::v94(){vfunc_called(this, "_ZN10S1503C3_nt3v94Ev");}
void  S1503C3_nt ::v95(){vfunc_called(this, "_ZN10S1503C3_nt3v95Ev");}
void  S1503C3_nt ::v96(){vfunc_called(this, "_ZN10S1503C3_nt3v96Ev");}
void  S1503C3_nt ::v97(){vfunc_called(this, "_ZN10S1503C3_nt3v97Ev");}
void  S1503C3_nt ::v98(){vfunc_called(this, "_ZN10S1503C3_nt3v98Ev");}
void  S1503C3_nt ::v99(){vfunc_called(this, "_ZN10S1503C3_nt3v99Ev");}
void  S1503C3_nt ::v100(){vfunc_called(this, "_ZN10S1503C3_nt4v100Ev");}
void  S1503C3_nt ::v101(){vfunc_called(this, "_ZN10S1503C3_nt4v101Ev");}
void  S1503C3_nt ::v102(){vfunc_called(this, "_ZN10S1503C3_nt4v102Ev");}
void  S1503C3_nt ::v103(){vfunc_called(this, "_ZN10S1503C3_nt4v103Ev");}
void  S1503C3_nt ::v104(){vfunc_called(this, "_ZN10S1503C3_nt4v104Ev");}
void  S1503C3_nt ::v105(){vfunc_called(this, "_ZN10S1503C3_nt4v105Ev");}
void  S1503C3_nt ::v106(){vfunc_called(this, "_ZN10S1503C3_nt4v106Ev");}
void  S1503C3_nt ::v107(){vfunc_called(this, "_ZN10S1503C3_nt4v107Ev");}
void  S1503C3_nt ::v108(){vfunc_called(this, "_ZN10S1503C3_nt4v108Ev");}
void  S1503C3_nt ::v109(){vfunc_called(this, "_ZN10S1503C3_nt4v109Ev");}
void  S1503C3_nt ::v110(){vfunc_called(this, "_ZN10S1503C3_nt4v110Ev");}
void  S1503C3_nt ::v111(){vfunc_called(this, "_ZN10S1503C3_nt4v111Ev");}
void  S1503C3_nt ::v112(){vfunc_called(this, "_ZN10S1503C3_nt4v112Ev");}
void  S1503C3_nt ::v113(){vfunc_called(this, "_ZN10S1503C3_nt4v113Ev");}
void  S1503C3_nt ::v114(){vfunc_called(this, "_ZN10S1503C3_nt4v114Ev");}
void  S1503C3_nt ::v115(){vfunc_called(this, "_ZN10S1503C3_nt4v115Ev");}
void  S1503C3_nt ::v116(){vfunc_called(this, "_ZN10S1503C3_nt4v116Ev");}
void  S1503C3_nt ::v117(){vfunc_called(this, "_ZN10S1503C3_nt4v117Ev");}
void  S1503C3_nt ::v118(){vfunc_called(this, "_ZN10S1503C3_nt4v118Ev");}
void  S1503C3_nt ::v119(){vfunc_called(this, "_ZN10S1503C3_nt4v119Ev");}
void  S1503C3_nt ::v120(){vfunc_called(this, "_ZN10S1503C3_nt4v120Ev");}
void  S1503C3_nt ::v121(){vfunc_called(this, "_ZN10S1503C3_nt4v121Ev");}
void  S1503C3_nt ::v122(){vfunc_called(this, "_ZN10S1503C3_nt4v122Ev");}
void  S1503C3_nt ::v123(){vfunc_called(this, "_ZN10S1503C3_nt4v123Ev");}
void  S1503C3_nt ::v124(){vfunc_called(this, "_ZN10S1503C3_nt4v124Ev");}
void  S1503C3_nt ::v125(){vfunc_called(this, "_ZN10S1503C3_nt4v125Ev");}
void  S1503C3_nt ::v126(){vfunc_called(this, "_ZN10S1503C3_nt4v126Ev");}
void  S1503C3_nt ::v127(){vfunc_called(this, "_ZN10S1503C3_nt4v127Ev");}
void  S1503C3_nt ::v128(){vfunc_called(this, "_ZN10S1503C3_nt4v128Ev");}
void  S1503C3_nt ::v129(){vfunc_called(this, "_ZN10S1503C3_nt4v129Ev");}
void  S1503C3_nt ::v130(){vfunc_called(this, "_ZN10S1503C3_nt4v130Ev");}
void  S1503C3_nt ::v131(){vfunc_called(this, "_ZN10S1503C3_nt4v131Ev");}
void  S1503C3_nt ::v132(){vfunc_called(this, "_ZN10S1503C3_nt4v132Ev");}
void  S1503C3_nt ::v133(){vfunc_called(this, "_ZN10S1503C3_nt4v133Ev");}
void  S1503C3_nt ::v134(){vfunc_called(this, "_ZN10S1503C3_nt4v134Ev");}
void  S1503C3_nt ::v135(){vfunc_called(this, "_ZN10S1503C3_nt4v135Ev");}
void  S1503C3_nt ::v136(){vfunc_called(this, "_ZN10S1503C3_nt4v136Ev");}
void  S1503C3_nt ::v137(){vfunc_called(this, "_ZN10S1503C3_nt4v137Ev");}
void  S1503C3_nt ::v138(){vfunc_called(this, "_ZN10S1503C3_nt4v138Ev");}
void  S1503C3_nt ::v139(){vfunc_called(this, "_ZN10S1503C3_nt4v139Ev");}
void  S1503C3_nt ::v140(){vfunc_called(this, "_ZN10S1503C3_nt4v140Ev");}
void  S1503C3_nt ::v141(){vfunc_called(this, "_ZN10S1503C3_nt4v141Ev");}
void  S1503C3_nt ::v142(){vfunc_called(this, "_ZN10S1503C3_nt4v142Ev");}
void  S1503C3_nt ::v143(){vfunc_called(this, "_ZN10S1503C3_nt4v143Ev");}
void  S1503C3_nt ::v144(){vfunc_called(this, "_ZN10S1503C3_nt4v144Ev");}
void  S1503C3_nt ::v145(){vfunc_called(this, "_ZN10S1503C3_nt4v145Ev");}
void  S1503C3_nt ::v146(){vfunc_called(this, "_ZN10S1503C3_nt4v146Ev");}
void  S1503C3_nt ::v147(){vfunc_called(this, "_ZN10S1503C3_nt4v147Ev");}
void  S1503C3_nt ::v148(){vfunc_called(this, "_ZN10S1503C3_nt4v148Ev");}
void  S1503C3_nt ::v149(){vfunc_called(this, "_ZN10S1503C3_nt4v149Ev");}
void  S1503C3_nt ::v150(){vfunc_called(this, "_ZN10S1503C3_nt4v150Ev");}
void  S1503C3_nt ::v151(){vfunc_called(this, "_ZN10S1503C3_nt4v151Ev");}
void  S1503C3_nt ::v152(){vfunc_called(this, "_ZN10S1503C3_nt4v152Ev");}
void  S1503C3_nt ::v153(){vfunc_called(this, "_ZN10S1503C3_nt4v153Ev");}
void  S1503C3_nt ::v154(){vfunc_called(this, "_ZN10S1503C3_nt4v154Ev");}
void  S1503C3_nt ::v155(){vfunc_called(this, "_ZN10S1503C3_nt4v155Ev");}
void  S1503C3_nt ::v156(){vfunc_called(this, "_ZN10S1503C3_nt4v156Ev");}
void  S1503C3_nt ::v157(){vfunc_called(this, "_ZN10S1503C3_nt4v157Ev");}
void  S1503C3_nt ::v158(){vfunc_called(this, "_ZN10S1503C3_nt4v158Ev");}
void  S1503C3_nt ::v159(){vfunc_called(this, "_ZN10S1503C3_nt4v159Ev");}
void  S1503C3_nt ::v160(){vfunc_called(this, "_ZN10S1503C3_nt4v160Ev");}
void  S1503C3_nt ::v161(){vfunc_called(this, "_ZN10S1503C3_nt4v161Ev");}
void  S1503C3_nt ::v162(){vfunc_called(this, "_ZN10S1503C3_nt4v162Ev");}
void  S1503C3_nt ::v163(){vfunc_called(this, "_ZN10S1503C3_nt4v163Ev");}
void  S1503C3_nt ::v164(){vfunc_called(this, "_ZN10S1503C3_nt4v164Ev");}
void  S1503C3_nt ::v165(){vfunc_called(this, "_ZN10S1503C3_nt4v165Ev");}
void  S1503C3_nt ::v166(){vfunc_called(this, "_ZN10S1503C3_nt4v166Ev");}
void  S1503C3_nt ::v167(){vfunc_called(this, "_ZN10S1503C3_nt4v167Ev");}
void  S1503C3_nt ::v168(){vfunc_called(this, "_ZN10S1503C3_nt4v168Ev");}
void  S1503C3_nt ::v169(){vfunc_called(this, "_ZN10S1503C3_nt4v169Ev");}
void  S1503C3_nt ::v170(){vfunc_called(this, "_ZN10S1503C3_nt4v170Ev");}
void  S1503C3_nt ::v171(){vfunc_called(this, "_ZN10S1503C3_nt4v171Ev");}
void  S1503C3_nt ::v172(){vfunc_called(this, "_ZN10S1503C3_nt4v172Ev");}
void  S1503C3_nt ::v173(){vfunc_called(this, "_ZN10S1503C3_nt4v173Ev");}
void  S1503C3_nt ::v174(){vfunc_called(this, "_ZN10S1503C3_nt4v174Ev");}
void  S1503C3_nt ::v175(){vfunc_called(this, "_ZN10S1503C3_nt4v175Ev");}
void  S1503C3_nt ::v176(){vfunc_called(this, "_ZN10S1503C3_nt4v176Ev");}
void  S1503C3_nt ::v177(){vfunc_called(this, "_ZN10S1503C3_nt4v177Ev");}
void  S1503C3_nt ::v178(){vfunc_called(this, "_ZN10S1503C3_nt4v178Ev");}
void  S1503C3_nt ::v179(){vfunc_called(this, "_ZN10S1503C3_nt4v179Ev");}
void  S1503C3_nt ::v180(){vfunc_called(this, "_ZN10S1503C3_nt4v180Ev");}
void  S1503C3_nt ::v181(){vfunc_called(this, "_ZN10S1503C3_nt4v181Ev");}
void  S1503C3_nt ::v182(){vfunc_called(this, "_ZN10S1503C3_nt4v182Ev");}
void  S1503C3_nt ::v183(){vfunc_called(this, "_ZN10S1503C3_nt4v183Ev");}
void  S1503C3_nt ::v184(){vfunc_called(this, "_ZN10S1503C3_nt4v184Ev");}
void  S1503C3_nt ::v185(){vfunc_called(this, "_ZN10S1503C3_nt4v185Ev");}
void  S1503C3_nt ::v186(){vfunc_called(this, "_ZN10S1503C3_nt4v186Ev");}
void  S1503C3_nt ::v187(){vfunc_called(this, "_ZN10S1503C3_nt4v187Ev");}
void  S1503C3_nt ::v188(){vfunc_called(this, "_ZN10S1503C3_nt4v188Ev");}
void  S1503C3_nt ::v189(){vfunc_called(this, "_ZN10S1503C3_nt4v189Ev");}
void  S1503C3_nt ::v190(){vfunc_called(this, "_ZN10S1503C3_nt4v190Ev");}
void  S1503C3_nt ::v191(){vfunc_called(this, "_ZN10S1503C3_nt4v191Ev");}
void  S1503C3_nt ::v192(){vfunc_called(this, "_ZN10S1503C3_nt4v192Ev");}
void  S1503C3_nt ::v193(){vfunc_called(this, "_ZN10S1503C3_nt4v193Ev");}
void  S1503C3_nt ::v194(){vfunc_called(this, "_ZN10S1503C3_nt4v194Ev");}
void  S1503C3_nt ::v195(){vfunc_called(this, "_ZN10S1503C3_nt4v195Ev");}
void  S1503C3_nt ::v196(){vfunc_called(this, "_ZN10S1503C3_nt4v196Ev");}
void  S1503C3_nt ::v197(){vfunc_called(this, "_ZN10S1503C3_nt4v197Ev");}
void  S1503C3_nt ::v198(){vfunc_called(this, "_ZN10S1503C3_nt4v198Ev");}
void  S1503C3_nt ::v199(){vfunc_called(this, "_ZN10S1503C3_nt4v199Ev");}
void  S1503C3_nt ::v200(){vfunc_called(this, "_ZN10S1503C3_nt4v200Ev");}
void  S1503C3_nt ::v201(){vfunc_called(this, "_ZN10S1503C3_nt4v201Ev");}
void  S1503C3_nt ::v202(){vfunc_called(this, "_ZN10S1503C3_nt4v202Ev");}
void  S1503C3_nt ::v203(){vfunc_called(this, "_ZN10S1503C3_nt4v203Ev");}
void  S1503C3_nt ::v204(){vfunc_called(this, "_ZN10S1503C3_nt4v204Ev");}
void  S1503C3_nt ::v205(){vfunc_called(this, "_ZN10S1503C3_nt4v205Ev");}
void  S1503C3_nt ::v206(){vfunc_called(this, "_ZN10S1503C3_nt4v206Ev");}
void  S1503C3_nt ::v207(){vfunc_called(this, "_ZN10S1503C3_nt4v207Ev");}
void  S1503C3_nt ::v208(){vfunc_called(this, "_ZN10S1503C3_nt4v208Ev");}
void  S1503C3_nt ::v209(){vfunc_called(this, "_ZN10S1503C3_nt4v209Ev");}
void  S1503C3_nt ::v210(){vfunc_called(this, "_ZN10S1503C3_nt4v210Ev");}
void  S1503C3_nt ::v211(){vfunc_called(this, "_ZN10S1503C3_nt4v211Ev");}
void  S1503C3_nt ::v212(){vfunc_called(this, "_ZN10S1503C3_nt4v212Ev");}
S1503C3_nt ::S1503C3_nt(){ note_ctor("S1503C3_nt", this);} // tgen

//skip512 S1503C3_nt

#else // __cplusplus

extern void _ZN10S1503C3_ntC1Ev();
extern void _ZN10S1503C3_ntD1Ev();
Name_Map name_map_S1503C3_nt[] = {
  NSPAIR(_ZN10S1503C3_ntC1Ev),
  NSPAIR(_ZN10S1503C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1503C4_nt;
extern VTBL_ENTRY _ZTI10S1503C4_nt[];
extern  VTBL_ENTRY _ZTV10S1503C4_nt[];
static Base_Class bases_S1503C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1503C3_nt[];
extern void _ZN10S1503C3_ntD1Ev();
extern void _ZN10S1503C3_ntD0Ev();
extern void _ZN10S1503C4_nt2v6Ev();
extern void _ZN10S1503C4_nt2v7Ev();
extern void _ZN10S1503C4_nt2v8Ev();
extern void _ZN10S1503C4_nt2v9Ev();
extern void _ZN10S1503C4_nt3v10Ev();
extern void _ZN10S1503C4_nt3v11Ev();
extern void _ZN10S1503C4_nt3v12Ev();
extern void _ZN10S1503C4_nt3v13Ev();
extern void _ZN10S1503C4_nt3v14Ev();
extern void _ZN10S1503C4_nt3v15Ev();
extern void _ZN10S1503C4_nt3v16Ev();
extern void _ZN10S1503C4_nt3v17Ev();
extern void _ZN10S1503C4_nt3v18Ev();
extern void _ZN10S1503C4_nt3v19Ev();
extern void _ZN10S1503C4_nt3v20Ev();
extern void _ZN10S1503C4_nt3v21Ev();
extern void _ZN10S1503C4_nt3v22Ev();
extern void _ZN10S1503C4_nt3v23Ev();
extern void _ZN10S1503C4_nt3v24Ev();
extern void _ZN10S1503C4_nt3v25Ev();
extern void _ZN10S1503C4_nt3v26Ev();
extern void _ZN10S1503C4_nt3v27Ev();
extern void _ZN10S1503C4_nt3v28Ev();
extern void _ZN10S1503C4_nt3v29Ev();
extern void _ZN10S1503C4_nt3v30Ev();
extern void _ZN10S1503C4_nt3v31Ev();
extern void _ZN10S1503C4_nt3v32Ev();
extern void _ZN10S1503C4_nt3v33Ev();
extern void _ZN10S1503C4_nt3v34Ev();
extern void _ZN10S1503C4_nt3v35Ev();
extern void _ZN10S1503C4_nt3v36Ev();
extern void _ZN10S1503C4_nt3v37Ev();
extern void _ZN10S1503C4_nt3v38Ev();
extern void _ZN10S1503C4_nt3v39Ev();
extern void _ZN10S1503C4_nt3v40Ev();
extern void _ZN10S1503C4_nt3v41Ev();
extern void _ZN10S1503C4_nt3v42Ev();
extern void _ZN10S1503C4_nt3v43Ev();
extern void _ZN10S1503C4_nt3v44Ev();
extern void _ZN10S1503C4_nt3v45Ev();
extern void _ZN10S1503C4_nt3v46Ev();
extern void _ZN10S1503C4_nt3v47Ev();
extern void _ZN10S1503C4_nt3v48Ev();
extern void _ZN10S1503C4_nt3v49Ev();
extern void _ZN10S1503C4_nt3v50Ev();
extern void _ZN10S1503C4_nt3v51Ev();
extern void _ZN10S1503C4_nt3v52Ev();
extern void _ZN10S1503C4_nt3v53Ev();
extern void _ZN10S1503C4_nt3v54Ev();
extern void _ZN10S1503C4_nt3v55Ev();
extern void _ZN10S1503C4_nt3v56Ev();
extern void _ZN10S1503C4_nt3v57Ev();
extern void _ZN10S1503C4_nt3v58Ev();
extern void _ZN10S1503C4_nt3v59Ev();
extern void _ZN10S1503C4_nt3v60Ev();
extern void _ZN10S1503C4_nt3v61Ev();
extern void _ZN10S1503C4_nt3v62Ev();
extern void _ZN10S1503C4_nt3v63Ev();
extern void _ZN10S1503C4_nt3v64Ev();
extern void _ZN10S1503C4_nt3v65Ev();
extern void _ZN10S1503C4_nt3v66Ev();
extern void _ZN10S1503C4_nt3v67Ev();
extern void _ZN10S1503C4_nt3v68Ev();
extern void _ZN10S1503C4_nt3v69Ev();
extern void _ZN10S1503C3_nt3v70Ev();
extern void _ZN10S1503C3_nt3v71Ev();
extern void _ZN10S1503C3_nt3v72Ev();
extern void _ZN10S1503C3_nt3v73Ev();
extern void _ZN10S1503C3_nt3v74Ev();
extern void _ZN10S1503C3_nt3v75Ev();
extern void _ZN10S1503C3_nt3v76Ev();
extern void _ZN10S1503C3_nt3v77Ev();
extern void _ZN10S1503C3_nt3v78Ev();
extern void _ZN10S1503C3_nt3v79Ev();
extern void _ZN10S1503C3_nt3v80Ev();
extern void _ZN10S1503C3_nt3v81Ev();
extern void _ZN10S1503C3_nt3v82Ev();
extern void _ZN10S1503C3_nt3v83Ev();
extern void _ZN10S1503C3_nt3v84Ev();
extern void _ZN10S1503C3_nt3v85Ev();
extern void _ZN10S1503C3_nt3v86Ev();
extern void _ZN10S1503C3_nt3v87Ev();
extern void _ZN10S1503C3_nt3v88Ev();
extern void _ZN10S1503C3_nt3v89Ev();
extern void _ZN10S1503C3_nt3v90Ev();
extern void _ZN10S1503C3_nt3v91Ev();
extern void _ZN10S1503C3_nt3v92Ev();
extern void _ZN10S1503C3_nt3v93Ev();
extern void _ZN10S1503C3_nt3v94Ev();
extern void _ZN10S1503C3_nt3v95Ev();
extern void _ZN10S1503C3_nt3v96Ev();
extern void _ZN10S1503C3_nt3v97Ev();
extern void _ZN10S1503C3_nt3v98Ev();
extern void _ZN10S1503C3_nt3v99Ev();
extern void _ZN10S1503C3_nt4v100Ev();
extern void _ZN10S1503C3_nt4v101Ev();
extern void _ZN10S1503C3_nt4v102Ev();
extern void _ZN10S1503C3_nt4v103Ev();
extern void _ZN10S1503C3_nt4v104Ev();
extern void _ZN10S1503C3_nt4v105Ev();
extern void _ZN10S1503C3_nt4v106Ev();
extern void _ZN10S1503C3_nt4v107Ev();
extern void _ZN10S1503C3_nt4v108Ev();
extern void _ZN10S1503C3_nt4v109Ev();
extern void _ZN10S1503C3_nt4v110Ev();
extern void _ZN10S1503C3_nt4v111Ev();
extern void _ZN10S1503C3_nt4v112Ev();
extern void _ZN10S1503C3_nt4v113Ev();
extern void _ZN10S1503C3_nt4v114Ev();
extern void _ZN10S1503C3_nt4v115Ev();
extern void _ZN10S1503C3_nt4v116Ev();
extern void _ZN10S1503C3_nt4v117Ev();
extern void _ZN10S1503C3_nt4v118Ev();
extern void _ZN10S1503C3_nt4v119Ev();
extern void _ZN10S1503C3_nt4v120Ev();
extern void _ZN10S1503C3_nt4v121Ev();
extern void _ZN10S1503C3_nt4v122Ev();
extern void _ZN10S1503C3_nt4v123Ev();
extern void _ZN10S1503C3_nt4v124Ev();
extern void _ZN10S1503C3_nt4v125Ev();
extern void _ZN10S1503C3_nt4v126Ev();
extern void _ZN10S1503C3_nt4v127Ev();
extern void _ZN10S1503C3_nt4v128Ev();
extern void _ZN10S1503C3_nt4v129Ev();
extern void _ZN10S1503C3_nt4v130Ev();
extern void _ZN10S1503C3_nt4v131Ev();
extern void _ZN10S1503C3_nt4v132Ev();
extern void _ZN10S1503C3_nt4v133Ev();
extern void _ZN10S1503C3_nt4v134Ev();
extern void _ZN10S1503C3_nt4v135Ev();
extern void _ZN10S1503C3_nt4v136Ev();
extern void _ZN10S1503C3_nt4v137Ev();
extern void _ZN10S1503C3_nt4v138Ev();
extern void _ZN10S1503C3_nt4v139Ev();
extern void _ZN10S1503C3_nt4v140Ev();
extern void _ZN10S1503C3_nt4v141Ev();
extern void _ZN10S1503C3_nt4v142Ev();
extern void _ZN10S1503C3_nt4v143Ev();
extern void _ZN10S1503C3_nt4v144Ev();
extern void _ZN10S1503C3_nt4v145Ev();
extern void _ZN10S1503C3_nt4v146Ev();
extern void _ZN10S1503C3_nt4v147Ev();
extern void _ZN10S1503C3_nt4v148Ev();
extern void _ZN10S1503C3_nt4v149Ev();
extern void _ZN10S1503C3_nt4v150Ev();
extern void _ZN10S1503C3_nt4v151Ev();
extern void _ZN10S1503C3_nt4v152Ev();
extern void _ZN10S1503C3_nt4v153Ev();
extern void _ZN10S1503C3_nt4v154Ev();
extern void _ZN10S1503C3_nt4v155Ev();
extern void _ZN10S1503C3_nt4v156Ev();
extern void _ZN10S1503C3_nt4v157Ev();
extern void _ZN10S1503C3_nt4v158Ev();
extern void _ZN10S1503C3_nt4v159Ev();
extern void _ZN10S1503C3_nt4v160Ev();
extern void _ZN10S1503C3_nt4v161Ev();
extern void _ZN10S1503C3_nt4v162Ev();
extern void _ZN10S1503C3_nt4v163Ev();
extern void _ZN10S1503C3_nt4v164Ev();
extern void _ZN10S1503C3_nt4v165Ev();
extern void _ZN10S1503C3_nt4v166Ev();
extern void _ZN10S1503C3_nt4v167Ev();
extern void _ZN10S1503C3_nt4v168Ev();
extern void _ZN10S1503C3_nt4v169Ev();
extern void _ZN10S1503C3_nt4v170Ev();
extern void _ZN10S1503C3_nt4v171Ev();
extern void _ZN10S1503C3_nt4v172Ev();
extern void _ZN10S1503C3_nt4v173Ev();
extern void _ZN10S1503C3_nt4v174Ev();
extern void _ZN10S1503C3_nt4v175Ev();
extern void _ZN10S1503C3_nt4v176Ev();
extern void _ZN10S1503C3_nt4v177Ev();
extern void _ZN10S1503C3_nt4v178Ev();
extern void _ZN10S1503C3_nt4v179Ev();
extern void _ZN10S1503C3_nt4v180Ev();
extern void _ZN10S1503C3_nt4v181Ev();
extern void _ZN10S1503C3_nt4v182Ev();
extern void _ZN10S1503C3_nt4v183Ev();
extern void _ZN10S1503C3_nt4v184Ev();
extern void _ZN10S1503C3_nt4v185Ev();
extern void _ZN10S1503C3_nt4v186Ev();
extern void _ZN10S1503C3_nt4v187Ev();
extern void _ZN10S1503C3_nt4v188Ev();
extern void _ZN10S1503C3_nt4v189Ev();
extern void _ZN10S1503C3_nt4v190Ev();
extern void _ZN10S1503C3_nt4v191Ev();
extern void _ZN10S1503C3_nt4v192Ev();
extern void _ZN10S1503C3_nt4v193Ev();
extern void _ZN10S1503C3_nt4v194Ev();
extern void _ZN10S1503C3_nt4v195Ev();
extern void _ZN10S1503C3_nt4v196Ev();
extern void _ZN10S1503C3_nt4v197Ev();
extern void _ZN10S1503C3_nt4v198Ev();
extern void _ZN10S1503C3_nt4v199Ev();
extern void _ZN10S1503C3_nt4v200Ev();
extern void _ZN10S1503C3_nt4v201Ev();
extern void _ZN10S1503C3_nt4v202Ev();
extern void _ZN10S1503C3_nt4v203Ev();
extern void _ZN10S1503C3_nt4v204Ev();
extern void _ZN10S1503C3_nt4v205Ev();
extern void _ZN10S1503C3_nt4v206Ev();
extern void _ZN10S1503C3_nt4v207Ev();
extern void _ZN10S1503C3_nt4v208Ev();
extern void _ZN10S1503C3_nt4v209Ev();
extern void _ZN10S1503C3_nt4v210Ev();
extern void _ZN10S1503C3_nt4v211Ev();
extern void _ZN10S1503C3_nt4v212Ev();
static  VTBL_ENTRY vtc_S1503C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1503C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1503C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v211Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v212Ev,
};
extern VTBL_ENTRY _ZTI10S1503C3_nt[];
VTBL_ENTRY *P__ZTI10S1503C3_nt = _ZTI10S1503C3_nt; 
extern  VTBL_ENTRY _ZTV10S1503C3_nt[];
Class_Descriptor cd_S1503C3_nt = {  "S1503C3_nt", // class name
  bases_S1503C3_nt, 1,
  &(vtc_S1503C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(568,436), // object size
  NSPAIRA(_ZTI10S1503C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1503C3_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  S1503C23_nt  {
  ::S1503C14_nt s1503c23f0;
  ::S1503C14_nt s1503c23f1;
  char s1503c23f2;
  void  mf1503c23(); // _ZN11S1503C23_nt9mf1503c23Ev
};
//SIG(-1 S1503C23_nt) C1{ m FC2{ m Fi[3]} FC2 Fc}


void  S1503C23_nt ::mf1503c23(){}

//skip512 S1503C23_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1503C22_nt  {
  ::S1503C23_nt s1503c22f0;
  ::S1503C14_nt s1503c22f1;
  void *s1503c22f2[2];
  char s1503c22f3;
  void  mf1503c22(); // _ZN11S1503C22_nt9mf1503c22Ev
};
//SIG(-1 S1503C22_nt) C1{ m FC2{ m FC3{ m Fi[3]} FC3 Fc} FC3 Fp[2] Fc}


void  S1503C22_nt ::mf1503c22(){}

//skip512 S1503C22_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S1503C25()
{
  extern Class_Descriptor cd_S1503C25;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1503C25, buf);
    S1503C25 &lv = *(new (buf) S1503C25());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1503C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1503C25)");
    check_base_class_offset(lv, (S1503C8_nt*), 0, "S1503C25");
    test_class_info(&lv, &cd_S1503C25);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1503C25(Test_S1503C25, "S1503C25", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
static Base_Class bases_S1503C25[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1503C25 = {  "S1503C25", // class name
  bases_S1503C25, 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  S1503C24  : S1503C25 {
};
//SIG(-1 S1503C24) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1503C24()
{
  extern Class_Descriptor cd_S1503C24;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1503C24, buf);
    S1503C24 &lv = *(new (buf) S1503C24());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1503C24)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1503C24)");
    check_base_class_offset(lv, (S1503C8_nt*)(S1503C25*), 0, "S1503C24");
    check_base_class_offset(lv, (S1503C25*), 0, "S1503C24");
    test_class_info(&lv, &cd_S1503C24);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1503C24(Test_S1503C24, "S1503C24", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
extern Class_Descriptor cd_S1503C25;
static Base_Class bases_S1503C24[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S1503C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1503C24 = {  "S1503C24", // class name
  bases_S1503C24, 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  S1503C29  : S1503C8_nt {
};
//SIG(-1 S1503C29) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1503C29()
{
  extern Class_Descriptor cd_S1503C29;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1503C29, buf);
    S1503C29 &lv = *(new (buf) S1503C29());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1503C29)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1503C29)");
    check_base_class_offset(lv, (S1503C8_nt*), 0, "S1503C29");
    test_class_info(&lv, &cd_S1503C29);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1503C29(Test_S1503C29, "S1503C29", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
static Base_Class bases_S1503C29[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1503C29 = {  "S1503C29", // class name
  bases_S1503C29, 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  S1503C28  : S1503C29 {
};
//SIG(-1 S1503C28) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1503C28()
{
  extern Class_Descriptor cd_S1503C28;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1503C28, buf);
    S1503C28 &lv = *(new (buf) S1503C28());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1503C28)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1503C28)");
    check_base_class_offset(lv, (S1503C8_nt*)(S1503C29*), 0, "S1503C28");
    check_base_class_offset(lv, (S1503C29*), 0, "S1503C28");
    test_class_info(&lv, &cd_S1503C28);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1503C28(Test_S1503C28, "S1503C28", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
extern Class_Descriptor cd_S1503C29;
static Base_Class bases_S1503C28[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S1503C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1503C28 = {  "S1503C28", // class name
  bases_S1503C28, 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  S1503C31_nt  {
  int s1503c31f0[4];
  void  mf1503c31(); // _ZN11S1503C31_nt9mf1503c31Ev
};
//SIG(-1 S1503C31_nt) C1{ m Fi[4]}


void  S1503C31_nt ::mf1503c31(){}

//skip512 S1503C31_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1503C2_nt  : S1503C3_nt {
  unsigned int s1503c2f0:1;
  unsigned int s1503c2f1:1;
  unsigned int s1503c2f2:1;
  unsigned int s1503c2f3:1;
  unsigned int s1503c2f4:1;
  ::S1503C22_nt s1503c2f5;
  unsigned int s1503c2f6:1;
  unsigned int s1503c2f7:1;
  unsigned int s1503c2f8:1;
  unsigned int s1503c2f9:1;
  unsigned int s1503c2f10:1;
  unsigned int s1503c2f11:1;
  unsigned int s1503c2f12:1;
  unsigned int s1503c2f13:1;
  unsigned int s1503c2f14:1;
  unsigned int s1503c2f15:1;
  unsigned int s1503c2f16:1;
  unsigned int s1503c2f17:1;
  unsigned int s1503c2f18:1;
  unsigned int s1503c2f19:1;
  unsigned int s1503c2f20:1;
  unsigned int s1503c2f21:1;
  unsigned int s1503c2f22:1;
  unsigned int s1503c2f23:1;
  unsigned int s1503c2f24:1;
  unsigned int s1503c2f25:1;
  unsigned int s1503c2f26:1;
  unsigned int s1503c2f27:1;
  unsigned int s1503c2f28:1;
  unsigned int s1503c2f29:1;
  unsigned int s1503c2f30:1;
  ::S1503C24 s1503c2f31;
  ::S1503C24 s1503c2f32;
  ::S1503C24 s1503c2f33;
  ::S1503C28 s1503c2f34;
  int s1503c2f35[2];
  void *s1503c2f36[4];
  int s1503c2f37[5];
  void *s1503c2f38;
  int s1503c2f39[2];
  void *s1503c2f40[2];
  int s1503c2f41;
  ::S1503C5_nt s1503c2f42;
  ::S1503C31_nt s1503c2f43;
  void *s1503c2f44[2];
  int s1503c2f45;
  void *s1503c2f46;
  int s1503c2f47;
  virtual  ~S1503C2_nt(); // _ZN10S1503C2_ntD1Ev
  virtual void  v213(); // _ZN10S1503C2_nt4v213Ev
  virtual void  v214(); // _ZN10S1503C2_nt4v214Ev
  virtual void  v215(); // _ZN10S1503C2_nt4v215Ev
  virtual void  v216(); // _ZN10S1503C2_nt4v216Ev
  virtual void  v217(); // _ZN10S1503C2_nt4v217Ev
  virtual void  v218(); // _ZN10S1503C2_nt4v218Ev
  virtual void  v219(); // _ZN10S1503C2_nt4v219Ev
  virtual void  v220(); // _ZN10S1503C2_nt4v220Ev
  virtual void  v221(); // _ZN10S1503C2_nt4v221Ev
  virtual void  v222(); // _ZN10S1503C2_nt4v222Ev
  virtual void  v223(); // _ZN10S1503C2_nt4v223Ev
  virtual void  v224(); // _ZN10S1503C2_nt4v224Ev
  virtual void  v225(); // _ZN10S1503C2_nt4v225Ev
  virtual void  v226(); // _ZN10S1503C2_nt4v226Ev
  virtual void  v227(); // _ZN10S1503C2_nt4v227Ev
  virtual void  v228(); // _ZN10S1503C2_nt4v228Ev
  virtual void  v229(); // _ZN10S1503C2_nt4v229Ev
  virtual void  v230(); // _ZN10S1503C2_nt4v230Ev
  virtual void  v231(); // _ZN10S1503C2_nt4v231Ev
  virtual void  v232(); // _ZN10S1503C2_nt4v232Ev
  virtual void  v233(); // _ZN10S1503C2_nt4v233Ev
  virtual void  v234(); // _ZN10S1503C2_nt4v234Ev
  virtual void  v235(); // _ZN10S1503C2_nt4v235Ev
  virtual void  v236(); // _ZN10S1503C2_nt4v236Ev
  virtual void  v237(); // _ZN10S1503C2_nt4v237Ev
  virtual void  v238(); // _ZN10S1503C2_nt4v238Ev
  virtual void  v239(); // _ZN10S1503C2_nt4v239Ev
  virtual void  v240(); // _ZN10S1503C2_nt4v240Ev
  virtual void  v241(); // _ZN10S1503C2_nt4v241Ev
  virtual void  v242(); // _ZN10S1503C2_nt4v242Ev
  virtual void  v243(); // _ZN10S1503C2_nt4v243Ev
  virtual void  v244(); // _ZN10S1503C2_nt4v244Ev
  virtual void  v245(); // _ZN10S1503C2_nt4v245Ev
  virtual void  v246(); // _ZN10S1503C2_nt4v246Ev
  virtual void  v247(); // _ZN10S1503C2_nt4v247Ev
  virtual void  v248(); // _ZN10S1503C2_nt4v248Ev
  virtual void  v249(); // _ZN10S1503C2_nt4v249Ev
  S1503C2_nt(); // tgen
};
//SIG(-1 S1503C2_nt) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd 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 v214 v215 v216 v217 v218 v219 v220 v221 v222 v223 v224 v225 v226 v227 v228 v229 v230 v231 v232 v233 v234 v235 v236 v237 v238 v239 v240 v241 v242 v243 v244 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 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 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC14{ m FC15{ m FC11 FC11 Fc} FC11 Fp[2] Fc} 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 FC16{ BC17{ BC7}} FC16 FC16 FC18{ BC19{ BC7}} Fi[2] Fp[4] Fi[5] Fp Fi[2] Fp[2] Fi FC4 FC20{ m Fi[4]} Fp[2] Fi Fp Fi}


 S1503C2_nt ::~S1503C2_nt(){ note_dtor("S1503C2_nt", this);}
void  S1503C2_nt ::v213(){vfunc_called(this, "_ZN10S1503C2_nt4v213Ev");}
void  S1503C2_nt ::v214(){vfunc_called(this, "_ZN10S1503C2_nt4v214Ev");}
void  S1503C2_nt ::v215(){vfunc_called(this, "_ZN10S1503C2_nt4v215Ev");}
void  S1503C2_nt ::v216(){vfunc_called(this, "_ZN10S1503C2_nt4v216Ev");}
void  S1503C2_nt ::v217(){vfunc_called(this, "_ZN10S1503C2_nt4v217Ev");}
void  S1503C2_nt ::v218(){vfunc_called(this, "_ZN10S1503C2_nt4v218Ev");}
void  S1503C2_nt ::v219(){vfunc_called(this, "_ZN10S1503C2_nt4v219Ev");}
void  S1503C2_nt ::v220(){vfunc_called(this, "_ZN10S1503C2_nt4v220Ev");}
void  S1503C2_nt ::v221(){vfunc_called(this, "_ZN10S1503C2_nt4v221Ev");}
void  S1503C2_nt ::v222(){vfunc_called(this, "_ZN10S1503C2_nt4v222Ev");}
void  S1503C2_nt ::v223(){vfunc_called(this, "_ZN10S1503C2_nt4v223Ev");}
void  S1503C2_nt ::v224(){vfunc_called(this, "_ZN10S1503C2_nt4v224Ev");}
void  S1503C2_nt ::v225(){vfunc_called(this, "_ZN10S1503C2_nt4v225Ev");}
void  S1503C2_nt ::v226(){vfunc_called(this, "_ZN10S1503C2_nt4v226Ev");}
void  S1503C2_nt ::v227(){vfunc_called(this, "_ZN10S1503C2_nt4v227Ev");}
void  S1503C2_nt ::v228(){vfunc_called(this, "_ZN10S1503C2_nt4v228Ev");}
void  S1503C2_nt ::v229(){vfunc_called(this, "_ZN10S1503C2_nt4v229Ev");}
void  S1503C2_nt ::v230(){vfunc_called(this, "_ZN10S1503C2_nt4v230Ev");}
void  S1503C2_nt ::v231(){vfunc_called(this, "_ZN10S1503C2_nt4v231Ev");}
void  S1503C2_nt ::v232(){vfunc_called(this, "_ZN10S1503C2_nt4v232Ev");}
void  S1503C2_nt ::v233(){vfunc_called(this, "_ZN10S1503C2_nt4v233Ev");}
void  S1503C2_nt ::v234(){vfunc_called(this, "_ZN10S1503C2_nt4v234Ev");}
void  S1503C2_nt ::v235(){vfunc_called(this, "_ZN10S1503C2_nt4v235Ev");}
void  S1503C2_nt ::v236(){vfunc_called(this, "_ZN10S1503C2_nt4v236Ev");}
void  S1503C2_nt ::v237(){vfunc_called(this, "_ZN10S1503C2_nt4v237Ev");}
void  S1503C2_nt ::v238(){vfunc_called(this, "_ZN10S1503C2_nt4v238Ev");}
void  S1503C2_nt ::v239(){vfunc_called(this, "_ZN10S1503C2_nt4v239Ev");}
void  S1503C2_nt ::v240(){vfunc_called(this, "_ZN10S1503C2_nt4v240Ev");}
void  S1503C2_nt ::v241(){vfunc_called(this, "_ZN10S1503C2_nt4v241Ev");}
void  S1503C2_nt ::v242(){vfunc_called(this, "_ZN10S1503C2_nt4v242Ev");}
void  S1503C2_nt ::v243(){vfunc_called(this, "_ZN10S1503C2_nt4v243Ev");}
void  S1503C2_nt ::v244(){vfunc_called(this, "_ZN10S1503C2_nt4v244Ev");}
void  S1503C2_nt ::v245(){vfunc_called(this, "_ZN10S1503C2_nt4v245Ev");}
void  S1503C2_nt ::v246(){vfunc_called(this, "_ZN10S1503C2_nt4v246Ev");}
void  S1503C2_nt ::v247(){vfunc_called(this, "_ZN10S1503C2_nt4v247Ev");}
void  S1503C2_nt ::v248(){vfunc_called(this, "_ZN10S1503C2_nt4v248Ev");}
void  S1503C2_nt ::v249(){vfunc_called(this, "_ZN10S1503C2_nt4v249Ev");}
S1503C2_nt ::S1503C2_nt(){ note_ctor("S1503C2_nt", this);} // tgen

//skip512 S1503C2_nt

#else // __cplusplus

extern void _ZN10S1503C2_ntC1Ev();
extern void _ZN10S1503C2_ntD1Ev();
Name_Map name_map_S1503C2_nt[] = {
  NSPAIR(_ZN10S1503C2_ntC1Ev),
  NSPAIR(_ZN10S1503C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1503C4_nt;
extern VTBL_ENTRY _ZTI10S1503C4_nt[];
extern  VTBL_ENTRY _ZTV10S1503C4_nt[];
extern Class_Descriptor cd_S1503C3_nt;
extern VTBL_ENTRY _ZTI10S1503C3_nt[];
extern  VTBL_ENTRY _ZTV10S1503C3_nt[];
static Base_Class bases_S1503C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S1503C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI10S1503C2_nt[];
extern void _ZN10S1503C2_ntD1Ev();
extern void _ZN10S1503C2_ntD0Ev();
extern void _ZN10S1503C4_nt2v6Ev();
extern void _ZN10S1503C4_nt2v7Ev();
extern void _ZN10S1503C4_nt2v8Ev();
extern void _ZN10S1503C4_nt2v9Ev();
extern void _ZN10S1503C4_nt3v10Ev();
extern void _ZN10S1503C4_nt3v11Ev();
extern void _ZN10S1503C4_nt3v12Ev();
extern void _ZN10S1503C4_nt3v13Ev();
extern void _ZN10S1503C4_nt3v14Ev();
extern void _ZN10S1503C4_nt3v15Ev();
extern void _ZN10S1503C4_nt3v16Ev();
extern void _ZN10S1503C4_nt3v17Ev();
extern void _ZN10S1503C4_nt3v18Ev();
extern void _ZN10S1503C4_nt3v19Ev();
extern void _ZN10S1503C4_nt3v20Ev();
extern void _ZN10S1503C4_nt3v21Ev();
extern void _ZN10S1503C4_nt3v22Ev();
extern void _ZN10S1503C4_nt3v23Ev();
extern void _ZN10S1503C4_nt3v24Ev();
extern void _ZN10S1503C4_nt3v25Ev();
extern void _ZN10S1503C4_nt3v26Ev();
extern void _ZN10S1503C4_nt3v27Ev();
extern void _ZN10S1503C4_nt3v28Ev();
extern void _ZN10S1503C4_nt3v29Ev();
extern void _ZN10S1503C4_nt3v30Ev();
extern void _ZN10S1503C4_nt3v31Ev();
extern void _ZN10S1503C4_nt3v32Ev();
extern void _ZN10S1503C4_nt3v33Ev();
extern void _ZN10S1503C4_nt3v34Ev();
extern void _ZN10S1503C4_nt3v35Ev();
extern void _ZN10S1503C4_nt3v36Ev();
extern void _ZN10S1503C4_nt3v37Ev();
extern void _ZN10S1503C4_nt3v38Ev();
extern void _ZN10S1503C4_nt3v39Ev();
extern void _ZN10S1503C4_nt3v40Ev();
extern void _ZN10S1503C4_nt3v41Ev();
extern void _ZN10S1503C4_nt3v42Ev();
extern void _ZN10S1503C4_nt3v43Ev();
extern void _ZN10S1503C4_nt3v44Ev();
extern void _ZN10S1503C4_nt3v45Ev();
extern void _ZN10S1503C4_nt3v46Ev();
extern void _ZN10S1503C4_nt3v47Ev();
extern void _ZN10S1503C4_nt3v48Ev();
extern void _ZN10S1503C4_nt3v49Ev();
extern void _ZN10S1503C4_nt3v50Ev();
extern void _ZN10S1503C4_nt3v51Ev();
extern void _ZN10S1503C4_nt3v52Ev();
extern void _ZN10S1503C4_nt3v53Ev();
extern void _ZN10S1503C4_nt3v54Ev();
extern void _ZN10S1503C4_nt3v55Ev();
extern void _ZN10S1503C4_nt3v56Ev();
extern void _ZN10S1503C4_nt3v57Ev();
extern void _ZN10S1503C4_nt3v58Ev();
extern void _ZN10S1503C4_nt3v59Ev();
extern void _ZN10S1503C4_nt3v60Ev();
extern void _ZN10S1503C4_nt3v61Ev();
extern void _ZN10S1503C4_nt3v62Ev();
extern void _ZN10S1503C4_nt3v63Ev();
extern void _ZN10S1503C4_nt3v64Ev();
extern void _ZN10S1503C4_nt3v65Ev();
extern void _ZN10S1503C4_nt3v66Ev();
extern void _ZN10S1503C4_nt3v67Ev();
extern void _ZN10S1503C4_nt3v68Ev();
extern void _ZN10S1503C4_nt3v69Ev();
extern void _ZN10S1503C3_nt3v70Ev();
extern void _ZN10S1503C3_nt3v71Ev();
extern void _ZN10S1503C3_nt3v72Ev();
extern void _ZN10S1503C3_nt3v73Ev();
extern void _ZN10S1503C3_nt3v74Ev();
extern void _ZN10S1503C3_nt3v75Ev();
extern void _ZN10S1503C3_nt3v76Ev();
extern void _ZN10S1503C3_nt3v77Ev();
extern void _ZN10S1503C3_nt3v78Ev();
extern void _ZN10S1503C3_nt3v79Ev();
extern void _ZN10S1503C3_nt3v80Ev();
extern void _ZN10S1503C3_nt3v81Ev();
extern void _ZN10S1503C3_nt3v82Ev();
extern void _ZN10S1503C3_nt3v83Ev();
extern void _ZN10S1503C3_nt3v84Ev();
extern void _ZN10S1503C3_nt3v85Ev();
extern void _ZN10S1503C3_nt3v86Ev();
extern void _ZN10S1503C3_nt3v87Ev();
extern void _ZN10S1503C3_nt3v88Ev();
extern void _ZN10S1503C3_nt3v89Ev();
extern void _ZN10S1503C3_nt3v90Ev();
extern void _ZN10S1503C3_nt3v91Ev();
extern void _ZN10S1503C3_nt3v92Ev();
extern void _ZN10S1503C3_nt3v93Ev();
extern void _ZN10S1503C3_nt3v94Ev();
extern void _ZN10S1503C3_nt3v95Ev();
extern void _ZN10S1503C3_nt3v96Ev();
extern void _ZN10S1503C3_nt3v97Ev();
extern void _ZN10S1503C3_nt3v98Ev();
extern void _ZN10S1503C3_nt3v99Ev();
extern void _ZN10S1503C3_nt4v100Ev();
extern void _ZN10S1503C3_nt4v101Ev();
extern void _ZN10S1503C3_nt4v102Ev();
extern void _ZN10S1503C3_nt4v103Ev();
extern void _ZN10S1503C3_nt4v104Ev();
extern void _ZN10S1503C3_nt4v105Ev();
extern void _ZN10S1503C3_nt4v106Ev();
extern void _ZN10S1503C3_nt4v107Ev();
extern void _ZN10S1503C3_nt4v108Ev();
extern void _ZN10S1503C3_nt4v109Ev();
extern void _ZN10S1503C3_nt4v110Ev();
extern void _ZN10S1503C3_nt4v111Ev();
extern void _ZN10S1503C3_nt4v112Ev();
extern void _ZN10S1503C3_nt4v113Ev();
extern void _ZN10S1503C3_nt4v114Ev();
extern void _ZN10S1503C3_nt4v115Ev();
extern void _ZN10S1503C3_nt4v116Ev();
extern void _ZN10S1503C3_nt4v117Ev();
extern void _ZN10S1503C3_nt4v118Ev();
extern void _ZN10S1503C3_nt4v119Ev();
extern void _ZN10S1503C3_nt4v120Ev();
extern void _ZN10S1503C3_nt4v121Ev();
extern void _ZN10S1503C3_nt4v122Ev();
extern void _ZN10S1503C3_nt4v123Ev();
extern void _ZN10S1503C3_nt4v124Ev();
extern void _ZN10S1503C3_nt4v125Ev();
extern void _ZN10S1503C3_nt4v126Ev();
extern void _ZN10S1503C3_nt4v127Ev();
extern void _ZN10S1503C3_nt4v128Ev();
extern void _ZN10S1503C3_nt4v129Ev();
extern void _ZN10S1503C3_nt4v130Ev();
extern void _ZN10S1503C3_nt4v131Ev();
extern void _ZN10S1503C3_nt4v132Ev();
extern void _ZN10S1503C3_nt4v133Ev();
extern void _ZN10S1503C3_nt4v134Ev();
extern void _ZN10S1503C3_nt4v135Ev();
extern void _ZN10S1503C3_nt4v136Ev();
extern void _ZN10S1503C3_nt4v137Ev();
extern void _ZN10S1503C3_nt4v138Ev();
extern void _ZN10S1503C3_nt4v139Ev();
extern void _ZN10S1503C3_nt4v140Ev();
extern void _ZN10S1503C3_nt4v141Ev();
extern void _ZN10S1503C3_nt4v142Ev();
extern void _ZN10S1503C3_nt4v143Ev();
extern void _ZN10S1503C3_nt4v144Ev();
extern void _ZN10S1503C3_nt4v145Ev();
extern void _ZN10S1503C3_nt4v146Ev();
extern void _ZN10S1503C3_nt4v147Ev();
extern void _ZN10S1503C3_nt4v148Ev();
extern void _ZN10S1503C3_nt4v149Ev();
extern void _ZN10S1503C3_nt4v150Ev();
extern void _ZN10S1503C3_nt4v151Ev();
extern void _ZN10S1503C3_nt4v152Ev();
extern void _ZN10S1503C3_nt4v153Ev();
extern void _ZN10S1503C3_nt4v154Ev();
extern void _ZN10S1503C3_nt4v155Ev();
extern void _ZN10S1503C3_nt4v156Ev();
extern void _ZN10S1503C3_nt4v157Ev();
extern void _ZN10S1503C3_nt4v158Ev();
extern void _ZN10S1503C3_nt4v159Ev();
extern void _ZN10S1503C3_nt4v160Ev();
extern void _ZN10S1503C3_nt4v161Ev();
extern void _ZN10S1503C3_nt4v162Ev();
extern void _ZN10S1503C3_nt4v163Ev();
extern void _ZN10S1503C3_nt4v164Ev();
extern void _ZN10S1503C3_nt4v165Ev();
extern void _ZN10S1503C3_nt4v166Ev();
extern void _ZN10S1503C3_nt4v167Ev();
extern void _ZN10S1503C3_nt4v168Ev();
extern void _ZN10S1503C3_nt4v169Ev();
extern void _ZN10S1503C3_nt4v170Ev();
extern void _ZN10S1503C3_nt4v171Ev();
extern void _ZN10S1503C3_nt4v172Ev();
extern void _ZN10S1503C3_nt4v173Ev();
extern void _ZN10S1503C3_nt4v174Ev();
extern void _ZN10S1503C3_nt4v175Ev();
extern void _ZN10S1503C3_nt4v176Ev();
extern void _ZN10S1503C3_nt4v177Ev();
extern void _ZN10S1503C3_nt4v178Ev();
extern void _ZN10S1503C3_nt4v179Ev();
extern void _ZN10S1503C3_nt4v180Ev();
extern void _ZN10S1503C3_nt4v181Ev();
extern void _ZN10S1503C3_nt4v182Ev();
extern void _ZN10S1503C3_nt4v183Ev();
extern void _ZN10S1503C3_nt4v184Ev();
extern void _ZN10S1503C3_nt4v185Ev();
extern void _ZN10S1503C3_nt4v186Ev();
extern void _ZN10S1503C3_nt4v187Ev();
extern void _ZN10S1503C3_nt4v188Ev();
extern void _ZN10S1503C3_nt4v189Ev();
extern void _ZN10S1503C3_nt4v190Ev();
extern void _ZN10S1503C3_nt4v191Ev();
extern void _ZN10S1503C3_nt4v192Ev();
extern void _ZN10S1503C3_nt4v193Ev();
extern void _ZN10S1503C3_nt4v194Ev();
extern void _ZN10S1503C3_nt4v195Ev();
extern void _ZN10S1503C3_nt4v196Ev();
extern void _ZN10S1503C3_nt4v197Ev();
extern void _ZN10S1503C3_nt4v198Ev();
extern void _ZN10S1503C3_nt4v199Ev();
extern void _ZN10S1503C3_nt4v200Ev();
extern void _ZN10S1503C3_nt4v201Ev();
extern void _ZN10S1503C3_nt4v202Ev();
extern void _ZN10S1503C3_nt4v203Ev();
extern void _ZN10S1503C3_nt4v204Ev();
extern void _ZN10S1503C3_nt4v205Ev();
extern void _ZN10S1503C3_nt4v206Ev();
extern void _ZN10S1503C3_nt4v207Ev();
extern void _ZN10S1503C3_nt4v208Ev();
extern void _ZN10S1503C3_nt4v209Ev();
extern void _ZN10S1503C3_nt4v210Ev();
extern void _ZN10S1503C3_nt4v211Ev();
extern void _ZN10S1503C3_nt4v212Ev();
extern void _ZN10S1503C2_nt4v213Ev();
extern void _ZN10S1503C2_nt4v214Ev();
extern void _ZN10S1503C2_nt4v215Ev();
extern void _ZN10S1503C2_nt4v216Ev();
extern void _ZN10S1503C2_nt4v217Ev();
extern void _ZN10S1503C2_nt4v218Ev();
extern void _ZN10S1503C2_nt4v219Ev();
extern void _ZN10S1503C2_nt4v220Ev();
extern void _ZN10S1503C2_nt4v221Ev();
extern void _ZN10S1503C2_nt4v222Ev();
extern void _ZN10S1503C2_nt4v223Ev();
extern void _ZN10S1503C2_nt4v224Ev();
extern void _ZN10S1503C2_nt4v225Ev();
extern void _ZN10S1503C2_nt4v226Ev();
extern void _ZN10S1503C2_nt4v227Ev();
extern void _ZN10S1503C2_nt4v228Ev();
extern void _ZN10S1503C2_nt4v229Ev();
extern void _ZN10S1503C2_nt4v230Ev();
extern void _ZN10S1503C2_nt4v231Ev();
extern void _ZN10S1503C2_nt4v232Ev();
extern void _ZN10S1503C2_nt4v233Ev();
extern void _ZN10S1503C2_nt4v234Ev();
extern void _ZN10S1503C2_nt4v235Ev();
extern void _ZN10S1503C2_nt4v236Ev();
extern void _ZN10S1503C2_nt4v237Ev();
extern void _ZN10S1503C2_nt4v238Ev();
extern void _ZN10S1503C2_nt4v239Ev();
extern void _ZN10S1503C2_nt4v240Ev();
extern void _ZN10S1503C2_nt4v241Ev();
extern void _ZN10S1503C2_nt4v242Ev();
extern void _ZN10S1503C2_nt4v243Ev();
extern void _ZN10S1503C2_nt4v244Ev();
extern void _ZN10S1503C2_nt4v245Ev();
extern void _ZN10S1503C2_nt4v246Ev();
extern void _ZN10S1503C2_nt4v247Ev();
extern void _ZN10S1503C2_nt4v248Ev();
extern void _ZN10S1503C2_nt4v249Ev();
static  VTBL_ENTRY vtc_S1503C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1503C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S1503C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v211Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v212Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v213Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v214Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v215Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v216Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v217Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v218Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v219Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v220Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v221Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v222Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v223Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v224Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v225Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v226Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v227Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v228Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v229Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v230Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v231Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v232Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v233Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v234Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v235Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v236Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v237Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v238Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v239Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v240Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v241Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v242Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v243Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v244Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v245Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v246Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v247Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v248Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v249Ev,
};
extern VTBL_ENTRY _ZTI10S1503C2_nt[];
VTBL_ENTRY *P__ZTI10S1503C2_nt = _ZTI10S1503C2_nt; 
extern  VTBL_ENTRY _ZTV10S1503C2_nt[];
Class_Descriptor cd_S1503C2_nt = {  "S1503C2_nt", // class name
  bases_S1503C2_nt, 2,
  &(vtc_S1503C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(880,656), // object size
  NSPAIRA(_ZTI10S1503C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1503C2_nt),248, //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  S1503C1  : S1503C2_nt {
  ::S1503C14_nt s1503c1f0;
  void *s1503c1f1[2];
  int s1503c1f2[2];
  void *s1503c1f3;
  virtual  ~S1503C1(); // _ZN7S1503C1D1Ev
  virtual void  v1(); // _ZN7S1503C12v1Ev
  virtual void  v2(); // _ZN7S1503C12v2Ev
  virtual void  v3(); // _ZN7S1503C12v3Ev
  virtual void  v4(); // _ZN7S1503C12v4Ev
  virtual void  v5(); // _ZN7S1503C12v5Ev
  S1503C1(); // tgen
};
//SIG(1 S1503C1) C1{ BC2{ BC3{ BC4{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 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 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 v213 v214 v215 v216 v217 v218 v219 v220 v221 v222 v223 v224 v225 v226 v227 v228 v229 v230 v231 v232 v233 v234 v235 v236 v237 v238 v239 v240 v241 v242 v243 v244 v245 v246 v247 v248 v249 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC15{ m FC16{ m FC12 FC12 Fc} FC12 Fp[2] Fc} 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 FC17{ BC18{ BC8}} FC17 FC17 FC19{ BC20{ BC8}} Fi[2] Fp[4] Fi[5] Fp Fi[2] Fp[2] Fi FC5 FC21{ m Fi[4]} Fp[2] Fi Fp Fi} vd v1 v2 v3 v4 v5 FC12 Fp[2] Fi[2] Fp}


 S1503C1 ::~S1503C1(){ note_dtor("S1503C1", this);}
void  S1503C1 ::v1(){vfunc_called(this, "_ZN7S1503C12v1Ev");}
void  S1503C1 ::v2(){vfunc_called(this, "_ZN7S1503C12v2Ev");}
void  S1503C1 ::v3(){vfunc_called(this, "_ZN7S1503C12v3Ev");}
void  S1503C1 ::v4(){vfunc_called(this, "_ZN7S1503C12v4Ev");}
void  S1503C1 ::v5(){vfunc_called(this, "_ZN7S1503C12v5Ev");}
S1503C1 ::S1503C1(){ note_ctor("S1503C1", this);} // tgen

static void Test_S1503C1()
{
  extern Class_Descriptor cd_S1503C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(116,173)];
    init_test(&cd_S1503C1, buf);
    S1503C1 *dp, &lv = *(dp=new (buf) S1503C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(920,688), "sizeof(S1503C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1503C1)");
    check_base_class_offset(lv, (S1503C4_nt*)(S1503C3_nt*)(S1503C2_nt*), 0, "S1503C1");
    check_base_class_offset(lv, (S1503C3_nt*)(S1503C2_nt*), 0, "S1503C1");
    check_base_class_offset(lv, (S1503C2_nt*), 0, "S1503C1");
    check_field_offset(lv, s1503c1f0, ABISELECT(876,656), "S1503C1.s1503c1f0");
    check_field_offset(lv, s1503c1f1, ABISELECT(888,668), "S1503C1.s1503c1f1");
    check_field_offset(lv, s1503c1f2, ABISELECT(904,676), "S1503C1.s1503c1f2");
    check_field_offset(lv, s1503c1f3, ABISELECT(912,684), "S1503C1.s1503c1f3");
    test_class_info(&lv, &cd_S1503C1);
    dp->~S1503C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1503C1(Test_S1503C1, "S1503C1", ABISELECT(920,688));

#else // __cplusplus

extern void _ZN7S1503C1C1Ev();
extern void _ZN7S1503C1D1Ev();
Name_Map name_map_S1503C1[] = {
  NSPAIR(_ZN7S1503C1C1Ev),
  NSPAIR(_ZN7S1503C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1503C4_nt;
extern VTBL_ENTRY _ZTI10S1503C4_nt[];
extern  VTBL_ENTRY _ZTV10S1503C4_nt[];
extern Class_Descriptor cd_S1503C3_nt;
extern VTBL_ENTRY _ZTI10S1503C3_nt[];
extern  VTBL_ENTRY _ZTV10S1503C3_nt[];
extern Class_Descriptor cd_S1503C2_nt;
extern VTBL_ENTRY _ZTI10S1503C2_nt[];
extern  VTBL_ENTRY _ZTV10S1503C2_nt[];
static Base_Class bases_S1503C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S1503C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1503C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1503C1[];
extern void _ZN7S1503C1D1Ev();
extern void _ZN7S1503C1D0Ev();
extern void _ZN10S1503C4_nt2v6Ev();
extern void _ZN10S1503C4_nt2v7Ev();
extern void _ZN10S1503C4_nt2v8Ev();
extern void _ZN10S1503C4_nt2v9Ev();
extern void _ZN10S1503C4_nt3v10Ev();
extern void _ZN10S1503C4_nt3v11Ev();
extern void _ZN10S1503C4_nt3v12Ev();
extern void _ZN10S1503C4_nt3v13Ev();
extern void _ZN10S1503C4_nt3v14Ev();
extern void _ZN10S1503C4_nt3v15Ev();
extern void _ZN10S1503C4_nt3v16Ev();
extern void _ZN10S1503C4_nt3v17Ev();
extern void _ZN10S1503C4_nt3v18Ev();
extern void _ZN10S1503C4_nt3v19Ev();
extern void _ZN10S1503C4_nt3v20Ev();
extern void _ZN10S1503C4_nt3v21Ev();
extern void _ZN10S1503C4_nt3v22Ev();
extern void _ZN10S1503C4_nt3v23Ev();
extern void _ZN10S1503C4_nt3v24Ev();
extern void _ZN10S1503C4_nt3v25Ev();
extern void _ZN10S1503C4_nt3v26Ev();
extern void _ZN10S1503C4_nt3v27Ev();
extern void _ZN10S1503C4_nt3v28Ev();
extern void _ZN10S1503C4_nt3v29Ev();
extern void _ZN10S1503C4_nt3v30Ev();
extern void _ZN10S1503C4_nt3v31Ev();
extern void _ZN10S1503C4_nt3v32Ev();
extern void _ZN10S1503C4_nt3v33Ev();
extern void _ZN10S1503C4_nt3v34Ev();
extern void _ZN10S1503C4_nt3v35Ev();
extern void _ZN10S1503C4_nt3v36Ev();
extern void _ZN10S1503C4_nt3v37Ev();
extern void _ZN10S1503C4_nt3v38Ev();
extern void _ZN10S1503C4_nt3v39Ev();
extern void _ZN10S1503C4_nt3v40Ev();
extern void _ZN10S1503C4_nt3v41Ev();
extern void _ZN10S1503C4_nt3v42Ev();
extern void _ZN10S1503C4_nt3v43Ev();
extern void _ZN10S1503C4_nt3v44Ev();
extern void _ZN10S1503C4_nt3v45Ev();
extern void _ZN10S1503C4_nt3v46Ev();
extern void _ZN10S1503C4_nt3v47Ev();
extern void _ZN10S1503C4_nt3v48Ev();
extern void _ZN10S1503C4_nt3v49Ev();
extern void _ZN10S1503C4_nt3v50Ev();
extern void _ZN10S1503C4_nt3v51Ev();
extern void _ZN10S1503C4_nt3v52Ev();
extern void _ZN10S1503C4_nt3v53Ev();
extern void _ZN10S1503C4_nt3v54Ev();
extern void _ZN10S1503C4_nt3v55Ev();
extern void _ZN10S1503C4_nt3v56Ev();
extern void _ZN10S1503C4_nt3v57Ev();
extern void _ZN10S1503C4_nt3v58Ev();
extern void _ZN10S1503C4_nt3v59Ev();
extern void _ZN10S1503C4_nt3v60Ev();
extern void _ZN10S1503C4_nt3v61Ev();
extern void _ZN10S1503C4_nt3v62Ev();
extern void _ZN10S1503C4_nt3v63Ev();
extern void _ZN10S1503C4_nt3v64Ev();
extern void _ZN10S1503C4_nt3v65Ev();
extern void _ZN10S1503C4_nt3v66Ev();
extern void _ZN10S1503C4_nt3v67Ev();
extern void _ZN10S1503C4_nt3v68Ev();
extern void _ZN10S1503C4_nt3v69Ev();
extern void _ZN10S1503C3_nt3v70Ev();
extern void _ZN10S1503C3_nt3v71Ev();
extern void _ZN10S1503C3_nt3v72Ev();
extern void _ZN10S1503C3_nt3v73Ev();
extern void _ZN10S1503C3_nt3v74Ev();
extern void _ZN10S1503C3_nt3v75Ev();
extern void _ZN10S1503C3_nt3v76Ev();
extern void _ZN10S1503C3_nt3v77Ev();
extern void _ZN10S1503C3_nt3v78Ev();
extern void _ZN10S1503C3_nt3v79Ev();
extern void _ZN10S1503C3_nt3v80Ev();
extern void _ZN10S1503C3_nt3v81Ev();
extern void _ZN10S1503C3_nt3v82Ev();
extern void _ZN10S1503C3_nt3v83Ev();
extern void _ZN10S1503C3_nt3v84Ev();
extern void _ZN10S1503C3_nt3v85Ev();
extern void _ZN10S1503C3_nt3v86Ev();
extern void _ZN10S1503C3_nt3v87Ev();
extern void _ZN10S1503C3_nt3v88Ev();
extern void _ZN10S1503C3_nt3v89Ev();
extern void _ZN10S1503C3_nt3v90Ev();
extern void _ZN10S1503C3_nt3v91Ev();
extern void _ZN10S1503C3_nt3v92Ev();
extern void _ZN10S1503C3_nt3v93Ev();
extern void _ZN10S1503C3_nt3v94Ev();
extern void _ZN10S1503C3_nt3v95Ev();
extern void _ZN10S1503C3_nt3v96Ev();
extern void _ZN10S1503C3_nt3v97Ev();
extern void _ZN10S1503C3_nt3v98Ev();
extern void _ZN10S1503C3_nt3v99Ev();
extern void _ZN10S1503C3_nt4v100Ev();
extern void _ZN10S1503C3_nt4v101Ev();
extern void _ZN10S1503C3_nt4v102Ev();
extern void _ZN10S1503C3_nt4v103Ev();
extern void _ZN10S1503C3_nt4v104Ev();
extern void _ZN10S1503C3_nt4v105Ev();
extern void _ZN10S1503C3_nt4v106Ev();
extern void _ZN10S1503C3_nt4v107Ev();
extern void _ZN10S1503C3_nt4v108Ev();
extern void _ZN10S1503C3_nt4v109Ev();
extern void _ZN10S1503C3_nt4v110Ev();
extern void _ZN10S1503C3_nt4v111Ev();
extern void _ZN10S1503C3_nt4v112Ev();
extern void _ZN10S1503C3_nt4v113Ev();
extern void _ZN10S1503C3_nt4v114Ev();
extern void _ZN10S1503C3_nt4v115Ev();
extern void _ZN10S1503C3_nt4v116Ev();
extern void _ZN10S1503C3_nt4v117Ev();
extern void _ZN10S1503C3_nt4v118Ev();
extern void _ZN10S1503C3_nt4v119Ev();
extern void _ZN10S1503C3_nt4v120Ev();
extern void _ZN10S1503C3_nt4v121Ev();
extern void _ZN10S1503C3_nt4v122Ev();
extern void _ZN10S1503C3_nt4v123Ev();
extern void _ZN10S1503C3_nt4v124Ev();
extern void _ZN10S1503C3_nt4v125Ev();
extern void _ZN10S1503C3_nt4v126Ev();
extern void _ZN10S1503C3_nt4v127Ev();
extern void _ZN10S1503C3_nt4v128Ev();
extern void _ZN10S1503C3_nt4v129Ev();
extern void _ZN10S1503C3_nt4v130Ev();
extern void _ZN10S1503C3_nt4v131Ev();
extern void _ZN10S1503C3_nt4v132Ev();
extern void _ZN10S1503C3_nt4v133Ev();
extern void _ZN10S1503C3_nt4v134Ev();
extern void _ZN10S1503C3_nt4v135Ev();
extern void _ZN10S1503C3_nt4v136Ev();
extern void _ZN10S1503C3_nt4v137Ev();
extern void _ZN10S1503C3_nt4v138Ev();
extern void _ZN10S1503C3_nt4v139Ev();
extern void _ZN10S1503C3_nt4v140Ev();
extern void _ZN10S1503C3_nt4v141Ev();
extern void _ZN10S1503C3_nt4v142Ev();
extern void _ZN10S1503C3_nt4v143Ev();
extern void _ZN10S1503C3_nt4v144Ev();
extern void _ZN10S1503C3_nt4v145Ev();
extern void _ZN10S1503C3_nt4v146Ev();
extern void _ZN10S1503C3_nt4v147Ev();
extern void _ZN10S1503C3_nt4v148Ev();
extern void _ZN10S1503C3_nt4v149Ev();
extern void _ZN10S1503C3_nt4v150Ev();
extern void _ZN10S1503C3_nt4v151Ev();
extern void _ZN10S1503C3_nt4v152Ev();
extern void _ZN10S1503C3_nt4v153Ev();
extern void _ZN10S1503C3_nt4v154Ev();
extern void _ZN10S1503C3_nt4v155Ev();
extern void _ZN10S1503C3_nt4v156Ev();
extern void _ZN10S1503C3_nt4v157Ev();
extern void _ZN10S1503C3_nt4v158Ev();
extern void _ZN10S1503C3_nt4v159Ev();
extern void _ZN10S1503C3_nt4v160Ev();
extern void _ZN10S1503C3_nt4v161Ev();
extern void _ZN10S1503C3_nt4v162Ev();
extern void _ZN10S1503C3_nt4v163Ev();
extern void _ZN10S1503C3_nt4v164Ev();
extern void _ZN10S1503C3_nt4v165Ev();
extern void _ZN10S1503C3_nt4v166Ev();
extern void _ZN10S1503C3_nt4v167Ev();
extern void _ZN10S1503C3_nt4v168Ev();
extern void _ZN10S1503C3_nt4v169Ev();
extern void _ZN10S1503C3_nt4v170Ev();
extern void _ZN10S1503C3_nt4v171Ev();
extern void _ZN10S1503C3_nt4v172Ev();
extern void _ZN10S1503C3_nt4v173Ev();
extern void _ZN10S1503C3_nt4v174Ev();
extern void _ZN10S1503C3_nt4v175Ev();
extern void _ZN10S1503C3_nt4v176Ev();
extern void _ZN10S1503C3_nt4v177Ev();
extern void _ZN10S1503C3_nt4v178Ev();
extern void _ZN10S1503C3_nt4v179Ev();
extern void _ZN10S1503C3_nt4v180Ev();
extern void _ZN10S1503C3_nt4v181Ev();
extern void _ZN10S1503C3_nt4v182Ev();
extern void _ZN10S1503C3_nt4v183Ev();
extern void _ZN10S1503C3_nt4v184Ev();
extern void _ZN10S1503C3_nt4v185Ev();
extern void _ZN10S1503C3_nt4v186Ev();
extern void _ZN10S1503C3_nt4v187Ev();
extern void _ZN10S1503C3_nt4v188Ev();
extern void _ZN10S1503C3_nt4v189Ev();
extern void _ZN10S1503C3_nt4v190Ev();
extern void _ZN10S1503C3_nt4v191Ev();
extern void _ZN10S1503C3_nt4v192Ev();
extern void _ZN10S1503C3_nt4v193Ev();
extern void _ZN10S1503C3_nt4v194Ev();
extern void _ZN10S1503C3_nt4v195Ev();
extern void _ZN10S1503C3_nt4v196Ev();
extern void _ZN10S1503C3_nt4v197Ev();
extern void _ZN10S1503C3_nt4v198Ev();
extern void _ZN10S1503C3_nt4v199Ev();
extern void _ZN10S1503C3_nt4v200Ev();
extern void _ZN10S1503C3_nt4v201Ev();
extern void _ZN10S1503C3_nt4v202Ev();
extern void _ZN10S1503C3_nt4v203Ev();
extern void _ZN10S1503C3_nt4v204Ev();
extern void _ZN10S1503C3_nt4v205Ev();
extern void _ZN10S1503C3_nt4v206Ev();
extern void _ZN10S1503C3_nt4v207Ev();
extern void _ZN10S1503C3_nt4v208Ev();
extern void _ZN10S1503C3_nt4v209Ev();
extern void _ZN10S1503C3_nt4v210Ev();
extern void _ZN10S1503C3_nt4v211Ev();
extern void _ZN10S1503C3_nt4v212Ev();
extern void _ZN10S1503C2_nt4v213Ev();
extern void _ZN10S1503C2_nt4v214Ev();
extern void _ZN10S1503C2_nt4v215Ev();
extern void _ZN10S1503C2_nt4v216Ev();
extern void _ZN10S1503C2_nt4v217Ev();
extern void _ZN10S1503C2_nt4v218Ev();
extern void _ZN10S1503C2_nt4v219Ev();
extern void _ZN10S1503C2_nt4v220Ev();
extern void _ZN10S1503C2_nt4v221Ev();
extern void _ZN10S1503C2_nt4v222Ev();
extern void _ZN10S1503C2_nt4v223Ev();
extern void _ZN10S1503C2_nt4v224Ev();
extern void _ZN10S1503C2_nt4v225Ev();
extern void _ZN10S1503C2_nt4v226Ev();
extern void _ZN10S1503C2_nt4v227Ev();
extern void _ZN10S1503C2_nt4v228Ev();
extern void _ZN10S1503C2_nt4v229Ev();
extern void _ZN10S1503C2_nt4v230Ev();
extern void _ZN10S1503C2_nt4v231Ev();
extern void _ZN10S1503C2_nt4v232Ev();
extern void _ZN10S1503C2_nt4v233Ev();
extern void _ZN10S1503C2_nt4v234Ev();
extern void _ZN10S1503C2_nt4v235Ev();
extern void _ZN10S1503C2_nt4v236Ev();
extern void _ZN10S1503C2_nt4v237Ev();
extern void _ZN10S1503C2_nt4v238Ev();
extern void _ZN10S1503C2_nt4v239Ev();
extern void _ZN10S1503C2_nt4v240Ev();
extern void _ZN10S1503C2_nt4v241Ev();
extern void _ZN10S1503C2_nt4v242Ev();
extern void _ZN10S1503C2_nt4v243Ev();
extern void _ZN10S1503C2_nt4v244Ev();
extern void _ZN10S1503C2_nt4v245Ev();
extern void _ZN10S1503C2_nt4v246Ev();
extern void _ZN10S1503C2_nt4v247Ev();
extern void _ZN10S1503C2_nt4v248Ev();
extern void _ZN10S1503C2_nt4v249Ev();
extern void _ZN7S1503C12v1Ev();
extern void _ZN7S1503C12v2Ev();
extern void _ZN7S1503C12v3Ev();
extern void _ZN7S1503C12v4Ev();
extern void _ZN7S1503C12v5Ev();
static  VTBL_ENTRY vtc_S1503C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1503C1[0]),
  (VTBL_ENTRY)&_ZN7S1503C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1503C1D0Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v211Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v212Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v213Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v214Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v215Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v216Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v217Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v218Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v219Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v220Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v221Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v222Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v223Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v224Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v225Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v226Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v227Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v228Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v229Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v230Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v231Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v232Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v233Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v234Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v235Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v236Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v237Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v238Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v239Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v240Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v241Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v242Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v243Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v244Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v245Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v246Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v247Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v248Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v249Ev,
  (VTBL_ENTRY)&_ZN7S1503C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1503C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1503C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1503C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1503C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1503C1[];
extern  VTBL_ENTRY _ZTV7S1503C1[];
Class_Descriptor cd_S1503C1 = {  "S1503C1", // class name
  bases_S1503C1, 3,
  &(vtc_S1503C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(920,688), // object size
  NSPAIRA(_ZTI7S1503C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1503C1),253, //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  S629C5  {
  int s629c5f0;
  __tsi64 s629c5f1;
  void *s629c5f2[4];
  int s629c5f3[2];
  void *s629c5f4;
  ::S1503C5_nt s629c5f5;
  void *s629c5f6[2];
  virtual  ~S629C5(); // _ZN6S629C5D1Ev
  virtual void  v5(); // _ZN6S629C52v5Ev
  virtual void  v6(); // _ZN6S629C52v6Ev
  virtual void  v7(); // _ZN6S629C52v7Ev
  virtual void  v8(); // _ZN6S629C52v8Ev
  virtual void  v9(); // _ZN6S629C52v9Ev
  virtual void  v10(); // _ZN6S629C53v10Ev
  virtual void  v11(); // _ZN6S629C53v11Ev
  virtual void  v12(); // _ZN6S629C53v12Ev
  virtual void  v13(); // _ZN6S629C53v13Ev
  virtual void  v14(); // _ZN6S629C53v14Ev
  virtual void  v15(); // _ZN6S629C53v15Ev
  virtual void  v16(); // _ZN6S629C53v16Ev
  virtual void  v17(); // _ZN6S629C53v17Ev
  virtual void  v18(); // _ZN6S629C53v18Ev
  virtual void  v19(); // _ZN6S629C53v19Ev
  virtual void  v20(); // _ZN6S629C53v20Ev
  virtual void  v21(); // _ZN6S629C53v21Ev
  virtual void  v22(); // _ZN6S629C53v22Ev
  virtual void  v23(); // _ZN6S629C53v23Ev
  virtual void  v24(); // _ZN6S629C53v24Ev
  virtual void  v25(); // _ZN6S629C53v25Ev
  virtual void  v26(); // _ZN6S629C53v26Ev
  virtual void  v27(); // _ZN6S629C53v27Ev
  virtual void  v28(); // _ZN6S629C53v28Ev
  virtual void  v29(); // _ZN6S629C53v29Ev
  virtual void  v30(); // _ZN6S629C53v30Ev
  virtual void  v31(); // _ZN6S629C53v31Ev
  virtual void  v32(); // _ZN6S629C53v32Ev
  virtual void  v33(); // _ZN6S629C53v33Ev
  virtual void  v34(); // _ZN6S629C53v34Ev
  virtual void  v35(); // _ZN6S629C53v35Ev
  virtual void  v36(); // _ZN6S629C53v36Ev
  virtual void  v37(); // _ZN6S629C53v37Ev
  virtual void  v38(); // _ZN6S629C53v38Ev
  virtual void  v39(); // _ZN6S629C53v39Ev
  virtual void  v40(); // _ZN6S629C53v40Ev
  virtual void  v41(); // _ZN6S629C53v41Ev
  virtual void  v42(); // _ZN6S629C53v42Ev
  virtual void  v43(); // _ZN6S629C53v43Ev
  virtual void  v44(); // _ZN6S629C53v44Ev
  virtual void  v45(); // _ZN6S629C53v45Ev
  virtual void  v46(); // _ZN6S629C53v46Ev
  virtual void  v47(); // _ZN6S629C53v47Ev
  virtual void  v48(); // _ZN6S629C53v48Ev
  virtual void  v49(); // _ZN6S629C53v49Ev
  virtual void  v50(); // _ZN6S629C53v50Ev
  virtual void  v51(); // _ZN6S629C53v51Ev
  virtual void  v52(); // _ZN6S629C53v52Ev
  virtual void  v53(); // _ZN6S629C53v53Ev
  virtual void  v54(); // _ZN6S629C53v54Ev
  virtual void  v55(); // _ZN6S629C53v55Ev
  virtual void  v56(); // _ZN6S629C53v56Ev
  virtual void  v57(); // _ZN6S629C53v57Ev
  virtual void  v58(); // _ZN6S629C53v58Ev
  virtual void  v59(); // _ZN6S629C53v59Ev
  virtual void  v60(); // _ZN6S629C53v60Ev
  virtual void  v61(); // _ZN6S629C53v61Ev
  virtual void  v62(); // _ZN6S629C53v62Ev
  virtual void  v63(); // _ZN6S629C53v63Ev
  virtual void  v64(); // _ZN6S629C53v64Ev
  virtual void  v65(); // _ZN6S629C53v65Ev
  virtual void  v66(); // _ZN6S629C53v66Ev
  virtual void  v67(); // _ZN6S629C53v67Ev
  virtual void  v68(); // _ZN6S629C53v68Ev
  S629C5(); // tgen
};
//SIG(-1 S629C5) 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]}


 S629C5 ::~S629C5(){ note_dtor("S629C5", this);}
void  S629C5 ::v5(){vfunc_called(this, "_ZN6S629C52v5Ev");}
void  S629C5 ::v6(){vfunc_called(this, "_ZN6S629C52v6Ev");}
void  S629C5 ::v7(){vfunc_called(this, "_ZN6S629C52v7Ev");}
void  S629C5 ::v8(){vfunc_called(this, "_ZN6S629C52v8Ev");}
void  S629C5 ::v9(){vfunc_called(this, "_ZN6S629C52v9Ev");}
void  S629C5 ::v10(){vfunc_called(this, "_ZN6S629C53v10Ev");}
void  S629C5 ::v11(){vfunc_called(this, "_ZN6S629C53v11Ev");}
void  S629C5 ::v12(){vfunc_called(this, "_ZN6S629C53v12Ev");}
void  S629C5 ::v13(){vfunc_called(this, "_ZN6S629C53v13Ev");}
void  S629C5 ::v14(){vfunc_called(this, "_ZN6S629C53v14Ev");}
void  S629C5 ::v15(){vfunc_called(this, "_ZN6S629C53v15Ev");}
void  S629C5 ::v16(){vfunc_called(this, "_ZN6S629C53v16Ev");}
void  S629C5 ::v17(){vfunc_called(this, "_ZN6S629C53v17Ev");}
void  S629C5 ::v18(){vfunc_called(this, "_ZN6S629C53v18Ev");}
void  S629C5 ::v19(){vfunc_called(this, "_ZN6S629C53v19Ev");}
void  S629C5 ::v20(){vfunc_called(this, "_ZN6S629C53v20Ev");}
void  S629C5 ::v21(){vfunc_called(this, "_ZN6S629C53v21Ev");}
void  S629C5 ::v22(){vfunc_called(this, "_ZN6S629C53v22Ev");}
void  S629C5 ::v23(){vfunc_called(this, "_ZN6S629C53v23Ev");}
void  S629C5 ::v24(){vfunc_called(this, "_ZN6S629C53v24Ev");}
void  S629C5 ::v25(){vfunc_called(this, "_ZN6S629C53v25Ev");}
void  S629C5 ::v26(){vfunc_called(this, "_ZN6S629C53v26Ev");}
void  S629C5 ::v27(){vfunc_called(this, "_ZN6S629C53v27Ev");}
void  S629C5 ::v28(){vfunc_called(this, "_ZN6S629C53v28Ev");}
void  S629C5 ::v29(){vfunc_called(this, "_ZN6S629C53v29Ev");}
void  S629C5 ::v30(){vfunc_called(this, "_ZN6S629C53v30Ev");}
void  S629C5 ::v31(){vfunc_called(this, "_ZN6S629C53v31Ev");}
void  S629C5 ::v32(){vfunc_called(this, "_ZN6S629C53v32Ev");}
void  S629C5 ::v33(){vfunc_called(this, "_ZN6S629C53v33Ev");}
void  S629C5 ::v34(){vfunc_called(this, "_ZN6S629C53v34Ev");}
void  S629C5 ::v35(){vfunc_called(this, "_ZN6S629C53v35Ev");}
void  S629C5 ::v36(){vfunc_called(this, "_ZN6S629C53v36Ev");}
void  S629C5 ::v37(){vfunc_called(this, "_ZN6S629C53v37Ev");}
void  S629C5 ::v38(){vfunc_called(this, "_ZN6S629C53v38Ev");}
void  S629C5 ::v39(){vfunc_called(this, "_ZN6S629C53v39Ev");}
void  S629C5 ::v40(){vfunc_called(this, "_ZN6S629C53v40Ev");}
void  S629C5 ::v41(){vfunc_called(this, "_ZN6S629C53v41Ev");}
void  S629C5 ::v42(){vfunc_called(this, "_ZN6S629C53v42Ev");}
void  S629C5 ::v43(){vfunc_called(this, "_ZN6S629C53v43Ev");}
void  S629C5 ::v44(){vfunc_called(this, "_ZN6S629C53v44Ev");}
void  S629C5 ::v45(){vfunc_called(this, "_ZN6S629C53v45Ev");}
void  S629C5 ::v46(){vfunc_called(this, "_ZN6S629C53v46Ev");}
void  S629C5 ::v47(){vfunc_called(this, "_ZN6S629C53v47Ev");}
void  S629C5 ::v48(){vfunc_called(this, "_ZN6S629C53v48Ev");}
void  S629C5 ::v49(){vfunc_called(this, "_ZN6S629C53v49Ev");}
void  S629C5 ::v50(){vfunc_called(this, "_ZN6S629C53v50Ev");}
void  S629C5 ::v51(){vfunc_called(this, "_ZN6S629C53v51Ev");}
void  S629C5 ::v52(){vfunc_called(this, "_ZN6S629C53v52Ev");}
void  S629C5 ::v53(){vfunc_called(this, "_ZN6S629C53v53Ev");}
void  S629C5 ::v54(){vfunc_called(this, "_ZN6S629C53v54Ev");}
void  S629C5 ::v55(){vfunc_called(this, "_ZN6S629C53v55Ev");}
void  S629C5 ::v56(){vfunc_called(this, "_ZN6S629C53v56Ev");}
void  S629C5 ::v57(){vfunc_called(this, "_ZN6S629C53v57Ev");}
void  S629C5 ::v58(){vfunc_called(this, "_ZN6S629C53v58Ev");}
void  S629C5 ::v59(){vfunc_called(this, "_ZN6S629C53v59Ev");}
void  S629C5 ::v60(){vfunc_called(this, "_ZN6S629C53v60Ev");}
void  S629C5 ::v61(){vfunc_called(this, "_ZN6S629C53v61Ev");}
void  S629C5 ::v62(){vfunc_called(this, "_ZN6S629C53v62Ev");}
void  S629C5 ::v63(){vfunc_called(this, "_ZN6S629C53v63Ev");}
void  S629C5 ::v64(){vfunc_called(this, "_ZN6S629C53v64Ev");}
void  S629C5 ::v65(){vfunc_called(this, "_ZN6S629C53v65Ev");}
void  S629C5 ::v66(){vfunc_called(this, "_ZN6S629C53v66Ev");}
void  S629C5 ::v67(){vfunc_called(this, "_ZN6S629C53v67Ev");}
void  S629C5 ::v68(){vfunc_called(this, "_ZN6S629C53v68Ev");}
S629C5 ::S629C5(){ note_ctor("S629C5", this);} // tgen

static void Test_S629C5()
{
  extern Class_Descriptor cd_S629C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S629C5, buf);
    S629C5 *dp, &lv = *(dp=new (buf) S629C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S629C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S629C5)");
    check_field_offset(lv, s629c5f0, ABISELECT(8,4), "S629C5.s629c5f0");
    check_field_offset(lv, s629c5f1, ABISELECT(16,8), "S629C5.s629c5f1");
    check_field_offset(lv, s629c5f2, ABISELECT(24,16), "S629C5.s629c5f2");
    check_field_offset(lv, s629c5f3, ABISELECT(56,32), "S629C5.s629c5f3");
    check_field_offset(lv, s629c5f4, ABISELECT(64,40), "S629C5.s629c5f4");
    check_field_offset(lv, s629c5f5, ABISELECT(72,44), "S629C5.s629c5f5");
    check_field_offset(lv, s629c5f6, ABISELECT(80,52), "S629C5.s629c5f6");
    test_class_info(&lv, &cd_S629C5);
    dp->~S629C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS629C5(Test_S629C5, "S629C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S629C5C1Ev();
extern void _ZN6S629C5D1Ev();
Name_Map name_map_S629C5[] = {
  NSPAIR(_ZN6S629C5C1Ev),
  NSPAIR(_ZN6S629C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S629C5[];
extern void _ZN6S629C5D1Ev();
extern void _ZN6S629C5D0Ev();
extern void _ZN6S629C52v5Ev();
extern void _ZN6S629C52v6Ev();
extern void _ZN6S629C52v7Ev();
extern void _ZN6S629C52v8Ev();
extern void _ZN6S629C52v9Ev();
extern void _ZN6S629C53v10Ev();
extern void _ZN6S629C53v11Ev();
extern void _ZN6S629C53v12Ev();
extern void _ZN6S629C53v13Ev();
extern void _ZN6S629C53v14Ev();
extern void _ZN6S629C53v15Ev();
extern void _ZN6S629C53v16Ev();
extern void _ZN6S629C53v17Ev();
extern void _ZN6S629C53v18Ev();
extern void _ZN6S629C53v19Ev();
extern void _ZN6S629C53v20Ev();
extern void _ZN6S629C53v21Ev();
extern void _ZN6S629C53v22Ev();
extern void _ZN6S629C53v23Ev();
extern void _ZN6S629C53v24Ev();
extern void _ZN6S629C53v25Ev();
extern void _ZN6S629C53v26Ev();
extern void _ZN6S629C53v27Ev();
extern void _ZN6S629C53v28Ev();
extern void _ZN6S629C53v29Ev();
extern void _ZN6S629C53v30Ev();
extern void _ZN6S629C53v31Ev();
extern void _ZN6S629C53v32Ev();
extern void _ZN6S629C53v33Ev();
extern void _ZN6S629C53v34Ev();
extern void _ZN6S629C53v35Ev();
extern void _ZN6S629C53v36Ev();
extern void _ZN6S629C53v37Ev();
extern void _ZN6S629C53v38Ev();
extern void _ZN6S629C53v39Ev();
extern void _ZN6S629C53v40Ev();
extern void _ZN6S629C53v41Ev();
extern void _ZN6S629C53v42Ev();
extern void _ZN6S629C53v43Ev();
extern void _ZN6S629C53v44Ev();
extern void _ZN6S629C53v45Ev();
extern void _ZN6S629C53v46Ev();
extern void _ZN6S629C53v47Ev();
extern void _ZN6S629C53v48Ev();
extern void _ZN6S629C53v49Ev();
extern void _ZN6S629C53v50Ev();
extern void _ZN6S629C53v51Ev();
extern void _ZN6S629C53v52Ev();
extern void _ZN6S629C53v53Ev();
extern void _ZN6S629C53v54Ev();
extern void _ZN6S629C53v55Ev();
extern void _ZN6S629C53v56Ev();
extern void _ZN6S629C53v57Ev();
extern void _ZN6S629C53v58Ev();
extern void _ZN6S629C53v59Ev();
extern void _ZN6S629C53v60Ev();
extern void _ZN6S629C53v61Ev();
extern void _ZN6S629C53v62Ev();
extern void _ZN6S629C53v63Ev();
extern void _ZN6S629C53v64Ev();
extern void _ZN6S629C53v65Ev();
extern void _ZN6S629C53v66Ev();
extern void _ZN6S629C53v67Ev();
extern void _ZN6S629C53v68Ev();
static  VTBL_ENTRY vtc_S629C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S629C5[0]),
  (VTBL_ENTRY)&_ZN6S629C5D1Ev,
  (VTBL_ENTRY)&_ZN6S629C5D0Ev,
  (VTBL_ENTRY)&_ZN6S629C52v5Ev,
  (VTBL_ENTRY)&_ZN6S629C52v6Ev,
  (VTBL_ENTRY)&_ZN6S629C52v7Ev,
  (VTBL_ENTRY)&_ZN6S629C52v8Ev,
  (VTBL_ENTRY)&_ZN6S629C52v9Ev,
  (VTBL_ENTRY)&_ZN6S629C53v10Ev,
  (VTBL_ENTRY)&_ZN6S629C53v11Ev,
  (VTBL_ENTRY)&_ZN6S629C53v12Ev,
  (VTBL_ENTRY)&_ZN6S629C53v13Ev,
  (VTBL_ENTRY)&_ZN6S629C53v14Ev,
  (VTBL_ENTRY)&_ZN6S629C53v15Ev,
  (VTBL_ENTRY)&_ZN6S629C53v16Ev,
  (VTBL_ENTRY)&_ZN6S629C53v17Ev,
  (VTBL_ENTRY)&_ZN6S629C53v18Ev,
  (VTBL_ENTRY)&_ZN6S629C53v19Ev,
  (VTBL_ENTRY)&_ZN6S629C53v20Ev,
  (VTBL_ENTRY)&_ZN6S629C53v21Ev,
  (VTBL_ENTRY)&_ZN6S629C53v22Ev,
  (VTBL_ENTRY)&_ZN6S629C53v23Ev,
  (VTBL_ENTRY)&_ZN6S629C53v24Ev,
  (VTBL_ENTRY)&_ZN6S629C53v25Ev,
  (VTBL_ENTRY)&_ZN6S629C53v26Ev,
  (VTBL_ENTRY)&_ZN6S629C53v27Ev,
  (VTBL_ENTRY)&_ZN6S629C53v28Ev,
  (VTBL_ENTRY)&_ZN6S629C53v29Ev,
  (VTBL_ENTRY)&_ZN6S629C53v30Ev,
  (VTBL_ENTRY)&_ZN6S629C53v31Ev,
  (VTBL_ENTRY)&_ZN6S629C53v32Ev,
  (VTBL_ENTRY)&_ZN6S629C53v33Ev,
  (VTBL_ENTRY)&_ZN6S629C53v34Ev,
  (VTBL_ENTRY)&_ZN6S629C53v35Ev,
  (VTBL_ENTRY)&_ZN6S629C53v36Ev,
  (VTBL_ENTRY)&_ZN6S629C53v37Ev,
  (VTBL_ENTRY)&_ZN6S629C53v38Ev,
  (VTBL_ENTRY)&_ZN6S629C53v39Ev,
  (VTBL_ENTRY)&_ZN6S629C53v40Ev,
  (VTBL_ENTRY)&_ZN6S629C53v41Ev,
  (VTBL_ENTRY)&_ZN6S629C53v42Ev,
  (VTBL_ENTRY)&_ZN6S629C53v43Ev,
  (VTBL_ENTRY)&_ZN6S629C53v44Ev,
  (VTBL_ENTRY)&_ZN6S629C53v45Ev,
  (VTBL_ENTRY)&_ZN6S629C53v46Ev,
  (VTBL_ENTRY)&_ZN6S629C53v47Ev,
  (VTBL_ENTRY)&_ZN6S629C53v48Ev,
  (VTBL_ENTRY)&_ZN6S629C53v49Ev,
  (VTBL_ENTRY)&_ZN6S629C53v50Ev,
  (VTBL_ENTRY)&_ZN6S629C53v51Ev,
  (VTBL_ENTRY)&_ZN6S629C53v52Ev,
  (VTBL_ENTRY)&_ZN6S629C53v53Ev,
  (VTBL_ENTRY)&_ZN6S629C53v54Ev,
  (VTBL_ENTRY)&_ZN6S629C53v55Ev,
  (VTBL_ENTRY)&_ZN6S629C53v56Ev,
  (VTBL_ENTRY)&_ZN6S629C53v57Ev,
  (VTBL_ENTRY)&_ZN6S629C53v58Ev,
  (VTBL_ENTRY)&_ZN6S629C53v59Ev,
  (VTBL_ENTRY)&_ZN6S629C53v60Ev,
  (VTBL_ENTRY)&_ZN6S629C53v61Ev,
  (VTBL_ENTRY)&_ZN6S629C53v62Ev,
  (VTBL_ENTRY)&_ZN6S629C53v63Ev,
  (VTBL_ENTRY)&_ZN6S629C53v64Ev,
  (VTBL_ENTRY)&_ZN6S629C53v65Ev,
  (VTBL_ENTRY)&_ZN6S629C53v66Ev,
  (VTBL_ENTRY)&_ZN6S629C53v67Ev,
  (VTBL_ENTRY)&_ZN6S629C53v68Ev,
};
extern VTBL_ENTRY _ZTI6S629C5[];
extern  VTBL_ENTRY _ZTV6S629C5[];
Class_Descriptor cd_S629C5 = {  "S629C5", // class name
  0,0,//no base classes
  &(vtc_S629C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S629C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S629C5),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  S629C4_nt  : S629C5 {
  void *s629c4f0;
  ::S1503C5_nt s629c4f1;
  virtual  ~S629C4_nt(); // _ZN9S629C4_ntD1Ev
  virtual void  v69(); // _ZN9S629C4_nt3v69Ev
  virtual void  v70(); // _ZN9S629C4_nt3v70Ev
  virtual void  v71(); // _ZN9S629C4_nt3v71Ev
  virtual void  v72(); // _ZN9S629C4_nt3v72Ev
  virtual void  v73(); // _ZN9S629C4_nt3v73Ev
  S629C4_nt(); // tgen
};
//SIG(-1 S629C4_nt) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 Fp FC3}


 S629C4_nt ::~S629C4_nt(){ note_dtor("S629C4_nt", this);}
void  S629C4_nt ::v69(){vfunc_called(this, "_ZN9S629C4_nt3v69Ev");}
void  S629C4_nt ::v70(){vfunc_called(this, "_ZN9S629C4_nt3v70Ev");}
void  S629C4_nt ::v71(){vfunc_called(this, "_ZN9S629C4_nt3v71Ev");}
void  S629C4_nt ::v72(){vfunc_called(this, "_ZN9S629C4_nt3v72Ev");}
void  S629C4_nt ::v73(){vfunc_called(this, "_ZN9S629C4_nt3v73Ev");}
S629C4_nt ::S629C4_nt(){ note_ctor("S629C4_nt", this);} // tgen

//skip512 S629C4_nt

#else // __cplusplus

extern void _ZN9S629C4_ntC1Ev();
extern void _ZN9S629C4_ntD1Ev();
Name_Map name_map_S629C4_nt[] = {
  NSPAIR(_ZN9S629C4_ntC1Ev),
  NSPAIR(_ZN9S629C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S629C5;
extern VTBL_ENTRY _ZTI6S629C5[];
extern  VTBL_ENTRY _ZTV6S629C5[];
static Base_Class bases_S629C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S629C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S629C4_nt[];
extern void _ZN9S629C4_ntD1Ev();
extern void _ZN9S629C4_ntD0Ev();
extern void _ZN6S629C52v5Ev();
extern void _ZN6S629C52v6Ev();
extern void _ZN6S629C52v7Ev();
extern void _ZN6S629C52v8Ev();
extern void _ZN6S629C52v9Ev();
extern void _ZN6S629C53v10Ev();
extern void _ZN6S629C53v11Ev();
extern void _ZN6S629C53v12Ev();
extern void _ZN6S629C53v13Ev();
extern void _ZN6S629C53v14Ev();
extern void _ZN6S629C53v15Ev();
extern void _ZN6S629C53v16Ev();
extern void _ZN6S629C53v17Ev();
extern void _ZN6S629C53v18Ev();
extern void _ZN6S629C53v19Ev();
extern void _ZN6S629C53v20Ev();
extern void _ZN6S629C53v21Ev();
extern void _ZN6S629C53v22Ev();
extern void _ZN6S629C53v23Ev();
extern void _ZN6S629C53v24Ev();
extern void _ZN6S629C53v25Ev();
extern void _ZN6S629C53v26Ev();
extern void _ZN6S629C53v27Ev();
extern void _ZN6S629C53v28Ev();
extern void _ZN6S629C53v29Ev();
extern void _ZN6S629C53v30Ev();
extern void _ZN6S629C53v31Ev();
extern void _ZN6S629C53v32Ev();
extern void _ZN6S629C53v33Ev();
extern void _ZN6S629C53v34Ev();
extern void _ZN6S629C53v35Ev();
extern void _ZN6S629C53v36Ev();
extern void _ZN6S629C53v37Ev();
extern void _ZN6S629C53v38Ev();
extern void _ZN6S629C53v39Ev();
extern void _ZN6S629C53v40Ev();
extern void _ZN6S629C53v41Ev();
extern void _ZN6S629C53v42Ev();
extern void _ZN6S629C53v43Ev();
extern void _ZN6S629C53v44Ev();
extern void _ZN6S629C53v45Ev();
extern void _ZN6S629C53v46Ev();
extern void _ZN6S629C53v47Ev();
extern void _ZN6S629C53v48Ev();
extern void _ZN6S629C53v49Ev();
extern void _ZN6S629C53v50Ev();
extern void _ZN6S629C53v51Ev();
extern void _ZN6S629C53v52Ev();
extern void _ZN6S629C53v53Ev();
extern void _ZN6S629C53v54Ev();
extern void _ZN6S629C53v55Ev();
extern void _ZN6S629C53v56Ev();
extern void _ZN6S629C53v57Ev();
extern void _ZN6S629C53v58Ev();
extern void _ZN6S629C53v59Ev();
extern void _ZN6S629C53v60Ev();
extern void _ZN6S629C53v61Ev();
extern void _ZN6S629C53v62Ev();
extern void _ZN6S629C53v63Ev();
extern void _ZN6S629C53v64Ev();
extern void _ZN6S629C53v65Ev();
extern void _ZN6S629C53v66Ev();
extern void _ZN6S629C53v67Ev();
extern void _ZN6S629C53v68Ev();
extern void _ZN9S629C4_nt3v69Ev();
extern void _ZN9S629C4_nt3v70Ev();
extern void _ZN9S629C4_nt3v71Ev();
extern void _ZN9S629C4_nt3v72Ev();
extern void _ZN9S629C4_nt3v73Ev();
static  VTBL_ENTRY vtc_S629C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S629C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S629C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S629C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S629C52v5Ev,
  (VTBL_ENTRY)&_ZN6S629C52v6Ev,
  (VTBL_ENTRY)&_ZN6S629C52v7Ev,
  (VTBL_ENTRY)&_ZN6S629C52v8Ev,
  (VTBL_ENTRY)&_ZN6S629C52v9Ev,
  (VTBL_ENTRY)&_ZN6S629C53v10Ev,
  (VTBL_ENTRY)&_ZN6S629C53v11Ev,
  (VTBL_ENTRY)&_ZN6S629C53v12Ev,
  (VTBL_ENTRY)&_ZN6S629C53v13Ev,
  (VTBL_ENTRY)&_ZN6S629C53v14Ev,
  (VTBL_ENTRY)&_ZN6S629C53v15Ev,
  (VTBL_ENTRY)&_ZN6S629C53v16Ev,
  (VTBL_ENTRY)&_ZN6S629C53v17Ev,
  (VTBL_ENTRY)&_ZN6S629C53v18Ev,
  (VTBL_ENTRY)&_ZN6S629C53v19Ev,
  (VTBL_ENTRY)&_ZN6S629C53v20Ev,
  (VTBL_ENTRY)&_ZN6S629C53v21Ev,
  (VTBL_ENTRY)&_ZN6S629C53v22Ev,
  (VTBL_ENTRY)&_ZN6S629C53v23Ev,
  (VTBL_ENTRY)&_ZN6S629C53v24Ev,
  (VTBL_ENTRY)&_ZN6S629C53v25Ev,
  (VTBL_ENTRY)&_ZN6S629C53v26Ev,
  (VTBL_ENTRY)&_ZN6S629C53v27Ev,
  (VTBL_ENTRY)&_ZN6S629C53v28Ev,
  (VTBL_ENTRY)&_ZN6S629C53v29Ev,
  (VTBL_ENTRY)&_ZN6S629C53v30Ev,
  (VTBL_ENTRY)&_ZN6S629C53v31Ev,
  (VTBL_ENTRY)&_ZN6S629C53v32Ev,
  (VTBL_ENTRY)&_ZN6S629C53v33Ev,
  (VTBL_ENTRY)&_ZN6S629C53v34Ev,
  (VTBL_ENTRY)&_ZN6S629C53v35Ev,
  (VTBL_ENTRY)&_ZN6S629C53v36Ev,
  (VTBL_ENTRY)&_ZN6S629C53v37Ev,
  (VTBL_ENTRY)&_ZN6S629C53v38Ev,
  (VTBL_ENTRY)&_ZN6S629C53v39Ev,
  (VTBL_ENTRY)&_ZN6S629C53v40Ev,
  (VTBL_ENTRY)&_ZN6S629C53v41Ev,
  (VTBL_ENTRY)&_ZN6S629C53v42Ev,
  (VTBL_ENTRY)&_ZN6S629C53v43Ev,
  (VTBL_ENTRY)&_ZN6S629C53v44Ev,
  (VTBL_ENTRY)&_ZN6S629C53v45Ev,
  (VTBL_ENTRY)&_ZN6S629C53v46Ev,
  (VTBL_ENTRY)&_ZN6S629C53v47Ev,
  (VTBL_ENTRY)&_ZN6S629C53v48Ev,
  (VTBL_ENTRY)&_ZN6S629C53v49Ev,
  (VTBL_ENTRY)&_ZN6S629C53v50Ev,
  (VTBL_ENTRY)&_ZN6S629C53v51Ev,
  (VTBL_ENTRY)&_ZN6S629C53v52Ev,
  (VTBL_ENTRY)&_ZN6S629C53v53Ev,
  (VTBL_ENTRY)&_ZN6S629C53v54Ev,
  (VTBL_ENTRY)&_ZN6S629C53v55Ev,
  (VTBL_ENTRY)&_ZN6S629C53v56Ev,
  (VTBL_ENTRY)&_ZN6S629C53v57Ev,
  (VTBL_ENTRY)&_ZN6S629C53v58Ev,
  (VTBL_ENTRY)&_ZN6S629C53v59Ev,
  (VTBL_ENTRY)&_ZN6S629C53v60Ev,
  (VTBL_ENTRY)&_ZN6S629C53v61Ev,
  (VTBL_ENTRY)&_ZN6S629C53v62Ev,
  (VTBL_ENTRY)&_ZN6S629C53v63Ev,
  (VTBL_ENTRY)&_ZN6S629C53v64Ev,
  (VTBL_ENTRY)&_ZN6S629C53v65Ev,
  (VTBL_ENTRY)&_ZN6S629C53v66Ev,
  (VTBL_ENTRY)&_ZN6S629C53v67Ev,
  (VTBL_ENTRY)&_ZN6S629C53v68Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v73Ev,
};
extern VTBL_ENTRY _ZTI9S629C4_nt[];
VTBL_ENTRY *P__ZTI9S629C4_nt = _ZTI9S629C4_nt; 
extern  VTBL_ENTRY _ZTV9S629C4_nt[];
Class_Descriptor cd_S629C4_nt = {  "S629C4_nt", // class name
  bases_S629C4_nt, 1,
  &(vtc_S629C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI9S629C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S629C4_nt),73, //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  S629C3_nt  : S629C4_nt {
  void *s629c3f0[2];
  unsigned int s629c3f1:1;
  unsigned int s629c3f2:1;
  unsigned int s629c3f3:1;
  unsigned int s629c3f4:1;
  char s629c3f5;
  virtual  ~S629C3_nt(); // _ZN9S629C3_ntD1Ev
  virtual void  v74(); // _ZN9S629C3_nt3v74Ev
  virtual void  v75(); // _ZN9S629C3_nt3v75Ev
  virtual void  v76(); // _ZN9S629C3_nt3v76Ev
  virtual void  v77(); // _ZN9S629C3_nt3v77Ev
  virtual void  v78(); // _ZN9S629C3_nt3v78Ev
  virtual void  v79(); // _ZN9S629C3_nt3v79Ev
  virtual void  v80(); // _ZN9S629C3_nt3v80Ev
  virtual void  v81(); // _ZN9S629C3_nt3v81Ev
  virtual void  v82(); // _ZN9S629C3_nt3v82Ev
  virtual void  v83(); // _ZN9S629C3_nt3v83Ev
  virtual void  v84(); // _ZN9S629C3_nt3v84Ev
  virtual void  v85(); // _ZN9S629C3_nt3v85Ev
  virtual void  v86(); // _ZN9S629C3_nt3v86Ev
  virtual void  v87(); // _ZN9S629C3_nt3v87Ev
  virtual void  v88(); // _ZN9S629C3_nt3v88Ev
  virtual void  v89(); // _ZN9S629C3_nt3v89Ev
  virtual void  v90(); // _ZN9S629C3_nt3v90Ev
  virtual void  v91(); // _ZN9S629C3_nt3v91Ev
  virtual void  v92(); // _ZN9S629C3_nt3v92Ev
  virtual void  v93(); // _ZN9S629C3_nt3v93Ev
  virtual void  v94(); // _ZN9S629C3_nt3v94Ev
  virtual void  v95(); // _ZN9S629C3_nt3v95Ev
  S629C3_nt(); // tgen
};
//SIG(-1 S629C3_nt) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} vd v87 v88 v89 v90 v91 Fp FC4} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp[2] Fi:1 Fi:1 Fi:1 Fi:1 Fc}


 S629C3_nt ::~S629C3_nt(){ note_dtor("S629C3_nt", this);}
void  S629C3_nt ::v74(){vfunc_called(this, "_ZN9S629C3_nt3v74Ev");}
void  S629C3_nt ::v75(){vfunc_called(this, "_ZN9S629C3_nt3v75Ev");}
void  S629C3_nt ::v76(){vfunc_called(this, "_ZN9S629C3_nt3v76Ev");}
void  S629C3_nt ::v77(){vfunc_called(this, "_ZN9S629C3_nt3v77Ev");}
void  S629C3_nt ::v78(){vfunc_called(this, "_ZN9S629C3_nt3v78Ev");}
void  S629C3_nt ::v79(){vfunc_called(this, "_ZN9S629C3_nt3v79Ev");}
void  S629C3_nt ::v80(){vfunc_called(this, "_ZN9S629C3_nt3v80Ev");}
void  S629C3_nt ::v81(){vfunc_called(this, "_ZN9S629C3_nt3v81Ev");}
void  S629C3_nt ::v82(){vfunc_called(this, "_ZN9S629C3_nt3v82Ev");}
void  S629C3_nt ::v83(){vfunc_called(this, "_ZN9S629C3_nt3v83Ev");}
void  S629C3_nt ::v84(){vfunc_called(this, "_ZN9S629C3_nt3v84Ev");}
void  S629C3_nt ::v85(){vfunc_called(this, "_ZN9S629C3_nt3v85Ev");}
void  S629C3_nt ::v86(){vfunc_called(this, "_ZN9S629C3_nt3v86Ev");}
void  S629C3_nt ::v87(){vfunc_called(this, "_ZN9S629C3_nt3v87Ev");}
void  S629C3_nt ::v88(){vfunc_called(this, "_ZN9S629C3_nt3v88Ev");}
void  S629C3_nt ::v89(){vfunc_called(this, "_ZN9S629C3_nt3v89Ev");}
void  S629C3_nt ::v90(){vfunc_called(this, "_ZN9S629C3_nt3v90Ev");}
void  S629C3_nt ::v91(){vfunc_called(this, "_ZN9S629C3_nt3v91Ev");}
void  S629C3_nt ::v92(){vfunc_called(this, "_ZN9S629C3_nt3v92Ev");}
void  S629C3_nt ::v93(){vfunc_called(this, "_ZN9S629C3_nt3v93Ev");}
void  S629C3_nt ::v94(){vfunc_called(this, "_ZN9S629C3_nt3v94Ev");}
void  S629C3_nt ::v95(){vfunc_called(this, "_ZN9S629C3_nt3v95Ev");}
S629C3_nt ::S629C3_nt(){ note_ctor("S629C3_nt", this);} // tgen

//skip512 S629C3_nt

#else // __cplusplus

extern void _ZN9S629C3_ntC1Ev();
extern void _ZN9S629C3_ntD1Ev();
Name_Map name_map_S629C3_nt[] = {
  NSPAIR(_ZN9S629C3_ntC1Ev),
  NSPAIR(_ZN9S629C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S629C5;
extern VTBL_ENTRY _ZTI6S629C5[];
extern  VTBL_ENTRY _ZTV6S629C5[];
extern Class_Descriptor cd_S629C4_nt;
extern VTBL_ENTRY _ZTI9S629C4_nt[];
extern  VTBL_ENTRY _ZTV9S629C4_nt[];
static Base_Class bases_S629C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S629C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S629C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI9S629C3_nt[];
extern void _ZN9S629C3_ntD1Ev();
extern void _ZN9S629C3_ntD0Ev();
extern void _ZN6S629C52v5Ev();
extern void _ZN6S629C52v6Ev();
extern void _ZN6S629C52v7Ev();
extern void _ZN6S629C52v8Ev();
extern void _ZN6S629C52v9Ev();
extern void _ZN6S629C53v10Ev();
extern void _ZN6S629C53v11Ev();
extern void _ZN6S629C53v12Ev();
extern void _ZN6S629C53v13Ev();
extern void _ZN6S629C53v14Ev();
extern void _ZN6S629C53v15Ev();
extern void _ZN6S629C53v16Ev();
extern void _ZN6S629C53v17Ev();
extern void _ZN6S629C53v18Ev();
extern void _ZN6S629C53v19Ev();
extern void _ZN6S629C53v20Ev();
extern void _ZN6S629C53v21Ev();
extern void _ZN6S629C53v22Ev();
extern void _ZN6S629C53v23Ev();
extern void _ZN6S629C53v24Ev();
extern void _ZN6S629C53v25Ev();
extern void _ZN6S629C53v26Ev();
extern void _ZN6S629C53v27Ev();
extern void _ZN6S629C53v28Ev();
extern void _ZN6S629C53v29Ev();
extern void _ZN6S629C53v30Ev();
extern void _ZN6S629C53v31Ev();
extern void _ZN6S629C53v32Ev();
extern void _ZN6S629C53v33Ev();
extern void _ZN6S629C53v34Ev();
extern void _ZN6S629C53v35Ev();
extern void _ZN6S629C53v36Ev();
extern void _ZN6S629C53v37Ev();
extern void _ZN6S629C53v38Ev();
extern void _ZN6S629C53v39Ev();
extern void _ZN6S629C53v40Ev();
extern void _ZN6S629C53v41Ev();
extern void _ZN6S629C53v42Ev();
extern void _ZN6S629C53v43Ev();
extern void _ZN6S629C53v44Ev();
extern void _ZN6S629C53v45Ev();
extern void _ZN6S629C53v46Ev();
extern void _ZN6S629C53v47Ev();
extern void _ZN6S629C53v48Ev();
extern void _ZN6S629C53v49Ev();
extern void _ZN6S629C53v50Ev();
extern void _ZN6S629C53v51Ev();
extern void _ZN6S629C53v52Ev();
extern void _ZN6S629C53v53Ev();
extern void _ZN6S629C53v54Ev();
extern void _ZN6S629C53v55Ev();
extern void _ZN6S629C53v56Ev();
extern void _ZN6S629C53v57Ev();
extern void _ZN6S629C53v58Ev();
extern void _ZN6S629C53v59Ev();
extern void _ZN6S629C53v60Ev();
extern void _ZN6S629C53v61Ev();
extern void _ZN6S629C53v62Ev();
extern void _ZN6S629C53v63Ev();
extern void _ZN6S629C53v64Ev();
extern void _ZN6S629C53v65Ev();
extern void _ZN6S629C53v66Ev();
extern void _ZN6S629C53v67Ev();
extern void _ZN6S629C53v68Ev();
extern void _ZN9S629C4_nt3v69Ev();
extern void _ZN9S629C4_nt3v70Ev();
extern void _ZN9S629C4_nt3v71Ev();
extern void _ZN9S629C4_nt3v72Ev();
extern void _ZN9S629C4_nt3v73Ev();
extern void _ZN9S629C3_nt3v74Ev();
extern void _ZN9S629C3_nt3v75Ev();
extern void _ZN9S629C3_nt3v76Ev();
extern void _ZN9S629C3_nt3v77Ev();
extern void _ZN9S629C3_nt3v78Ev();
extern void _ZN9S629C3_nt3v79Ev();
extern void _ZN9S629C3_nt3v80Ev();
extern void _ZN9S629C3_nt3v81Ev();
extern void _ZN9S629C3_nt3v82Ev();
extern void _ZN9S629C3_nt3v83Ev();
extern void _ZN9S629C3_nt3v84Ev();
extern void _ZN9S629C3_nt3v85Ev();
extern void _ZN9S629C3_nt3v86Ev();
extern void _ZN9S629C3_nt3v87Ev();
extern void _ZN9S629C3_nt3v88Ev();
extern void _ZN9S629C3_nt3v89Ev();
extern void _ZN9S629C3_nt3v90Ev();
extern void _ZN9S629C3_nt3v91Ev();
extern void _ZN9S629C3_nt3v92Ev();
extern void _ZN9S629C3_nt3v93Ev();
extern void _ZN9S629C3_nt3v94Ev();
extern void _ZN9S629C3_nt3v95Ev();
static  VTBL_ENTRY vtc_S629C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S629C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S629C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S629C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S629C52v5Ev,
  (VTBL_ENTRY)&_ZN6S629C52v6Ev,
  (VTBL_ENTRY)&_ZN6S629C52v7Ev,
  (VTBL_ENTRY)&_ZN6S629C52v8Ev,
  (VTBL_ENTRY)&_ZN6S629C52v9Ev,
  (VTBL_ENTRY)&_ZN6S629C53v10Ev,
  (VTBL_ENTRY)&_ZN6S629C53v11Ev,
  (VTBL_ENTRY)&_ZN6S629C53v12Ev,
  (VTBL_ENTRY)&_ZN6S629C53v13Ev,
  (VTBL_ENTRY)&_ZN6S629C53v14Ev,
  (VTBL_ENTRY)&_ZN6S629C53v15Ev,
  (VTBL_ENTRY)&_ZN6S629C53v16Ev,
  (VTBL_ENTRY)&_ZN6S629C53v17Ev,
  (VTBL_ENTRY)&_ZN6S629C53v18Ev,
  (VTBL_ENTRY)&_ZN6S629C53v19Ev,
  (VTBL_ENTRY)&_ZN6S629C53v20Ev,
  (VTBL_ENTRY)&_ZN6S629C53v21Ev,
  (VTBL_ENTRY)&_ZN6S629C53v22Ev,
  (VTBL_ENTRY)&_ZN6S629C53v23Ev,
  (VTBL_ENTRY)&_ZN6S629C53v24Ev,
  (VTBL_ENTRY)&_ZN6S629C53v25Ev,
  (VTBL_ENTRY)&_ZN6S629C53v26Ev,
  (VTBL_ENTRY)&_ZN6S629C53v27Ev,
  (VTBL_ENTRY)&_ZN6S629C53v28Ev,
  (VTBL_ENTRY)&_ZN6S629C53v29Ev,
  (VTBL_ENTRY)&_ZN6S629C53v30Ev,
  (VTBL_ENTRY)&_ZN6S629C53v31Ev,
  (VTBL_ENTRY)&_ZN6S629C53v32Ev,
  (VTBL_ENTRY)&_ZN6S629C53v33Ev,
  (VTBL_ENTRY)&_ZN6S629C53v34Ev,
  (VTBL_ENTRY)&_ZN6S629C53v35Ev,
  (VTBL_ENTRY)&_ZN6S629C53v36Ev,
  (VTBL_ENTRY)&_ZN6S629C53v37Ev,
  (VTBL_ENTRY)&_ZN6S629C53v38Ev,
  (VTBL_ENTRY)&_ZN6S629C53v39Ev,
  (VTBL_ENTRY)&_ZN6S629C53v40Ev,
  (VTBL_ENTRY)&_ZN6S629C53v41Ev,
  (VTBL_ENTRY)&_ZN6S629C53v42Ev,
  (VTBL_ENTRY)&_ZN6S629C53v43Ev,
  (VTBL_ENTRY)&_ZN6S629C53v44Ev,
  (VTBL_ENTRY)&_ZN6S629C53v45Ev,
  (VTBL_ENTRY)&_ZN6S629C53v46Ev,
  (VTBL_ENTRY)&_ZN6S629C53v47Ev,
  (VTBL_ENTRY)&_ZN6S629C53v48Ev,
  (VTBL_ENTRY)&_ZN6S629C53v49Ev,
  (VTBL_ENTRY)&_ZN6S629C53v50Ev,
  (VTBL_ENTRY)&_ZN6S629C53v51Ev,
  (VTBL_ENTRY)&_ZN6S629C53v52Ev,
  (VTBL_ENTRY)&_ZN6S629C53v53Ev,
  (VTBL_ENTRY)&_ZN6S629C53v54Ev,
  (VTBL_ENTRY)&_ZN6S629C53v55Ev,
  (VTBL_ENTRY)&_ZN6S629C53v56Ev,
  (VTBL_ENTRY)&_ZN6S629C53v57Ev,
  (VTBL_ENTRY)&_ZN6S629C53v58Ev,
  (VTBL_ENTRY)&_ZN6S629C53v59Ev,
  (VTBL_ENTRY)&_ZN6S629C53v60Ev,
  (VTBL_ENTRY)&_ZN6S629C53v61Ev,
  (VTBL_ENTRY)&_ZN6S629C53v62Ev,
  (VTBL_ENTRY)&_ZN6S629C53v63Ev,
  (VTBL_ENTRY)&_ZN6S629C53v64Ev,
  (VTBL_ENTRY)&_ZN6S629C53v65Ev,
  (VTBL_ENTRY)&_ZN6S629C53v66Ev,
  (VTBL_ENTRY)&_ZN6S629C53v67Ev,
  (VTBL_ENTRY)&_ZN6S629C53v68Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v95Ev,
};
extern VTBL_ENTRY _ZTI9S629C3_nt[];
VTBL_ENTRY *P__ZTI9S629C3_nt = _ZTI9S629C3_nt; 
extern  VTBL_ENTRY _ZTV9S629C3_nt[];
Class_Descriptor cd_S629C3_nt = {  "S629C3_nt", // class name
  bases_S629C3_nt, 2,
  &(vtc_S629C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,84), // object size
  NSPAIRA(_ZTI9S629C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S629C3_nt),95, //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  S629C8_nt  {
  void  mf629c8(); // _ZN9S629C8_nt7mf629c8Ev
};
//SIG(-1 S629C8_nt) C1{ m}


void  S629C8_nt ::mf629c8(){}

//skip512 S629C8_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S629C8_nt[];
VTBL_ENTRY *P__ZTI9S629C8_nt = _ZTI9S629C8_nt; 
Class_Descriptor cd_S629C8_nt = {  "S629C8_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI9S629C8_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  S629C11_nt  {
  ::S1503C14_nt s629c11f0;
  ::S1503C14_nt s629c11f1;
  int s629c11f2;
  void  mf629c11(); // _ZN10S629C11_nt8mf629c11Ev
};
//SIG(-1 S629C11_nt) C1{ m FC2{ m Fi[3]} FC2 Fi}


void  S629C11_nt ::mf629c11(){}

//skip512 S629C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S629C14  {
  void  mf629c14(); // _ZN7S629C148mf629c14Ev
};
//SIG(-1 S629C14) C1{ m}


void  S629C14 ::mf629c14(){}

static void Test_S629C14()
{
  {
    init_simple_test("S629C14");
    S629C14 lv;
    check2(sizeof(lv), 1, "sizeof(S629C14)");
    check2(__alignof__(lv), 1, "__alignof__(S629C14)");
  }
}
static Arrange_To_Call_Me vS629C14(Test_S629C14, "S629C14", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI7S629C14[];
VTBL_ENTRY *P__ZTI7S629C14 = _ZTI7S629C14; 
Class_Descriptor cd_S629C14 = {  "S629C14", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI7S629C14),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  S629C17_nt  {
  int s629c17f0[3];
  void  mf629c17(); // _ZN10S629C17_nt8mf629c17Ev
};
//SIG(-1 S629C17_nt) C1{ m Fi[3]}


void  S629C17_nt ::mf629c17(){}

//skip512 S629C17_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S629C2_nt  : S629C3_nt {
  void *s629c2f0;
  ::S1503C9_nt s629c2f1;
  int s629c2f2;
  ::S629C8_nt s629c2f3;
  int s629c2f4;
  ::S1503C29 s629c2f5;
  int s629c2f6;
  void *s629c2f7[2];
  ::S629C11_nt s629c2f8;
  void *s629c2f9;
  int s629c2f10[2];
  char s629c2f11[3];
  int s629c2f12;
  unsigned int s629c2f13:1;
  unsigned int s629c2f14:1;
  unsigned int s629c2f15:1;
  unsigned int s629c2f16:1;
  unsigned int s629c2f17:1;
  unsigned int s629c2f18:1;
  unsigned int s629c2f19:1;
  unsigned int s629c2f20:1;
  unsigned int s629c2f21:1;
  unsigned int s629c2f22:1;
  unsigned int s629c2f23:1;
  unsigned int s629c2f24:1;
  unsigned int s629c2f25:1;
  unsigned int s629c2f26:1;
  int s629c2f27;
  unsigned int s629c2f28:1;
  unsigned int s629c2f29:1;
  unsigned int s629c2f30:1;
  unsigned int s629c2f31:1;
  unsigned int s629c2f32:1;
  unsigned int s629c2f33:1;
  ::S629C8_nt s629c2f34;
  unsigned int s629c2f35:1;
  unsigned int s629c2f36:1;
  unsigned int s629c2f37:1;
  unsigned int s629c2f38:1;
  unsigned int s629c2f39:1;
  unsigned int s629c2f40:1;
  unsigned int s629c2f41:1;
  char s629c2f42;
  ::S629C14 s629c2f43;
  unsigned int s629c2f44:1;
  unsigned int s629c2f45:1;
  unsigned int s629c2f46:1;
  unsigned int s629c2f47:1;
  unsigned int s629c2f48:1;
  unsigned int s629c2f49:1;
  unsigned int s629c2f50:1;
  unsigned int s629c2f51:1;
  unsigned int s629c2f52:1;
  unsigned int s629c2f53:1;
  unsigned int s629c2f54:1;
  unsigned int s629c2f55:1;
  ::S1503C28 s629c2f56;
  void *s629c2f57[2];
  char s629c2f58;
  ::S629C8_nt s629c2f59;
  ::S1503C14_nt s629c2f60;
  ::S629C17_nt s629c2f61;
  int s629c2f62;
  ::S1503C14_nt s629c2f63;
  unsigned int s629c2f64:1;
  unsigned int s629c2f65:1;
  unsigned int s629c2f66:1;
  int s629c2f67[3];
  virtual  ~S629C2_nt(); // _ZN9S629C2_ntD1Ev
  virtual void  v96(); // _ZN9S629C2_nt3v96Ev
  virtual void  v97(); // _ZN9S629C2_nt3v97Ev
  virtual void  v98(); // _ZN9S629C2_nt3v98Ev
  virtual void  v99(); // _ZN9S629C2_nt3v99Ev
  virtual void  v100(); // _ZN9S629C2_nt4v100Ev
  virtual void  v101(); // _ZN9S629C2_nt4v101Ev
  virtual void  v102(); // _ZN9S629C2_nt4v102Ev
  virtual void  v103(); // _ZN9S629C2_nt4v103Ev
  virtual void  v104(); // _ZN9S629C2_nt4v104Ev
  virtual void  v105(); // _ZN9S629C2_nt4v105Ev
  virtual void  v106(); // _ZN9S629C2_nt4v106Ev
  virtual void  v107(); // _ZN9S629C2_nt4v107Ev
  virtual void  v108(); // _ZN9S629C2_nt4v108Ev
  virtual void  v109(); // _ZN9S629C2_nt4v109Ev
  virtual void  v110(); // _ZN9S629C2_nt4v110Ev
  virtual void  v111(); // _ZN9S629C2_nt4v111Ev
  virtual void  v112(); // _ZN9S629C2_nt4v112Ev
  virtual void  v113(); // _ZN9S629C2_nt4v113Ev
  virtual void  v114(); // _ZN9S629C2_nt4v114Ev
  virtual void  v115(); // _ZN9S629C2_nt4v115Ev
  virtual void  v116(); // _ZN9S629C2_nt4v116Ev
  virtual void  v117(); // _ZN9S629C2_nt4v117Ev
  virtual void  v118(); // _ZN9S629C2_nt4v118Ev
  virtual void  v119(); // _ZN9S629C2_nt4v119Ev
  virtual void  v120(); // _ZN9S629C2_nt4v120Ev
  virtual void  v121(); // _ZN9S629C2_nt4v121Ev
  virtual void  v122(); // _ZN9S629C2_nt4v122Ev
  virtual void  v123(); // _ZN9S629C2_nt4v123Ev
  virtual void  v124(); // _ZN9S629C2_nt4v124Ev
  virtual void  v125(); // _ZN9S629C2_nt4v125Ev
  virtual void  v126(); // _ZN9S629C2_nt4v126Ev
  virtual void  v127(); // _ZN9S629C2_nt4v127Ev
  virtual void  v128(); // _ZN9S629C2_nt4v128Ev
  virtual void  v129(); // _ZN9S629C2_nt4v129Ev
  virtual void  v130(); // _ZN9S629C2_nt4v130Ev
  virtual void  v131(); // _ZN9S629C2_nt4v131Ev
  virtual void  v132(); // _ZN9S629C2_nt4v132Ev
  virtual void  v133(); // _ZN9S629C2_nt4v133Ev
  virtual void  v134(); // _ZN9S629C2_nt4v134Ev
  virtual void  v135(); // _ZN9S629C2_nt4v135Ev
  virtual void  v136(); // _ZN9S629C2_nt4v136Ev
  virtual void  v137(); // _ZN9S629C2_nt4v137Ev
  virtual void  v138(); // _ZN9S629C2_nt4v138Ev
  virtual void  v139(); // _ZN9S629C2_nt4v139Ev
  virtual void  v140(); // _ZN9S629C2_nt4v140Ev
  virtual void  v141(); // _ZN9S629C2_nt4v141Ev
  virtual void  v142(); // _ZN9S629C2_nt4v142Ev
  virtual void  v143(); // _ZN9S629C2_nt4v143Ev
  virtual void  v144(); // _ZN9S629C2_nt4v144Ev
  virtual void  v145(); // _ZN9S629C2_nt4v145Ev
  virtual void  v146(); // _ZN9S629C2_nt4v146Ev
  virtual void  v147(); // _ZN9S629C2_nt4v147Ev
  virtual void  v148(); // _ZN9S629C2_nt4v148Ev
  virtual void  v149(); // _ZN9S629C2_nt4v149Ev
  virtual void  v150(); // _ZN9S629C2_nt4v150Ev
  virtual void  v151(); // _ZN9S629C2_nt4v151Ev
  virtual void  v152(); // _ZN9S629C2_nt4v152Ev
  virtual void  v153(); // _ZN9S629C2_nt4v153Ev
  virtual void  v154(); // _ZN9S629C2_nt4v154Ev
  virtual void  v155(); // _ZN9S629C2_nt4v155Ev
  virtual void  v156(); // _ZN9S629C2_nt4v156Ev
  S629C2_nt(); // tgen
};
//SIG(-1 S629C2_nt) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v126 v127 v128 v129 v130 Fp FC5} vd v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 Fp[2] Fi:1 Fi:1 Fi:1 Fi:1 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 Fp FC6{ m Fi} Fi FC7{ m} Fi FC8{ BC9{ m Fp Fi[2]}} Fi Fp[2] FC10{ m FC11{ m Fi[3]} FC11 Fi} Fp Fi[2] Fc[3] Fi 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 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fc FC12{ m} Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC13{ BC8} Fp[2] Fc FC7 FC11 FC14{ m Fi[3]} Fi FC11 Fi:1 Fi:1 Fi:1 Fi[3]}


 S629C2_nt ::~S629C2_nt(){ note_dtor("S629C2_nt", this);}
void  S629C2_nt ::v96(){vfunc_called(this, "_ZN9S629C2_nt3v96Ev");}
void  S629C2_nt ::v97(){vfunc_called(this, "_ZN9S629C2_nt3v97Ev");}
void  S629C2_nt ::v98(){vfunc_called(this, "_ZN9S629C2_nt3v98Ev");}
void  S629C2_nt ::v99(){vfunc_called(this, "_ZN9S629C2_nt3v99Ev");}
void  S629C2_nt ::v100(){vfunc_called(this, "_ZN9S629C2_nt4v100Ev");}
void  S629C2_nt ::v101(){vfunc_called(this, "_ZN9S629C2_nt4v101Ev");}
void  S629C2_nt ::v102(){vfunc_called(this, "_ZN9S629C2_nt4v102Ev");}
void  S629C2_nt ::v103(){vfunc_called(this, "_ZN9S629C2_nt4v103Ev");}
void  S629C2_nt ::v104(){vfunc_called(this, "_ZN9S629C2_nt4v104Ev");}
void  S629C2_nt ::v105(){vfunc_called(this, "_ZN9S629C2_nt4v105Ev");}
void  S629C2_nt ::v106(){vfunc_called(this, "_ZN9S629C2_nt4v106Ev");}
void  S629C2_nt ::v107(){vfunc_called(this, "_ZN9S629C2_nt4v107Ev");}
void  S629C2_nt ::v108(){vfunc_called(this, "_ZN9S629C2_nt4v108Ev");}
void  S629C2_nt ::v109(){vfunc_called(this, "_ZN9S629C2_nt4v109Ev");}
void  S629C2_nt ::v110(){vfunc_called(this, "_ZN9S629C2_nt4v110Ev");}
void  S629C2_nt ::v111(){vfunc_called(this, "_ZN9S629C2_nt4v111Ev");}
void  S629C2_nt ::v112(){vfunc_called(this, "_ZN9S629C2_nt4v112Ev");}
void  S629C2_nt ::v113(){vfunc_called(this, "_ZN9S629C2_nt4v113Ev");}
void  S629C2_nt ::v114(){vfunc_called(this, "_ZN9S629C2_nt4v114Ev");}
void  S629C2_nt ::v115(){vfunc_called(this, "_ZN9S629C2_nt4v115Ev");}
void  S629C2_nt ::v116(){vfunc_called(this, "_ZN9S629C2_nt4v116Ev");}
void  S629C2_nt ::v117(){vfunc_called(this, "_ZN9S629C2_nt4v117Ev");}
void  S629C2_nt ::v118(){vfunc_called(this, "_ZN9S629C2_nt4v118Ev");}
void  S629C2_nt ::v119(){vfunc_called(this, "_ZN9S629C2_nt4v119Ev");}
void  S629C2_nt ::v120(){vfunc_called(this, "_ZN9S629C2_nt4v120Ev");}
void  S629C2_nt ::v121(){vfunc_called(this, "_ZN9S629C2_nt4v121Ev");}
void  S629C2_nt ::v122(){vfunc_called(this, "_ZN9S629C2_nt4v122Ev");}
void  S629C2_nt ::v123(){vfunc_called(this, "_ZN9S629C2_nt4v123Ev");}
void  S629C2_nt ::v124(){vfunc_called(this, "_ZN9S629C2_nt4v124Ev");}
void  S629C2_nt ::v125(){vfunc_called(this, "_ZN9S629C2_nt4v125Ev");}
void  S629C2_nt ::v126(){vfunc_called(this, "_ZN9S629C2_nt4v126Ev");}
void  S629C2_nt ::v127(){vfunc_called(this, "_ZN9S629C2_nt4v127Ev");}
void  S629C2_nt ::v128(){vfunc_called(this, "_ZN9S629C2_nt4v128Ev");}
void  S629C2_nt ::v129(){vfunc_called(this, "_ZN9S629C2_nt4v129Ev");}
void  S629C2_nt ::v130(){vfunc_called(this, "_ZN9S629C2_nt4v130Ev");}
void  S629C2_nt ::v131(){vfunc_called(this, "_ZN9S629C2_nt4v131Ev");}
void  S629C2_nt ::v132(){vfunc_called(this, "_ZN9S629C2_nt4v132Ev");}
void  S629C2_nt ::v133(){vfunc_called(this, "_ZN9S629C2_nt4v133Ev");}
void  S629C2_nt ::v134(){vfunc_called(this, "_ZN9S629C2_nt4v134Ev");}
void  S629C2_nt ::v135(){vfunc_called(this, "_ZN9S629C2_nt4v135Ev");}
void  S629C2_nt ::v136(){vfunc_called(this, "_ZN9S629C2_nt4v136Ev");}
void  S629C2_nt ::v137(){vfunc_called(this, "_ZN9S629C2_nt4v137Ev");}
void  S629C2_nt ::v138(){vfunc_called(this, "_ZN9S629C2_nt4v138Ev");}
void  S629C2_nt ::v139(){vfunc_called(this, "_ZN9S629C2_nt4v139Ev");}
void  S629C2_nt ::v140(){vfunc_called(this, "_ZN9S629C2_nt4v140Ev");}
void  S629C2_nt ::v141(){vfunc_called(this, "_ZN9S629C2_nt4v141Ev");}
void  S629C2_nt ::v142(){vfunc_called(this, "_ZN9S629C2_nt4v142Ev");}
void  S629C2_nt ::v143(){vfunc_called(this, "_ZN9S629C2_nt4v143Ev");}
void  S629C2_nt ::v144(){vfunc_called(this, "_ZN9S629C2_nt4v144Ev");}
void  S629C2_nt ::v145(){vfunc_called(this, "_ZN9S629C2_nt4v145Ev");}
void  S629C2_nt ::v146(){vfunc_called(this, "_ZN9S629C2_nt4v146Ev");}
void  S629C2_nt ::v147(){vfunc_called(this, "_ZN9S629C2_nt4v147Ev");}
void  S629C2_nt ::v148(){vfunc_called(this, "_ZN9S629C2_nt4v148Ev");}
void  S629C2_nt ::v149(){vfunc_called(this, "_ZN9S629C2_nt4v149Ev");}
void  S629C2_nt ::v150(){vfunc_called(this, "_ZN9S629C2_nt4v150Ev");}
void  S629C2_nt ::v151(){vfunc_called(this, "_ZN9S629C2_nt4v151Ev");}
void  S629C2_nt ::v152(){vfunc_called(this, "_ZN9S629C2_nt4v152Ev");}
void  S629C2_nt ::v153(){vfunc_called(this, "_ZN9S629C2_nt4v153Ev");}
void  S629C2_nt ::v154(){vfunc_called(this, "_ZN9S629C2_nt4v154Ev");}
void  S629C2_nt ::v155(){vfunc_called(this, "_ZN9S629C2_nt4v155Ev");}
void  S629C2_nt ::v156(){vfunc_called(this, "_ZN9S629C2_nt4v156Ev");}
S629C2_nt ::S629C2_nt(){ note_ctor("S629C2_nt", this);} // tgen

//skip512 S629C2_nt

#else // __cplusplus

extern void _ZN9S629C2_ntC1Ev();
extern void _ZN9S629C2_ntD1Ev();
Name_Map name_map_S629C2_nt[] = {
  NSPAIR(_ZN9S629C2_ntC1Ev),
  NSPAIR(_ZN9S629C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S629C5;
extern VTBL_ENTRY _ZTI6S629C5[];
extern  VTBL_ENTRY _ZTV6S629C5[];
extern Class_Descriptor cd_S629C4_nt;
extern VTBL_ENTRY _ZTI9S629C4_nt[];
extern  VTBL_ENTRY _ZTV9S629C4_nt[];
extern Class_Descriptor cd_S629C3_nt;
extern VTBL_ENTRY _ZTI9S629C3_nt[];
extern  VTBL_ENTRY _ZTV9S629C3_nt[];
static Base_Class bases_S629C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S629C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S629C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S629C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S629C2_nt[];
extern void _ZN9S629C2_ntD1Ev();
extern void _ZN9S629C2_ntD0Ev();
extern void _ZN6S629C52v5Ev();
extern void _ZN6S629C52v6Ev();
extern void _ZN6S629C52v7Ev();
extern void _ZN6S629C52v8Ev();
extern void _ZN6S629C52v9Ev();
extern void _ZN6S629C53v10Ev();
extern void _ZN6S629C53v11Ev();
extern void _ZN6S629C53v12Ev();
extern void _ZN6S629C53v13Ev();
extern void _ZN6S629C53v14Ev();
extern void _ZN6S629C53v15Ev();
extern void _ZN6S629C53v16Ev();
extern void _ZN6S629C53v17Ev();
extern void _ZN6S629C53v18Ev();
extern void _ZN6S629C53v19Ev();
extern void _ZN6S629C53v20Ev();
extern void _ZN6S629C53v21Ev();
extern void _ZN6S629C53v22Ev();
extern void _ZN6S629C53v23Ev();
extern void _ZN6S629C53v24Ev();
extern void _ZN6S629C53v25Ev();
extern void _ZN6S629C53v26Ev();
extern void _ZN6S629C53v27Ev();
extern void _ZN6S629C53v28Ev();
extern void _ZN6S629C53v29Ev();
extern void _ZN6S629C53v30Ev();
extern void _ZN6S629C53v31Ev();
extern void _ZN6S629C53v32Ev();
extern void _ZN6S629C53v33Ev();
extern void _ZN6S629C53v34Ev();
extern void _ZN6S629C53v35Ev();
extern void _ZN6S629C53v36Ev();
extern void _ZN6S629C53v37Ev();
extern void _ZN6S629C53v38Ev();
extern void _ZN6S629C53v39Ev();
extern void _ZN6S629C53v40Ev();
extern void _ZN6S629C53v41Ev();
extern void _ZN6S629C53v42Ev();
extern void _ZN6S629C53v43Ev();
extern void _ZN6S629C53v44Ev();
extern void _ZN6S629C53v45Ev();
extern void _ZN6S629C53v46Ev();
extern void _ZN6S629C53v47Ev();
extern void _ZN6S629C53v48Ev();
extern void _ZN6S629C53v49Ev();
extern void _ZN6S629C53v50Ev();
extern void _ZN6S629C53v51Ev();
extern void _ZN6S629C53v52Ev();
extern void _ZN6S629C53v53Ev();
extern void _ZN6S629C53v54Ev();
extern void _ZN6S629C53v55Ev();
extern void _ZN6S629C53v56Ev();
extern void _ZN6S629C53v57Ev();
extern void _ZN6S629C53v58Ev();
extern void _ZN6S629C53v59Ev();
extern void _ZN6S629C53v60Ev();
extern void _ZN6S629C53v61Ev();
extern void _ZN6S629C53v62Ev();
extern void _ZN6S629C53v63Ev();
extern void _ZN6S629C53v64Ev();
extern void _ZN6S629C53v65Ev();
extern void _ZN6S629C53v66Ev();
extern void _ZN6S629C53v67Ev();
extern void _ZN6S629C53v68Ev();
extern void _ZN9S629C4_nt3v69Ev();
extern void _ZN9S629C4_nt3v70Ev();
extern void _ZN9S629C4_nt3v71Ev();
extern void _ZN9S629C4_nt3v72Ev();
extern void _ZN9S629C4_nt3v73Ev();
extern void _ZN9S629C3_nt3v74Ev();
extern void _ZN9S629C3_nt3v75Ev();
extern void _ZN9S629C3_nt3v76Ev();
extern void _ZN9S629C3_nt3v77Ev();
extern void _ZN9S629C3_nt3v78Ev();
extern void _ZN9S629C3_nt3v79Ev();
extern void _ZN9S629C3_nt3v80Ev();
extern void _ZN9S629C3_nt3v81Ev();
extern void _ZN9S629C3_nt3v82Ev();
extern void _ZN9S629C3_nt3v83Ev();
extern void _ZN9S629C3_nt3v84Ev();
extern void _ZN9S629C3_nt3v85Ev();
extern void _ZN9S629C3_nt3v86Ev();
extern void _ZN9S629C3_nt3v87Ev();
extern void _ZN9S629C3_nt3v88Ev();
extern void _ZN9S629C3_nt3v89Ev();
extern void _ZN9S629C3_nt3v90Ev();
extern void _ZN9S629C3_nt3v91Ev();
extern void _ZN9S629C3_nt3v92Ev();
extern void _ZN9S629C3_nt3v93Ev();
extern void _ZN9S629C3_nt3v94Ev();
extern void _ZN9S629C3_nt3v95Ev();
extern void _ZN9S629C2_nt3v96Ev();
extern void _ZN9S629C2_nt3v97Ev();
extern void _ZN9S629C2_nt3v98Ev();
extern void _ZN9S629C2_nt3v99Ev();
extern void _ZN9S629C2_nt4v100Ev();
extern void _ZN9S629C2_nt4v101Ev();
extern void _ZN9S629C2_nt4v102Ev();
extern void _ZN9S629C2_nt4v103Ev();
extern void _ZN9S629C2_nt4v104Ev();
extern void _ZN9S629C2_nt4v105Ev();
extern void _ZN9S629C2_nt4v106Ev();
extern void _ZN9S629C2_nt4v107Ev();
extern void _ZN9S629C2_nt4v108Ev();
extern void _ZN9S629C2_nt4v109Ev();
extern void _ZN9S629C2_nt4v110Ev();
extern void _ZN9S629C2_nt4v111Ev();
extern void _ZN9S629C2_nt4v112Ev();
extern void _ZN9S629C2_nt4v113Ev();
extern void _ZN9S629C2_nt4v114Ev();
extern void _ZN9S629C2_nt4v115Ev();
extern void _ZN9S629C2_nt4v116Ev();
extern void _ZN9S629C2_nt4v117Ev();
extern void _ZN9S629C2_nt4v118Ev();
extern void _ZN9S629C2_nt4v119Ev();
extern void _ZN9S629C2_nt4v120Ev();
extern void _ZN9S629C2_nt4v121Ev();
extern void _ZN9S629C2_nt4v122Ev();
extern void _ZN9S629C2_nt4v123Ev();
extern void _ZN9S629C2_nt4v124Ev();
extern void _ZN9S629C2_nt4v125Ev();
extern void _ZN9S629C2_nt4v126Ev();
extern void _ZN9S629C2_nt4v127Ev();
extern void _ZN9S629C2_nt4v128Ev();
extern void _ZN9S629C2_nt4v129Ev();
extern void _ZN9S629C2_nt4v130Ev();
extern void _ZN9S629C2_nt4v131Ev();
extern void _ZN9S629C2_nt4v132Ev();
extern void _ZN9S629C2_nt4v133Ev();
extern void _ZN9S629C2_nt4v134Ev();
extern void _ZN9S629C2_nt4v135Ev();
extern void _ZN9S629C2_nt4v136Ev();
extern void _ZN9S629C2_nt4v137Ev();
extern void _ZN9S629C2_nt4v138Ev();
extern void _ZN9S629C2_nt4v139Ev();
extern void _ZN9S629C2_nt4v140Ev();
extern void _ZN9S629C2_nt4v141Ev();
extern void _ZN9S629C2_nt4v142Ev();
extern void _ZN9S629C2_nt4v143Ev();
extern void _ZN9S629C2_nt4v144Ev();
extern void _ZN9S629C2_nt4v145Ev();
extern void _ZN9S629C2_nt4v146Ev();
extern void _ZN9S629C2_nt4v147Ev();
extern void _ZN9S629C2_nt4v148Ev();
extern void _ZN9S629C2_nt4v149Ev();
extern void _ZN9S629C2_nt4v150Ev();
extern void _ZN9S629C2_nt4v151Ev();
extern void _ZN9S629C2_nt4v152Ev();
extern void _ZN9S629C2_nt4v153Ev();
extern void _ZN9S629C2_nt4v154Ev();
extern void _ZN9S629C2_nt4v155Ev();
extern void _ZN9S629C2_nt4v156Ev();
static  VTBL_ENTRY vtc_S629C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S629C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S629C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S629C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S629C52v5Ev,
  (VTBL_ENTRY)&_ZN6S629C52v6Ev,
  (VTBL_ENTRY)&_ZN6S629C52v7Ev,
  (VTBL_ENTRY)&_ZN6S629C52v8Ev,
  (VTBL_ENTRY)&_ZN6S629C52v9Ev,
  (VTBL_ENTRY)&_ZN6S629C53v10Ev,
  (VTBL_ENTRY)&_ZN6S629C53v11Ev,
  (VTBL_ENTRY)&_ZN6S629C53v12Ev,
  (VTBL_ENTRY)&_ZN6S629C53v13Ev,
  (VTBL_ENTRY)&_ZN6S629C53v14Ev,
  (VTBL_ENTRY)&_ZN6S629C53v15Ev,
  (VTBL_ENTRY)&_ZN6S629C53v16Ev,
  (VTBL_ENTRY)&_ZN6S629C53v17Ev,
  (VTBL_ENTRY)&_ZN6S629C53v18Ev,
  (VTBL_ENTRY)&_ZN6S629C53v19Ev,
  (VTBL_ENTRY)&_ZN6S629C53v20Ev,
  (VTBL_ENTRY)&_ZN6S629C53v21Ev,
  (VTBL_ENTRY)&_ZN6S629C53v22Ev,
  (VTBL_ENTRY)&_ZN6S629C53v23Ev,
  (VTBL_ENTRY)&_ZN6S629C53v24Ev,
  (VTBL_ENTRY)&_ZN6S629C53v25Ev,
  (VTBL_ENTRY)&_ZN6S629C53v26Ev,
  (VTBL_ENTRY)&_ZN6S629C53v27Ev,
  (VTBL_ENTRY)&_ZN6S629C53v28Ev,
  (VTBL_ENTRY)&_ZN6S629C53v29Ev,
  (VTBL_ENTRY)&_ZN6S629C53v30Ev,
  (VTBL_ENTRY)&_ZN6S629C53v31Ev,
  (VTBL_ENTRY)&_ZN6S629C53v32Ev,
  (VTBL_ENTRY)&_ZN6S629C53v33Ev,
  (VTBL_ENTRY)&_ZN6S629C53v34Ev,
  (VTBL_ENTRY)&_ZN6S629C53v35Ev,
  (VTBL_ENTRY)&_ZN6S629C53v36Ev,
  (VTBL_ENTRY)&_ZN6S629C53v37Ev,
  (VTBL_ENTRY)&_ZN6S629C53v38Ev,
  (VTBL_ENTRY)&_ZN6S629C53v39Ev,
  (VTBL_ENTRY)&_ZN6S629C53v40Ev,
  (VTBL_ENTRY)&_ZN6S629C53v41Ev,
  (VTBL_ENTRY)&_ZN6S629C53v42Ev,
  (VTBL_ENTRY)&_ZN6S629C53v43Ev,
  (VTBL_ENTRY)&_ZN6S629C53v44Ev,
  (VTBL_ENTRY)&_ZN6S629C53v45Ev,
  (VTBL_ENTRY)&_ZN6S629C53v46Ev,
  (VTBL_ENTRY)&_ZN6S629C53v47Ev,
  (VTBL_ENTRY)&_ZN6S629C53v48Ev,
  (VTBL_ENTRY)&_ZN6S629C53v49Ev,
  (VTBL_ENTRY)&_ZN6S629C53v50Ev,
  (VTBL_ENTRY)&_ZN6S629C53v51Ev,
  (VTBL_ENTRY)&_ZN6S629C53v52Ev,
  (VTBL_ENTRY)&_ZN6S629C53v53Ev,
  (VTBL_ENTRY)&_ZN6S629C53v54Ev,
  (VTBL_ENTRY)&_ZN6S629C53v55Ev,
  (VTBL_ENTRY)&_ZN6S629C53v56Ev,
  (VTBL_ENTRY)&_ZN6S629C53v57Ev,
  (VTBL_ENTRY)&_ZN6S629C53v58Ev,
  (VTBL_ENTRY)&_ZN6S629C53v59Ev,
  (VTBL_ENTRY)&_ZN6S629C53v60Ev,
  (VTBL_ENTRY)&_ZN6S629C53v61Ev,
  (VTBL_ENTRY)&_ZN6S629C53v62Ev,
  (VTBL_ENTRY)&_ZN6S629C53v63Ev,
  (VTBL_ENTRY)&_ZN6S629C53v64Ev,
  (VTBL_ENTRY)&_ZN6S629C53v65Ev,
  (VTBL_ENTRY)&_ZN6S629C53v66Ev,
  (VTBL_ENTRY)&_ZN6S629C53v67Ev,
  (VTBL_ENTRY)&_ZN6S629C53v68Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v150Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v156Ev,
};
extern VTBL_ENTRY _ZTI9S629C2_nt[];
VTBL_ENTRY *P__ZTI9S629C2_nt = _ZTI9S629C2_nt; 
extern  VTBL_ENTRY _ZTV9S629C2_nt[];
Class_Descriptor cd_S629C2_nt = {  "S629C2_nt", // class name
  bases_S629C2_nt, 3,
  &(vtc_S629C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,272), // object size
  NSPAIRA(_ZTI9S629C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S629C2_nt),156, //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  S629C1  : S629C2_nt {
  void *s629c1f0;
  int s629c1f1[2];
  virtual  ~S629C1(); // _ZN6S629C1D1Ev
  virtual void  v1(); // _ZN6S629C12v1Ev
  virtual void  v2(); // _ZN6S629C12v2Ev
  virtual void  v3(); // _ZN6S629C12v3Ev
  virtual void  v4(); // _ZN6S629C12v4Ev
  S629C1(); // tgen
};
//SIG(1 S629C1) 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 Fp FC6} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 Fp[2] Fi:1 Fi:1 Fi:1 Fi:1 Fc} vd 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 Fp FC7{ m Fi} Fi FC8{ m} Fi FC9{ BC10{ m Fp Fi[2]}} Fi Fp[2] FC11{ m FC12{ m Fi[3]} FC12 Fi} Fp Fi[2] Fc[3] Fi 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 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fc FC13{ m} Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC14{ BC9} Fp[2] Fc FC8 FC12 FC15{ m Fi[3]} Fi FC12 Fi:1 Fi:1 Fi:1 Fi[3]} vd v1 v2 v3 v4 Fp Fi[2]}


 S629C1 ::~S629C1(){ note_dtor("S629C1", this);}
void  S629C1 ::v1(){vfunc_called(this, "_ZN6S629C12v1Ev");}
void  S629C1 ::v2(){vfunc_called(this, "_ZN6S629C12v2Ev");}
void  S629C1 ::v3(){vfunc_called(this, "_ZN6S629C12v3Ev");}
void  S629C1 ::v4(){vfunc_called(this, "_ZN6S629C12v4Ev");}
S629C1 ::S629C1(){ note_ctor("S629C1", this);} // tgen

static void Test_S629C1()
{
  extern Class_Descriptor cd_S629C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,72)];
    init_test(&cd_S629C1, buf);
    S629C1 *dp, &lv = *(dp=new (buf) S629C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,284), "sizeof(S629C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S629C1)");
    check_base_class_offset(lv, (S629C5*)(S629C4_nt*)(S629C3_nt*)(S629C2_nt*), 0, "S629C1");
    check_base_class_offset(lv, (S629C4_nt*)(S629C3_nt*)(S629C2_nt*), 0, "S629C1");
    check_base_class_offset(lv, (S629C3_nt*)(S629C2_nt*), 0, "S629C1");
    check_base_class_offset(lv, (S629C2_nt*), 0, "S629C1");
    check_field_offset(lv, s629c1f0, ABISELECT(368,272), "S629C1.s629c1f0");
    check_field_offset(lv, s629c1f1, ABISELECT(376,276), "S629C1.s629c1f1");
    test_class_info(&lv, &cd_S629C1);
    dp->~S629C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS629C1(Test_S629C1, "S629C1", ABISELECT(384,284));

#else // __cplusplus

extern void _ZN6S629C1C1Ev();
extern void _ZN6S629C1D1Ev();
Name_Map name_map_S629C1[] = {
  NSPAIR(_ZN6S629C1C1Ev),
  NSPAIR(_ZN6S629C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S629C5;
extern VTBL_ENTRY _ZTI6S629C5[];
extern  VTBL_ENTRY _ZTV6S629C5[];
extern Class_Descriptor cd_S629C4_nt;
extern VTBL_ENTRY _ZTI9S629C4_nt[];
extern  VTBL_ENTRY _ZTV9S629C4_nt[];
extern Class_Descriptor cd_S629C3_nt;
extern VTBL_ENTRY _ZTI9S629C3_nt[];
extern  VTBL_ENTRY _ZTV9S629C3_nt[];
extern Class_Descriptor cd_S629C2_nt;
extern VTBL_ENTRY _ZTI9S629C2_nt[];
extern  VTBL_ENTRY _ZTV9S629C2_nt[];
static Base_Class bases_S629C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S629C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S629C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S629C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S629C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S629C1[];
extern void _ZN6S629C1D1Ev();
extern void _ZN6S629C1D0Ev();
extern void _ZN6S629C52v5Ev();
extern void _ZN6S629C52v6Ev();
extern void _ZN6S629C52v7Ev();
extern void _ZN6S629C52v8Ev();
extern void _ZN6S629C52v9Ev();
extern void _ZN6S629C53v10Ev();
extern void _ZN6S629C53v11Ev();
extern void _ZN6S629C53v12Ev();
extern void _ZN6S629C53v13Ev();
extern void _ZN6S629C53v14Ev();
extern void _ZN6S629C53v15Ev();
extern void _ZN6S629C53v16Ev();
extern void _ZN6S629C53v17Ev();
extern void _ZN6S629C53v18Ev();
extern void _ZN6S629C53v19Ev();
extern void _ZN6S629C53v20Ev();
extern void _ZN6S629C53v21Ev();
extern void _ZN6S629C53v22Ev();
extern void _ZN6S629C53v23Ev();
extern void _ZN6S629C53v24Ev();
extern void _ZN6S629C53v25Ev();
extern void _ZN6S629C53v26Ev();
extern void _ZN6S629C53v27Ev();
extern void _ZN6S629C53v28Ev();
extern void _ZN6S629C53v29Ev();
extern void _ZN6S629C53v30Ev();
extern void _ZN6S629C53v31Ev();
extern void _ZN6S629C53v32Ev();
extern void _ZN6S629C53v33Ev();
extern void _ZN6S629C53v34Ev();
extern void _ZN6S629C53v35Ev();
extern void _ZN6S629C53v36Ev();
extern void _ZN6S629C53v37Ev();
extern void _ZN6S629C53v38Ev();
extern void _ZN6S629C53v39Ev();
extern void _ZN6S629C53v40Ev();
extern void _ZN6S629C53v41Ev();
extern void _ZN6S629C53v42Ev();
extern void _ZN6S629C53v43Ev();
extern void _ZN6S629C53v44Ev();
extern void _ZN6S629C53v45Ev();
extern void _ZN6S629C53v46Ev();
extern void _ZN6S629C53v47Ev();
extern void _ZN6S629C53v48Ev();
extern void _ZN6S629C53v49Ev();
extern void _ZN6S629C53v50Ev();
extern void _ZN6S629C53v51Ev();
extern void _ZN6S629C53v52Ev();
extern void _ZN6S629C53v53Ev();
extern void _ZN6S629C53v54Ev();
extern void _ZN6S629C53v55Ev();
extern void _ZN6S629C53v56Ev();
extern void _ZN6S629C53v57Ev();
extern void _ZN6S629C53v58Ev();
extern void _ZN6S629C53v59Ev();
extern void _ZN6S629C53v60Ev();
extern void _ZN6S629C53v61Ev();
extern void _ZN6S629C53v62Ev();
extern void _ZN6S629C53v63Ev();
extern void _ZN6S629C53v64Ev();
extern void _ZN6S629C53v65Ev();
extern void _ZN6S629C53v66Ev();
extern void _ZN6S629C53v67Ev();
extern void _ZN6S629C53v68Ev();
extern void _ZN9S629C4_nt3v69Ev();
extern void _ZN9S629C4_nt3v70Ev();
extern void _ZN9S629C4_nt3v71Ev();
extern void _ZN9S629C4_nt3v72Ev();
extern void _ZN9S629C4_nt3v73Ev();
extern void _ZN9S629C3_nt3v74Ev();
extern void _ZN9S629C3_nt3v75Ev();
extern void _ZN9S629C3_nt3v76Ev();
extern void _ZN9S629C3_nt3v77Ev();
extern void _ZN9S629C3_nt3v78Ev();
extern void _ZN9S629C3_nt3v79Ev();
extern void _ZN9S629C3_nt3v80Ev();
extern void _ZN9S629C3_nt3v81Ev();
extern void _ZN9S629C3_nt3v82Ev();
extern void _ZN9S629C3_nt3v83Ev();
extern void _ZN9S629C3_nt3v84Ev();
extern void _ZN9S629C3_nt3v85Ev();
extern void _ZN9S629C3_nt3v86Ev();
extern void _ZN9S629C3_nt3v87Ev();
extern void _ZN9S629C3_nt3v88Ev();
extern void _ZN9S629C3_nt3v89Ev();
extern void _ZN9S629C3_nt3v90Ev();
extern void _ZN9S629C3_nt3v91Ev();
extern void _ZN9S629C3_nt3v92Ev();
extern void _ZN9S629C3_nt3v93Ev();
extern void _ZN9S629C3_nt3v94Ev();
extern void _ZN9S629C3_nt3v95Ev();
extern void _ZN9S629C2_nt3v96Ev();
extern void _ZN9S629C2_nt3v97Ev();
extern void _ZN9S629C2_nt3v98Ev();
extern void _ZN9S629C2_nt3v99Ev();
extern void _ZN9S629C2_nt4v100Ev();
extern void _ZN9S629C2_nt4v101Ev();
extern void _ZN9S629C2_nt4v102Ev();
extern void _ZN9S629C2_nt4v103Ev();
extern void _ZN9S629C2_nt4v104Ev();
extern void _ZN9S629C2_nt4v105Ev();
extern void _ZN9S629C2_nt4v106Ev();
extern void _ZN9S629C2_nt4v107Ev();
extern void _ZN9S629C2_nt4v108Ev();
extern void _ZN9S629C2_nt4v109Ev();
extern void _ZN9S629C2_nt4v110Ev();
extern void _ZN9S629C2_nt4v111Ev();
extern void _ZN9S629C2_nt4v112Ev();
extern void _ZN9S629C2_nt4v113Ev();
extern void _ZN9S629C2_nt4v114Ev();
extern void _ZN9S629C2_nt4v115Ev();
extern void _ZN9S629C2_nt4v116Ev();
extern void _ZN9S629C2_nt4v117Ev();
extern void _ZN9S629C2_nt4v118Ev();
extern void _ZN9S629C2_nt4v119Ev();
extern void _ZN9S629C2_nt4v120Ev();
extern void _ZN9S629C2_nt4v121Ev();
extern void _ZN9S629C2_nt4v122Ev();
extern void _ZN9S629C2_nt4v123Ev();
extern void _ZN9S629C2_nt4v124Ev();
extern void _ZN9S629C2_nt4v125Ev();
extern void _ZN9S629C2_nt4v126Ev();
extern void _ZN9S629C2_nt4v127Ev();
extern void _ZN9S629C2_nt4v128Ev();
extern void _ZN9S629C2_nt4v129Ev();
extern void _ZN9S629C2_nt4v130Ev();
extern void _ZN9S629C2_nt4v131Ev();
extern void _ZN9S629C2_nt4v132Ev();
extern void _ZN9S629C2_nt4v133Ev();
extern void _ZN9S629C2_nt4v134Ev();
extern void _ZN9S629C2_nt4v135Ev();
extern void _ZN9S629C2_nt4v136Ev();
extern void _ZN9S629C2_nt4v137Ev();
extern void _ZN9S629C2_nt4v138Ev();
extern void _ZN9S629C2_nt4v139Ev();
extern void _ZN9S629C2_nt4v140Ev();
extern void _ZN9S629C2_nt4v141Ev();
extern void _ZN9S629C2_nt4v142Ev();
extern void _ZN9S629C2_nt4v143Ev();
extern void _ZN9S629C2_nt4v144Ev();
extern void _ZN9S629C2_nt4v145Ev();
extern void _ZN9S629C2_nt4v146Ev();
extern void _ZN9S629C2_nt4v147Ev();
extern void _ZN9S629C2_nt4v148Ev();
extern void _ZN9S629C2_nt4v149Ev();
extern void _ZN9S629C2_nt4v150Ev();
extern void _ZN9S629C2_nt4v151Ev();
extern void _ZN9S629C2_nt4v152Ev();
extern void _ZN9S629C2_nt4v153Ev();
extern void _ZN9S629C2_nt4v154Ev();
extern void _ZN9S629C2_nt4v155Ev();
extern void _ZN9S629C2_nt4v156Ev();
extern void _ZN6S629C12v1Ev();
extern void _ZN6S629C12v2Ev();
extern void _ZN6S629C12v3Ev();
extern void _ZN6S629C12v4Ev();
static  VTBL_ENTRY vtc_S629C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S629C1[0]),
  (VTBL_ENTRY)&_ZN6S629C1D1Ev,
  (VTBL_ENTRY)&_ZN6S629C1D0Ev,
  (VTBL_ENTRY)&_ZN6S629C52v5Ev,
  (VTBL_ENTRY)&_ZN6S629C52v6Ev,
  (VTBL_ENTRY)&_ZN6S629C52v7Ev,
  (VTBL_ENTRY)&_ZN6S629C52v8Ev,
  (VTBL_ENTRY)&_ZN6S629C52v9Ev,
  (VTBL_ENTRY)&_ZN6S629C53v10Ev,
  (VTBL_ENTRY)&_ZN6S629C53v11Ev,
  (VTBL_ENTRY)&_ZN6S629C53v12Ev,
  (VTBL_ENTRY)&_ZN6S629C53v13Ev,
  (VTBL_ENTRY)&_ZN6S629C53v14Ev,
  (VTBL_ENTRY)&_ZN6S629C53v15Ev,
  (VTBL_ENTRY)&_ZN6S629C53v16Ev,
  (VTBL_ENTRY)&_ZN6S629C53v17Ev,
  (VTBL_ENTRY)&_ZN6S629C53v18Ev,
  (VTBL_ENTRY)&_ZN6S629C53v19Ev,
  (VTBL_ENTRY)&_ZN6S629C53v20Ev,
  (VTBL_ENTRY)&_ZN6S629C53v21Ev,
  (VTBL_ENTRY)&_ZN6S629C53v22Ev,
  (VTBL_ENTRY)&_ZN6S629C53v23Ev,
  (VTBL_ENTRY)&_ZN6S629C53v24Ev,
  (VTBL_ENTRY)&_ZN6S629C53v25Ev,
  (VTBL_ENTRY)&_ZN6S629C53v26Ev,
  (VTBL_ENTRY)&_ZN6S629C53v27Ev,
  (VTBL_ENTRY)&_ZN6S629C53v28Ev,
  (VTBL_ENTRY)&_ZN6S629C53v29Ev,
  (VTBL_ENTRY)&_ZN6S629C53v30Ev,
  (VTBL_ENTRY)&_ZN6S629C53v31Ev,
  (VTBL_ENTRY)&_ZN6S629C53v32Ev,
  (VTBL_ENTRY)&_ZN6S629C53v33Ev,
  (VTBL_ENTRY)&_ZN6S629C53v34Ev,
  (VTBL_ENTRY)&_ZN6S629C53v35Ev,
  (VTBL_ENTRY)&_ZN6S629C53v36Ev,
  (VTBL_ENTRY)&_ZN6S629C53v37Ev,
  (VTBL_ENTRY)&_ZN6S629C53v38Ev,
  (VTBL_ENTRY)&_ZN6S629C53v39Ev,
  (VTBL_ENTRY)&_ZN6S629C53v40Ev,
  (VTBL_ENTRY)&_ZN6S629C53v41Ev,
  (VTBL_ENTRY)&_ZN6S629C53v42Ev,
  (VTBL_ENTRY)&_ZN6S629C53v43Ev,
  (VTBL_ENTRY)&_ZN6S629C53v44Ev,
  (VTBL_ENTRY)&_ZN6S629C53v45Ev,
  (VTBL_ENTRY)&_ZN6S629C53v46Ev,
  (VTBL_ENTRY)&_ZN6S629C53v47Ev,
  (VTBL_ENTRY)&_ZN6S629C53v48Ev,
  (VTBL_ENTRY)&_ZN6S629C53v49Ev,
  (VTBL_ENTRY)&_ZN6S629C53v50Ev,
  (VTBL_ENTRY)&_ZN6S629C53v51Ev,
  (VTBL_ENTRY)&_ZN6S629C53v52Ev,
  (VTBL_ENTRY)&_ZN6S629C53v53Ev,
  (VTBL_ENTRY)&_ZN6S629C53v54Ev,
  (VTBL_ENTRY)&_ZN6S629C53v55Ev,
  (VTBL_ENTRY)&_ZN6S629C53v56Ev,
  (VTBL_ENTRY)&_ZN6S629C53v57Ev,
  (VTBL_ENTRY)&_ZN6S629C53v58Ev,
  (VTBL_ENTRY)&_ZN6S629C53v59Ev,
  (VTBL_ENTRY)&_ZN6S629C53v60Ev,
  (VTBL_ENTRY)&_ZN6S629C53v61Ev,
  (VTBL_ENTRY)&_ZN6S629C53v62Ev,
  (VTBL_ENTRY)&_ZN6S629C53v63Ev,
  (VTBL_ENTRY)&_ZN6S629C53v64Ev,
  (VTBL_ENTRY)&_ZN6S629C53v65Ev,
  (VTBL_ENTRY)&_ZN6S629C53v66Ev,
  (VTBL_ENTRY)&_ZN6S629C53v67Ev,
  (VTBL_ENTRY)&_ZN6S629C53v68Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v150Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v156Ev,
  (VTBL_ENTRY)&_ZN6S629C12v1Ev,
  (VTBL_ENTRY)&_ZN6S629C12v2Ev,
  (VTBL_ENTRY)&_ZN6S629C12v3Ev,
  (VTBL_ENTRY)&_ZN6S629C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S629C1[];
extern  VTBL_ENTRY _ZTV6S629C1[];
Class_Descriptor cd_S629C1 = {  "S629C1", // class name
  bases_S629C1, 4,
  &(vtc_S629C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(384,284), // object size
  NSPAIRA(_ZTI6S629C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S629C1),160, //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  S20677C3  {
  void *s20677c3f0;
  __tsi64 s20677c3f1[4];
  short s20677c3f2;
  void  mf20677c3(); // _ZN8S20677C39mf20677c3Ev
};
//SIG(-1 S20677C3) C1{ m Fp FL[4] Fs}


void  S20677C3 ::mf20677c3(){}

static void Test_S20677C3()
{
  {
    init_simple_test("S20677C3");
    S20677C3 lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S20677C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20677C3)");
    check_field_offset(lv, s20677c3f0, 0, "S20677C3.s20677c3f0");
    check_field_offset(lv, s20677c3f1, ABISELECT(8,4), "S20677C3.s20677c3f1");
    check_field_offset(lv, s20677c3f2, ABISELECT(40,36), "S20677C3.s20677c3f2");
  }
}
static Arrange_To_Call_Me vS20677C3(Test_S20677C3, "S20677C3", ABISELECT(48,40));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S20677C3[];
VTBL_ENTRY *P__ZTI8S20677C3 = _ZTI8S20677C3; 
Class_Descriptor cd_S20677C3 = {  "S20677C3", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI8S20677C3),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  S20677C5  : virtual S20677C3 {
  long double s20677c5f0;
  int s20677c5f1;
  ::S20677C3 s20677c5f2;
  ::S20677C3 s20677c5f3;
  ~S20677C5(); // tgen
  S20677C5(); // tgen
};
//SIG(-1 S20677C5) C1{ VBC2{ m Fp FL[4] Fs} FD Fi FC2 FC2}


S20677C5 ::~S20677C5(){ note_dtor("S20677C5", this);} // tgen
S20677C5 ::S20677C5(){ note_ctor("S20677C5", this);} // tgen

static void Test_S20677C5()
{
  extern Class_Descriptor cd_S20677C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,36)];
    init_test(&cd_S20677C5, buf);
    S20677C5 *dp, &lv = *(dp=new (buf) S20677C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S20677C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C5)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(136,100), "S20677C5");
    check_field_offset(lv, s20677c5f0, ABISELECT(16,4), "S20677C5.s20677c5f0");
    check_field_offset(lv, s20677c5f1, ABISELECT(32,16), "S20677C5.s20677c5f1");
    check_field_offset(lv, s20677c5f2, ABISELECT(40,20), "S20677C5.s20677c5f2");
    check_field_offset(lv, s20677c5f3, ABISELECT(88,60), "S20677C5.s20677c5f3");
    test_class_info(&lv, &cd_S20677C5);
    dp->~S20677C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C5(Test_S20677C5, "S20677C5", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN8S20677C5C1Ev();
extern void _ZN8S20677C5D1Ev();
Name_Map name_map_S20677C5[] = {
  NSPAIR(_ZN8S20677C5C1Ev),
  NSPAIR(_ZN8S20677C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20677C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(136,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20677C5[];
static  VTBL_ENTRY vtc_S20677C5[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern VTBL_ENTRY _ZTV8S20677C5[];
static  VTT_ENTRY vtt_S20677C5[] = {
  {&(_ZTV8S20677C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
Class_Descriptor cd_S20677C5 = {  "S20677C5", // class name
  bases_S20677C5, 1,
  &(vtc_S20677C5[0]), // expected_vtbl_contents
  &(vtt_S20677C5[0]), // expected_vtt_contents
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI8S20677C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20677C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20677C5),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  S20677C4  : virtual S20677C3 , S20677C5 {
  short s20677c4f0;
  __tsi64 s20677c4f1;
  char s20677c4f2;
  int s20677c4f3[2];
  ::S20677C5 s20677c4f4;
  void *s20677c4f5;
  __tsi64 s20677c4f6;
  int s20677c4f7;
  __tsi64 s20677c4f8;
  int s20677c4f9;
  virtual void  v2(); // _ZN8S20677C42v2Ev
  virtual void  v3(); // _ZN8S20677C42v3Ev
  virtual void  v4(); // _ZN8S20677C42v4Ev
  ~S20677C4(); // tgen
  S20677C4(); // tgen
};
//SIG(-1 S20677C4) C1{ VBC2{ m Fp FL[4] Fs} BC3{ VBC2 FD Fi FC2 FC2} v1 v2 v3 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi}


void  S20677C4 ::v2(){vfunc_called(this, "_ZN8S20677C42v2Ev");}
void  S20677C4 ::v3(){vfunc_called(this, "_ZN8S20677C42v3Ev");}
void  S20677C4 ::v4(){vfunc_called(this, "_ZN8S20677C42v4Ev");}
S20677C4 ::~S20677C4(){ note_dtor("S20677C4", this);} // tgen
S20677C4 ::S20677C4(){ note_ctor("S20677C4", this);} // tgen

static void Test_S20677C4()
{
  extern Class_Descriptor cd_S20677C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,84)];
    init_test(&cd_S20677C4, buf);
    S20677C4 *dp, &lv = *(dp=new (buf) S20677C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,332), "sizeof(S20677C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C4)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(408,292), "S20677C4");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(408,292), "S20677C4");
    check_base_class_offset(lv, (S20677C5*), 0, "S20677C4");
    check_field_offset(lv, s20677c4f0, ABISELECT(136,100), "S20677C4.s20677c4f0");
    check_field_offset(lv, s20677c4f1, ABISELECT(144,104), "S20677C4.s20677c4f1");
    check_field_offset(lv, s20677c4f2, ABISELECT(152,112), "S20677C4.s20677c4f2");
    check_field_offset(lv, s20677c4f3, ABISELECT(156,116), "S20677C4.s20677c4f3");
    check_field_offset(lv, s20677c4f4, ABISELECT(176,124), "S20677C4.s20677c4f4");
    check_field_offset(lv, s20677c4f5, ABISELECT(368,264), "S20677C4.s20677c4f5");
    check_field_offset(lv, s20677c4f6, ABISELECT(376,268), "S20677C4.s20677c4f6");
    check_field_offset(lv, s20677c4f7, ABISELECT(384,276), "S20677C4.s20677c4f7");
    check_field_offset(lv, s20677c4f8, ABISELECT(392,280), "S20677C4.s20677c4f8");
    check_field_offset(lv, s20677c4f9, ABISELECT(400,288), "S20677C4.s20677c4f9");
    test_class_info(&lv, &cd_S20677C4);
    dp->~S20677C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C4(Test_S20677C4, "S20677C4", ABISELECT(464,332));

#else // __cplusplus

extern void _ZN8S20677C4C1Ev();
extern void _ZN8S20677C4D1Ev();
Name_Map name_map_S20677C4[] = {
  NSPAIR(_ZN8S20677C4C1Ev),
  NSPAIR(_ZN8S20677C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
static Base_Class bases_S20677C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(408,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C5,    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 _ZTI8S20677C4[];
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY vtc_S20677C4[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S20677C4[];
static  VTBL_ENTRY _tg__ZTV8S20677C5__8S20677C4[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTT_ENTRY vtt_S20677C4[] = {
  {&(_ZTV8S20677C4[3]),  3,6},
  {&(_tg__ZTV8S20677C5__8S20677C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
Class_Descriptor cd_S20677C4 = {  "S20677C4", // class name
  bases_S20677C4, 2,
  &(vtc_S20677C4[0]), // expected_vtbl_contents
  &(vtt_S20677C4[0]), // expected_vtt_contents
  ABISELECT(464,332), // object size
  NSPAIRA(_ZTI8S20677C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20677C4),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20677C4),2, //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  S20677C6_nt  {
};
//SIG(-1 S20677C6_nt) C1{}



//skip512 S20677C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20677C2  : virtual S20677C3 , virtual S20677C4 {
  __tsi64 s20677c2f0;
  ::S20677C6_nt s20677c2f1;
  void *s20677c2f2;
  char s20677c2f3[2];
  ::S20677C3 s20677c2f4;
  long s20677c2f5;
  ::S20677C6_nt s20677c2f6;
  virtual void  v5(); // _ZN8S20677C22v5Ev
  virtual void  v6(); // _ZN8S20677C22v6Ev
  virtual void  v7(); // _ZN8S20677C22v7Ev
  ~S20677C2(); // tgen
  S20677C2(); // tgen
};
//SIG(-1 S20677C2) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 BC4{ VBC2 FD Fi FC2 FC2} v4 v5 v6 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} v1 v2 v3 FL FC5{} Fp Fc[2] FC2 Fl FC5}


void  S20677C2 ::v5(){vfunc_called(this, "_ZN8S20677C22v5Ev");}
void  S20677C2 ::v6(){vfunc_called(this, "_ZN8S20677C22v6Ev");}
void  S20677C2 ::v7(){vfunc_called(this, "_ZN8S20677C22v7Ev");}
S20677C2 ::~S20677C2(){ note_dtor("S20677C2", this);} // tgen
S20677C2 ::S20677C2(){ note_ctor("S20677C2", this);} // tgen

static void Test_S20677C2()
{
  extern Class_Descriptor cd_S20677C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,102)];
    init_test(&cd_S20677C2, buf);
    S20677C2 *dp, &lv = *(dp=new (buf) S20677C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,404), "sizeof(S20677C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C2)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(104,72), "S20677C2");
    check_base_class_offset(lv, (S20677C3*)(S20677C4*), ABISELECT(104,72), "S20677C2");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*), ABISELECT(104,72), "S20677C2");
    check_base_class_offset(lv, (S20677C5*)(S20677C4*), ABISELECT(160,112), "S20677C2");
    check_base_class_offset(lv, (S20677C4*), ABISELECT(160,112), "S20677C2");
    check_field_offset(lv, s20677c2f0, ABISELECT(8,4), "S20677C2.s20677c2f0");
    check_field_offset(lv, s20677c2f1, ABISELECT(16,12), "S20677C2.s20677c2f1");
    check_field_offset(lv, s20677c2f2, ABISELECT(24,16), "S20677C2.s20677c2f2");
    check_field_offset(lv, s20677c2f3, ABISELECT(32,20), "S20677C2.s20677c2f3");
    check_field_offset(lv, s20677c2f4, ABISELECT(40,24), "S20677C2.s20677c2f4");
    check_field_offset(lv, s20677c2f5, ABISELECT(88,64), "S20677C2.s20677c2f5");
    check_field_offset(lv, s20677c2f6, ABISELECT(96,68), "S20677C2.s20677c2f6");
    test_class_info(&lv, &cd_S20677C2);
    dp->~S20677C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C2(Test_S20677C2, "S20677C2", ABISELECT(576,404));

#else // __cplusplus

extern void _ZN8S20677C2C1Ev();
extern void _ZN8S20677C2D1Ev();
Name_Map name_map_S20677C2[] = {
  NSPAIR(_ZN8S20677C2C1Ev),
  NSPAIR(_ZN8S20677C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
static Base_Class bases_S20677C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(104,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C5,    ABISELECT(160,112), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20677C4,    ABISELECT(160,112), //bcp->offset
    7, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20677C2[];
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY vtc_S20677C2[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S20677C2[];
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__8S20677C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C4__8S20677C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTT_ENTRY vtt_S20677C2[] = {
  {&(_ZTV8S20677C2[4]),  4,16},
  {&(_ZTV8S20677C2[13]),  13,16},
  {&(_tg__ZTV8S20677C4__8S20677C2[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C4__8S20677C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20677C2[];
extern  VTBL_ENTRY _ZTV8S20677C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C2[];
Class_Descriptor cd_S20677C2 = {  "S20677C2", // class name
  bases_S20677C2, 3,
  &(vtc_S20677C2[0]), // expected_vtbl_contents
  &(vtt_S20677C2[0]), // expected_vtt_contents
  ABISELECT(576,404), // object size
  NSPAIRA(_ZTI8S20677C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20677C2),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20677C2),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  S20677C8  {
  ::S20677C6_nt s20677c8f0;
  ::S20677C5 s20677c8f1;
  ::S20677C6_nt s20677c8f2;
  __tsi64 s20677c8f3;
  ::S20677C6_nt s20677c8f4;
  void *s20677c8f5;
  ::S20677C6_nt s20677c8f6;
  void *s20677c8f7[2];
  ::S20677C6_nt s20677c8f8;
  virtual void  v8(); // _ZN8S20677C82v8Ev
  ~S20677C8(); // tgen
  S20677C8(); // tgen
};
//SIG(-1 S20677C8) C1{ v1 FC2{} FC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} FC2 FL FC2 Fp FC2 Fp[2] FC2}


void  S20677C8 ::v8(){vfunc_called(this, "_ZN8S20677C82v8Ev");}
S20677C8 ::~S20677C8(){ note_dtor("S20677C8", this);} // tgen
S20677C8 ::S20677C8(){ note_ctor("S20677C8", this);} // tgen

static void Test_S20677C8()
{
  extern Class_Descriptor cd_S20677C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,47)];
    init_test(&cd_S20677C8, buf);
    S20677C8 *dp, &lv = *(dp=new (buf) S20677C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,184), "sizeof(S20677C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C8)");
    check_field_offset(lv, s20677c8f0, ABISELECT(8,4), "S20677C8.s20677c8f0");
    check_field_offset(lv, s20677c8f1, ABISELECT(16,8), "S20677C8.s20677c8f1");
    check_field_offset(lv, s20677c8f2, ABISELECT(208,148), "S20677C8.s20677c8f2");
    check_field_offset(lv, s20677c8f3, ABISELECT(216,152), "S20677C8.s20677c8f3");
    check_field_offset(lv, s20677c8f4, ABISELECT(224,160), "S20677C8.s20677c8f4");
    check_field_offset(lv, s20677c8f5, ABISELECT(232,164), "S20677C8.s20677c8f5");
    check_field_offset(lv, s20677c8f6, ABISELECT(240,168), "S20677C8.s20677c8f6");
    check_field_offset(lv, s20677c8f7, ABISELECT(248,172), "S20677C8.s20677c8f7");
    check_field_offset(lv, s20677c8f8, ABISELECT(264,180), "S20677C8.s20677c8f8");
    test_class_info(&lv, &cd_S20677C8);
    dp->~S20677C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C8(Test_S20677C8, "S20677C8", ABISELECT(272,184));

#else // __cplusplus

extern void _ZN8S20677C8C1Ev();
extern void _ZN8S20677C8D1Ev();
Name_Map name_map_S20677C8[] = {
  NSPAIR(_ZN8S20677C8C1Ev),
  NSPAIR(_ZN8S20677C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20677C8[];
extern void _ZN8S20677C82v8Ev();
static  VTBL_ENTRY vtc_S20677C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C8[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
};
extern VTBL_ENTRY _ZTI8S20677C8[];
extern  VTBL_ENTRY _ZTV8S20677C8[];
Class_Descriptor cd_S20677C8 = {  "S20677C8", // class name
  0,0,//no base classes
  &(vtc_S20677C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,184), // object size
  NSPAIRA(_ZTI8S20677C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20677C8),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  S20677C9  : S20677C3 {
  ::S20677C3 s20677c9f0;
  int s20677c9f1;
  long double s20677c9f2;
  int s20677c9f3;
  __tsi64 s20677c9f4;
  long s20677c9f5;
};
//SIG(-1 S20677C9) C1{ BC2{ m Fp FL[4] Fs} FC2 Fi FD Fi FL Fl}



static void Test_S20677C9()
{
  extern Class_Descriptor cd_S20677C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S20677C9, buf);
    S20677C9 &lv = *(new (buf) S20677C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20677C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C9)");
    check_base_class_offset(lv, (S20677C3*), 0, "S20677C9");
    check_field_offset(lv, s20677c9f0, ABISELECT(48,40), "S20677C9.s20677c9f0");
    check_field_offset(lv, s20677c9f1, ABISELECT(96,80), "S20677C9.s20677c9f1");
    check_field_offset(lv, s20677c9f2, ABISELECT(112,84), "S20677C9.s20677c9f2");
    check_field_offset(lv, s20677c9f3, ABISELECT(128,96), "S20677C9.s20677c9f3");
    check_field_offset(lv, s20677c9f4, ABISELECT(136,100), "S20677C9.s20677c9f4");
    check_field_offset(lv, s20677c9f5, ABISELECT(144,108), "S20677C9.s20677c9f5");
    test_class_info(&lv, &cd_S20677C9);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C9(Test_S20677C9, "S20677C9", ABISELECT(160,112));

#else // __cplusplus

extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20677C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20677C9[];
Class_Descriptor cd_S20677C9 = {  "S20677C9", // class name
  bases_S20677C9, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI8S20677C9),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  S20677C7  : virtual S20677C8 , S20677C5 , S20677C9 {
  void *s20677c7f0;
  ::S20677C9 s20677c7f1;
  void *s20677c7f2;
  int s20677c7f3[2];
  long double s20677c7f4;
  int s20677c7f5[2];
  virtual void  v9(); // _ZN8S20677C72v9Ev
  ~S20677C7(); // tgen
  S20677C7(); // tgen
};
//SIG(-1 S20677C7) C1{ VBC2{ v2 FC3{} FC4{ VBC5{ m Fp FL[4] Fs} FD Fi FC5 FC5} FC3 FL FC3 Fp FC3 Fp[2] FC3} BC4 BC6{ BC5 FC5 Fi FD Fi FL Fl} v1 Fp FC6 Fp Fi[2] FD Fi[2]}


void  S20677C7 ::v9(){vfunc_called(this, "_ZN8S20677C72v9Ev");}
S20677C7 ::~S20677C7(){ note_dtor("S20677C7", this);} // tgen
S20677C7 ::S20677C7(){ note_ctor("S20677C7", this);} // tgen

static void Test_S20677C7()
{
  extern Class_Descriptor cd_S20677C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(53,147)];
    init_test(&cd_S20677C7, buf);
    S20677C7 *dp, &lv = *(dp=new (buf) S20677C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(832,584), "sizeof(S20677C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C7)");
    check_base_class_offset(lv, (S20677C8*), ABISELECT(512,360), "S20677C7");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(784,544), "S20677C7");
    check_base_class_offset(lv, (S20677C5*), 0, "S20677C7");
    check_base_class_offset(lv, (S20677C3*)(S20677C9*), ABISELECT(144,100), "S20677C7");
    check_base_class_offset(lv, (S20677C9*), ABISELECT(144,100), "S20677C7");
    check_field_offset(lv, s20677c7f0, ABISELECT(296,212), "S20677C7.s20677c7f0");
    check_field_offset(lv, s20677c7f1, ABISELECT(304,216), "S20677C7.s20677c7f1");
    check_field_offset(lv, s20677c7f2, ABISELECT(464,328), "S20677C7.s20677c7f2");
    check_field_offset(lv, s20677c7f3, ABISELECT(472,332), "S20677C7.s20677c7f3");
    check_field_offset(lv, s20677c7f4, ABISELECT(480,340), "S20677C7.s20677c7f4");
    check_field_offset(lv, s20677c7f5, ABISELECT(496,352), "S20677C7.s20677c7f5");
    test_class_info(&lv, &cd_S20677C7);
    dp->~S20677C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C7(Test_S20677C7, "S20677C7", ABISELECT(832,584));

#else // __cplusplus

extern void _ZN8S20677C7C1Ev();
extern void _ZN8S20677C7D1Ev();
Name_Map name_map_S20677C7[] = {
  NSPAIR(_ZN8S20677C7C1Ev),
  NSPAIR(_ZN8S20677C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C8;
extern VTBL_ENTRY _ZTI8S20677C8[];
extern  VTBL_ENTRY _ZTV8S20677C8[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C9;
extern VTBL_ENTRY _ZTI8S20677C9[];
static Base_Class bases_S20677C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C8,    ABISELECT(512,360), //bcp->offset
    5, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C3,    ABISELECT(784,544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20677C5,    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_S20677C3,    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
    4, //immediately_derived
  0, 0},
  {&cd_S20677C9,    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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20677C7[];
extern void _ZN8S20677C72v9Ev();
extern void _ZN8S20677C82v8Ev();
static  VTBL_ENTRY vtc_S20677C7[] = {
  ABISELECT(512,360),
  ABISELECT(784,544),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C7[0]),
  (VTBL_ENTRY)&_ZN8S20677C72v9Ev,
  0,
  ABISELECT(-512,-360),
  (VTBL_ENTRY)&(_ZTI8S20677C7[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
};
extern VTBL_ENTRY _ZTV8S20677C7[];
static  VTBL_ENTRY _tg__ZTV8S20677C5__8S20677C7[] = {
  ABISELECT(784,544),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTT_ENTRY vtt_S20677C7[] = {
  {&(_ZTV8S20677C7[4]),  4,9},
  {&(_tg__ZTV8S20677C5__8S20677C7[3]),  3,3},
  {&(_ZTV8S20677C7[8]),  8,9},
};
extern VTBL_ENTRY _ZTI8S20677C7[];
extern  VTBL_ENTRY _ZTV8S20677C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C7[];
Class_Descriptor cd_S20677C7 = {  "S20677C7", // class name
  bases_S20677C7, 5,
  &(vtc_S20677C7[0]), // expected_vtbl_contents
  &(vtt_S20677C7[0]), // expected_vtt_contents
  ABISELECT(832,584), // object size
  NSPAIRA(_ZTI8S20677C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20677C7),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20677C7),3, //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  S20677C12  : virtual S20677C3 , virtual S20677C5 {
  int s20677c12f0;
  ::S20677C5 s20677c12f1;
  __tsi64 s20677c12f2;
  int s20677c12f3;
  void *s20677c12f4;
  virtual void  v10(); // _ZN9S20677C123v10Ev
  virtual void  v11(); // _ZN9S20677C123v11Ev
  ~S20677C12(); // tgen
  S20677C12(); // tgen
};
//SIG(-1 S20677C12) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 FD Fi FC2 FC2} v1 v2 Fi FC3 FL Fi Fp}


void  S20677C12 ::v10(){vfunc_called(this, "_ZN9S20677C123v10Ev");}
void  S20677C12 ::v11(){vfunc_called(this, "_ZN9S20677C123v11Ev");}
S20677C12 ::~S20677C12(){ note_dtor("S20677C12", this);} // tgen
S20677C12 ::S20677C12(){ note_ctor("S20677C12", this);} // tgen

static void Test_S20677C12()
{
  extern Class_Descriptor cd_S20677C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,77)];
    init_test(&cd_S20677C12, buf);
    S20677C12 *dp, &lv = *(dp=new (buf) S20677C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,304), "sizeof(S20677C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C12)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(232,164), "S20677C12");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(232,164), "S20677C12");
    check_base_class_offset(lv, (S20677C5*), ABISELECT(288,204), "S20677C12");
    check_field_offset(lv, s20677c12f0, ABISELECT(8,4), "S20677C12.s20677c12f0");
    check_field_offset(lv, s20677c12f1, ABISELECT(16,8), "S20677C12.s20677c12f1");
    check_field_offset(lv, s20677c12f2, ABISELECT(208,148), "S20677C12.s20677c12f2");
    check_field_offset(lv, s20677c12f3, ABISELECT(216,156), "S20677C12.s20677c12f3");
    check_field_offset(lv, s20677c12f4, ABISELECT(224,160), "S20677C12.s20677c12f4");
    test_class_info(&lv, &cd_S20677C12);
    dp->~S20677C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C12(Test_S20677C12, "S20677C12", ABISELECT(432,304));

#else // __cplusplus

extern void _ZN9S20677C12C1Ev();
extern void _ZN9S20677C12D1Ev();
Name_Map name_map_S20677C12[] = {
  NSPAIR(_ZN9S20677C12C1Ev),
  NSPAIR(_ZN9S20677C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
static Base_Class bases_S20677C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(232,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_S20677C5,    ABISELECT(288,204), //bcp->offset
    6, //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 _ZTI9S20677C12[];
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY vtc_S20677C12[] = {
  ABISELECT(288,204),
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  ABISELECT(-56,-40),
  ABISELECT(-288,-204),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
extern VTBL_ENTRY _ZTV9S20677C12[];
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTT_ENTRY vtt_S20677C12[] = {
  {&(_ZTV9S20677C12[4]),  4,9},
  {&(_ZTV9S20677C12[9]),  9,9},
  {&(_tg__ZTV8S20677C5__9S20677C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
Class_Descriptor cd_S20677C12 = {  "S20677C12", // class name
  bases_S20677C12, 2,
  &(vtc_S20677C12[0]), // expected_vtbl_contents
  &(vtt_S20677C12[0]), // expected_vtt_contents
  ABISELECT(432,304), // object size
  NSPAIRA(_ZTI9S20677C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20677C12),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20677C12),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  S20677C11  : virtual S20677C4 , virtual S20677C2 , virtual S20677C12 {
  ::S20677C6_nt s20677c11f0;
  ::S20677C6_nt s20677c11f1;
  int s20677c11f2;
  ::S20677C5 s20677c11f3;
  ::S20677C6_nt s20677c11f4;
  ::S20677C6_nt s20677c11f5;
  ::S20677C8 s20677c11f6;
  ::S20677C2 s20677c11f7;
  void *s20677c11f8;
  ::S20677C6_nt s20677c11f9;
  virtual void  v12(); // _ZN9S20677C113v12Ev
  virtual void  v13(); // _ZN9S20677C113v13Ev
  ~S20677C11(); // tgen
  S20677C11(); // tgen
};
//SIG(-1 S20677C11) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} BC4{ VBC3 FD Fi FC3 FC3} v3 v4 v5 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC5{ VBC3 VBC2 v6 v7 v8 FL FC6{} Fp Fc[2] FC3 Fl FC6} VBC7{ VBC3 VBC4 v9 v10 Fi FC4 FL Fi Fp} v1 v2 FC6 FC6 Fi FC4 FC6 FC6 FC8{ v11 FC6 FC4 FC6 FL FC6 Fp FC6 Fp[2] FC6} FC5 Fp FC6}


void  S20677C11 ::v12(){vfunc_called(this, "_ZN9S20677C113v12Ev");}
void  S20677C11 ::v13(){vfunc_called(this, "_ZN9S20677C113v13Ev");}
S20677C11 ::~S20677C11(){ note_dtor("S20677C11", this);} // tgen
S20677C11 ::S20677C11(){ note_ctor("S20677C11", this);} // tgen

static void Test_S20677C11()
{
  extern Class_Descriptor cd_S20677C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(128,356)];
    init_test(&cd_S20677C11, buf);
    S20677C11 *dp, &lv = *(dp=new (buf) S20677C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2032,1420), "sizeof(S20677C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C11)");
    check_base_class_offset(lv, (S20677C3*)(S20677C4*), ABISELECT(1496,1044), "S20677C11");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*), ABISELECT(1496,1044), "S20677C11");
    check_base_class_offset(lv, (S20677C3*)(S20677C2*), ABISELECT(1496,1044), "S20677C11");
    check_base_class_offset(lv, (S20677C3*)(S20677C12*), ABISELECT(1496,1044), "S20677C11");
    /*is_ambiguous_... S20677C11::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(1496,1044), "S20677C11");
    check_base_class_offset(lv, (S20677C5*)(S20677C4*), ABISELECT(1088,752), "S20677C11");
    check_base_class_offset(lv, (S20677C4*), ABISELECT(1088,752), "S20677C11");
    check_base_class_offset(lv, (S20677C4*)(S20677C2*), ABISELECT(1088,752), "S20677C11");
    check_base_class_offset(lv, (S20677C2*), ABISELECT(1544,1084), "S20677C11");
    check_base_class_offset(lv, (S20677C5*)(S20677C12*), ABISELECT(1888,1320), "S20677C11");
    check_base_class_offset(lv, (S20677C12*), ABISELECT(1648,1156), "S20677C11");
    check_field_offset(lv, s20677c11f0, ABISELECT(8,4), "S20677C11.s20677c11f0");
    check_field_offset(lv, s20677c11f1, ABISELECT(9,5), "S20677C11.s20677c11f1");
    check_field_offset(lv, s20677c11f2, ABISELECT(12,8), "S20677C11.s20677c11f2");
    check_field_offset(lv, s20677c11f3, ABISELECT(16,12), "S20677C11.s20677c11f3");
    check_field_offset(lv, s20677c11f4, ABISELECT(208,152), "S20677C11.s20677c11f4");
    check_field_offset(lv, s20677c11f5, ABISELECT(209,153), "S20677C11.s20677c11f5");
    check_field_offset(lv, s20677c11f6, ABISELECT(224,156), "S20677C11.s20677c11f6");
    check_field_offset(lv, s20677c11f7, ABISELECT(496,340), "S20677C11.s20677c11f7");
    check_field_offset(lv, s20677c11f8, ABISELECT(1072,744), "S20677C11.s20677c11f8");
    check_field_offset(lv, s20677c11f9, ABISELECT(1080,748), "S20677C11.s20677c11f9");
    test_class_info(&lv, &cd_S20677C11);
    dp->~S20677C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C11(Test_S20677C11, "S20677C11", ABISELECT(2032,1420));

#else // __cplusplus

extern void _ZN9S20677C11C1Ev();
extern void _ZN9S20677C11D1Ev();
Name_Map name_map_S20677C11[] = {
  NSPAIR(_ZN9S20677C11C1Ev),
  NSPAIR(_ZN9S20677C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C2;
extern VTBL_ENTRY _ZTI8S20677C2[];
extern  VTBL_ENTRY _ZTV8S20677C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C2[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
static Base_Class bases_S20677C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1496,1044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20677C5,    ABISELECT(1088,752), //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_S20677C4,    ABISELECT(1088,752), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C2,    ABISELECT(1544,1084), //bcp->offset
    18, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C5,    ABISELECT(1888,1320), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20677C12,    ABISELECT(1648,1156), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20677C11[];
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY vtc_S20677C11[] = {
  ABISELECT(1888,1320),
  ABISELECT(1648,1156),
  ABISELECT(1544,1084),
  ABISELECT(1496,1044),
  ABISELECT(1088,752),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-1544,-1084),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-1648,-1156),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  ABISELECT(-392,-276),
  ABISELECT(-1888,-1320),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
};
extern VTBL_ENTRY _ZTV9S20677C11[];
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C11[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C4__9S20677C11[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C11[] = {
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__8S20677C2__9S20677C11[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(456,332),
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C11[] = {
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12__9S20677C11[] = {
  ABISELECT(-392,-276),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C11[] = {
  ABISELECT(-392,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTT_ENTRY vtt_S20677C11[] = {
  {&(_ZTV9S20677C11[7]),  7,39},
  {&(_ZTV9S20677C11[15]),  15,39},
  {&(_ZTV9S20677C11[25]),  25,39},
  {&(_ZTV9S20677C11[34]),  34,39},
  {&(_ZTV9S20677C11[39]),  39,39},
  {&(_tg__ZTV8S20677C4__9S20677C11[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C4__9S20677C11[3]),  3,3},
  {&(_tg__ZTV8S20677C2__9S20677C11[4]),  4,7},
  {&(_tg__ZTV8S20677C4__8S20677C2__9S20677C11[6]),  6,9},
  {&(_tg__ZTV9S20677C12__9S20677C11[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C12__9S20677C11[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A1__9S20677C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20677C11[];
extern  VTBL_ENTRY _ZTV9S20677C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C11[];
Class_Descriptor cd_S20677C11 = {  "S20677C11", // class name
  bases_S20677C11, 6,
  &(vtc_S20677C11[0]), // expected_vtbl_contents
  &(vtt_S20677C11[0]), // expected_vtt_contents
  ABISELECT(2032,1420), // object size
  NSPAIRA(_ZTI9S20677C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20677C11),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20677C11),12, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20677C13  : virtual S20677C5 , S20677C11 , S20677C12 {
  int s20677c13f0;
  char s20677c13f1:2;
  ::S20677C6_nt s20677c13f2;
  int s20677c13f3;
  ~S20677C13(); // tgen
  S20677C13(); // tgen
};
//SIG(-1 S20677C13) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} FD Fi FC3 FC3} BC4{ VBC5{ VBC3 BC2 v1 v2 v3 Fs FL Fc Fi[2] FC2 Fp FL Fi FL Fi} VBC6{ VBC3 VBC5 v4 v5 v6 FL FC7{} Fp Fc[2] FC3 Fl FC7} VBC8{ VBC3 VBC2 v7 v8 Fi FC2 FL Fi Fp} v9 v10 FC7 FC7 Fi FC2 FC7 FC7 FC9{ v11 FC7 FC2 FC7 FL FC7 Fp FC7 Fp[2] FC7} FC6 Fp FC7} BC8 Fi Fc:2 FC7 Fi}


S20677C13 ::~S20677C13(){ note_dtor("S20677C13", this);} // tgen
S20677C13 ::S20677C13(){ note_ctor("S20677C13", this);} // tgen

static void Test_S20677C13()
{
  extern Class_Descriptor cd_S20677C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(144,400)];
    init_test(&cd_S20677C13, buf);
    S20677C13 *dp, &lv = *(dp=new (buf) S20677C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2288,1596), "sizeof(S20677C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C13)");
    /*is_ambiguous_... S20677C13::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(1480,1028), "S20677C13");
    check_base_class_offset(lv, (S20677C3*)(S20677C4*), ABISELECT(1480,1028), "S20677C13");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*), ABISELECT(1480,1028), "S20677C13");
    check_base_class_offset(lv, (S20677C3*)(S20677C2*), ABISELECT(1480,1028), "S20677C13");
    /*is_ambiguous_... S20677C13::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C12*), ABISELECT(1480,1028), "S20677C13");
    /*is_ambiguous_... S20677C13::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C12*), ABISELECT(1480,1028), "S20677C13");
    /*is_ambiguous_... S20677C13::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C5*), ABISELECT(1344,928), "S20677C13");
    /*is_ambiguous_... S20677C13::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C12*), ABISELECT(1344,928), "S20677C13");
    /*is_ambiguous_... S20677C13::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C12*), ABISELECT(1344,928), "S20677C13");
    check_base_class_offset(lv, (S20677C5*)(S20677C4*), ABISELECT(1536,1068), "S20677C13");
    check_base_class_offset(lv, (S20677C4*)(S20677C11*), ABISELECT(1536,1068), "S20677C13");
    check_base_class_offset(lv, (S20677C4*)(S20677C2*), ABISELECT(1536,1068), "S20677C13");
    check_base_class_offset(lv, (S20677C2*)(S20677C11*), ABISELECT(1944,1360), "S20677C13");
    check_base_class_offset(lv, (S20677C12*)(S20677C11*), ABISELECT(2048,1432), "S20677C13");
    check_base_class_offset(lv, (S20677C11*), 0, "S20677C13");
    /*is_ambiguous_... S20677C13::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C12*), ABISELECT(1088,752), "S20677C13");
    check_field_offset(lv, s20677c13f0, ABISELECT(1320,916), "S20677C13.s20677c13f0");
    set_bf_and_test(lv, s20677c13f1, ABISELECT(1324,920), 0, 2, 1, "S20677C13");
    set_bf_and_test(lv, s20677c13f1, ABISELECT(1324,920), 0, 2, hide_sll(1LL<<1), "S20677C13");
    check_field_offset(lv, s20677c13f2, ABISELECT(1325,921), "S20677C13.s20677c13f2");
    check_field_offset(lv, s20677c13f3, ABISELECT(1328,924), "S20677C13.s20677c13f3");
    test_class_info(&lv, &cd_S20677C13);
    dp->~S20677C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C13(Test_S20677C13, "S20677C13", ABISELECT(2288,1596));

#else // __cplusplus

extern void _ZN9S20677C13C1Ev();
extern void _ZN9S20677C13D1Ev();
Name_Map name_map_S20677C13[] = {
  NSPAIR(_ZN9S20677C13C1Ev),
  NSPAIR(_ZN9S20677C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C2;
extern VTBL_ENTRY _ZTI8S20677C2[];
extern  VTBL_ENTRY _ZTV8S20677C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C2[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C11;
extern VTBL_ENTRY _ZTI9S20677C11[];
extern  VTBL_ENTRY _ZTV9S20677C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C11[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
static Base_Class bases_S20677C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1480,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
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20677C5,    ABISELECT(1344,928), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C5,    ABISELECT(1536,1068), //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
    3, //immediately_derived
  0, 0},
  {&cd_S20677C4,    ABISELECT(1536,1068), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20677C2,    ABISELECT(1944,1360), //bcp->offset
    27, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20677C12,    ABISELECT(2048,1432), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20677C11,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20677C12,    ABISELECT(1088,752), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20677C13[];
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY vtc_S20677C13[] = {
  ABISELECT(1344,928),
  ABISELECT(2048,1432),
  ABISELECT(1944,1360),
  ABISELECT(1480,1028),
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
  ABISELECT(256,176),
  ABISELECT(392,276),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  ABISELECT(136,100),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-1944,-1360),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2048,-1432),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
extern VTBL_ENTRY _ZTV9S20677C13[];
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C11__9S20677C13[] = {
  ABISELECT(1344,928),
  ABISELECT(2048,1432),
  ABISELECT(1944,1360),
  ABISELECT(1480,1028),
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C11__9S20677C13[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C11__9S20677C13[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-1944,-1360),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C11__9S20677C13[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2048,-1432),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C11__9S20677C13[] = {
  ABISELECT(136,100),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__A__9S20677C13[] = {
  ABISELECT(256,176),
  ABISELECT(392,276),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12__A__9S20677C13[] = {
  ABISELECT(136,100),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C13[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C13[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C4__A1__9S20677C13[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C13[] = {
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__8S20677C2__9S20677C13[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C13[] = {
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12__9S20677C13[] = {
  ABISELECT(136,100),
  ABISELECT(704,504),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTT_ENTRY vtt_S20677C13[] = {
  {&(_ZTV9S20677C13[7]),  7,45},
  {&(_tg__ZTV9S20677C11__9S20677C13[7]),  7,9},
  {&(_tg__ZTV8S20677C4__9S20677C11__9S20677C13[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C11__9S20677C13[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C11__9S20677C13[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C11__9S20677C13[3]),  3,3},
  {&(_tg__ZTV9S20677C12__A__9S20677C13[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C12__A__9S20677C13[3]),  3,3},
  {&(_ZTV9S20677C13[18]),  18,45},
  {&(_ZTV9S20677C13[24]),  24,45},
  {&(_ZTV9S20677C13[34]),  34,45},
  {&(_ZTV9S20677C13[43]),  43,45},
  {&(_ZTV9S20677C13[13]),  13,45},
  {&(_tg__ZTV8S20677C5__9S20677C13[3]),  3,3},
  {&(_tg__ZTV8S20677C4__9S20677C13[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C4__A1__9S20677C13[3]),  3,3},
  {&(_tg__ZTV8S20677C2__9S20677C13[4]),  4,7},
  {&(_tg__ZTV8S20677C4__8S20677C2__9S20677C13[6]),  6,9},
  {&(_tg__ZTV9S20677C12__9S20677C13[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C12__9S20677C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20677C13[];
extern  VTBL_ENTRY _ZTV9S20677C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C13[];
Class_Descriptor cd_S20677C13 = {  "S20677C13", // class name
  bases_S20677C13, 8,
  &(vtc_S20677C13[0]), // expected_vtbl_contents
  &(vtt_S20677C13[0]), // expected_vtt_contents
  ABISELECT(2288,1596), // object size
  NSPAIRA(_ZTI9S20677C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20677C13),45, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20677C13),20, //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  S20677C16  : S20677C5 {
  __tsi64 s20677c16f0;
  char s20677c16f1[7];
  void *s20677c16f2;
  int s20677c16f3;
  ::S20677C6_nt s20677c16f4;
  ::S20677C6_nt s20677c16f5;
  char s20677c16f6[10];
  virtual void  v15(); // _ZN9S20677C163v15Ev
  ~S20677C16(); // tgen
  S20677C16(); // tgen
};
//SIG(-1 S20677C16) C1{ BC2{ VBC3{ m Fp FL[4] Fs} FD Fi FC3 FC3} v1 FL Fc[7] Fp Fi FC4{} FC4 Fc[10]}


void  S20677C16 ::v15(){vfunc_called(this, "_ZN9S20677C163v15Ev");}
S20677C16 ::~S20677C16(){ note_dtor("S20677C16", this);} // tgen
S20677C16 ::S20677C16(){ note_ctor("S20677C16", this);} // tgen

static void Test_S20677C16()
{
  extern Class_Descriptor cd_S20677C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,45)];
    init_test(&cd_S20677C16, buf);
    S20677C16 *dp, &lv = *(dp=new (buf) S20677C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,176), "sizeof(S20677C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C16)");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(176,136), "S20677C16");
    check_base_class_offset(lv, (S20677C5*), 0, "S20677C16");
    check_field_offset(lv, s20677c16f0, ABISELECT(136,100), "S20677C16.s20677c16f0");
    check_field_offset(lv, s20677c16f1, ABISELECT(144,108), "S20677C16.s20677c16f1");
    check_field_offset(lv, s20677c16f2, ABISELECT(152,116), "S20677C16.s20677c16f2");
    check_field_offset(lv, s20677c16f3, ABISELECT(160,120), "S20677C16.s20677c16f3");
    check_field_offset(lv, s20677c16f4, ABISELECT(164,124), "S20677C16.s20677c16f4");
    check_field_offset(lv, s20677c16f5, ABISELECT(165,125), "S20677C16.s20677c16f5");
    check_field_offset(lv, s20677c16f6, ABISELECT(166,126), "S20677C16.s20677c16f6");
    test_class_info(&lv, &cd_S20677C16);
    dp->~S20677C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C16(Test_S20677C16, "S20677C16", ABISELECT(224,176));

#else // __cplusplus

extern void _ZN9S20677C16C1Ev();
extern void _ZN9S20677C16D1Ev();
Name_Map name_map_S20677C16[] = {
  NSPAIR(_ZN9S20677C16C1Ev),
  NSPAIR(_ZN9S20677C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
static Base_Class bases_S20677C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    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
    1, //immediately_derived
  0, 1},
  {&cd_S20677C5,    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 _ZTI9S20677C16[];
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY vtc_S20677C16[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C16[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
extern VTBL_ENTRY _ZTV9S20677C16[];
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C16[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTT_ENTRY vtt_S20677C16[] = {
  {&(_ZTV9S20677C16[3]),  3,4},
  {&(_tg__ZTV8S20677C5__9S20677C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20677C16[];
extern  VTBL_ENTRY _ZTV9S20677C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C16[];
Class_Descriptor cd_S20677C16 = {  "S20677C16", // class name
  bases_S20677C16, 2,
  &(vtc_S20677C16[0]), // expected_vtbl_contents
  &(vtt_S20677C16[0]), // expected_vtt_contents
  ABISELECT(224,176), // object size
  NSPAIRA(_ZTI9S20677C16),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20677C16),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20677C16),2, //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  S20677C15  : S20677C4 , virtual S20677C12 , S20677C5 , virtual S20677C8 , virtual S20677C16 {
  long s20677c15f0;
  __tsi64 s20677c15f1;
  long double s20677c15f2;
  ::S20677C6_nt s20677c15f3;
  virtual void  v16(); // _ZN9S20677C153v16Ev
  ~S20677C15(); // tgen
  S20677C15(); // tgen
};
//SIG(-1 S20677C15) C1{ BC2{ VBC3{ m Fp FL[4] Fs} BC4{ VBC3 FD Fi FC3 FC3} v2 v3 v4 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC5{ VBC3 VBC4 v5 v6 Fi FC4 FL Fi Fp} BC4 VBC6{ v7 FC7{} FC4 FC7 FL FC7 Fp FC7 Fp[2] FC7} VBC8{ BC4 v8 FL Fc[7] Fp Fi FC7 FC7 Fc[10]} v1 Fl FL FD FC7}


void  S20677C15 ::v16(){vfunc_called(this, "_ZN9S20677C153v16Ev");}
S20677C15 ::~S20677C15(){ note_dtor("S20677C15", this);} // tgen
S20677C15 ::S20677C15(){ note_ctor("S20677C15", this);} // tgen

static void Test_S20677C15()
{
  extern Class_Descriptor cd_S20677C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(94,262)];
    init_test(&cd_S20677C15, buf);
    S20677C15 *dp, &lv = *(dp=new (buf) S20677C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1488,1044), "sizeof(S20677C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C15)");
    check_base_class_offset(lv, (S20677C3*)(S20677C4*), ABISELECT(600,420), "S20677C15");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*), ABISELECT(600,420), "S20677C15");
    check_base_class_offset(lv, (S20677C3*)(S20677C12*), ABISELECT(600,420), "S20677C15");
    /*is_ambiguous_... S20677C15::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(600,420), "S20677C15");
    /*is_ambiguous_... S20677C15::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(600,420), "S20677C15");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C16*), ABISELECT(600,420), "S20677C15");
    check_base_class_offset(lv, (S20677C5*)(S20677C4*), 0, "S20677C15");
    check_base_class_offset(lv, (S20677C4*), 0, "S20677C15");
    check_base_class_offset(lv, (S20677C5*)(S20677C12*), ABISELECT(896,624), "S20677C15");
    check_base_class_offset(lv, (S20677C12*), ABISELECT(656,460), "S20677C15");
    /*is_ambiguous_... S20677C15::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C5*), ABISELECT(416,292), "S20677C15");
    check_base_class_offset(lv, (S20677C8*), ABISELECT(1040,724), "S20677C15");
    check_base_class_offset(lv, (S20677C5*)(S20677C16*), ABISELECT(1312,908), "S20677C15");
    check_base_class_offset(lv, (S20677C16*), ABISELECT(1312,908), "S20677C15");
    check_field_offset(lv, s20677c15f0, ABISELECT(552,392), "S20677C15.s20677c15f0");
    check_field_offset(lv, s20677c15f1, ABISELECT(560,396), "S20677C15.s20677c15f1");
    check_field_offset(lv, s20677c15f2, ABISELECT(576,404), "S20677C15.s20677c15f2");
    check_field_offset(lv, s20677c15f3, ABISELECT(592,416), "S20677C15.s20677c15f3");
    test_class_info(&lv, &cd_S20677C15);
    dp->~S20677C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C15(Test_S20677C15, "S20677C15", ABISELECT(1488,1044));

#else // __cplusplus

extern void _ZN9S20677C15C1Ev();
extern void _ZN9S20677C15D1Ev();
Name_Map name_map_S20677C15[] = {
  NSPAIR(_ZN9S20677C15C1Ev),
  NSPAIR(_ZN9S20677C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C8;
extern VTBL_ENTRY _ZTI8S20677C8[];
extern  VTBL_ENTRY _ZTV8S20677C8[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C16;
extern VTBL_ENTRY _ZTI9S20677C16[];
extern  VTBL_ENTRY _ZTV9S20677C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C16[];
static Base_Class bases_S20677C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(600,420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20677C5,    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
    2, //immediately_derived
  0, 0},
  {&cd_S20677C4,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20677C5,    ABISELECT(896,624), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20677C12,    ABISELECT(656,460), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C5,    ABISELECT(416,292), //bcp->offset
    11, //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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20677C8,    ABISELECT(1040,724), //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C5,    ABISELECT(1312,908), //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
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20677C16,    ABISELECT(1312,908), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20677C15[];
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN9S20677C153v16Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN8S20677C82v8Ev();
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY vtc_S20677C15[] = {
  ABISELECT(1312,908),
  ABISELECT(1040,724),
  ABISELECT(896,624),
  ABISELECT(656,460),
  ABISELECT(600,420),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20677C153v16Ev,
  ABISELECT(184,128),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-56,-40),
  ABISELECT(-656,-460),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  ABISELECT(-296,-204),
  ABISELECT(-896,-624),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  0,
  ABISELECT(-1040,-724),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
  0,
  ABISELECT(-712,-488),
  ABISELECT(-1312,-908),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
extern VTBL_ENTRY _ZTV9S20677C15[];
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C15[] = {
  ABISELECT(600,420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C4__9S20677C15[] = {
  ABISELECT(600,420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A__9S20677C15[] = {
  ABISELECT(184,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C15[] = {
  ABISELECT(240,164),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12__9S20677C15[] = {
  ABISELECT(-296,-204),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C15[] = {
  ABISELECT(-296,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C16__9S20677C15[] = {
  ABISELECT(-712,-488),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C16[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C59S20677C16__A3__9S20677C15[] = {
  ABISELECT(-712,-488),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTT_ENTRY vtt_S20677C15[] = {
  {&(_ZTV9S20677C15[7]),  7,34},
  {&(_tg__ZTV8S20677C4__9S20677C15[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C4__9S20677C15[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A__9S20677C15[3]),  3,3},
  {&(_ZTV9S20677C15[20]),  20,34},
  {&(_ZTV9S20677C15[25]),  25,34},
  {&(_ZTV9S20677C15[14]),  14,34},
  {&(_ZTV9S20677C15[28]),  28,34},
  {&(_ZTV9S20677C15[33]),  33,34},
  {&(_tg__ZTV9S20677C12__9S20677C15[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C12__9S20677C15[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A1__9S20677C15[3]),  3,3},
  {&(_tg__ZTV9S20677C16__9S20677C15[3]),  3,4},
  {&(_tg__ZTV8S20677C59S20677C16__A3__9S20677C15[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20677C15[];
extern  VTBL_ENTRY _ZTV9S20677C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C15[];
Class_Descriptor cd_S20677C15 = {  "S20677C15", // class name
  bases_S20677C15, 9,
  &(vtc_S20677C15[0]), // expected_vtbl_contents
  &(vtt_S20677C15[0]), // expected_vtt_contents
  ABISELECT(1488,1044), // object size
  NSPAIRA(_ZTI9S20677C15),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20677C15),34, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20677C15),14, //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  S20677C17  : virtual S20677C8 {
  ::S20677C15 s20677c17f0;
  ::S20677C6_nt s20677c17f1;
  long s20677c17f2;
  int s20677c17f3[2];
  virtual void  v22(); // _ZN9S20677C173v22Ev
  ~S20677C17(); // tgen
  S20677C17(); // tgen
};
//SIG(-1 S20677C17) C1{ VBC2{ v2 FC3{} FC4{ VBC5{ m Fp FL[4] Fs} FD Fi FC5 FC5} FC3 FL FC3 Fp FC3 Fp[2] FC3} v1 FC6{ BC7{ VBC5 BC4 v4 v5 v6 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC8{ VBC5 VBC4 v7 v8 Fi FC4 FL Fi Fp} BC4 VBC2 VBC9{ BC4 v9 FL Fc[7] Fp Fi FC3 FC3 Fc[10]} v3 Fl FL FD FC3} FC3 Fl Fi[2]}


void  S20677C17 ::v22(){vfunc_called(this, "_ZN9S20677C173v22Ev");}
S20677C17 ::~S20677C17(){ note_dtor("S20677C17", this);} // tgen
S20677C17 ::S20677C17(){ note_ctor("S20677C17", this);} // tgen

static void Test_S20677C17()
{
  extern Class_Descriptor cd_S20677C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(114,313)];
    init_test(&cd_S20677C17, buf);
    S20677C17 *dp, &lv = *(dp=new (buf) S20677C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1808,1248), "sizeof(S20677C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C17)");
    check_base_class_offset(lv, (S20677C8*), ABISELECT(1536,1064), "S20677C17");
    check_field_offset(lv, s20677c17f0, ABISELECT(16,4), "S20677C17.s20677c17f0");
    check_field_offset(lv, s20677c17f1, ABISELECT(1504,1048), "S20677C17.s20677c17f1");
    check_field_offset(lv, s20677c17f2, ABISELECT(1512,1052), "S20677C17.s20677c17f2");
    check_field_offset(lv, s20677c17f3, ABISELECT(1520,1056), "S20677C17.s20677c17f3");
    test_class_info(&lv, &cd_S20677C17);
    dp->~S20677C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C17(Test_S20677C17, "S20677C17", ABISELECT(1808,1248));

#else // __cplusplus

extern void _ZN9S20677C17C1Ev();
extern void _ZN9S20677C17D1Ev();
Name_Map name_map_S20677C17[] = {
  NSPAIR(_ZN9S20677C17C1Ev),
  NSPAIR(_ZN9S20677C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C8;
extern VTBL_ENTRY _ZTI8S20677C8[];
extern  VTBL_ENTRY _ZTV8S20677C8[];
static Base_Class bases_S20677C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C8,    ABISELECT(1536,1064), //bcp->offset
    4, //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 _ZTI9S20677C17[];
extern void _ZN9S20677C173v22Ev();
extern void _ZN8S20677C82v8Ev();
static  VTBL_ENTRY vtc_S20677C17[] = {
  ABISELECT(1536,1064),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C17[0]),
  (VTBL_ENTRY)&_ZN9S20677C173v22Ev,
  0,
  ABISELECT(-1536,-1064),
  (VTBL_ENTRY)&(_ZTI9S20677C17[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
};
extern VTBL_ENTRY _ZTV9S20677C17[];
static  VTT_ENTRY vtt_S20677C17[] = {
  {&(_ZTV9S20677C17[3]),  3,8},
  {&(_ZTV9S20677C17[7]),  7,8},
};
extern VTBL_ENTRY _ZTI9S20677C17[];
extern  VTBL_ENTRY _ZTV9S20677C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C17[];
Class_Descriptor cd_S20677C17 = {  "S20677C17", // class name
  bases_S20677C17, 1,
  &(vtc_S20677C17[0]), // expected_vtbl_contents
  &(vtt_S20677C17[0]), // expected_vtt_contents
  ABISELECT(1808,1248), // object size
  NSPAIRA(_ZTI9S20677C17),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20677C17),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20677C17),2, //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  S20677C14  : S20677C15 , S20677C17 , S20677C13 {
  void *s20677c14f0;
  __tsi64 s20677c14f1;
  int s20677c14f2;
  void *s20677c14f3;
  int s20677c14f4[3];
  char s20677c14f5;
  __tsi64 s20677c14f6;
  void *s20677c14f7;
  long double s20677c14f8;
  ~S20677C14(); // tgen
  S20677C14(); // tgen
};
//SIG(-1 S20677C14) C1{ BC2{ BC3{ VBC4{ m Fp FL[4] Fs} BC5{ VBC4 FD Fi FC4 FC4} v1 v2 v3 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} VBC6{ VBC4 VBC5 v4 v5 Fi FC5 FL Fi Fp} BC5 VBC7{ v6 FC8{} FC5 FC8 FL FC8 Fp FC8 Fp[2] FC8} VBC9{ BC5 v7 FL Fc[7] Fp Fi FC8 FC8 Fc[10]} v8 Fl FL FD FC8} BC10{ VBC7 v9 FC2 FC8 Fl Fi[2]} BC11{ VBC5 BC12{ VBC3 VBC13{ VBC4 VBC3 v10 v11 v12 FL FC8 Fp Fc[2] FC4 Fl FC8} VBC6 v13 v14 FC8 FC8 Fi FC5 FC8 FC8 FC7 FC13 Fp FC8} BC6 Fi Fc:2 FC8 Fi} Fp FL Fi Fp Fi[3] Fc FL Fp FD}


S20677C14 ::~S20677C14(){ note_dtor("S20677C14", this);} // tgen
S20677C14 ::S20677C14(){ note_ctor("S20677C14", this);} // tgen

static void Test_S20677C14()
{
  extern Class_Descriptor cd_S20677C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(311,866)];
    init_test(&cd_S20677C14, buf);
    S20677C14 *dp, &lv = *(dp=new (buf) S20677C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4960,3460), "sizeof(S20677C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C14)");
    check_base_class_offset(lv, (S20677C3*)(S20677C4*)(S20677C15*), ABISELECT(3568,2472), "S20677C14");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*)(S20677C15*), ABISELECT(3568,2472), "S20677C14");
    /*is_ambiguous_... S20677C14::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C12*), ABISELECT(3568,2472), "S20677C14");
    /*is_ambiguous_... S20677C14::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(3568,2472), "S20677C14");
    /*is_ambiguous_... S20677C15::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C15*), ABISELECT(3568,2472), "S20677C14");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C16*), ABISELECT(3568,2472), "S20677C14");
    /*is_ambiguous_... S20677C14::S20677C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C4*), ABISELECT(3568,2472), "S20677C14");
    /*is_ambiguous_... S20677C14::S20677C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*), ABISELECT(3568,2472), "S20677C14");
    check_base_class_offset(lv, (S20677C3*)(S20677C2*), ABISELECT(3568,2472), "S20677C14");
    /*is_ambiguous_... S20677C13::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C12*)(S20677C13*), ABISELECT(3568,2472), "S20677C14");
    check_base_class_offset(lv, (S20677C5*)(S20677C4*)(S20677C15*), 0, "S20677C14");
    check_base_class_offset(lv, (S20677C4*)(S20677C15*), 0, "S20677C14");
    /*is_ambiguous_... S20677C14::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C12*), ABISELECT(3856,2676), "S20677C14");
    /*is_ambiguous_... S20677C13::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C13*), ABISELECT(3856,2676), "S20677C14");
    /*is_ambiguous_... S20677C13::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C12*)(S20677C13*), ABISELECT(3856,2676), "S20677C14");
    check_base_class_offset(lv, (S20677C12*)(S20677C15*), ABISELECT(3616,2512), "S20677C14");
    check_base_class_offset(lv, (S20677C12*)(S20677C11*)(S20677C13*), ABISELECT(3616,2512), "S20677C14");
    /*is_ambiguous_... S20677C15::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C15*), ABISELECT(416,292), "S20677C14");
    check_base_class_offset(lv, (S20677C8*)(S20677C15*), ABISELECT(4000,2776), "S20677C14");
    check_base_class_offset(lv, (S20677C8*)(S20677C17*), ABISELECT(4000,2776), "S20677C14");
    check_base_class_offset(lv, (S20677C5*)(S20677C16*), ABISELECT(4272,2960), "S20677C14");
    check_base_class_offset(lv, (S20677C16*)(S20677C15*), ABISELECT(4272,2960), "S20677C14");
    check_base_class_offset(lv, (S20677C15*), 0, "S20677C14");
    check_base_class_offset(lv, (S20677C17*), ABISELECT(608,420), "S20677C14");
    /*is_ambiguous_... S20677C14::S20677C4 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C4*), ABISELECT(4448,3096), "S20677C14");
    check_base_class_offset(lv, (S20677C4*)(S20677C11*)(S20677C13*), ABISELECT(4448,3096), "S20677C14");
    check_base_class_offset(lv, (S20677C4*)(S20677C2*), ABISELECT(4448,3096), "S20677C14");
    check_base_class_offset(lv, (S20677C2*)(S20677C11*)(S20677C13*), ABISELECT(4856,3388), "S20677C14");
    check_base_class_offset(lv, (S20677C11*)(S20677C13*), ABISELECT(2144,1484), "S20677C14");
    /*is_ambiguous_... S20677C13::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C12*)(S20677C13*), ABISELECT(3232,2236), "S20677C14");
    check_base_class_offset(lv, (S20677C13*), ABISELECT(2144,1484), "S20677C14");
    check_field_offset(lv, s20677c14f0, ABISELECT(3480,2412), "S20677C14.s20677c14f0");
    check_field_offset(lv, s20677c14f1, ABISELECT(3488,2416), "S20677C14.s20677c14f1");
    check_field_offset(lv, s20677c14f2, ABISELECT(3496,2424), "S20677C14.s20677c14f2");
    check_field_offset(lv, s20677c14f3, ABISELECT(3504,2428), "S20677C14.s20677c14f3");
    check_field_offset(lv, s20677c14f4, ABISELECT(3512,2432), "S20677C14.s20677c14f4");
    check_field_offset(lv, s20677c14f5, ABISELECT(3524,2444), "S20677C14.s20677c14f5");
    check_field_offset(lv, s20677c14f6, ABISELECT(3528,2448), "S20677C14.s20677c14f6");
    check_field_offset(lv, s20677c14f7, ABISELECT(3536,2456), "S20677C14.s20677c14f7");
    check_field_offset(lv, s20677c14f8, ABISELECT(3552,2460), "S20677C14.s20677c14f8");
    test_class_info(&lv, &cd_S20677C14);
    dp->~S20677C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C14(Test_S20677C14, "S20677C14", ABISELECT(4960,3460));

#else // __cplusplus

extern void _ZN9S20677C14C1Ev();
extern void _ZN9S20677C14D1Ev();
Name_Map name_map_S20677C14[] = {
  NSPAIR(_ZN9S20677C14C1Ev),
  NSPAIR(_ZN9S20677C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C8;
extern VTBL_ENTRY _ZTI8S20677C8[];
extern  VTBL_ENTRY _ZTV8S20677C8[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C16;
extern VTBL_ENTRY _ZTI9S20677C16[];
extern  VTBL_ENTRY _ZTV9S20677C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C16[];
extern Class_Descriptor cd_S20677C15;
extern VTBL_ENTRY _ZTI9S20677C15[];
extern  VTBL_ENTRY _ZTV9S20677C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C15[];
extern Class_Descriptor cd_S20677C17;
extern VTBL_ENTRY _ZTI9S20677C17[];
extern  VTBL_ENTRY _ZTV9S20677C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C17[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C2;
extern VTBL_ENTRY _ZTI8S20677C2[];
extern  VTBL_ENTRY _ZTV8S20677C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C2[];
extern Class_Descriptor cd_S20677C11;
extern VTBL_ENTRY _ZTI9S20677C11[];
extern  VTBL_ENTRY _ZTV9S20677C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C11[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C13;
extern VTBL_ENTRY _ZTI9S20677C13[];
extern  VTBL_ENTRY _ZTV9S20677C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C13[];
static Base_Class bases_S20677C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(3568,2472), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20677C5,    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
    9, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20677C4,    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
    10, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20677C5,    ABISELECT(3856,2676), //bcp->offset
    43, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20677C12,    ABISELECT(3616,2512), //bcp->offset
    35, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20677C5,    ABISELECT(416,292), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20677C8,    ABISELECT(4000,2776), //bcp->offset
    46, //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
    9, //immediately_derived
  0, 1},
  {&cd_S20677C5,    ABISELECT(4272,2960), //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
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20677C16,    ABISELECT(4272,2960), //bcp->offset
    50, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20677C15,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20677C17,    ABISELECT(608,420), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20677C5,    ABISELECT(4448,3096), //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
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20677C4,    ABISELECT(4448,3096), //bcp->offset
    55, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20677C2,    ABISELECT(4856,3388), //bcp->offset
    64, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20677C11,    ABISELECT(2144,1484), //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
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20677C12,    ABISELECT(3232,2236), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20677C13,    ABISELECT(2144,1484), //bcp->offset
    20, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20677C14[];
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN9S20677C153v16Ev();
extern void _ZN9S20677C173v22Ev();
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN8S20677C82v8Ev();
extern void _ZN9S20677C163v15Ev();
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY vtc_S20677C14[] = {
  ABISELECT(4856,3388),
  ABISELECT(4448,3096),
  ABISELECT(4272,2960),
  ABISELECT(4000,2776),
  ABISELECT(3856,2676),
  ABISELECT(3616,2512),
  ABISELECT(3568,2472),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C14[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20677C153v16Ev,
  ABISELECT(3152,2180),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S20677C14[0]),
  ABISELECT(3392,2356),
  ABISELECT(-608,-420),
  (VTBL_ENTRY)&(_ZTI9S20677C14[0]),
  (VTBL_ENTRY)&_ZN9S20677C173v22Ev,
  ABISELECT(1712,1192),
  ABISELECT(1472,1028),
  ABISELECT(2712,1904),
  ABISELECT(1424,988),
  ABISELECT(2304,1612),
  ABISELECT(-2144,-1484),
  (VTBL_ENTRY)&(_ZTI9S20677C14[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
  ABISELECT(624,440),
  ABISELECT(336,236),
  ABISELECT(-3232,-2236),
  (VTBL_ENTRY)&(_ZTI9S20677C14[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-48,-40),
  ABISELECT(-3616,-2512),
  (VTBL_ENTRY)&(_ZTI9S20677C14[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  ABISELECT(-288,-204),
  ABISELECT(-3856,-2676),
  (VTBL_ENTRY)&(_ZTI9S20677C14[0]),
  0,
  ABISELECT(-4000,-2776),
  (VTBL_ENTRY)&(_ZTI9S20677C14[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
  0,
  ABISELECT(-704,-488),
  ABISELECT(-4272,-2960),
  (VTBL_ENTRY)&(_ZTI9S20677C14[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
  0,
  0,
  0,
  ABISELECT(-880,-624),
  ABISELECT(-4448,-3096),
  (VTBL_ENTRY)&(_ZTI9S20677C14[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-1288,-916),
  ABISELECT(-4856,-3388),
  (VTBL_ENTRY)&(_ZTI9S20677C14[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern VTBL_ENTRY _ZTV9S20677C14[];
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN9S20677C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C15__9S20677C14[] = {
  ABISELECT(4272,2960),
  ABISELECT(4000,2776),
  ABISELECT(3856,2676),
  ABISELECT(3616,2512),
  ABISELECT(3568,2472),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20677C153v16Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C49S20677C15__9S20677C14[] = {
  ABISELECT(3568,2472),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C49S20677C15__9S20677C14[] = {
  ABISELECT(3568,2472),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C59S20677C15__A2__9S20677C14[] = {
  ABISELECT(3152,2180),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C15__9S20677C14[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-48,-40),
  ABISELECT(-3616,-2512),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C15__9S20677C14[] = {
  ABISELECT(-288,-204),
  ABISELECT(-3856,-2676),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A__9S20677C15__9S20677C14[] = {
  ABISELECT(3152,2180),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
};
extern void _ZN8S20677C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C8__9S20677C15__9S20677C14[] = {
  0,
  ABISELECT(-4000,-2776),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
};
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C16__9S20677C15__9S20677C14[] = {
  0,
  ABISELECT(-704,-488),
  ABISELECT(-4272,-2960),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
extern void _ZN9S20677C173v22Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C17__9S20677C14[] = {
  ABISELECT(3392,2356),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C17[0]),
  (VTBL_ENTRY)&_ZN9S20677C173v22Ev,
};
extern void _ZN8S20677C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C8__9S20677C17__9S20677C14[] = {
  0,
  ABISELECT(-3392,-2356),
  (VTBL_ENTRY)&(_ZTI9S20677C17[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
};
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C13__9S20677C14[] = {
  ABISELECT(1712,1192),
  ABISELECT(1472,1028),
  ABISELECT(2712,1904),
  ABISELECT(1424,988),
  ABISELECT(2304,1612),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C119S20677C13__9S20677C14[] = {
  ABISELECT(1712,1192),
  ABISELECT(1472,1028),
  ABISELECT(2712,1904),
  ABISELECT(1424,988),
  ABISELECT(2304,1612),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C119S20677C13__9S20677C14[] = {
  0,
  0,
  0,
  ABISELECT(-880,-624),
  ABISELECT(-2304,-1612),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C119S20677C13__9S20677C14[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-1288,-916),
  ABISELECT(-2712,-1904),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C119S20677C13__9S20677C14[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-48,-40),
  ABISELECT(-1472,-1028),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C119S20677C13__9S20677C14[] = {
  ABISELECT(-288,-204),
  ABISELECT(-1712,-1192),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C129S20677C13__A1__9S20677C14[] = {
  ABISELECT(624,440),
  ABISELECT(336,236),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C129S20677C13__A1__9S20677C14[] = {
  ABISELECT(-288,-204),
  ABISELECT(-624,-440),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C13__9S20677C14[] = {
  ABISELECT(-288,-204),
  ABISELECT(-1712,-1192),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C13__9S20677C14[] = {
  0,
  0,
  0,
  ABISELECT(-880,-624),
  ABISELECT(-2304,-1612),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C13__9S20677C14[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-1288,-916),
  ABISELECT(-2712,-1904),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C13__9S20677C14[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-48,-40),
  ABISELECT(-1472,-1028),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__A__9S20677C13__9S20677C14[] = {
  ABISELECT(624,440),
  ABISELECT(336,236),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C14[] = {
  ABISELECT(240,164),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12__9S20677C14[] = {
  ABISELECT(-288,-204),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C14[] = {
  ABISELECT(-288,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C16__9S20677C14[] = {
  ABISELECT(-704,-488),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C16[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C59S20677C16__A3__9S20677C14[] = {
  ABISELECT(-704,-488),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__A1__9S20677C14[] = {
  ABISELECT(-880,-624),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C4__A4__9S20677C14[] = {
  ABISELECT(-880,-624),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C14[] = {
  ABISELECT(-408,-292),
  ABISELECT(-1288,-916),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__8S20677C2__9S20677C14[] = {
  0,
  0,
  0,
  ABISELECT(-880,-624),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTT_ENTRY vtt_S20677C14[] = {
  {&(_ZTV9S20677C14[9]),  9,74},
  {&(_tg__ZTV9S20677C15__9S20677C14[7]),  7,11},
  {&(_tg__ZTV8S20677C49S20677C15__9S20677C14[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C49S20677C15__9S20677C14[3]),  3,3},
  {&(_tg__ZTV8S20677C59S20677C15__A2__9S20677C14[3]),  3,3},
  {&(_tg__ZTV9S20677C12__9S20677C15__9S20677C14[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C15__9S20677C14[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A__9S20677C15__9S20677C14[3]),  3,3},
  {&(_tg__ZTV8S20677C8__9S20677C15__9S20677C14[3]),  3,4},
  {&(_tg__ZTV9S20677C16__9S20677C15__9S20677C14[4]),  4,5},
  {&(_tg__ZTV9S20677C17__9S20677C14[3]),  3,4},
  {&(_tg__ZTV8S20677C8__9S20677C17__9S20677C14[3]),  3,4},
  {&(_tg__ZTV9S20677C13__9S20677C14[7]),  7,9},
  {&(_tg__ZTV9S20677C119S20677C13__9S20677C14[7]),  7,9},
  {&(_tg__ZTV8S20677C4__9S20677C119S20677C13__9S20677C14[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C119S20677C13__9S20677C14[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C119S20677C13__9S20677C14[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C119S20677C13__9S20677C14[3]),  3,3},
  {&(_tg__ZTV9S20677C129S20677C13__A1__9S20677C14[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C129S20677C13__A1__9S20677C14[3]),  3,3},
  {&(_tg__ZTV8S20677C5__9S20677C13__9S20677C14[3]),  3,3},
  {&(_tg__ZTV8S20677C4__9S20677C13__9S20677C14[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C13__9S20677C14[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C13__9S20677C14[6]),  6,8},
  {&(_tg__ZTV9S20677C12__A__9S20677C13__9S20677C14[4]),  4,6},
  {&(_ZTV9S20677C14[41]),  41,74},
  {&(_ZTV9S20677C14[46]),  46,74},
  {&(_ZTV9S20677C14[16]),  16,74},
  {&(_ZTV9S20677C14[49]),  49,74},
  {&(_ZTV9S20677C14[54]),  54,74},
  {&(_ZTV9S20677C14[19]),  19,74},
  {&(_ZTV9S20677C14[27]),  27,74},
  {&(_ZTV9S20677C14[61]),  61,74},
  {&(_ZTV9S20677C14[71]),  71,74},
  {&(_ZTV9S20677C14[33]),  33,74},
  {&(_tg__ZTV9S20677C12__9S20677C14[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C12__9S20677C14[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A1__9S20677C14[3]),  3,3},
  {&(_tg__ZTV9S20677C16__9S20677C14[3]),  3,4},
  {&(_tg__ZTV8S20677C59S20677C16__A3__9S20677C14[3]),  3,3},
  {&(_tg__ZTV8S20677C4__A1__9S20677C14[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C4__A4__9S20677C14[3]),  3,3},
  {&(_tg__ZTV8S20677C2__9S20677C14[4]),  4,7},
  {&(_tg__ZTV8S20677C4__8S20677C2__9S20677C14[6]),  6,9},
};
extern VTBL_ENTRY _ZTI9S20677C14[];
extern  VTBL_ENTRY _ZTV9S20677C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C14[];
Class_Descriptor cd_S20677C14 = {  "S20677C14", // class name
  bases_S20677C14, 17,
  &(vtc_S20677C14[0]), // expected_vtbl_contents
  &(vtt_S20677C14[0]), // expected_vtt_contents
  ABISELECT(4960,3460), // object size
  NSPAIRA(_ZTI9S20677C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20677C14),74, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20677C14),44, //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  S20677C10  : S20677C11 {
  int s20677c10f0[2];
  ::S20677C6_nt s20677c10f1;
  ::S20677C6_nt s20677c10f2;
  ::S20677C6_nt s20677c10f3;
  ::S20677C6_nt s20677c10f4;
  ::S20677C6_nt s20677c10f5;
  ::S20677C13 s20677c10f6;
  long s20677c10f7[4];
  ::S20677C6_nt s20677c10f8;
  ::S20677C14 s20677c10f9[2];
  char s20677c10f10;
  ::S20677C6_nt s20677c10f11;
  virtual void  v14(); // _ZN9S20677C103v14Ev
  ~S20677C10(); // tgen
  S20677C10(); // tgen
};
//SIG(-1 S20677C10) C1{ BC2{ VBC3{ VBC4{ m Fp FL[4] Fs} BC5{ VBC4 FD Fi FC4 FC4} v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} VBC6{ VBC4 VBC3 v5 v6 v7 FL FC7{} Fp Fc[2] FC4 Fl FC7} VBC8{ VBC4 VBC5 v8 v9 Fi FC5 FL Fi Fp} v10 v11 FC7 FC7 Fi FC5 FC7 FC7 FC9{ v12 FC7 FC5 FC7 FL FC7 Fp FC7 Fp[2] FC7} FC6 Fp FC7} v1 Fi[2] FC7 FC7 FC7 FC7 FC7 FC10{ VBC5 BC2 BC8 Fi Fc:2 FC7 Fi} Fl[4] FC7 FC11{ BC12{ BC3 VBC8 BC5 VBC9 VBC13{ BC5 v13 FL Fc[7] Fp Fi FC7 FC7 Fc[10]} v14 Fl FL FD FC7} BC14{ VBC9 v15 FC12 FC7 Fl Fi[2]} BC10 Fp FL Fi Fp Fi[3] Fc FL Fp FD}[2] Fc FC7}


void  S20677C10 ::v14(){vfunc_called(this, "_ZN9S20677C103v14Ev");}
S20677C10 ::~S20677C10(){ note_dtor("S20677C10", this);} // tgen
S20677C10 ::S20677C10(){ note_ctor("S20677C10", this);} // tgen

static void Test_S20677C10()
{
  extern Class_Descriptor cd_S20677C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(896,2495)];
    init_test(&cd_S20677C10, buf);
    S20677C10 *dp, &lv = *(dp=new (buf) S20677C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(14320,9976), "sizeof(S20677C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C10)");
    check_base_class_offset(lv, (S20677C3*)(S20677C4*), ABISELECT(13784,9600), "S20677C10");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*), ABISELECT(13784,9600), "S20677C10");
    check_base_class_offset(lv, (S20677C3*)(S20677C2*), ABISELECT(13784,9600), "S20677C10");
    check_base_class_offset(lv, (S20677C3*)(S20677C12*), ABISELECT(13784,9600), "S20677C10");
    /*is_ambiguous_... S20677C10::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(13784,9600), "S20677C10");
    check_base_class_offset(lv, (S20677C5*)(S20677C4*), ABISELECT(13376,9308), "S20677C10");
    check_base_class_offset(lv, (S20677C4*)(S20677C11*), ABISELECT(13376,9308), "S20677C10");
    check_base_class_offset(lv, (S20677C4*)(S20677C2*), ABISELECT(13376,9308), "S20677C10");
    check_base_class_offset(lv, (S20677C2*)(S20677C11*), ABISELECT(13832,9640), "S20677C10");
    check_base_class_offset(lv, (S20677C5*)(S20677C12*), ABISELECT(14176,9876), "S20677C10");
    check_base_class_offset(lv, (S20677C12*)(S20677C11*), ABISELECT(13936,9712), "S20677C10");
    check_base_class_offset(lv, (S20677C11*), 0, "S20677C10");
    check_field_offset(lv, s20677c10f0, ABISELECT(1084,752), "S20677C10.s20677c10f0");
    check_field_offset(lv, s20677c10f1, ABISELECT(1092,760), "S20677C10.s20677c10f1");
    check_field_offset(lv, s20677c10f2, ABISELECT(1093,761), "S20677C10.s20677c10f2");
    check_field_offset(lv, s20677c10f3, ABISELECT(1094,762), "S20677C10.s20677c10f3");
    check_field_offset(lv, s20677c10f4, ABISELECT(1095,763), "S20677C10.s20677c10f4");
    check_field_offset(lv, s20677c10f5, ABISELECT(1096,764), "S20677C10.s20677c10f5");
    check_field_offset(lv, s20677c10f6, ABISELECT(1104,768), "S20677C10.s20677c10f6");
    check_field_offset(lv, s20677c10f7, ABISELECT(3392,2364), "S20677C10.s20677c10f7");
    check_field_offset(lv, s20677c10f8, ABISELECT(3424,2380), "S20677C10.s20677c10f8");
    check_field_offset(lv, s20677c10f9, ABISELECT(3440,2384), "S20677C10.s20677c10f9");
    check_field_offset(lv, s20677c10f10, ABISELECT(13360,9304), "S20677C10.s20677c10f10");
    check_field_offset(lv, s20677c10f11, ABISELECT(13361,9305), "S20677C10.s20677c10f11");
    test_class_info(&lv, &cd_S20677C10);
    dp->~S20677C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C10(Test_S20677C10, "S20677C10", ABISELECT(14320,9976));

#else // __cplusplus

extern void _ZN9S20677C10C1Ev();
extern void _ZN9S20677C10D1Ev();
Name_Map name_map_S20677C10[] = {
  NSPAIR(_ZN9S20677C10C1Ev),
  NSPAIR(_ZN9S20677C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C2;
extern VTBL_ENTRY _ZTI8S20677C2[];
extern  VTBL_ENTRY _ZTV8S20677C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C2[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C11;
extern VTBL_ENTRY _ZTI9S20677C11[];
extern  VTBL_ENTRY _ZTV9S20677C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C11[];
static Base_Class bases_S20677C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(13784,9600), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20677C5,    ABISELECT(13376,9308), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20677C4,    ABISELECT(13376,9308), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //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
    3, //immediately_derived
  0, 1},
  {&cd_S20677C2,    ABISELECT(13832,9640), //bcp->offset
    19, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20677C5,    ABISELECT(14176,9876), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20677C12,    ABISELECT(13936,9712), //bcp->offset
    29, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20677C11,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20677C10[];
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
extern void _ZN9S20677C103v14Ev();
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY vtc_S20677C10[] = {
  ABISELECT(14176,9876),
  ABISELECT(13936,9712),
  ABISELECT(13832,9640),
  ABISELECT(13784,9600),
  ABISELECT(13376,9308),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
  (VTBL_ENTRY)&_ZN9S20677C103v14Ev,
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-13376,-9308),
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-13832,-9640),
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-13936,-9712),
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  ABISELECT(-392,-276),
  ABISELECT(-14176,-9876),
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
};
extern VTBL_ENTRY _ZTV9S20677C10[];
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C11__9S20677C10[] = {
  ABISELECT(14176,9876),
  ABISELECT(13936,9712),
  ABISELECT(13832,9640),
  ABISELECT(13784,9600),
  ABISELECT(13376,9308),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C11__9S20677C10[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-13376,-9308),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C11__9S20677C10[] = {
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-13832,-9640),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C11__9S20677C10[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-13936,-9712),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C11__9S20677C10[] = {
  ABISELECT(-392,-276),
  ABISELECT(-14176,-9876),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C10[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C4__9S20677C10[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C10[] = {
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__8S20677C2__9S20677C10[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(456,332),
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C10[] = {
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12__9S20677C10[] = {
  ABISELECT(-392,-276),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C10[] = {
  ABISELECT(-392,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTT_ENTRY vtt_S20677C10[] = {
  {&(_ZTV9S20677C10[7]),  7,40},
  {&(_tg__ZTV9S20677C11__9S20677C10[7]),  7,9},
  {&(_tg__ZTV8S20677C4__9S20677C11__9S20677C10[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C11__9S20677C10[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C11__9S20677C10[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C11__9S20677C10[3]),  3,3},
  {&(_ZTV9S20677C10[16]),  16,40},
  {&(_ZTV9S20677C10[26]),  26,40},
  {&(_ZTV9S20677C10[35]),  35,40},
  {&(_ZTV9S20677C10[40]),  40,40},
  {&(_tg__ZTV8S20677C4__9S20677C10[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C4__9S20677C10[3]),  3,3},
  {&(_tg__ZTV8S20677C2__9S20677C10[4]),  4,7},
  {&(_tg__ZTV8S20677C4__8S20677C2__9S20677C10[6]),  6,9},
  {&(_tg__ZTV9S20677C12__9S20677C10[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C12__9S20677C10[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A1__9S20677C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20677C10[];
extern  VTBL_ENTRY _ZTV9S20677C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C10[];
Class_Descriptor cd_S20677C10 = {  "S20677C10", // class name
  bases_S20677C10, 7,
  &(vtc_S20677C10[0]), // expected_vtbl_contents
  &(vtt_S20677C10[0]), // expected_vtt_contents
  ABISELECT(14320,9976), // object size
  NSPAIRA(_ZTI9S20677C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20677C10),40, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20677C10),17, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20677C19  : S20677C9 , S20677C12 , virtual S20677C15 {
  void *s20677c19f0;
  char s20677c19f1[4];
  ::S20677C4 s20677c19f2;
  int s20677c19f3[8];
  ::S20677C6_nt s20677c19f4;
  ::S20677C7 s20677c19f5;
  ::S20677C6_nt s20677c19f6;
  long double s20677c19f7;
  ::S20677C5 s20677c19f8[9];
  long double s20677c19f9[10];
  short s20677c19f10;
  virtual void  v17(); // _ZN9S20677C193v17Ev
  virtual void  v18(); // _ZN9S20677C193v18Ev
  virtual void  v19(); // _ZN9S20677C193v19Ev
  virtual void  v20(); // _ZN9S20677C193v20Ev
  ~S20677C19(); // tgen
  S20677C19(); // tgen
};
//SIG(-1 S20677C19) C1{ BC2{ BC3{ m Fp FL[4] Fs} FC3 Fi FD Fi FL Fl} BC4{ VBC3 VBC5{ VBC3 FD Fi FC3 FC3} v5 v6 Fi FC5 FL Fi Fp} VBC6{ BC7{ VBC3 BC5 v7 v8 v9 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} VBC4 BC5 VBC8{ v10 FC9{} FC5 FC9 FL FC9 Fp FC9 Fp[2] FC9} VBC10{ BC5 v11 FL Fc[7] Fp Fi FC9 FC9 Fc[10]} v12 Fl FL FD FC9} v1 v2 v3 v4 Fp Fc[4] FC7 Fi[8] FC9 FC11{ VBC8 BC5 BC2 v13 Fp FC2 Fp Fi[2] FD Fi[2]} FC9 FD FC5[9] FD[10] Fs}


void  S20677C19 ::v17(){vfunc_called(this, "_ZN9S20677C193v17Ev");}
void  S20677C19 ::v18(){vfunc_called(this, "_ZN9S20677C193v18Ev");}
void  S20677C19 ::v19(){vfunc_called(this, "_ZN9S20677C193v19Ev");}
void  S20677C19 ::v20(){vfunc_called(this, "_ZN9S20677C193v20Ev");}
S20677C19 ::~S20677C19(){ note_dtor("S20677C19", this);} // tgen
S20677C19 ::S20677C19(){ note_ctor("S20677C19", this);} // tgen

static void Test_S20677C19()
{
  extern Class_Descriptor cd_S20677C19;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(325,921)];
    init_test(&cd_S20677C19, buf);
    S20677C19 *dp, &lv = *(dp=new (buf) S20677C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5184,3680), "sizeof(S20677C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C19)");
    check_base_class_offset(lv, (S20677C3*)(S20677C9*), ABISELECT(240,164), "S20677C19");
    check_base_class_offset(lv, (S20677C9*), ABISELECT(240,164), "S20677C19");
    /*is_ambiguous_... S20677C19::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C12*), ABISELECT(3688,2636), "S20677C19");
    /*is_ambiguous_... S20677C19::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(3688,2636), "S20677C19");
    check_base_class_offset(lv, (S20677C3*)(S20677C4*)(S20677C15*), ABISELECT(3688,2636), "S20677C19");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*)(S20677C15*), ABISELECT(3688,2636), "S20677C19");
    /*is_ambiguous_... S20677C19::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C12*), ABISELECT(3688,2636), "S20677C19");
    /*is_ambiguous_... S20677C15::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C15*), ABISELECT(3688,2636), "S20677C19");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C16*), ABISELECT(3688,2636), "S20677C19");
    /*is_ambiguous_... S20677C19::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C12*), ABISELECT(3744,2676), "S20677C19");
    /*is_ambiguous_... S20677C19::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C12*), ABISELECT(3744,2676), "S20677C19");
    /*is_ambiguous_... S20677C19::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C12*), 0, "S20677C19");
    check_base_class_offset(lv, (S20677C5*)(S20677C4*)(S20677C15*), ABISELECT(3888,2776), "S20677C19");
    check_base_class_offset(lv, (S20677C4*)(S20677C15*), ABISELECT(3888,2776), "S20677C19");
    check_base_class_offset(lv, (S20677C12*)(S20677C15*), ABISELECT(4496,3196), "S20677C19");
    /*is_ambiguous_... S20677C15::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C15*), ABISELECT(4304,3068), "S20677C19");
    check_base_class_offset(lv, (S20677C8*)(S20677C15*), ABISELECT(4736,3360), "S20677C19");
    check_base_class_offset(lv, (S20677C5*)(S20677C16*), ABISELECT(5008,3544), "S20677C19");
    check_base_class_offset(lv, (S20677C16*)(S20677C15*), ABISELECT(5008,3544), "S20677C19");
    check_base_class_offset(lv, (S20677C15*), ABISELECT(3888,2776), "S20677C19");
    check_field_offset(lv, s20677c19f0, ABISELECT(392,276), "S20677C19.s20677c19f0");
    check_field_offset(lv, s20677c19f1, ABISELECT(400,280), "S20677C19.s20677c19f1");
    check_field_offset(lv, s20677c19f2, ABISELECT(416,284), "S20677C19.s20677c19f2");
    check_field_offset(lv, s20677c19f3, ABISELECT(880,616), "S20677C19.s20677c19f3");
    check_field_offset(lv, s20677c19f4, ABISELECT(912,648), "S20677C19.s20677c19f4");
    check_field_offset(lv, s20677c19f5, ABISELECT(928,652), "S20677C19.s20677c19f5");
    check_field_offset(lv, s20677c19f6, ABISELECT(1760,1236), "S20677C19.s20677c19f6");
    check_field_offset(lv, s20677c19f7, ABISELECT(1776,1240), "S20677C19.s20677c19f7");
    check_field_offset(lv, s20677c19f8, ABISELECT(1792,1252), "S20677C19.s20677c19f8");
    check_field_offset(lv, s20677c19f9, ABISELECT(3520,2512), "S20677C19.s20677c19f9");
    check_field_offset(lv, s20677c19f10, ABISELECT(3680,2632), "S20677C19.s20677c19f10");
    test_class_info(&lv, &cd_S20677C19);
    dp->~S20677C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C19(Test_S20677C19, "S20677C19", ABISELECT(5184,3680));

#else // __cplusplus

extern void _ZN9S20677C19C1Ev();
extern void _ZN9S20677C19D1Ev();
Name_Map name_map_S20677C19[] = {
  NSPAIR(_ZN9S20677C19C1Ev),
  NSPAIR(_ZN9S20677C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C9;
extern VTBL_ENTRY _ZTI8S20677C9[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C8;
extern VTBL_ENTRY _ZTI8S20677C8[];
extern  VTBL_ENTRY _ZTV8S20677C8[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C16;
extern VTBL_ENTRY _ZTI9S20677C16[];
extern  VTBL_ENTRY _ZTV9S20677C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C16[];
extern Class_Descriptor cd_S20677C15;
extern VTBL_ENTRY _ZTI9S20677C15[];
extern  VTBL_ENTRY _ZTV9S20677C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C15[];
static Base_Class bases_S20677C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(240,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
  0, 0},
  {&cd_S20677C9,    ABISELECT(240,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, 0},
  {&cd_S20677C3,    ABISELECT(3688,2636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20677C5,    ABISELECT(3744,2676), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20677C12,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20677C5,    ABISELECT(3888,2776), //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20677C4,    ABISELECT(3888,2776), //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
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20677C12,    ABISELECT(4496,3196), //bcp->offset
    35, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20677C5,    ABISELECT(4304,3068), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20677C8,    ABISELECT(4736,3360), //bcp->offset
    43, //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
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20677C5,    ABISELECT(5008,3544), //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
    4, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20677C16,    ABISELECT(5008,3544), //bcp->offset
    47, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20677C15,    ABISELECT(3888,2776), //bcp->offset
    17, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20677C19[];
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN9S20677C193v17Ev();
extern void _ZN9S20677C193v18Ev();
extern void _ZN9S20677C193v19Ev();
extern void _ZN9S20677C193v20Ev();
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN9S20677C153v16Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN8S20677C82v8Ev();
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY vtc_S20677C19[] = {
  ABISELECT(5008,3544),
  ABISELECT(4736,3360),
  ABISELECT(4496,3196),
  ABISELECT(3888,2776),
  ABISELECT(3744,2676),
  ABISELECT(3688,2636),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v17Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v18Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v19Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v20Ev,
  ABISELECT(-56,-40),
  ABISELECT(-3744,-2676),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  0,
  0,
  0,
  0,
  ABISELECT(1120,768),
  ABISELECT(848,584),
  ABISELECT(-144,-100),
  ABISELECT(608,420),
  ABISELECT(-200,-140),
  ABISELECT(-3888,-2776),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20677C153v16Ev,
  ABISELECT(-616,-432),
  ABISELECT(-4304,-3068),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  0,
  0,
  ABISELECT(-752,-520),
  ABISELECT(-808,-560),
  ABISELECT(-4496,-3196),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  0,
  ABISELECT(-4736,-3360),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
  0,
  ABISELECT(-1320,-908),
  ABISELECT(-5008,-3544),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
extern VTBL_ENTRY _ZTV9S20677C19[];
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__A__9S20677C19[] = {
  ABISELECT(3744,2676),
  ABISELECT(3688,2636),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12__A__9S20677C19[] = {
  ABISELECT(-56,-40),
  ABISELECT(-3744,-2676),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C19[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN9S20677C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C15__9S20677C19[] = {
  ABISELECT(1120,768),
  ABISELECT(848,584),
  ABISELECT(-144,-100),
  ABISELECT(608,420),
  ABISELECT(-200,-140),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20677C153v16Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C49S20677C15__9S20677C19[] = {
  ABISELECT(-200,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C49S20677C15__A1__9S20677C19[] = {
  ABISELECT(-200,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C59S20677C15__A2__9S20677C19[] = {
  ABISELECT(-616,-432),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C15__9S20677C19[] = {
  0,
  0,
  ABISELECT(-752,-520),
  ABISELECT(-808,-560),
  ABISELECT(-608,-420),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C15__9S20677C19[] = {
  ABISELECT(-56,-40),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A__9S20677C15__9S20677C19[] = {
  ABISELECT(-616,-432),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
};
extern void _ZN8S20677C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C8__9S20677C15__9S20677C19[] = {
  0,
  ABISELECT(-848,-584),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
};
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C16__9S20677C15__9S20677C19[] = {
  0,
  ABISELECT(-1320,-908),
  ABISELECT(-1120,-768),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__A1__9S20677C19[] = {
  ABISELECT(-752,-520),
  ABISELECT(-808,-560),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12__A1__9S20677C19[] = {
  ABISELECT(-56,-40),
  ABISELECT(752,520),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C16__9S20677C19[] = {
  ABISELECT(-1320,-908),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C16[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C59S20677C16__A3__9S20677C19[] = {
  ABISELECT(-1320,-908),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTT_ENTRY vtt_S20677C19[] = {
  {&(_ZTV9S20677C19[8]),  8,52},
  {&(_tg__ZTV9S20677C12__A__9S20677C19[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C12__A__9S20677C19[3]),  3,3},
  {&(_ZTV9S20677C19[17]),  17,52},
  {&(_ZTV9S20677C19[28]),  28,52},
  {&(_ZTV9S20677C19[41]),  41,52},
  {&(_ZTV9S20677C19[35]),  35,52},
  {&(_ZTV9S20677C19[46]),  46,52},
  {&(_ZTV9S20677C19[51]),  51,52},
  {&(_tg__ZTV8S20677C5__9S20677C19[3]),  3,3},
  {&(_tg__ZTV9S20677C15__9S20677C19[7]),  7,11},
  {&(_tg__ZTV8S20677C49S20677C15__9S20677C19[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C49S20677C15__A1__9S20677C19[3]),  3,3},
  {&(_tg__ZTV8S20677C59S20677C15__A2__9S20677C19[3]),  3,3},
  {&(_tg__ZTV9S20677C12__9S20677C15__9S20677C19[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C15__9S20677C19[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A__9S20677C15__9S20677C19[3]),  3,3},
  {&(_tg__ZTV8S20677C8__9S20677C15__9S20677C19[3]),  3,4},
  {&(_tg__ZTV9S20677C16__9S20677C15__9S20677C19[4]),  4,5},
  {&(_tg__ZTV9S20677C12__A1__9S20677C19[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C12__A1__9S20677C19[3]),  3,3},
  {&(_tg__ZTV9S20677C16__9S20677C19[3]),  3,4},
  {&(_tg__ZTV8S20677C59S20677C16__A3__9S20677C19[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20677C19[];
extern  VTBL_ENTRY _ZTV9S20677C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C19[];
Class_Descriptor cd_S20677C19 = {  "S20677C19", // class name
  bases_S20677C19, 13,
  &(vtc_S20677C19[0]), // expected_vtbl_contents
  &(vtt_S20677C19[0]), // expected_vtt_contents
  ABISELECT(5184,3680), // object size
  NSPAIRA(_ZTI9S20677C19),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20677C19),52, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20677C19),23, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20677C20  : S20677C13 {
  int s20677c20f0;
  ::S20677C6_nt s20677c20f1;
  short s20677c20f2;
  long s20677c20f3;
  ::S20677C5 s20677c20f4;
  long s20677c20f5;
  virtual void  v23(); // _ZN9S20677C203v23Ev
  ~S20677C20(); // tgen
  S20677C20(); // tgen
};
//SIG(-1 S20677C20) C1{ BC2{ VBC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} BC5{ VBC6{ VBC4 BC3 v2 v3 v4 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi} VBC7{ VBC4 VBC6 v5 v6 v7 FL FC8{} Fp Fc[2] FC4 Fl FC8} VBC9{ VBC4 VBC3 v8 v9 Fi FC3 FL Fi Fp} v10 v11 FC8 FC8 Fi FC3 FC8 FC8 FC10{ v12 FC8 FC3 FC8 FL FC8 Fp FC8 Fp[2] FC8} FC7 Fp FC8} BC9 Fi Fc:2 FC8 Fi} v1 Fi FC8 Fs Fl FC3 Fl}


void  S20677C20 ::v23(){vfunc_called(this, "_ZN9S20677C203v23Ev");}
S20677C20 ::~S20677C20(){ note_dtor("S20677C20", this);} // tgen
S20677C20 ::S20677C20(){ note_ctor("S20677C20", this);} // tgen

static void Test_S20677C20()
{
  extern Class_Descriptor cd_S20677C20;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(158,439)];
    init_test(&cd_S20677C20, buf);
    S20677C20 *dp, &lv = *(dp=new (buf) S20677C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2512,1752), "sizeof(S20677C20)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C20)");
    /*is_ambiguous_... S20677C20::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(1704,1184), "S20677C20");
    check_base_class_offset(lv, (S20677C3*)(S20677C4*), ABISELECT(1704,1184), "S20677C20");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*), ABISELECT(1704,1184), "S20677C20");
    check_base_class_offset(lv, (S20677C3*)(S20677C2*), ABISELECT(1704,1184), "S20677C20");
    /*is_ambiguous_... S20677C20::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C12*), ABISELECT(1704,1184), "S20677C20");
    /*is_ambiguous_... S20677C13::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C12*)(S20677C13*), ABISELECT(1704,1184), "S20677C20");
    /*is_ambiguous_... S20677C13::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C13*), ABISELECT(1568,1084), "S20677C20");
    /*is_ambiguous_... S20677C20::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C12*), ABISELECT(1568,1084), "S20677C20");
    /*is_ambiguous_... S20677C13::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C12*)(S20677C13*), ABISELECT(1568,1084), "S20677C20");
    check_base_class_offset(lv, (S20677C5*)(S20677C4*), ABISELECT(1760,1224), "S20677C20");
    check_base_class_offset(lv, (S20677C4*)(S20677C11*)(S20677C13*), ABISELECT(1760,1224), "S20677C20");
    check_base_class_offset(lv, (S20677C4*)(S20677C2*), ABISELECT(1760,1224), "S20677C20");
    check_base_class_offset(lv, (S20677C2*)(S20677C11*)(S20677C13*), ABISELECT(2168,1516), "S20677C20");
    check_base_class_offset(lv, (S20677C12*)(S20677C11*)(S20677C13*), ABISELECT(2272,1588), "S20677C20");
    check_base_class_offset(lv, (S20677C11*)(S20677C13*), 0, "S20677C20");
    /*is_ambiguous_... S20677C13::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C12*)(S20677C13*), ABISELECT(1088,752), "S20677C20");
    check_base_class_offset(lv, (S20677C13*), 0, "S20677C20");
    check_field_offset(lv, s20677c20f0, ABISELECT(1332,928), "S20677C20.s20677c20f0");
    check_field_offset(lv, s20677c20f1, ABISELECT(1336,932), "S20677C20.s20677c20f1");
    check_field_offset(lv, s20677c20f2, ABISELECT(1338,934), "S20677C20.s20677c20f2");
    check_field_offset(lv, s20677c20f3, ABISELECT(1344,936), "S20677C20.s20677c20f3");
    check_field_offset(lv, s20677c20f4, ABISELECT(1360,940), "S20677C20.s20677c20f4");
    check_field_offset(lv, s20677c20f5, ABISELECT(1552,1080), "S20677C20.s20677c20f5");
    test_class_info(&lv, &cd_S20677C20);
    dp->~S20677C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C20(Test_S20677C20, "S20677C20", ABISELECT(2512,1752));

#else // __cplusplus

extern void _ZN9S20677C20C1Ev();
extern void _ZN9S20677C20D1Ev();
Name_Map name_map_S20677C20[] = {
  NSPAIR(_ZN9S20677C20C1Ev),
  NSPAIR(_ZN9S20677C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C2;
extern VTBL_ENTRY _ZTI8S20677C2[];
extern  VTBL_ENTRY _ZTV8S20677C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C2[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C11;
extern VTBL_ENTRY _ZTI9S20677C11[];
extern  VTBL_ENTRY _ZTV9S20677C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C11[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C13;
extern VTBL_ENTRY _ZTI9S20677C13[];
extern  VTBL_ENTRY _ZTV9S20677C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C13[];
static Base_Class bases_S20677C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1704,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
    1, //immediately_derived
  0, 1},
  {&cd_S20677C5,    ABISELECT(1568,1084), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20677C5,    ABISELECT(1760,1224), //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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20677C4,    ABISELECT(1760,1224), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20677C2,    ABISELECT(2168,1516), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20677C12,    ABISELECT(2272,1588), //bcp->offset
    38, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20677C11,    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
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20677C12,    ABISELECT(1088,752), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20677C13,    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 _ZTI9S20677C20[];
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
extern void _ZN9S20677C203v23Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY vtc_S20677C20[] = {
  ABISELECT(1568,1084),
  ABISELECT(2272,1588),
  ABISELECT(2168,1516),
  ABISELECT(1704,1184),
  ABISELECT(1760,1224),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C20[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
  (VTBL_ENTRY)&_ZN9S20677C203v23Ev,
  ABISELECT(480,332),
  ABISELECT(616,432),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20677C20[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  ABISELECT(136,100),
  ABISELECT(-1568,-1084),
  (VTBL_ENTRY)&(_ZTI9S20677C20[0]),
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1760,-1224),
  (VTBL_ENTRY)&(_ZTI9S20677C20[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-2168,-1516),
  (VTBL_ENTRY)&(_ZTI9S20677C20[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2272,-1588),
  (VTBL_ENTRY)&(_ZTI9S20677C20[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
extern VTBL_ENTRY _ZTV9S20677C20[];
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C13__9S20677C20[] = {
  ABISELECT(1568,1084),
  ABISELECT(2272,1588),
  ABISELECT(2168,1516),
  ABISELECT(1704,1184),
  ABISELECT(1760,1224),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C119S20677C13__9S20677C20[] = {
  ABISELECT(1568,1084),
  ABISELECT(2272,1588),
  ABISELECT(2168,1516),
  ABISELECT(1704,1184),
  ABISELECT(1760,1224),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C119S20677C13__9S20677C20[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1760,-1224),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C119S20677C13__9S20677C20[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-2168,-1516),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C119S20677C13__9S20677C20[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2272,-1588),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C119S20677C13__9S20677C20[] = {
  ABISELECT(136,100),
  ABISELECT(-1568,-1084),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C129S20677C13__A1__9S20677C20[] = {
  ABISELECT(480,332),
  ABISELECT(616,432),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C129S20677C13__A1__9S20677C20[] = {
  ABISELECT(136,100),
  ABISELECT(-480,-332),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C13__9S20677C20[] = {
  ABISELECT(136,100),
  ABISELECT(-1568,-1084),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C13__9S20677C20[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1760,-1224),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C13__9S20677C20[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-2168,-1516),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C13__9S20677C20[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2272,-1588),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__A__9S20677C13__9S20677C20[] = {
  ABISELECT(480,332),
  ABISELECT(616,432),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C20[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C20[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C4__A1__9S20677C20[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C20[] = {
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__8S20677C2__9S20677C20[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C20[] = {
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12__9S20677C20[] = {
  ABISELECT(136,100),
  ABISELECT(704,504),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTT_ENTRY vtt_S20677C20[] = {
  {&(_ZTV9S20677C20[7]),  7,46},
  {&(_tg__ZTV9S20677C13__9S20677C20[7]),  7,9},
  {&(_tg__ZTV9S20677C119S20677C13__9S20677C20[7]),  7,9},
  {&(_tg__ZTV8S20677C4__9S20677C119S20677C13__9S20677C20[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C119S20677C13__9S20677C20[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C119S20677C13__9S20677C20[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C119S20677C13__9S20677C20[3]),  3,3},
  {&(_tg__ZTV9S20677C129S20677C13__A1__9S20677C20[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C129S20677C13__A1__9S20677C20[3]),  3,3},
  {&(_tg__ZTV8S20677C5__9S20677C13__9S20677C20[3]),  3,3},
  {&(_tg__ZTV8S20677C4__9S20677C13__9S20677C20[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C13__9S20677C20[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C13__9S20677C20[6]),  6,8},
  {&(_tg__ZTV9S20677C12__A__9S20677C13__9S20677C20[4]),  4,6},
  {&(_ZTV9S20677C20[19]),  19,46},
  {&(_ZTV9S20677C20[25]),  25,46},
  {&(_ZTV9S20677C20[35]),  35,46},
  {&(_ZTV9S20677C20[44]),  44,46},
  {&(_ZTV9S20677C20[14]),  14,46},
  {&(_tg__ZTV8S20677C5__9S20677C20[3]),  3,3},
  {&(_tg__ZTV8S20677C4__9S20677C20[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C4__A1__9S20677C20[3]),  3,3},
  {&(_tg__ZTV8S20677C2__9S20677C20[4]),  4,7},
  {&(_tg__ZTV8S20677C4__8S20677C2__9S20677C20[6]),  6,9},
  {&(_tg__ZTV9S20677C12__9S20677C20[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C12__9S20677C20[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20677C20[];
extern  VTBL_ENTRY _ZTV9S20677C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C20[];
Class_Descriptor cd_S20677C20 = {  "S20677C20", // class name
  bases_S20677C20, 9,
  &(vtc_S20677C20[0]), // expected_vtbl_contents
  &(vtt_S20677C20[0]), // expected_vtt_contents
  ABISELECT(2512,1752), // object size
  NSPAIRA(_ZTI9S20677C20),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20677C20),46, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20677C20),26, //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  S20677C21  {
  long s20677c21f0;
  ::S20677C16 s20677c21f1;
  ::S20677C6_nt s20677c21f2;
  int s20677c21f3;
  virtual void  v24(); // _ZN9S20677C213v24Ev
  ~S20677C21(); // tgen
  S20677C21(); // tgen
};
//SIG(-1 S20677C21) C1{ v1 Fl FC2{ BC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} v2 FL Fc[7] Fp Fi FC5{} FC5 Fc[10]} FC5 Fi}


void  S20677C21 ::v24(){vfunc_called(this, "_ZN9S20677C213v24Ev");}
S20677C21 ::~S20677C21(){ note_dtor("S20677C21", this);} // tgen
S20677C21 ::S20677C21(){ note_ctor("S20677C21", this);} // tgen

static void Test_S20677C21()
{
  extern Class_Descriptor cd_S20677C21;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,49)];
    init_test(&cd_S20677C21, buf);
    S20677C21 *dp, &lv = *(dp=new (buf) S20677C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,192), "sizeof(S20677C21)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C21)");
    check_field_offset(lv, s20677c21f0, ABISELECT(8,4), "S20677C21.s20677c21f0");
    check_field_offset(lv, s20677c21f1, ABISELECT(16,8), "S20677C21.s20677c21f1");
    check_field_offset(lv, s20677c21f2, ABISELECT(240,184), "S20677C21.s20677c21f2");
    check_field_offset(lv, s20677c21f3, ABISELECT(244,188), "S20677C21.s20677c21f3");
    test_class_info(&lv, &cd_S20677C21);
    dp->~S20677C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C21(Test_S20677C21, "S20677C21", ABISELECT(256,192));

#else // __cplusplus

extern void _ZN9S20677C21C1Ev();
extern void _ZN9S20677C21D1Ev();
Name_Map name_map_S20677C21[] = {
  NSPAIR(_ZN9S20677C21C1Ev),
  NSPAIR(_ZN9S20677C21D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20677C21[];
extern void _ZN9S20677C213v24Ev();
static  VTBL_ENTRY vtc_S20677C21[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C21[0]),
  (VTBL_ENTRY)&_ZN9S20677C213v24Ev,
};
extern VTBL_ENTRY _ZTI9S20677C21[];
extern  VTBL_ENTRY _ZTV9S20677C21[];
Class_Descriptor cd_S20677C21 = {  "S20677C21", // class name
  0,0,//no base classes
  &(vtc_S20677C21[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,192), // object size
  NSPAIRA(_ZTI9S20677C21),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20677C21),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  S20677C18  : virtual S20677C11 , virtual S20677C19 {
  void *s20677c18f0;
  ::S20677C20 s20677c18f1;
  void *s20677c18f2;
  __tsi64 s20677c18f3;
  int s20677c18f4;
  ::S20677C6_nt s20677c18f5;
  void *s20677c18f6;
  ::S20677C21 s20677c18f7;
  long s20677c18f8;
  virtual void  v21(); // _ZN9S20677C183v21Ev
  ~S20677C18(); // tgen
  S20677C18(); // tgen
};
//SIG(-1 S20677C18) C1{ VBC2{ VBC3{ VBC4{ m Fp FL[4] Fs} BC5{ VBC4 FD Fi FC4 FC4} v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} VBC6{ VBC4 VBC3 v5 v6 v7 FL FC7{} Fp Fc[2] FC4 Fl FC7} VBC8{ VBC4 VBC5 v8 v9 Fi FC5 FL Fi Fp} v10 v11 FC7 FC7 Fi FC5 FC7 FC7 FC9{ v12 FC7 FC5 FC7 FL FC7 Fp FC7 Fp[2] FC7} FC6 Fp FC7} VBC10{ BC11{ BC4 FC4 Fi FD Fi FL Fl} BC8 VBC12{ BC3 VBC8 BC5 VBC9 VBC13{ BC5 v13 FL Fc[7] Fp Fi FC7 FC7 Fc[10]} v14 Fl FL FD FC7} v15 v16 v17 v18 Fp Fc[4] FC3 Fi[8] FC7 FC14{ VBC9 BC5 BC11 v21 Fp FC11 Fp Fi[2] FD Fi[2]} FC7 FD FC5[9] FD[10] Fs} v1 Fp FC15{ BC16{ VBC5 BC2 BC8 Fi Fc:2 FC7 Fi} v19 Fi FC7 Fs Fl FC5 Fl} Fp FL Fi FC7 Fp FC17{ v20 Fl FC13 FC7 Fi} Fl}


void  S20677C18 ::v21(){vfunc_called(this, "_ZN9S20677C183v21Ev");}
S20677C18 ::~S20677C18(){ note_dtor("S20677C18", this);} // tgen
S20677C18 ::S20677C18(){ note_ctor("S20677C18", this);} // tgen

static void Test_S20677C18()
{
  extern Class_Descriptor cd_S20677C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(602,1695)];
    init_test(&cd_S20677C18, buf);
    S20677C18 *dp, &lv = *(dp=new (buf) S20677C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9616,6776), "sizeof(S20677C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C18)");
    /*is_ambiguous_... S20677C18::S20677C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C4*), ABISELECT(4328,3024), "S20677C18");
    /*is_ambiguous_... S20677C18::S20677C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*), ABISELECT(4328,3024), "S20677C18");
    check_base_class_offset(lv, (S20677C3*)(S20677C2*), ABISELECT(4328,3024), "S20677C18");
    /*is_ambiguous_... S20677C18::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C12*), ABISELECT(4328,3024), "S20677C18");
    /*is_ambiguous_... S20677C18::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(4328,3024), "S20677C18");
    /*is_ambiguous_... S20677C19::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C12*)(S20677C19*), ABISELECT(4328,3024), "S20677C18");
    check_base_class_offset(lv, (S20677C3*)(S20677C4*)(S20677C15*), ABISELECT(4328,3024), "S20677C18");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*)(S20677C15*), ABISELECT(4328,3024), "S20677C18");
    /*is_ambiguous_... S20677C15::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C15*), ABISELECT(4328,3024), "S20677C18");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C16*), ABISELECT(4328,3024), "S20677C18");
    /*is_ambiguous_... S20677C18::S20677C4 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C4*), ABISELECT(3920,2732), "S20677C18");
    check_base_class_offset(lv, (S20677C4*)(S20677C11*), ABISELECT(3920,2732), "S20677C18");
    check_base_class_offset(lv, (S20677C4*)(S20677C2*), ABISELECT(3920,2732), "S20677C18");
    check_base_class_offset(lv, (S20677C2*)(S20677C11*), ABISELECT(4376,3064), "S20677C18");
    /*is_ambiguous_... S20677C18::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C12*), ABISELECT(4720,3300), "S20677C18");
    /*is_ambiguous_... S20677C19::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C12*)(S20677C19*), ABISELECT(4720,3300), "S20677C18");
    check_base_class_offset(lv, (S20677C12*)(S20677C11*), ABISELECT(4480,3136), "S20677C18");
    check_base_class_offset(lv, (S20677C12*)(S20677C15*), ABISELECT(4480,3136), "S20677C18");
    check_base_class_offset(lv, (S20677C11*), ABISELECT(2832,1980), "S20677C18");
    check_base_class_offset(lv, (S20677C3*)(S20677C9*)(S20677C19*), ABISELECT(5104,3564), "S20677C18");
    check_base_class_offset(lv, (S20677C9*)(S20677C19*), ABISELECT(5104,3564), "S20677C18");
    /*is_ambiguous_... S20677C19::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C12*)(S20677C19*), ABISELECT(4864,3400), "S20677C18");
    check_base_class_offset(lv, (S20677C5*)(S20677C4*)(S20677C15*), ABISELECT(8560,6036), "S20677C18");
    check_base_class_offset(lv, (S20677C4*)(S20677C15*), ABISELECT(8560,6036), "S20677C18");
    /*is_ambiguous_... S20677C15::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C15*), ABISELECT(8976,6328), "S20677C18");
    check_base_class_offset(lv, (S20677C8*)(S20677C15*), ABISELECT(9168,6456), "S20677C18");
    check_base_class_offset(lv, (S20677C5*)(S20677C16*), ABISELECT(9440,6640), "S20677C18");
    check_base_class_offset(lv, (S20677C16*)(S20677C15*), ABISELECT(9440,6640), "S20677C18");
    check_base_class_offset(lv, (S20677C15*)(S20677C19*), ABISELECT(8560,6036), "S20677C18");
    check_base_class_offset(lv, (S20677C19*), ABISELECT(4864,3400), "S20677C18");
    check_field_offset(lv, s20677c18f0, ABISELECT(8,4), "S20677C18.s20677c18f0");
    check_field_offset(lv, s20677c18f1, ABISELECT(16,8), "S20677C18.s20677c18f1");
    check_field_offset(lv, s20677c18f2, ABISELECT(2528,1760), "S20677C18.s20677c18f2");
    check_field_offset(lv, s20677c18f3, ABISELECT(2536,1764), "S20677C18.s20677c18f3");
    check_field_offset(lv, s20677c18f4, ABISELECT(2544,1772), "S20677C18.s20677c18f4");
    check_field_offset(lv, s20677c18f5, ABISELECT(2548,1776), "S20677C18.s20677c18f5");
    check_field_offset(lv, s20677c18f6, ABISELECT(2552,1780), "S20677C18.s20677c18f6");
    check_field_offset(lv, s20677c18f7, ABISELECT(2560,1784), "S20677C18.s20677c18f7");
    check_field_offset(lv, s20677c18f8, ABISELECT(2816,1976), "S20677C18.s20677c18f8");
    test_class_info(&lv, &cd_S20677C18);
    dp->~S20677C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C18(Test_S20677C18, "S20677C18", ABISELECT(9616,6776));

#else // __cplusplus

extern void _ZN9S20677C18C1Ev();
extern void _ZN9S20677C18D1Ev();
Name_Map name_map_S20677C18[] = {
  NSPAIR(_ZN9S20677C18C1Ev),
  NSPAIR(_ZN9S20677C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C2;
extern VTBL_ENTRY _ZTI8S20677C2[];
extern  VTBL_ENTRY _ZTV8S20677C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C2[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C11;
extern VTBL_ENTRY _ZTI9S20677C11[];
extern  VTBL_ENTRY _ZTV9S20677C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C11[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C9;
extern VTBL_ENTRY _ZTI8S20677C9[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C8;
extern VTBL_ENTRY _ZTI8S20677C8[];
extern  VTBL_ENTRY _ZTV8S20677C8[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C16;
extern VTBL_ENTRY _ZTI9S20677C16[];
extern  VTBL_ENTRY _ZTV9S20677C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C16[];
extern Class_Descriptor cd_S20677C15;
extern VTBL_ENTRY _ZTI9S20677C15[];
extern  VTBL_ENTRY _ZTV9S20677C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C15[];
extern Class_Descriptor cd_S20677C19;
extern VTBL_ENTRY _ZTI9S20677C19[];
extern  VTBL_ENTRY _ZTV9S20677C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C19[];
static Base_Class bases_S20677C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(4328,3024), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20677C5,    ABISELECT(3920,2732), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20677C4,    ABISELECT(3920,2732), //bcp->offset
    24, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20677C2,    ABISELECT(4376,3064), //bcp->offset
    33, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20677C5,    ABISELECT(4720,3300), //bcp->offset
    51, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20677C12,    ABISELECT(4480,3136), //bcp->offset
    43, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20677C11,    ABISELECT(2832,1980), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C3,    ABISELECT(5104,3564), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20677C9,    ABISELECT(5104,3564), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20677C12,    ABISELECT(4864,3400), //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
    14, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20677C5,    ABISELECT(8560,6036), //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
    11, //immediately_derived
  0, 0},
  {&cd_S20677C4,    ABISELECT(8560,6036), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20677C5,    ABISELECT(8976,6328), //bcp->offset
    89, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20677C8,    ABISELECT(9168,6456), //bcp->offset
    92, //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
    16, //immediately_derived
  0, 1},
  {&cd_S20677C5,    ABISELECT(9440,6640), //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
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20677C16,    ABISELECT(9440,6640), //bcp->offset
    96, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S20677C15,    ABISELECT(8560,6036), //bcp->offset
    74, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S20677C19,    ABISELECT(4864,3400), //bcp->offset
    54, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20677C18[];
extern void _ZN9S20677C183v21Ev();
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN9S20677C193v17Ev();
extern void _ZN9S20677C193v18Ev();
extern void _ZN9S20677C193v19Ev();
extern void _ZN9S20677C193v20Ev();
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN9S20677C153v16Ev();
extern void _ZN8S20677C82v8Ev();
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY vtc_S20677C18[] = {
  ABISELECT(9440,6640),
  ABISELECT(9168,6456),
  ABISELECT(8560,6036),
  ABISELECT(4864,3400),
  ABISELECT(4720,3300),
  ABISELECT(4480,3136),
  ABISELECT(4376,3064),
  ABISELECT(4328,3024),
  ABISELECT(3920,2732),
  ABISELECT(2832,1980),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN9S20677C183v21Ev,
  0,
  0,
  ABISELECT(1888,1320),
  ABISELECT(1648,1156),
  ABISELECT(1544,1084),
  ABISELECT(1496,1044),
  ABISELECT(1088,752),
  ABISELECT(-2832,-1980),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-3920,-2732),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-4376,-3064),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-4480,-3136),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  ABISELECT(-392,-276),
  ABISELECT(-4720,-3300),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(4576,3240),
  ABISELECT(4304,3056),
  ABISELECT(-384,-264),
  ABISELECT(3696,2636),
  ABISELECT(-144,-100),
  ABISELECT(-536,-376),
  ABISELECT(-4864,-3400),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v17Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v18Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v19Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(880,604),
  ABISELECT(608,420),
  ABISELECT(-3840,-2736),
  ABISELECT(-4080,-2900),
  ABISELECT(-4232,-3012),
  ABISELECT(-8560,-6036),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20677C153v16Ev,
  ABISELECT(-4648,-3304),
  ABISELECT(-8976,-6328),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  0,
  ABISELECT(-9168,-6456),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
  0,
  ABISELECT(-5112,-3616),
  ABISELECT(-9440,-6640),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
extern VTBL_ENTRY _ZTV9S20677C18[];
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C11__9S20677C18[] = {
  ABISELECT(1888,1320),
  ABISELECT(1648,1156),
  ABISELECT(1544,1084),
  ABISELECT(1496,1044),
  ABISELECT(1088,752),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C11__9S20677C18[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C11__9S20677C18[] = {
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-1544,-1084),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C11__9S20677C18[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-1648,-1156),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C11__9S20677C18[] = {
  ABISELECT(-392,-276),
  ABISELECT(-1888,-1320),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C18[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C4__9S20677C18[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C18[] = {
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__8S20677C2__9S20677C18[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(456,332),
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C18[] = {
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12__9S20677C18[] = {
  ABISELECT(-392,-276),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C18[] = {
  ABISELECT(-392,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN9S20677C193v17Ev();
extern void _ZN9S20677C193v18Ev();
extern void _ZN9S20677C193v19Ev();
extern void _ZN9S20677C193v20Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C19__9S20677C18[] = {
  ABISELECT(4576,3240),
  ABISELECT(4304,3056),
  ABISELECT(-384,-264),
  ABISELECT(3696,2636),
  ABISELECT(-144,-100),
  ABISELECT(-536,-376),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v17Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v18Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v19Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v20Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C129S20677C19__A1__9S20677C18[] = {
  ABISELECT(-144,-100),
  ABISELECT(-536,-376),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C129S20677C19__A1__9S20677C18[] = {
  ABISELECT(-392,-276),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C19__9S20677C18[] = {
  ABISELECT(-392,-276),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN9S20677C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C15__9S20677C19__9S20677C18[] = {
  0,
  0,
  0,
  0,
  ABISELECT(880,604),
  ABISELECT(608,420),
  ABISELECT(-3840,-2736),
  ABISELECT(-4080,-2900),
  ABISELECT(-4232,-3012),
  ABISELECT(-3696,-2636),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20677C153v16Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__A1__9S20677C19__9S20677C18[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(384,264),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C59S20677C15__A2__9S20677C19__9S20677C18[] = {
  ABISELECT(-4648,-3304),
  ABISELECT(-4112,-2928),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
};
extern void _ZN8S20677C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C8__9S20677C19__9S20677C18[] = {
  0,
  ABISELECT(-4304,-3056),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
};
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C16__9S20677C19__9S20677C18[] = {
  0,
  ABISELECT(-5112,-3616),
  ABISELECT(-4576,-3240),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN9S20677C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C15__9S20677C18[] = {
  ABISELECT(880,604),
  ABISELECT(608,420),
  ABISELECT(-3840,-2736),
  ABISELECT(-4080,-2900),
  ABISELECT(-4232,-3012),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20677C153v16Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C49S20677C15__A1__9S20677C18[] = {
  ABISELECT(-4232,-3012),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C49S20677C15__A2__9S20677C18[] = {
  ABISELECT(-4232,-3012),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C59S20677C15__A3__9S20677C18[] = {
  ABISELECT(-4648,-3304),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C15__9S20677C18[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(4080,2900),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C15__9S20677C18[] = {
  ABISELECT(-392,-276),
  ABISELECT(3840,2736),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A__9S20677C15__9S20677C18[] = {
  ABISELECT(-4648,-3304),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
};
extern void _ZN8S20677C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C8__9S20677C15__9S20677C18[] = {
  0,
  ABISELECT(-608,-420),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
};
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C16__9S20677C15__9S20677C18[] = {
  0,
  ABISELECT(-5112,-3616),
  ABISELECT(-880,-604),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C16__9S20677C18[] = {
  ABISELECT(-5112,-3616),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C16[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C59S20677C16__A4__9S20677C18[] = {
  ABISELECT(-5112,-3616),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTT_ENTRY vtt_S20677C18[] = {
  {&(_ZTV9S20677C18[12]),  12,101},
  {&(_ZTV9S20677C18[22]),  22,101},
  {&(_ZTV9S20677C18[30]),  30,101},
  {&(_ZTV9S20677C18[40]),  40,101},
  {&(_ZTV9S20677C18[49]),  49,101},
  {&(_ZTV9S20677C18[54]),  54,101},
  {&(_ZTV9S20677C18[68]),  68,101},
  {&(_ZTV9S20677C18[85]),  85,101},
  {&(_ZTV9S20677C18[92]),  92,101},
  {&(_ZTV9S20677C18[95]),  95,101},
  {&(_ZTV9S20677C18[100]),  100,101},
  {&(_tg__ZTV9S20677C11__9S20677C18[7]),  7,9},
  {&(_tg__ZTV8S20677C4__9S20677C11__9S20677C18[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C11__9S20677C18[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C11__9S20677C18[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C11__9S20677C18[3]),  3,3},
  {&(_tg__ZTV8S20677C4__9S20677C18[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C4__9S20677C18[3]),  3,3},
  {&(_tg__ZTV8S20677C2__9S20677C18[4]),  4,7},
  {&(_tg__ZTV8S20677C4__8S20677C2__9S20677C18[6]),  6,9},
  {&(_tg__ZTV9S20677C12__9S20677C18[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C12__9S20677C18[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A1__9S20677C18[3]),  3,3},
  {&(_tg__ZTV9S20677C19__9S20677C18[8]),  8,14},
  {&(_tg__ZTV9S20677C129S20677C19__A1__9S20677C18[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C129S20677C19__A1__9S20677C18[3]),  3,3},
  {&(_tg__ZTV8S20677C5__9S20677C19__9S20677C18[3]),  3,3},
  {&(_tg__ZTV9S20677C15__9S20677C19__9S20677C18[11]),  11,15},
  {&(_tg__ZTV9S20677C12__A1__9S20677C19__9S20677C18[6]),  6,8},
  {&(_tg__ZTV8S20677C59S20677C15__A2__9S20677C19__9S20677C18[3]),  3,3},
  {&(_tg__ZTV8S20677C8__9S20677C19__9S20677C18[3]),  3,4},
  {&(_tg__ZTV9S20677C16__9S20677C19__9S20677C18[4]),  4,5},
  {&(_tg__ZTV9S20677C15__9S20677C18[7]),  7,11},
  {&(_tg__ZTV8S20677C49S20677C15__A1__9S20677C18[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C49S20677C15__A2__9S20677C18[3]),  3,3},
  {&(_tg__ZTV8S20677C59S20677C15__A3__9S20677C18[3]),  3,3},
  {&(_tg__ZTV9S20677C12__9S20677C15__9S20677C18[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C15__9S20677C18[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A__9S20677C15__9S20677C18[3]),  3,3},
  {&(_tg__ZTV8S20677C8__9S20677C15__9S20677C18[3]),  3,4},
  {&(_tg__ZTV9S20677C16__9S20677C15__9S20677C18[4]),  4,5},
  {&(_tg__ZTV9S20677C16__9S20677C18[3]),  3,4},
  {&(_tg__ZTV8S20677C59S20677C16__A4__9S20677C18[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20677C18[];
extern  VTBL_ENTRY _ZTV9S20677C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C18[];
Class_Descriptor cd_S20677C18 = {  "S20677C18", // class name
  bases_S20677C18, 18,
  &(vtc_S20677C18[0]), // expected_vtbl_contents
  &(vtt_S20677C18[0]), // expected_vtt_contents
  ABISELECT(9616,6776), // object size
  NSPAIRA(_ZTI9S20677C18),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20677C18),101, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20677C18),43, //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  S20677C22  : S20677C10 , S20677C5 , virtual S20677C11 {
  void *s20677c22f0;
  ::S20677C6_nt s20677c22f1;
  long s20677c22f2;
  virtual  ~S20677C22(); // _ZN9S20677C22D2Ev
  S20677C22(); // tgen
};
//SIG(-1 S20677C22) C1{ BC2{ BC3{ VBC4{ VBC5{ m Fp FL[4] Fs} BC6{ VBC5 FD Fi FC5 FC5} v1 v2 v3 Fs FL Fc Fi[2] FC6 Fp FL Fi FL Fi} VBC7{ VBC5 VBC4 v4 v5 v6 FL FC8{} Fp Fc[2] FC5 Fl FC8} VBC9{ VBC5 VBC6 v7 v8 Fi FC6 FL Fi Fp} v9 v10 FC8 FC8 Fi FC6 FC8 FC8 FC10{ v12 FC8 FC6 FC8 FL FC8 Fp FC8 Fp[2] FC8} FC7 Fp FC8} v11 Fi[2] FC8 FC8 FC8 FC8 FC8 FC11{ VBC6 BC3 BC9 Fi Fc:2 FC8 Fi} Fl[4] FC8 FC12{ BC13{ BC4 VBC9 BC6 VBC10 VBC14{ BC6 v13 FL Fc[7] Fp Fi FC8 FC8 Fc[10]} v14 Fl FL FD FC8} BC15{ VBC10 v15 FC13 FC8 Fl Fi[2]} BC11 Fp FL Fi Fp Fi[3] Fc FL Fp FD}[2] Fc FC8} BC6 VBC3 vd Fp FC8 Fl}


 S20677C22 ::~S20677C22(){ note_dtor("S20677C22", this);}
S20677C22 ::S20677C22(){ note_ctor("S20677C22", this);} // tgen

static void Test_S20677C22()
{
  extern Class_Descriptor cd_S20677C22;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(974,2711)];
    init_test(&cd_S20677C22, buf);
    S20677C22 *dp, &lv = *(dp=new (buf) S20677C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(15568,10840), "sizeof(S20677C22)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C22)");
    check_base_class_offset(lv, (S20677C3*)(S20677C4*), ABISELECT(13944,9712), "S20677C22");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*), ABISELECT(13944,9712), "S20677C22");
    check_base_class_offset(lv, (S20677C3*)(S20677C2*), ABISELECT(13944,9712), "S20677C22");
    check_base_class_offset(lv, (S20677C3*)(S20677C12*), ABISELECT(13944,9712), "S20677C22");
    /*is_ambiguous_... S20677C22::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(13944,9712), "S20677C22");
    /*is_ambiguous_... S20677C22::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(13944,9712), "S20677C22");
    check_base_class_offset(lv, (S20677C5*)(S20677C4*), ABISELECT(13536,9420), "S20677C22");
    check_base_class_offset(lv, (S20677C4*)(S20677C11*)(S20677C10*), ABISELECT(13536,9420), "S20677C22");
    check_base_class_offset(lv, (S20677C4*)(S20677C2*), ABISELECT(13536,9420), "S20677C22");
    /*is_ambiguous_... S20677C22::S20677C11 */ AMB_check_base_class_offset(lv, (S20677C4*)(S20677C11*), ABISELECT(13536,9420), "S20677C22");
    check_base_class_offset(lv, (S20677C2*)(S20677C11*)(S20677C10*), ABISELECT(13992,9752), "S20677C22");
    /*is_ambiguous_... S20677C22::S20677C11 */ AMB_check_base_class_offset(lv, (S20677C2*)(S20677C11*), ABISELECT(13992,9752), "S20677C22");
    check_base_class_offset(lv, (S20677C5*)(S20677C12*), ABISELECT(14336,9988), "S20677C22");
    check_base_class_offset(lv, (S20677C12*)(S20677C11*)(S20677C10*), ABISELECT(14096,9824), "S20677C22");
    /*is_ambiguous_... S20677C22::S20677C11 */ AMB_check_base_class_offset(lv, (S20677C12*)(S20677C11*), ABISELECT(14096,9824), "S20677C22");
    check_base_class_offset(lv, (S20677C11*)(S20677C10*), 0, "S20677C22");
    check_base_class_offset(lv, (S20677C10*), 0, "S20677C22");
    /*is_ambiguous_... S20677C22::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C5*), ABISELECT(13376,9308), "S20677C22");
    /*is_ambiguous_... S20677C22::S20677C11 */ AMB_check_base_class_offset(lv, (S20677C11*), ABISELECT(14480,10088), "S20677C22");
    check_field_offset(lv, s20677c22f0, ABISELECT(13512,9408), "S20677C22.s20677c22f0");
    check_field_offset(lv, s20677c22f1, ABISELECT(13520,9412), "S20677C22.s20677c22f1");
    check_field_offset(lv, s20677c22f2, ABISELECT(13528,9416), "S20677C22.s20677c22f2");
    test_class_info(&lv, &cd_S20677C22);
    dp->~S20677C22();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C22(Test_S20677C22, "S20677C22", ABISELECT(15568,10840));

#else // __cplusplus

extern void _ZN9S20677C22C1Ev();
extern void _ZN9S20677C22D2Ev();
Name_Map name_map_S20677C22[] = {
  NSPAIR(_ZN9S20677C22C1Ev),
  NSPAIR(_ZN9S20677C22D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C2;
extern VTBL_ENTRY _ZTI8S20677C2[];
extern  VTBL_ENTRY _ZTV8S20677C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C2[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C11;
extern VTBL_ENTRY _ZTI9S20677C11[];
extern  VTBL_ENTRY _ZTV9S20677C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C11[];
extern Class_Descriptor cd_S20677C10;
extern VTBL_ENTRY _ZTI9S20677C10[];
extern  VTBL_ENTRY _ZTV9S20677C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C10[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C11;
extern VTBL_ENTRY _ZTI9S20677C11[];
extern  VTBL_ENTRY _ZTV9S20677C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C11[];
static Base_Class bases_S20677C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(13944,9712), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20677C5,    ABISELECT(13536,9420), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20677C4,    ABISELECT(13536,9420), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20677C2,    ABISELECT(13992,9752), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20677C5,    ABISELECT(14336,9988), //bcp->offset
    43, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20677C12,    ABISELECT(14096,9824), //bcp->offset
    35, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20677C11,    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
    7, //immediately_derived
  0, 0},
  {&cd_S20677C10,    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_S20677C5,    ABISELECT(13376,9308), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20677C11,    ABISELECT(14480,10088), //bcp->offset
    46, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20677C22[];
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
extern void _ZN9S20677C103v14Ev();
extern void _ZN9S20677C22D1Ev();
extern void _ZN9S20677C22D0Ev();
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY vtc_S20677C22[] = {
  ABISELECT(14480,10088),
  ABISELECT(14336,9988),
  ABISELECT(14096,9824),
  ABISELECT(13992,9752),
  ABISELECT(13944,9712),
  ABISELECT(13536,9420),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C22[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
  (VTBL_ENTRY)&_ZN9S20677C103v14Ev,
  (VTBL_ENTRY)&_ZN9S20677C22D1Ev,
  (VTBL_ENTRY)&_ZN9S20677C22D0Ev,
  ABISELECT(568,404),
  ABISELECT(-13376,-9308),
  (VTBL_ENTRY)&(_ZTI9S20677C22[0]),
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-13536,-9420),
  (VTBL_ENTRY)&(_ZTI9S20677C22[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-13992,-9752),
  (VTBL_ENTRY)&(_ZTI9S20677C22[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-14096,-9824),
  (VTBL_ENTRY)&(_ZTI9S20677C22[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  ABISELECT(-392,-276),
  ABISELECT(-14336,-9988),
  (VTBL_ENTRY)&(_ZTI9S20677C22[0]),
  0,
  0,
  ABISELECT(-144,-100),
  ABISELECT(-384,-264),
  ABISELECT(-488,-336),
  ABISELECT(-536,-376),
  ABISELECT(-944,-668),
  ABISELECT(-14480,-10088),
  (VTBL_ENTRY)&(_ZTI9S20677C22[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern VTBL_ENTRY _ZTV9S20677C22[];
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
extern void _ZN9S20677C103v14Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C10__9S20677C22[] = {
  ABISELECT(14336,9988),
  ABISELECT(14096,9824),
  ABISELECT(13992,9752),
  ABISELECT(13944,9712),
  ABISELECT(13536,9420),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
  (VTBL_ENTRY)&_ZN9S20677C103v14Ev,
};
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C119S20677C10__9S20677C22[] = {
  ABISELECT(14336,9988),
  ABISELECT(14096,9824),
  ABISELECT(13992,9752),
  ABISELECT(13944,9712),
  ABISELECT(13536,9420),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C119S20677C10__9S20677C22[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-13536,-9420),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C119S20677C10__9S20677C22[] = {
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-13992,-9752),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C119S20677C10__9S20677C22[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-14096,-9824),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C119S20677C10__9S20677C22[] = {
  ABISELECT(-392,-276),
  ABISELECT(-14336,-9988),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C10__9S20677C22[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-13536,-9420),
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C10__9S20677C22[] = {
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-13992,-9752),
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C10__9S20677C22[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-14096,-9824),
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C10__9S20677C22[] = {
  ABISELECT(-392,-276),
  ABISELECT(-14336,-9988),
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A__9S20677C22[] = {
  ABISELECT(568,404),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C22[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C4__9S20677C22[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C22[] = {
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__8S20677C2__9S20677C22[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(456,332),
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C22[] = {
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12__9S20677C22[] = {
  ABISELECT(-392,-276),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C22[] = {
  ABISELECT(-392,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C11__A1__9S20677C22[] = {
  ABISELECT(-144,-100),
  ABISELECT(-384,-264),
  ABISELECT(-488,-336),
  ABISELECT(-536,-376),
  ABISELECT(-944,-668),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C11__A1__9S20677C22[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(944,668),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C11__A1__9S20677C22[] = {
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(488,336),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C11__A1__9S20677C22[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(384,264),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C11__A1__9S20677C22[] = {
  ABISELECT(-392,-276),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
};
static  VTT_ENTRY vtt_S20677C22[] = {
  {&(_ZTV9S20677C22[8]),  8,57},
  {&(_tg__ZTV9S20677C10__9S20677C22[7]),  7,10},
  {&(_tg__ZTV9S20677C119S20677C10__9S20677C22[7]),  7,9},
  {&(_tg__ZTV8S20677C4__9S20677C119S20677C10__9S20677C22[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C119S20677C10__9S20677C22[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C119S20677C10__9S20677C22[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C119S20677C10__9S20677C22[3]),  3,3},
  {&(_tg__ZTV8S20677C4__9S20677C10__9S20677C22[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C10__9S20677C22[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C10__9S20677C22[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C10__9S20677C22[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A__9S20677C22[3]),  3,3},
  {&(_ZTV9S20677C22[22]),  22,57},
  {&(_ZTV9S20677C22[32]),  32,57},
  {&(_ZTV9S20677C22[41]),  41,57},
  {&(_ZTV9S20677C22[46]),  46,57},
  {&(_ZTV9S20677C22[16]),  16,57},
  {&(_ZTV9S20677C22[55]),  55,57},
  {&(_tg__ZTV8S20677C4__9S20677C22[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C4__9S20677C22[3]),  3,3},
  {&(_tg__ZTV8S20677C2__9S20677C22[4]),  4,7},
  {&(_tg__ZTV8S20677C4__8S20677C2__9S20677C22[6]),  6,9},
  {&(_tg__ZTV9S20677C12__9S20677C22[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C12__9S20677C22[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A1__9S20677C22[3]),  3,3},
  {&(_tg__ZTV9S20677C11__A1__9S20677C22[7]),  7,9},
  {&(_tg__ZTV8S20677C4__9S20677C11__A1__9S20677C22[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C11__A1__9S20677C22[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C11__A1__9S20677C22[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C11__A1__9S20677C22[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20677C22[];
extern  VTBL_ENTRY _ZTV9S20677C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C22[];
Class_Descriptor cd_S20677C22 = {  "S20677C22", // class name
  bases_S20677C22, 10,
  &(vtc_S20677C22[0]), // expected_vtbl_contents
  &(vtt_S20677C22[0]), // expected_vtt_contents
  ABISELECT(15568,10840), // object size
  NSPAIRA(_ZTI9S20677C22),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20677C22),57, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20677C22),30, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20677C1  : virtual S20677C2 , virtual S20677C7 , virtual S20677C10 , virtual S20677C18 {
  int s20677c1f0[2];
  char s20677c1f1;
  void *s20677c1f2;
  int s20677c1f3;
  ::S20677C22 s20677c1f4;
  virtual  ~S20677C1(); // _ZN8S20677C1D2Ev
  virtual void  v1(); // _ZN8S20677C12v1Ev
  S20677C1(); // tgen
};
//SIG(1 S20677C1) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} VBC4{ VBC3 BC5{ VBC3 FD Fi FC3 FC3} v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} v5 v6 v7 FL FC6{} Fp Fc[2] FC3 Fl FC6} VBC7{ VBC8{ v8 FC6 FC5 FC6 FL FC6 Fp FC6 Fp[2] FC6} BC5 BC9{ BC3 FC3 Fi FD Fi FL Fl} v9 Fp FC9 Fp Fi[2] FD Fi[2]} VBC10{ BC11{ VBC4 VBC2 VBC12{ VBC3 VBC5 v10 v11 Fi FC5 FL Fi Fp} v12 v13 FC6 FC6 Fi FC5 FC6 FC6 FC8 FC2 Fp FC6} v14 Fi[2] FC6 FC6 FC6 FC6 FC6 FC13{ VBC5 BC11 BC12 Fi Fc:2 FC6 Fi} Fl[4] FC6 FC14{ BC15{ BC4 VBC12 BC5 VBC8 VBC16{ BC5 v15 FL Fc[7] Fp Fi FC6 FC6 Fc[10]} v16 Fl FL FD FC6} BC17{ VBC8 v22 FC15 FC6 Fl Fi[2]} BC13 Fp FL Fi Fp Fi[3] Fc FL Fp FD}[2] Fc FC6} VBC18{ VBC11 VBC19{ BC9 BC12 VBC15 v17 v18 v19 v20 Fp Fc[4] FC4 Fi[8] FC6 FC7 FC6 FD FC5[9] FD[10] Fs} v21 Fp FC20{ BC13 v23 Fi FC6 Fs Fl FC5 Fl} Fp FL Fi FC6 Fp FC21{ v24 Fl FC16 FC6 Fi} Fl} vd v1 Fi[2] Fc Fp Fi FC22{ BC10 BC5 VBC11 vd Fp FC6 Fl}}


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

static void Test_S20677C1()
{
  extern Class_Descriptor cd_S20677C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2447,6828)];
    init_test(&cd_S20677C1, buf);
    S20677C1 *dp, &lv = *(dp=new (buf) S20677C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(39136,27308), "sizeof(S20677C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C1)");
    check_base_class_offset(lv, (S20677C3*)(S20677C2*), ABISELECT(15720,10936), "S20677C1");
    /*is_ambiguous_... S20677C1::S20677C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C4*), ABISELECT(15720,10936), "S20677C1");
    /*is_ambiguous_... S20677C1::S20677C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*), ABISELECT(15720,10936), "S20677C1");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C7*), ABISELECT(15720,10936), "S20677C1");
    /*is_ambiguous_... S20677C1::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C12*), ABISELECT(15720,10936), "S20677C1");
    /*is_ambiguous_... S20677C1::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(15720,10936), "S20677C1");
    /*is_ambiguous_... S20677C19::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C12*)(S20677C19*), ABISELECT(15720,10936), "S20677C1");
    check_base_class_offset(lv, (S20677C3*)(S20677C4*)(S20677C15*), ABISELECT(15720,10936), "S20677C1");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*)(S20677C15*), ABISELECT(15720,10936), "S20677C1");
    /*is_ambiguous_... S20677C15::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C15*), ABISELECT(15720,10936), "S20677C1");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C16*), ABISELECT(15720,10936), "S20677C1");
    /*is_ambiguous_... S20677C1::S20677C4 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C4*), ABISELECT(15776,10976), "S20677C1");
    check_base_class_offset(lv, (S20677C4*)(S20677C2*), ABISELECT(15776,10976), "S20677C1");
    check_base_class_offset(lv, (S20677C4*)(S20677C11*)(S20677C10*), ABISELECT(15776,10976), "S20677C1");
    /*is_ambiguous_... S20677C1::S20677C11 */ AMB_check_base_class_offset(lv, (S20677C4*)(S20677C11*), ABISELECT(15776,10976), "S20677C1");
    check_base_class_offset(lv, (S20677C2*), ABISELECT(15616,10864), "S20677C1");
    check_base_class_offset(lv, (S20677C2*)(S20677C11*)(S20677C10*), ABISELECT(15616,10864), "S20677C1");
    /*is_ambiguous_... S20677C1::S20677C11 */ AMB_check_base_class_offset(lv, (S20677C2*)(S20677C11*), ABISELECT(15616,10864), "S20677C1");
    check_base_class_offset(lv, (S20677C8*)(S20677C7*), ABISELECT(16704,11628), "S20677C1");
    check_base_class_offset(lv, (S20677C8*)(S20677C15*), ABISELECT(16704,11628), "S20677C1");
    check_base_class_offset(lv, (S20677C5*)(S20677C7*), ABISELECT(16192,11268), "S20677C1");
    check_base_class_offset(lv, (S20677C3*)(S20677C9*)(S20677C7*), ABISELECT(16336,11368), "S20677C1");
    check_base_class_offset(lv, (S20677C9*)(S20677C7*), ABISELECT(16336,11368), "S20677C1");
    check_base_class_offset(lv, (S20677C7*), ABISELECT(16192,11268), "S20677C1");
    /*is_ambiguous_... S20677C1::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C12*), ABISELECT(30592,21284), "S20677C1");
    /*is_ambiguous_... S20677C19::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C12*)(S20677C19*), ABISELECT(30592,21284), "S20677C1");
    check_base_class_offset(lv, (S20677C12*)(S20677C11*)(S20677C10*), ABISELECT(30352,21120), "S20677C1");
    /*is_ambiguous_... S20677C1::S20677C11 */ AMB_check_base_class_offset(lv, (S20677C12*)(S20677C11*), ABISELECT(30352,21120), "S20677C1");
    check_base_class_offset(lv, (S20677C12*)(S20677C15*), ABISELECT(30352,21120), "S20677C1");
    check_base_class_offset(lv, (S20677C11*)(S20677C10*), ABISELECT(16976,11812), "S20677C1");
    check_base_class_offset(lv, (S20677C10*), ABISELECT(16976,11812), "S20677C1");
    check_base_class_offset(lv, (S20677C11*)(S20677C18*), ABISELECT(33568,23364), "S20677C1");
    check_base_class_offset(lv, (S20677C3*)(S20677C9*)(S20677C19*), ABISELECT(34896,24280), "S20677C1");
    check_base_class_offset(lv, (S20677C9*)(S20677C19*), ABISELECT(34896,24280), "S20677C1");
    /*is_ambiguous_... S20677C19::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C12*)(S20677C19*), ABISELECT(34656,24116), "S20677C1");
    check_base_class_offset(lv, (S20677C5*)(S20677C4*)(S20677C15*), ABISELECT(38352,26752), "S20677C1");
    check_base_class_offset(lv, (S20677C4*)(S20677C15*), ABISELECT(38352,26752), "S20677C1");
    /*is_ambiguous_... S20677C15::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C15*), ABISELECT(38768,27044), "S20677C1");
    check_base_class_offset(lv, (S20677C5*)(S20677C16*), ABISELECT(38960,27172), "S20677C1");
    check_base_class_offset(lv, (S20677C16*)(S20677C15*), ABISELECT(38960,27172), "S20677C1");
    check_base_class_offset(lv, (S20677C15*)(S20677C19*), ABISELECT(38352,26752), "S20677C1");
    check_base_class_offset(lv, (S20677C19*)(S20677C18*), ABISELECT(34656,24116), "S20677C1");
    check_base_class_offset(lv, (S20677C18*), ABISELECT(30736,21384), "S20677C1");
    check_field_offset(lv, s20677c1f0, ABISELECT(8,4), "S20677C1.s20677c1f0");
    check_field_offset(lv, s20677c1f1, ABISELECT(16,12), "S20677C1.s20677c1f1");
    check_field_offset(lv, s20677c1f2, ABISELECT(24,16), "S20677C1.s20677c1f2");
    check_field_offset(lv, s20677c1f3, ABISELECT(32,20), "S20677C1.s20677c1f3");
    check_field_offset(lv, s20677c1f4, ABISELECT(48,24), "S20677C1.s20677c1f4");
    test_class_info(&lv, &cd_S20677C1);
    dp->~S20677C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C1(Test_S20677C1, "S20677C1", ABISELECT(39136,27308));

#else // __cplusplus

extern void _ZN8S20677C1C1Ev();
extern void _ZN8S20677C1D2Ev();
Name_Map name_map_S20677C1[] = {
  NSPAIR(_ZN8S20677C1C1Ev),
  NSPAIR(_ZN8S20677C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C2;
extern VTBL_ENTRY _ZTI8S20677C2[];
extern  VTBL_ENTRY _ZTV8S20677C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C2[];
extern Class_Descriptor cd_S20677C8;
extern VTBL_ENTRY _ZTI8S20677C8[];
extern  VTBL_ENTRY _ZTV8S20677C8[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C9;
extern VTBL_ENTRY _ZTI8S20677C9[];
extern Class_Descriptor cd_S20677C7;
extern VTBL_ENTRY _ZTI8S20677C7[];
extern  VTBL_ENTRY _ZTV8S20677C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C7[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C11;
extern VTBL_ENTRY _ZTI9S20677C11[];
extern  VTBL_ENTRY _ZTV9S20677C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C11[];
extern Class_Descriptor cd_S20677C10;
extern VTBL_ENTRY _ZTI9S20677C10[];
extern  VTBL_ENTRY _ZTV9S20677C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C10[];
extern Class_Descriptor cd_S20677C11;
extern VTBL_ENTRY _ZTI9S20677C11[];
extern  VTBL_ENTRY _ZTV9S20677C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C11[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C9;
extern VTBL_ENTRY _ZTI8S20677C9[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C16;
extern VTBL_ENTRY _ZTI9S20677C16[];
extern  VTBL_ENTRY _ZTV9S20677C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C16[];
extern Class_Descriptor cd_S20677C15;
extern VTBL_ENTRY _ZTI9S20677C15[];
extern  VTBL_ENTRY _ZTV9S20677C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C15[];
extern Class_Descriptor cd_S20677C19;
extern VTBL_ENTRY _ZTI9S20677C19[];
extern  VTBL_ENTRY _ZTV9S20677C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C19[];
extern Class_Descriptor cd_S20677C18;
extern VTBL_ENTRY _ZTI9S20677C18[];
extern  VTBL_ENTRY _ZTV9S20677C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C18[];
static Base_Class bases_S20677C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(15720,10936), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20677C5,    ABISELECT(15776,10976), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20677C4,    ABISELECT(15776,10976), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20677C2,    ABISELECT(15616,10864), //bcp->offset
    18, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C8,    ABISELECT(16704,11628), //bcp->offset
    43, //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
    8, //immediately_derived
  0, 1},
  {&cd_S20677C5,    ABISELECT(16192,11268), //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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20677C3,    ABISELECT(16336,11368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20677C9,    ABISELECT(16336,11368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20677C7,    ABISELECT(16192,11268), //bcp->offset
    37, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C5,    ABISELECT(30592,21284), //bcp->offset
    68, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20677C12,    ABISELECT(30352,21120), //bcp->offset
    60, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20677C11,    ABISELECT(16976,11812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20677C10,    ABISELECT(16976,11812), //bcp->offset
    47, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C11,    ABISELECT(33568,23364), //bcp->offset
    85, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S20677C3,    ABISELECT(34896,24280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20677C9,    ABISELECT(34896,24280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20677C12,    ABISELECT(34656,24116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20677C5,    ABISELECT(38352,26752), //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
    14, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20677C4,    ABISELECT(38352,26752), //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
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20677C5,    ABISELECT(38768,27044), //bcp->offset
    131, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20677C5,    ABISELECT(38960,27172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20677C16,    ABISELECT(38960,27172), //bcp->offset
    134, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S20677C15,    ABISELECT(38352,26752), //bcp->offset
    116, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S20677C19,    ABISELECT(34656,24116), //bcp->offset
    96, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S20677C18,    ABISELECT(30736,21384), //bcp->offset
    71, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20677C1[];
extern void _ZN8S20677C1D1Ev();
extern void _ZN8S20677C1D0Ev();
extern void _ZN8S20677C12v1Ev();
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN8S20677C72v9Ev();
extern void _ZN8S20677C82v8Ev();
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
extern void _ZN9S20677C103v14Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN9S20677C183v21Ev();
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN9S20677C193v17Ev();
extern void _ZN9S20677C193v18Ev();
extern void _ZN9S20677C193v19Ev();
extern void _ZN9S20677C193v20Ev();
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN9S20677C153v16Ev();
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY vtc_S20677C1[] = {
  ABISELECT(38960,27172),
  ABISELECT(38352,26752),
  ABISELECT(34656,24116),
  ABISELECT(33568,23364),
  ABISELECT(30736,21384),
  ABISELECT(30592,21284),
  ABISELECT(30352,21120),
  ABISELECT(16976,11812),
  ABISELECT(16704,11628),
  ABISELECT(16192,11268),
  ABISELECT(15776,10976),
  ABISELECT(15720,10936),
  ABISELECT(15616,10864),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  (VTBL_ENTRY)&_ZN8S20677C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20677C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20677C12v1Ev,
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(-15616,-10864),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-15776,-10976),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  0,
  ABISELECT(512,360),
  ABISELECT(-472,-332),
  ABISELECT(-16192,-11268),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  (VTBL_ENTRY)&_ZN8S20677C72v9Ev,
  0,
  ABISELECT(-16704,-11628),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
  0,
  0,
  0,
  ABISELECT(13616,9472),
  ABISELECT(13376,9308),
  ABISELECT(-1360,-948),
  ABISELECT(-1256,-876),
  ABISELECT(-1200,-836),
  ABISELECT(-16976,-11812),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
  (VTBL_ENTRY)&_ZN9S20677C103v14Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10184),
  ABISELECT(-30352,-21120),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  ABISELECT(-14872,-10348),
  ABISELECT(-30592,-21284),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  0,
  ABISELECT(8224,5788),
  ABISELECT(-14032,-9756),
  ABISELECT(7616,5368),
  ABISELECT(3920,2732),
  ABISELECT(-144,-100),
  ABISELECT(-384,-264),
  ABISELECT(-15120,-10520),
  ABISELECT(-15016,-10448),
  ABISELECT(-14960,-10408),
  ABISELECT(2832,1980),
  ABISELECT(-30736,-21384),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  (VTBL_ENTRY)&_ZN9S20677C183v21Ev,
  0,
  0,
  ABISELECT(-2976,-2080),
  ABISELECT(-3216,-2244),
  ABISELECT(-17952,-12500),
  ABISELECT(-17848,-12428),
  ABISELECT(-17792,-12388),
  ABISELECT(-33568,-23364),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(4304,3056),
  ABISELECT(-17952,-12488),
  ABISELECT(-4304,-2996),
  ABISELECT(3696,2636),
  ABISELECT(-4064,-2832),
  ABISELECT(-18936,-13180),
  ABISELECT(-34656,-24116),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v17Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v18Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v19Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(608,420),
  ABISELECT(-21648,-15124),
  ABISELECT(-7760,-5468),
  ABISELECT(-8000,-5632),
  ABISELECT(-22632,-15816),
  ABISELECT(-38352,-26752),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20677C153v16Ev,
  ABISELECT(-23048,-16108),
  ABISELECT(-38768,-27044),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  0,
  ABISELECT(-23240,-16236),
  ABISELECT(-38960,-27172),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
extern VTBL_ENTRY _ZTV8S20677C1[];
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__8S20677C1[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__8S20677C2__8S20677C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__8S20677C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C4__8S20677C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C72v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C7__8S20677C1[] = {
  ABISELECT(512,360),
  ABISELECT(-472,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C7[0]),
  (VTBL_ENTRY)&_ZN8S20677C72v9Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C7__A1__8S20677C1[] = {
  ABISELECT(-472,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C8__8S20677C7__8S20677C1[] = {
  0,
  ABISELECT(-512,-360),
  (VTBL_ENTRY)&(_ZTI8S20677C7[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
};
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
extern void _ZN9S20677C103v14Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C10__8S20677C1[] = {
  ABISELECT(13616,9472),
  ABISELECT(13376,9308),
  ABISELECT(-1360,-948),
  ABISELECT(-1256,-876),
  ABISELECT(-1200,-836),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
  (VTBL_ENTRY)&_ZN9S20677C103v14Ev,
};
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C119S20677C10__8S20677C1[] = {
  ABISELECT(13616,9472),
  ABISELECT(13376,9308),
  ABISELECT(-1360,-948),
  ABISELECT(-1256,-876),
  ABISELECT(-1200,-836),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C119S20677C10__8S20677C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(1200,836),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C119S20677C10__8S20677C1[] = {
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(1360,948),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C119S20677C10__8S20677C1[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10184),
  ABISELECT(-13376,-9308),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C119S20677C10__8S20677C1[] = {
  ABISELECT(-14872,-10348),
  ABISELECT(-13616,-9472),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C10__8S20677C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(1200,836),
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C10__8S20677C1[] = {
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(1360,948),
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C10__8S20677C1[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10184),
  ABISELECT(-13376,-9308),
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C10__8S20677C1[] = {
  ABISELECT(-14872,-10348),
  ABISELECT(-13616,-9472),
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__8S20677C1[] = {
  ABISELECT(240,164),
  ABISELECT(-14632,-10184),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12__8S20677C1[] = {
  ABISELECT(-14872,-10348),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A2__8S20677C1[] = {
  ABISELECT(-14872,-10348),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN9S20677C183v21Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C18__8S20677C1[] = {
  ABISELECT(8224,5788),
  ABISELECT(-14032,-9756),
  ABISELECT(7616,5368),
  ABISELECT(3920,2732),
  ABISELECT(-144,-100),
  ABISELECT(-384,-264),
  ABISELECT(-15120,-10520),
  ABISELECT(-15016,-10448),
  ABISELECT(-14960,-10408),
  ABISELECT(2832,1980),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN9S20677C183v21Ev,
};
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C11__9S20677C18__8S20677C1[] = {
  0,
  0,
  ABISELECT(-2976,-2080),
  ABISELECT(-3216,-2244),
  ABISELECT(-17952,-12500),
  ABISELECT(-17848,-12428),
  ABISELECT(-17792,-12388),
  ABISELECT(-2832,-1980),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C18__8S20677C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(14960,10408),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C18__8S20677C1[] = {
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(15120,10520),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C18__8S20677C1[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10184),
  ABISELECT(384,264),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C18__8S20677C1[] = {
  ABISELECT(-14872,-10348),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN9S20677C193v17Ev();
extern void _ZN9S20677C193v18Ev();
extern void _ZN9S20677C193v19Ev();
extern void _ZN9S20677C193v20Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C19__9S20677C18__8S20677C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(4304,3056),
  ABISELECT(-17952,-12488),
  ABISELECT(-4304,-2996),
  ABISELECT(3696,2636),
  ABISELECT(-4064,-2832),
  ABISELECT(-18936,-13180),
  ABISELECT(-3920,-2732),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v17Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v18Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v19Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v20Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN9S20677C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C15__9S20677C18__8S20677C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(608,420),
  ABISELECT(-21648,-15124),
  ABISELECT(-7760,-5468),
  ABISELECT(-8000,-5632),
  ABISELECT(-22632,-15816),
  ABISELECT(-7616,-5368),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20677C153v16Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C59S20677C15__A3__9S20677C18__8S20677C1[] = {
  ABISELECT(-23048,-16108),
  ABISELECT(-8032,-5660),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
};
extern void _ZN8S20677C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C8__9S20677C18__8S20677C1[] = {
  0,
  ABISELECT(14032,9756),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
};
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C16__9S20677C18__8S20677C1[] = {
  0,
  ABISELECT(-23240,-16236),
  ABISELECT(-8224,-5788),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C11__A1__8S20677C1[] = {
  ABISELECT(-2976,-2080),
  ABISELECT(-3216,-2244),
  ABISELECT(-17952,-12500),
  ABISELECT(-17848,-12428),
  ABISELECT(-17792,-12388),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C11__A1__8S20677C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(17792,12388),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C11__A1__8S20677C1[] = {
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(17952,12500),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C11__A1__8S20677C1[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10184),
  ABISELECT(3216,2244),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C11__A1__8S20677C1[] = {
  ABISELECT(-14872,-10348),
  ABISELECT(2976,2080),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN9S20677C193v17Ev();
extern void _ZN9S20677C193v18Ev();
extern void _ZN9S20677C193v19Ev();
extern void _ZN9S20677C193v20Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C19__8S20677C1[] = {
  ABISELECT(4304,3056),
  ABISELECT(-17952,-12488),
  ABISELECT(-4304,-2996),
  ABISELECT(3696,2636),
  ABISELECT(-4064,-2832),
  ABISELECT(-18936,-13180),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v17Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v18Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v19Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v20Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C129S20677C19__A1__8S20677C1[] = {
  ABISELECT(-4064,-2832),
  ABISELECT(-18936,-13180),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C129S20677C19__A1__8S20677C1[] = {
  ABISELECT(-14872,-10348),
  ABISELECT(4064,2832),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C19__8S20677C1[] = {
  ABISELECT(-14872,-10348),
  ABISELECT(4064,2832),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN9S20677C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C15__9S20677C19__8S20677C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(608,420),
  ABISELECT(-21648,-15124),
  ABISELECT(-7760,-5468),
  ABISELECT(-8000,-5632),
  ABISELECT(-22632,-15816),
  ABISELECT(-3696,-2636),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20677C153v16Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__A1__9S20677C19__8S20677C1[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10184),
  ABISELECT(4304,2996),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C59S20677C15__A2__9S20677C19__8S20677C1[] = {
  ABISELECT(-23048,-16108),
  ABISELECT(-4112,-2928),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
};
extern void _ZN8S20677C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C8__9S20677C19__8S20677C1[] = {
  0,
  ABISELECT(17952,12488),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
};
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C16__9S20677C19__8S20677C1[] = {
  0,
  ABISELECT(-23240,-16236),
  ABISELECT(-4304,-3056),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN9S20677C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C15__8S20677C1[] = {
  ABISELECT(608,420),
  ABISELECT(-21648,-15124),
  ABISELECT(-7760,-5468),
  ABISELECT(-8000,-5632),
  ABISELECT(-22632,-15816),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20677C153v16Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C49S20677C15__A1__8S20677C1[] = {
  ABISELECT(-22632,-15816),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C49S20677C15__A3__8S20677C1[] = {
  ABISELECT(-22632,-15816),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C59S20677C15__A4__8S20677C1[] = {
  ABISELECT(-23048,-16108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C15__8S20677C1[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10184),
  ABISELECT(8000,5632),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C15__8S20677C1[] = {
  ABISELECT(-14872,-10348),
  ABISELECT(7760,5468),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A__9S20677C15__8S20677C1[] = {
  ABISELECT(-23048,-16108),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
};
extern void _ZN8S20677C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C8__9S20677C15__8S20677C1[] = {
  0,
  ABISELECT(21648,15124),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
};
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C16__9S20677C15__8S20677C1[] = {
  0,
  ABISELECT(-23240,-16236),
  ABISELECT(-608,-420),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C16__8S20677C1[] = {
  ABISELECT(-23240,-16236),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C16[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C59S20677C16__A5__8S20677C1[] = {
  ABISELECT(-23240,-16236),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTT_ENTRY vtt_S20677C1[] = {
  {&(_ZTV8S20677C1[15]),  15,139},
  {&(_ZTV8S20677C1[25]),  25,139},
  {&(_ZTV8S20677C1[34]),  34,139},
  {&(_ZTV8S20677C1[42]),  42,139},
  {&(_ZTV8S20677C1[46]),  46,139},
  {&(_ZTV8S20677C1[57]),  57,139},
  {&(_ZTV8S20677C1[66]),  66,139},
  {&(_ZTV8S20677C1[71]),  71,139},
  {&(_ZTV8S20677C1[84]),  84,139},
  {&(_ZTV8S20677C1[94]),  94,139},
  {&(_ZTV8S20677C1[110]),  110,139},
  {&(_ZTV8S20677C1[127]),  127,139},
  {&(_ZTV8S20677C1[134]),  134,139},
  {&(_ZTV8S20677C1[138]),  138,139},
  {&(_tg__ZTV8S20677C2__8S20677C1[4]),  4,7},
  {&(_tg__ZTV8S20677C4__8S20677C2__8S20677C1[6]),  6,9},
  {&(_tg__ZTV8S20677C4__8S20677C1[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C4__8S20677C1[3]),  3,3},
  {&(_tg__ZTV8S20677C7__8S20677C1[4]),  4,5},
  {&(_tg__ZTV8S20677C58S20677C7__A1__8S20677C1[3]),  3,3},
  {&(_tg__ZTV8S20677C8__8S20677C7__8S20677C1[3]),  3,4},
  {&(_tg__ZTV9S20677C10__8S20677C1[7]),  7,10},
  {&(_tg__ZTV9S20677C119S20677C10__8S20677C1[7]),  7,9},
  {&(_tg__ZTV8S20677C4__9S20677C119S20677C10__8S20677C1[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C119S20677C10__8S20677C1[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C119S20677C10__8S20677C1[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C119S20677C10__8S20677C1[3]),  3,3},
  {&(_tg__ZTV8S20677C4__9S20677C10__8S20677C1[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C10__8S20677C1[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C10__8S20677C1[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C10__8S20677C1[3]),  3,3},
  {&(_tg__ZTV9S20677C12__8S20677C1[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C12__8S20677C1[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A2__8S20677C1[3]),  3,3},
  {&(_tg__ZTV9S20677C18__8S20677C1[12]),  12,13},
  {&(_tg__ZTV9S20677C11__9S20677C18__8S20677C1[9]),  9,11},
  {&(_tg__ZTV8S20677C4__9S20677C18__8S20677C1[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C18__8S20677C1[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C18__8S20677C1[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C18__8S20677C1[3]),  3,3},
  {&(_tg__ZTV9S20677C19__9S20677C18__8S20677C1[14]),  14,20},
  {&(_tg__ZTV9S20677C15__9S20677C18__8S20677C1[11]),  11,15},
  {&(_tg__ZTV8S20677C59S20677C15__A3__9S20677C18__8S20677C1[3]),  3,3},
  {&(_tg__ZTV8S20677C8__9S20677C18__8S20677C1[3]),  3,4},
  {&(_tg__ZTV9S20677C16__9S20677C18__8S20677C1[4]),  4,5},
  {&(_tg__ZTV9S20677C11__A1__8S20677C1[7]),  7,9},
  {&(_tg__ZTV8S20677C4__9S20677C11__A1__8S20677C1[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C11__A1__8S20677C1[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C11__A1__8S20677C1[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C11__A1__8S20677C1[3]),  3,3},
  {&(_tg__ZTV9S20677C19__8S20677C1[8]),  8,14},
  {&(_tg__ZTV9S20677C129S20677C19__A1__8S20677C1[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C129S20677C19__A1__8S20677C1[3]),  3,3},
  {&(_tg__ZTV8S20677C5__9S20677C19__8S20677C1[3]),  3,3},
  {&(_tg__ZTV9S20677C15__9S20677C19__8S20677C1[11]),  11,15},
  {&(_tg__ZTV9S20677C12__A1__9S20677C19__8S20677C1[6]),  6,8},
  {&(_tg__ZTV8S20677C59S20677C15__A2__9S20677C19__8S20677C1[3]),  3,3},
  {&(_tg__ZTV8S20677C8__9S20677C19__8S20677C1[3]),  3,4},
  {&(_tg__ZTV9S20677C16__9S20677C19__8S20677C1[4]),  4,5},
  {&(_tg__ZTV9S20677C15__8S20677C1[7]),  7,11},
  {&(_tg__ZTV8S20677C49S20677C15__A1__8S20677C1[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C49S20677C15__A3__8S20677C1[3]),  3,3},
  {&(_tg__ZTV8S20677C59S20677C15__A4__8S20677C1[3]),  3,3},
  {&(_tg__ZTV9S20677C12__9S20677C15__8S20677C1[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C15__8S20677C1[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A__9S20677C15__8S20677C1[3]),  3,3},
  {&(_tg__ZTV8S20677C8__9S20677C15__8S20677C1[3]),  3,4},
  {&(_tg__ZTV9S20677C16__9S20677C15__8S20677C1[4]),  4,5},
  {&(_tg__ZTV9S20677C16__8S20677C1[3]),  3,4},
  {&(_tg__ZTV8S20677C59S20677C16__A5__8S20677C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20677C1[];
extern  VTBL_ENTRY _ZTV8S20677C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C1[];
Class_Descriptor cd_S20677C1 = {  "S20677C1", // class name
  bases_S20677C1, 25,
  &(vtc_S20677C1[0]), // expected_vtbl_contents
  &(vtt_S20677C1[0]), // expected_vtt_contents
  ABISELECT(39136,27308), // object size
  NSPAIRA(_ZTI8S20677C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20677C1),139, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20677C1),70, //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  S20678C5  : virtual S20677C3 {
  long double s20678c5f0;
  int s20678c5f1;
  ::S20677C3 s20678c5f2;
  ::S20677C3 s20678c5f3;
  ~S20678C5(); // tgen
  S20678C5(); // tgen
};
//SIG(-1 S20678C5) C1{ VBC2{ m Fp FL[4] Fs} FD Fi FC2 FC2}


S20678C5 ::~S20678C5(){ note_dtor("S20678C5", this);} // tgen
S20678C5 ::S20678C5(){ note_ctor("S20678C5", this);} // tgen

static void Test_S20678C5()
{
  extern Class_Descriptor cd_S20678C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,36)];
    init_test(&cd_S20678C5, buf);
    S20678C5 *dp, &lv = *(dp=new (buf) S20678C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S20678C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C5)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(136,100), "S20678C5");
    check_field_offset(lv, s20678c5f0, ABISELECT(16,4), "S20678C5.s20678c5f0");
    check_field_offset(lv, s20678c5f1, ABISELECT(32,16), "S20678C5.s20678c5f1");
    check_field_offset(lv, s20678c5f2, ABISELECT(40,20), "S20678C5.s20678c5f2");
    check_field_offset(lv, s20678c5f3, ABISELECT(88,60), "S20678C5.s20678c5f3");
    test_class_info(&lv, &cd_S20678C5);
    dp->~S20678C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C5(Test_S20678C5, "S20678C5", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN8S20678C5C1Ev();
extern void _ZN8S20678C5D1Ev();
Name_Map name_map_S20678C5[] = {
  NSPAIR(_ZN8S20678C5C1Ev),
  NSPAIR(_ZN8S20678C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20678C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(136,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20678C5[];
static  VTBL_ENTRY vtc_S20678C5[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern VTBL_ENTRY _ZTV8S20678C5[];
static  VTT_ENTRY vtt_S20678C5[] = {
  {&(_ZTV8S20678C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
Class_Descriptor cd_S20678C5 = {  "S20678C5", // class name
  bases_S20678C5, 1,
  &(vtc_S20678C5[0]), // expected_vtbl_contents
  &(vtt_S20678C5[0]), // expected_vtt_contents
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI8S20678C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20678C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20678C5),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  S20678C4  : virtual S20677C3 , S20678C5 {
  short s20678c4f0;
  __tsi64 s20678c4f1;
  char s20678c4f2;
  int s20678c4f3[2];
  ::S20678C5 s20678c4f4;
  void *s20678c4f5;
  __tsi64 s20678c4f6;
  int s20678c4f7;
  __tsi64 s20678c4f8;
  int s20678c4f9;
  virtual void  v2(); // _ZN8S20678C42v2Ev
  virtual void  v3(); // _ZN8S20678C42v3Ev
  virtual void  v4(); // _ZN8S20678C42v4Ev
  ~S20678C4(); // tgen
  S20678C4(); // tgen
};
//SIG(-1 S20678C4) C1{ VBC2{ m Fp FL[4] Fs} BC3{ VBC2 FD Fi FC2 FC2} v1 v2 v3 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi}


void  S20678C4 ::v2(){vfunc_called(this, "_ZN8S20678C42v2Ev");}
void  S20678C4 ::v3(){vfunc_called(this, "_ZN8S20678C42v3Ev");}
void  S20678C4 ::v4(){vfunc_called(this, "_ZN8S20678C42v4Ev");}
S20678C4 ::~S20678C4(){ note_dtor("S20678C4", this);} // tgen
S20678C4 ::S20678C4(){ note_ctor("S20678C4", this);} // tgen

static void Test_S20678C4()
{
  extern Class_Descriptor cd_S20678C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,84)];
    init_test(&cd_S20678C4, buf);
    S20678C4 *dp, &lv = *(dp=new (buf) S20678C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,332), "sizeof(S20678C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C4)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(408,292), "S20678C4");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(408,292), "S20678C4");
    check_base_class_offset(lv, (S20678C5*), 0, "S20678C4");
    check_field_offset(lv, s20678c4f0, ABISELECT(136,100), "S20678C4.s20678c4f0");
    check_field_offset(lv, s20678c4f1, ABISELECT(144,104), "S20678C4.s20678c4f1");
    check_field_offset(lv, s20678c4f2, ABISELECT(152,112), "S20678C4.s20678c4f2");
    check_field_offset(lv, s20678c4f3, ABISELECT(156,116), "S20678C4.s20678c4f3");
    check_field_offset(lv, s20678c4f4, ABISELECT(176,124), "S20678C4.s20678c4f4");
    check_field_offset(lv, s20678c4f5, ABISELECT(368,264), "S20678C4.s20678c4f5");
    check_field_offset(lv, s20678c4f6, ABISELECT(376,268), "S20678C4.s20678c4f6");
    check_field_offset(lv, s20678c4f7, ABISELECT(384,276), "S20678C4.s20678c4f7");
    check_field_offset(lv, s20678c4f8, ABISELECT(392,280), "S20678C4.s20678c4f8");
    check_field_offset(lv, s20678c4f9, ABISELECT(400,288), "S20678C4.s20678c4f9");
    test_class_info(&lv, &cd_S20678C4);
    dp->~S20678C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C4(Test_S20678C4, "S20678C4", ABISELECT(464,332));

#else // __cplusplus

extern void _ZN8S20678C4C1Ev();
extern void _ZN8S20678C4D1Ev();
Name_Map name_map_S20678C4[] = {
  NSPAIR(_ZN8S20678C4C1Ev),
  NSPAIR(_ZN8S20678C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
static Base_Class bases_S20678C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(408,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20678C5,    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 _ZTI8S20678C4[];
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY vtc_S20678C4[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S20678C4[];
static  VTBL_ENTRY _tg__ZTV8S20678C5__8S20678C4[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTT_ENTRY vtt_S20678C4[] = {
  {&(_ZTV8S20678C4[3]),  3,6},
  {&(_tg__ZTV8S20678C5__8S20678C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
Class_Descriptor cd_S20678C4 = {  "S20678C4", // class name
  bases_S20678C4, 2,
  &(vtc_S20678C4[0]), // expected_vtbl_contents
  &(vtt_S20678C4[0]), // expected_vtt_contents
  ABISELECT(464,332), // object size
  NSPAIRA(_ZTI8S20678C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20678C4),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20678C4),2, //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  S20678C2  : virtual S20677C3 , virtual S20678C4 {
  __tsi64 s20678c2f0;
  ::S20677C6_nt s20678c2f1;
  void *s20678c2f2;
  char s20678c2f3[2];
  ::S20677C3 s20678c2f4;
  long s20678c2f5;
  ::S20677C6_nt s20678c2f6;
  virtual void  v5(); // _ZN8S20678C22v5Ev
  virtual void  v6(); // _ZN8S20678C22v6Ev
  virtual void  v7(); // _ZN8S20678C22v7Ev
  ~S20678C2(); // tgen
  S20678C2(); // tgen
};
//SIG(-1 S20678C2) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 BC4{ VBC2 FD Fi FC2 FC2} v4 v5 v6 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} v1 v2 v3 FL FC5{} Fp Fc[2] FC2 Fl FC5}


void  S20678C2 ::v5(){vfunc_called(this, "_ZN8S20678C22v5Ev");}
void  S20678C2 ::v6(){vfunc_called(this, "_ZN8S20678C22v6Ev");}
void  S20678C2 ::v7(){vfunc_called(this, "_ZN8S20678C22v7Ev");}
S20678C2 ::~S20678C2(){ note_dtor("S20678C2", this);} // tgen
S20678C2 ::S20678C2(){ note_ctor("S20678C2", this);} // tgen

static void Test_S20678C2()
{
  extern Class_Descriptor cd_S20678C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,102)];
    init_test(&cd_S20678C2, buf);
    S20678C2 *dp, &lv = *(dp=new (buf) S20678C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,404), "sizeof(S20678C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C2)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(104,72), "S20678C2");
    check_base_class_offset(lv, (S20677C3*)(S20678C4*), ABISELECT(104,72), "S20678C2");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*), ABISELECT(104,72), "S20678C2");
    check_base_class_offset(lv, (S20678C5*)(S20678C4*), ABISELECT(160,112), "S20678C2");
    check_base_class_offset(lv, (S20678C4*), ABISELECT(160,112), "S20678C2");
    check_field_offset(lv, s20678c2f0, ABISELECT(8,4), "S20678C2.s20678c2f0");
    check_field_offset(lv, s20678c2f1, ABISELECT(16,12), "S20678C2.s20678c2f1");
    check_field_offset(lv, s20678c2f2, ABISELECT(24,16), "S20678C2.s20678c2f2");
    check_field_offset(lv, s20678c2f3, ABISELECT(32,20), "S20678C2.s20678c2f3");
    check_field_offset(lv, s20678c2f4, ABISELECT(40,24), "S20678C2.s20678c2f4");
    check_field_offset(lv, s20678c2f5, ABISELECT(88,64), "S20678C2.s20678c2f5");
    check_field_offset(lv, s20678c2f6, ABISELECT(96,68), "S20678C2.s20678c2f6");
    test_class_info(&lv, &cd_S20678C2);
    dp->~S20678C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C2(Test_S20678C2, "S20678C2", ABISELECT(576,404));

#else // __cplusplus

extern void _ZN8S20678C2C1Ev();
extern void _ZN8S20678C2D1Ev();
Name_Map name_map_S20678C2[] = {
  NSPAIR(_ZN8S20678C2C1Ev),
  NSPAIR(_ZN8S20678C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
static Base_Class bases_S20678C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(104,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20678C5,    ABISELECT(160,112), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20678C4,    ABISELECT(160,112), //bcp->offset
    7, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20678C2[];
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY vtc_S20678C2[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S20678C2[];
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__8S20678C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C4__8S20678C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTT_ENTRY vtt_S20678C2[] = {
  {&(_ZTV8S20678C2[4]),  4,16},
  {&(_ZTV8S20678C2[13]),  13,16},
  {&(_tg__ZTV8S20678C4__8S20678C2[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C4__8S20678C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20678C2[];
extern  VTBL_ENTRY _ZTV8S20678C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C2[];
Class_Descriptor cd_S20678C2 = {  "S20678C2", // class name
  bases_S20678C2, 3,
  &(vtc_S20678C2[0]), // expected_vtbl_contents
  &(vtt_S20678C2[0]), // expected_vtt_contents
  ABISELECT(576,404), // object size
  NSPAIRA(_ZTI8S20678C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20678C2),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20678C2),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  S20678C8  {
  ::S20677C6_nt s20678c8f0;
  ::S20678C5 s20678c8f1;
  ::S20677C6_nt s20678c8f2;
  __tsi64 s20678c8f3;
  ::S20677C6_nt s20678c8f4;
  void *s20678c8f5;
  ::S20677C6_nt s20678c8f6;
  void *s20678c8f7[2];
  ::S20677C6_nt s20678c8f8;
  virtual void  v8(); // _ZN8S20678C82v8Ev
  ~S20678C8(); // tgen
  S20678C8(); // tgen
};
//SIG(-1 S20678C8) C1{ v1 FC2{} FC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} FC2 FL FC2 Fp FC2 Fp[2] FC2}


void  S20678C8 ::v8(){vfunc_called(this, "_ZN8S20678C82v8Ev");}
S20678C8 ::~S20678C8(){ note_dtor("S20678C8", this);} // tgen
S20678C8 ::S20678C8(){ note_ctor("S20678C8", this);} // tgen

static void Test_S20678C8()
{
  extern Class_Descriptor cd_S20678C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,47)];
    init_test(&cd_S20678C8, buf);
    S20678C8 *dp, &lv = *(dp=new (buf) S20678C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,184), "sizeof(S20678C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C8)");
    check_field_offset(lv, s20678c8f0, ABISELECT(8,4), "S20678C8.s20678c8f0");
    check_field_offset(lv, s20678c8f1, ABISELECT(16,8), "S20678C8.s20678c8f1");
    check_field_offset(lv, s20678c8f2, ABISELECT(208,148), "S20678C8.s20678c8f2");
    check_field_offset(lv, s20678c8f3, ABISELECT(216,152), "S20678C8.s20678c8f3");
    check_field_offset(lv, s20678c8f4, ABISELECT(224,160), "S20678C8.s20678c8f4");
    check_field_offset(lv, s20678c8f5, ABISELECT(232,164), "S20678C8.s20678c8f5");
    check_field_offset(lv, s20678c8f6, ABISELECT(240,168), "S20678C8.s20678c8f6");
    check_field_offset(lv, s20678c8f7, ABISELECT(248,172), "S20678C8.s20678c8f7");
    check_field_offset(lv, s20678c8f8, ABISELECT(264,180), "S20678C8.s20678c8f8");
    test_class_info(&lv, &cd_S20678C8);
    dp->~S20678C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C8(Test_S20678C8, "S20678C8", ABISELECT(272,184));

#else // __cplusplus

extern void _ZN8S20678C8C1Ev();
extern void _ZN8S20678C8D1Ev();
Name_Map name_map_S20678C8[] = {
  NSPAIR(_ZN8S20678C8C1Ev),
  NSPAIR(_ZN8S20678C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20678C8[];
extern void _ZN8S20678C82v8Ev();
static  VTBL_ENTRY vtc_S20678C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C8[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
};
extern VTBL_ENTRY _ZTI8S20678C8[];
extern  VTBL_ENTRY _ZTV8S20678C8[];
Class_Descriptor cd_S20678C8 = {  "S20678C8", // class name
  0,0,//no base classes
  &(vtc_S20678C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,184), // object size
  NSPAIRA(_ZTI8S20678C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20678C8),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  S20678C9  : S20677C3 {
  ::S20677C3 s20678c9f0;
  int s20678c9f1;
  long double s20678c9f2;
  int s20678c9f3;
  __tsi64 s20678c9f4;
  long s20678c9f5;
};
//SIG(-1 S20678C9) C1{ BC2{ m Fp FL[4] Fs} FC2 Fi FD Fi FL Fl}



static void Test_S20678C9()
{
  extern Class_Descriptor cd_S20678C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S20678C9, buf);
    S20678C9 &lv = *(new (buf) S20678C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20678C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C9)");
    check_base_class_offset(lv, (S20677C3*), 0, "S20678C9");
    check_field_offset(lv, s20678c9f0, ABISELECT(48,40), "S20678C9.s20678c9f0");
    check_field_offset(lv, s20678c9f1, ABISELECT(96,80), "S20678C9.s20678c9f1");
    check_field_offset(lv, s20678c9f2, ABISELECT(112,84), "S20678C9.s20678c9f2");
    check_field_offset(lv, s20678c9f3, ABISELECT(128,96), "S20678C9.s20678c9f3");
    check_field_offset(lv, s20678c9f4, ABISELECT(136,100), "S20678C9.s20678c9f4");
    check_field_offset(lv, s20678c9f5, ABISELECT(144,108), "S20678C9.s20678c9f5");
    test_class_info(&lv, &cd_S20678C9);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C9(Test_S20678C9, "S20678C9", ABISELECT(160,112));

#else // __cplusplus

extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20678C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20678C9[];
Class_Descriptor cd_S20678C9 = {  "S20678C9", // class name
  bases_S20678C9, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI8S20678C9),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  S20678C7  : virtual S20678C8 , S20678C5 , S20678C9 {
  void *s20678c7f0;
  ::S20678C9 s20678c7f1;
  void *s20678c7f2;
  int s20678c7f3[2];
  long double s20678c7f4;
  int s20678c7f5[2];
  virtual void  v9(); // _ZN8S20678C72v9Ev
  ~S20678C7(); // tgen
  S20678C7(); // tgen
};
//SIG(-1 S20678C7) C1{ VBC2{ v2 FC3{} FC4{ VBC5{ m Fp FL[4] Fs} FD Fi FC5 FC5} FC3 FL FC3 Fp FC3 Fp[2] FC3} BC4 BC6{ BC5 FC5 Fi FD Fi FL Fl} v1 Fp FC6 Fp Fi[2] FD Fi[2]}


void  S20678C7 ::v9(){vfunc_called(this, "_ZN8S20678C72v9Ev");}
S20678C7 ::~S20678C7(){ note_dtor("S20678C7", this);} // tgen
S20678C7 ::S20678C7(){ note_ctor("S20678C7", this);} // tgen

static void Test_S20678C7()
{
  extern Class_Descriptor cd_S20678C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(53,147)];
    init_test(&cd_S20678C7, buf);
    S20678C7 *dp, &lv = *(dp=new (buf) S20678C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(832,584), "sizeof(S20678C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C7)");
    check_base_class_offset(lv, (S20678C8*), ABISELECT(512,360), "S20678C7");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(784,544), "S20678C7");
    check_base_class_offset(lv, (S20678C5*), 0, "S20678C7");
    check_base_class_offset(lv, (S20677C3*)(S20678C9*), ABISELECT(144,100), "S20678C7");
    check_base_class_offset(lv, (S20678C9*), ABISELECT(144,100), "S20678C7");
    check_field_offset(lv, s20678c7f0, ABISELECT(296,212), "S20678C7.s20678c7f0");
    check_field_offset(lv, s20678c7f1, ABISELECT(304,216), "S20678C7.s20678c7f1");
    check_field_offset(lv, s20678c7f2, ABISELECT(464,328), "S20678C7.s20678c7f2");
    check_field_offset(lv, s20678c7f3, ABISELECT(472,332), "S20678C7.s20678c7f3");
    check_field_offset(lv, s20678c7f4, ABISELECT(480,340), "S20678C7.s20678c7f4");
    check_field_offset(lv, s20678c7f5, ABISELECT(496,352), "S20678C7.s20678c7f5");
    test_class_info(&lv, &cd_S20678C7);
    dp->~S20678C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C7(Test_S20678C7, "S20678C7", ABISELECT(832,584));

#else // __cplusplus

extern void _ZN8S20678C7C1Ev();
extern void _ZN8S20678C7D1Ev();
Name_Map name_map_S20678C7[] = {
  NSPAIR(_ZN8S20678C7C1Ev),
  NSPAIR(_ZN8S20678C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20678C8;
extern VTBL_ENTRY _ZTI8S20678C8[];
extern  VTBL_ENTRY _ZTV8S20678C8[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C9;
extern VTBL_ENTRY _ZTI8S20678C9[];
static Base_Class bases_S20678C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20678C8,    ABISELECT(512,360), //bcp->offset
    5, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C3,    ABISELECT(784,544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20678C5,    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_S20677C3,    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
    4, //immediately_derived
  0, 0},
  {&cd_S20678C9,    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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20678C7[];
extern void _ZN8S20678C72v9Ev();
extern void _ZN8S20678C82v8Ev();
static  VTBL_ENTRY vtc_S20678C7[] = {
  ABISELECT(512,360),
  ABISELECT(784,544),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C7[0]),
  (VTBL_ENTRY)&_ZN8S20678C72v9Ev,
  0,
  ABISELECT(-512,-360),
  (VTBL_ENTRY)&(_ZTI8S20678C7[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
};
extern VTBL_ENTRY _ZTV8S20678C7[];
static  VTBL_ENTRY _tg__ZTV8S20678C5__8S20678C7[] = {
  ABISELECT(784,544),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTT_ENTRY vtt_S20678C7[] = {
  {&(_ZTV8S20678C7[4]),  4,9},
  {&(_tg__ZTV8S20678C5__8S20678C7[3]),  3,3},
  {&(_ZTV8S20678C7[8]),  8,9},
};
extern VTBL_ENTRY _ZTI8S20678C7[];
extern  VTBL_ENTRY _ZTV8S20678C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C7[];
Class_Descriptor cd_S20678C7 = {  "S20678C7", // class name
  bases_S20678C7, 5,
  &(vtc_S20678C7[0]), // expected_vtbl_contents
  &(vtt_S20678C7[0]), // expected_vtt_contents
  ABISELECT(832,584), // object size
  NSPAIRA(_ZTI8S20678C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20678C7),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20678C7),3, //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  S20678C12  : virtual S20677C3 , virtual S20678C5 {
  int s20678c12f0;
  ::S20678C5 s20678c12f1;
  __tsi64 s20678c12f2;
  int s20678c12f3;
  void *s20678c12f4;
  virtual void  v10(); // _ZN9S20678C123v10Ev
  virtual void  v11(); // _ZN9S20678C123v11Ev
  ~S20678C12(); // tgen
  S20678C12(); // tgen
};
//SIG(-1 S20678C12) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 FD Fi FC2 FC2} v1 v2 Fi FC3 FL Fi Fp}


void  S20678C12 ::v10(){vfunc_called(this, "_ZN9S20678C123v10Ev");}
void  S20678C12 ::v11(){vfunc_called(this, "_ZN9S20678C123v11Ev");}
S20678C12 ::~S20678C12(){ note_dtor("S20678C12", this);} // tgen
S20678C12 ::S20678C12(){ note_ctor("S20678C12", this);} // tgen

static void Test_S20678C12()
{
  extern Class_Descriptor cd_S20678C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,77)];
    init_test(&cd_S20678C12, buf);
    S20678C12 *dp, &lv = *(dp=new (buf) S20678C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,304), "sizeof(S20678C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C12)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(232,164), "S20678C12");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(232,164), "S20678C12");
    check_base_class_offset(lv, (S20678C5*), ABISELECT(288,204), "S20678C12");
    check_field_offset(lv, s20678c12f0, ABISELECT(8,4), "S20678C12.s20678c12f0");
    check_field_offset(lv, s20678c12f1, ABISELECT(16,8), "S20678C12.s20678c12f1");
    check_field_offset(lv, s20678c12f2, ABISELECT(208,148), "S20678C12.s20678c12f2");
    check_field_offset(lv, s20678c12f3, ABISELECT(216,156), "S20678C12.s20678c12f3");
    check_field_offset(lv, s20678c12f4, ABISELECT(224,160), "S20678C12.s20678c12f4");
    test_class_info(&lv, &cd_S20678C12);
    dp->~S20678C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C12(Test_S20678C12, "S20678C12", ABISELECT(432,304));

#else // __cplusplus

extern void _ZN9S20678C12C1Ev();
extern void _ZN9S20678C12D1Ev();
Name_Map name_map_S20678C12[] = {
  NSPAIR(_ZN9S20678C12C1Ev),
  NSPAIR(_ZN9S20678C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
static Base_Class bases_S20678C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(232,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_S20678C5,    ABISELECT(288,204), //bcp->offset
    6, //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 _ZTI9S20678C12[];
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY vtc_S20678C12[] = {
  ABISELECT(288,204),
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  ABISELECT(-56,-40),
  ABISELECT(-288,-204),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
extern VTBL_ENTRY _ZTV9S20678C12[];
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTT_ENTRY vtt_S20678C12[] = {
  {&(_ZTV9S20678C12[4]),  4,9},
  {&(_ZTV9S20678C12[9]),  9,9},
  {&(_tg__ZTV8S20678C5__9S20678C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
Class_Descriptor cd_S20678C12 = {  "S20678C12", // class name
  bases_S20678C12, 2,
  &(vtc_S20678C12[0]), // expected_vtbl_contents
  &(vtt_S20678C12[0]), // expected_vtt_contents
  ABISELECT(432,304), // object size
  NSPAIRA(_ZTI9S20678C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20678C12),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20678C12),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  S20678C11  : virtual S20678C4 , virtual S20678C2 , virtual S20678C12 {
  ::S20677C6_nt s20678c11f0;
  ::S20677C6_nt s20678c11f1;
  int s20678c11f2;
  ::S20678C5 s20678c11f3;
  ::S20677C6_nt s20678c11f4;
  ::S20677C6_nt s20678c11f5;
  ::S20678C8 s20678c11f6;
  ::S20678C2 s20678c11f7;
  void *s20678c11f8;
  ::S20677C6_nt s20678c11f9;
  virtual void  v12(); // _ZN9S20678C113v12Ev
  virtual void  v13(); // _ZN9S20678C113v13Ev
  ~S20678C11(); // tgen
  S20678C11(); // tgen
};
//SIG(-1 S20678C11) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} BC4{ VBC3 FD Fi FC3 FC3} v3 v4 v5 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC5{ VBC3 VBC2 v6 v7 v8 FL FC6{} Fp Fc[2] FC3 Fl FC6} VBC7{ VBC3 VBC4 v9 v10 Fi FC4 FL Fi Fp} v1 v2 FC6 FC6 Fi FC4 FC6 FC6 FC8{ v11 FC6 FC4 FC6 FL FC6 Fp FC6 Fp[2] FC6} FC5 Fp FC6}


void  S20678C11 ::v12(){vfunc_called(this, "_ZN9S20678C113v12Ev");}
void  S20678C11 ::v13(){vfunc_called(this, "_ZN9S20678C113v13Ev");}
S20678C11 ::~S20678C11(){ note_dtor("S20678C11", this);} // tgen
S20678C11 ::S20678C11(){ note_ctor("S20678C11", this);} // tgen

static void Test_S20678C11()
{
  extern Class_Descriptor cd_S20678C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(128,356)];
    init_test(&cd_S20678C11, buf);
    S20678C11 *dp, &lv = *(dp=new (buf) S20678C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2032,1420), "sizeof(S20678C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C11)");
    check_base_class_offset(lv, (S20677C3*)(S20678C4*), ABISELECT(1496,1044), "S20678C11");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*), ABISELECT(1496,1044), "S20678C11");
    check_base_class_offset(lv, (S20677C3*)(S20678C2*), ABISELECT(1496,1044), "S20678C11");
    check_base_class_offset(lv, (S20677C3*)(S20678C12*), ABISELECT(1496,1044), "S20678C11");
    /*is_ambiguous_... S20678C11::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(1496,1044), "S20678C11");
    check_base_class_offset(lv, (S20678C5*)(S20678C4*), ABISELECT(1088,752), "S20678C11");
    check_base_class_offset(lv, (S20678C4*), ABISELECT(1088,752), "S20678C11");
    check_base_class_offset(lv, (S20678C4*)(S20678C2*), ABISELECT(1088,752), "S20678C11");
    check_base_class_offset(lv, (S20678C2*), ABISELECT(1544,1084), "S20678C11");
    check_base_class_offset(lv, (S20678C5*)(S20678C12*), ABISELECT(1888,1320), "S20678C11");
    check_base_class_offset(lv, (S20678C12*), ABISELECT(1648,1156), "S20678C11");
    check_field_offset(lv, s20678c11f0, ABISELECT(8,4), "S20678C11.s20678c11f0");
    check_field_offset(lv, s20678c11f1, ABISELECT(9,5), "S20678C11.s20678c11f1");
    check_field_offset(lv, s20678c11f2, ABISELECT(12,8), "S20678C11.s20678c11f2");
    check_field_offset(lv, s20678c11f3, ABISELECT(16,12), "S20678C11.s20678c11f3");
    check_field_offset(lv, s20678c11f4, ABISELECT(208,152), "S20678C11.s20678c11f4");
    check_field_offset(lv, s20678c11f5, ABISELECT(209,153), "S20678C11.s20678c11f5");
    check_field_offset(lv, s20678c11f6, ABISELECT(224,156), "S20678C11.s20678c11f6");
    check_field_offset(lv, s20678c11f7, ABISELECT(496,340), "S20678C11.s20678c11f7");
    check_field_offset(lv, s20678c11f8, ABISELECT(1072,744), "S20678C11.s20678c11f8");
    check_field_offset(lv, s20678c11f9, ABISELECT(1080,748), "S20678C11.s20678c11f9");
    test_class_info(&lv, &cd_S20678C11);
    dp->~S20678C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C11(Test_S20678C11, "S20678C11", ABISELECT(2032,1420));

#else // __cplusplus

extern void _ZN9S20678C11C1Ev();
extern void _ZN9S20678C11D1Ev();
Name_Map name_map_S20678C11[] = {
  NSPAIR(_ZN9S20678C11C1Ev),
  NSPAIR(_ZN9S20678C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C2;
extern VTBL_ENTRY _ZTI8S20678C2[];
extern  VTBL_ENTRY _ZTV8S20678C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C2[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
static Base_Class bases_S20678C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1496,1044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20678C5,    ABISELECT(1088,752), //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_S20678C4,    ABISELECT(1088,752), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20678C2,    ABISELECT(1544,1084), //bcp->offset
    18, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20678C5,    ABISELECT(1888,1320), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20678C12,    ABISELECT(1648,1156), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20678C11[];
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY vtc_S20678C11[] = {
  ABISELECT(1888,1320),
  ABISELECT(1648,1156),
  ABISELECT(1544,1084),
  ABISELECT(1496,1044),
  ABISELECT(1088,752),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-1544,-1084),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-1648,-1156),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  ABISELECT(-392,-276),
  ABISELECT(-1888,-1320),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
};
extern VTBL_ENTRY _ZTV9S20678C11[];
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C11[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C4__9S20678C11[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C11[] = {
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__8S20678C2__9S20678C11[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(456,332),
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C11[] = {
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12__9S20678C11[] = {
  ABISELECT(-392,-276),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C11[] = {
  ABISELECT(-392,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTT_ENTRY vtt_S20678C11[] = {
  {&(_ZTV9S20678C11[7]),  7,39},
  {&(_ZTV9S20678C11[15]),  15,39},
  {&(_ZTV9S20678C11[25]),  25,39},
  {&(_ZTV9S20678C11[34]),  34,39},
  {&(_ZTV9S20678C11[39]),  39,39},
  {&(_tg__ZTV8S20678C4__9S20678C11[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C4__9S20678C11[3]),  3,3},
  {&(_tg__ZTV8S20678C2__9S20678C11[4]),  4,7},
  {&(_tg__ZTV8S20678C4__8S20678C2__9S20678C11[6]),  6,9},
  {&(_tg__ZTV9S20678C12__9S20678C11[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C12__9S20678C11[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A1__9S20678C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20678C11[];
extern  VTBL_ENTRY _ZTV9S20678C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C11[];
Class_Descriptor cd_S20678C11 = {  "S20678C11", // class name
  bases_S20678C11, 6,
  &(vtc_S20678C11[0]), // expected_vtbl_contents
  &(vtt_S20678C11[0]), // expected_vtt_contents
  ABISELECT(2032,1420), // object size
  NSPAIRA(_ZTI9S20678C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20678C11),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20678C11),12, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20678C13  : virtual S20678C5 , S20678C11 , S20678C12 {
  int s20678c13f0;
  char s20678c13f1:2;
  ::S20677C6_nt s20678c13f2;
  int s20678c13f3;
  ~S20678C13(); // tgen
  S20678C13(); // tgen
};
//SIG(-1 S20678C13) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} FD Fi FC3 FC3} BC4{ VBC5{ VBC3 BC2 v1 v2 v3 Fs FL Fc Fi[2] FC2 Fp FL Fi FL Fi} VBC6{ VBC3 VBC5 v4 v5 v6 FL FC7{} Fp Fc[2] FC3 Fl FC7} VBC8{ VBC3 VBC2 v7 v8 Fi FC2 FL Fi Fp} v9 v10 FC7 FC7 Fi FC2 FC7 FC7 FC9{ v11 FC7 FC2 FC7 FL FC7 Fp FC7 Fp[2] FC7} FC6 Fp FC7} BC8 Fi Fc:2 FC7 Fi}


S20678C13 ::~S20678C13(){ note_dtor("S20678C13", this);} // tgen
S20678C13 ::S20678C13(){ note_ctor("S20678C13", this);} // tgen

static void Test_S20678C13()
{
  extern Class_Descriptor cd_S20678C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(144,400)];
    init_test(&cd_S20678C13, buf);
    S20678C13 *dp, &lv = *(dp=new (buf) S20678C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2288,1596), "sizeof(S20678C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C13)");
    /*is_ambiguous_... S20678C13::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(1480,1028), "S20678C13");
    check_base_class_offset(lv, (S20677C3*)(S20678C4*), ABISELECT(1480,1028), "S20678C13");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*), ABISELECT(1480,1028), "S20678C13");
    check_base_class_offset(lv, (S20677C3*)(S20678C2*), ABISELECT(1480,1028), "S20678C13");
    /*is_ambiguous_... S20678C13::S20678C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C12*), ABISELECT(1480,1028), "S20678C13");
    /*is_ambiguous_... S20678C13::S20678C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C12*), ABISELECT(1480,1028), "S20678C13");
    /*is_ambiguous_... S20678C13::S20678C5 */ AMB_check_base_class_offset(lv, (S20678C5*), ABISELECT(1344,928), "S20678C13");
    /*is_ambiguous_... S20678C13::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C12*), ABISELECT(1344,928), "S20678C13");
    /*is_ambiguous_... S20678C13::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C12*), ABISELECT(1344,928), "S20678C13");
    check_base_class_offset(lv, (S20678C5*)(S20678C4*), ABISELECT(1536,1068), "S20678C13");
    check_base_class_offset(lv, (S20678C4*)(S20678C11*), ABISELECT(1536,1068), "S20678C13");
    check_base_class_offset(lv, (S20678C4*)(S20678C2*), ABISELECT(1536,1068), "S20678C13");
    check_base_class_offset(lv, (S20678C2*)(S20678C11*), ABISELECT(1944,1360), "S20678C13");
    check_base_class_offset(lv, (S20678C12*)(S20678C11*), ABISELECT(2048,1432), "S20678C13");
    check_base_class_offset(lv, (S20678C11*), 0, "S20678C13");
    /*is_ambiguous_... S20678C13::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C12*), ABISELECT(1088,752), "S20678C13");
    check_field_offset(lv, s20678c13f0, ABISELECT(1320,916), "S20678C13.s20678c13f0");
    set_bf_and_test(lv, s20678c13f1, ABISELECT(1324,920), 0, 2, 1, "S20678C13");
    set_bf_and_test(lv, s20678c13f1, ABISELECT(1324,920), 0, 2, hide_sll(1LL<<1), "S20678C13");
    check_field_offset(lv, s20678c13f2, ABISELECT(1325,921), "S20678C13.s20678c13f2");
    check_field_offset(lv, s20678c13f3, ABISELECT(1328,924), "S20678C13.s20678c13f3");
    test_class_info(&lv, &cd_S20678C13);
    dp->~S20678C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C13(Test_S20678C13, "S20678C13", ABISELECT(2288,1596));

#else // __cplusplus

extern void _ZN9S20678C13C1Ev();
extern void _ZN9S20678C13D1Ev();
Name_Map name_map_S20678C13[] = {
  NSPAIR(_ZN9S20678C13C1Ev),
  NSPAIR(_ZN9S20678C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C2;
extern VTBL_ENTRY _ZTI8S20678C2[];
extern  VTBL_ENTRY _ZTV8S20678C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C2[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C11;
extern VTBL_ENTRY _ZTI9S20678C11[];
extern  VTBL_ENTRY _ZTV9S20678C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C11[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
static Base_Class bases_S20678C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1480,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
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20678C5,    ABISELECT(1344,928), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20678C5,    ABISELECT(1536,1068), //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
    3, //immediately_derived
  0, 0},
  {&cd_S20678C4,    ABISELECT(1536,1068), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20678C2,    ABISELECT(1944,1360), //bcp->offset
    27, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20678C12,    ABISELECT(2048,1432), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20678C11,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20678C12,    ABISELECT(1088,752), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20678C13[];
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY vtc_S20678C13[] = {
  ABISELECT(1344,928),
  ABISELECT(2048,1432),
  ABISELECT(1944,1360),
  ABISELECT(1480,1028),
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
  ABISELECT(256,176),
  ABISELECT(392,276),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  ABISELECT(136,100),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-1944,-1360),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2048,-1432),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
extern VTBL_ENTRY _ZTV9S20678C13[];
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C11__9S20678C13[] = {
  ABISELECT(1344,928),
  ABISELECT(2048,1432),
  ABISELECT(1944,1360),
  ABISELECT(1480,1028),
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C11__9S20678C13[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C11__9S20678C13[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-1944,-1360),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C11__9S20678C13[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2048,-1432),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C11__9S20678C13[] = {
  ABISELECT(136,100),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__A__9S20678C13[] = {
  ABISELECT(256,176),
  ABISELECT(392,276),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12__A__9S20678C13[] = {
  ABISELECT(136,100),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C13[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C13[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C4__A1__9S20678C13[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C13[] = {
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__8S20678C2__9S20678C13[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C13[] = {
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12__9S20678C13[] = {
  ABISELECT(136,100),
  ABISELECT(704,504),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTT_ENTRY vtt_S20678C13[] = {
  {&(_ZTV9S20678C13[7]),  7,45},
  {&(_tg__ZTV9S20678C11__9S20678C13[7]),  7,9},
  {&(_tg__ZTV8S20678C4__9S20678C11__9S20678C13[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C11__9S20678C13[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C11__9S20678C13[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C11__9S20678C13[3]),  3,3},
  {&(_tg__ZTV9S20678C12__A__9S20678C13[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C12__A__9S20678C13[3]),  3,3},
  {&(_ZTV9S20678C13[18]),  18,45},
  {&(_ZTV9S20678C13[24]),  24,45},
  {&(_ZTV9S20678C13[34]),  34,45},
  {&(_ZTV9S20678C13[43]),  43,45},
  {&(_ZTV9S20678C13[13]),  13,45},
  {&(_tg__ZTV8S20678C5__9S20678C13[3]),  3,3},
  {&(_tg__ZTV8S20678C4__9S20678C13[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C4__A1__9S20678C13[3]),  3,3},
  {&(_tg__ZTV8S20678C2__9S20678C13[4]),  4,7},
  {&(_tg__ZTV8S20678C4__8S20678C2__9S20678C13[6]),  6,9},
  {&(_tg__ZTV9S20678C12__9S20678C13[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C12__9S20678C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20678C13[];
extern  VTBL_ENTRY _ZTV9S20678C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C13[];
Class_Descriptor cd_S20678C13 = {  "S20678C13", // class name
  bases_S20678C13, 8,
  &(vtc_S20678C13[0]), // expected_vtbl_contents
  &(vtt_S20678C13[0]), // expected_vtt_contents
  ABISELECT(2288,1596), // object size
  NSPAIRA(_ZTI9S20678C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20678C13),45, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20678C13),20, //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  S20678C16  : S20678C5 {
  __tsi64 s20678c16f0;
  char s20678c16f1[7];
  void *s20678c16f2;
  int s20678c16f3;
  ::S20677C6_nt s20678c16f4;
  ::S20677C6_nt s20678c16f5;
  char s20678c16f6[10];
  virtual void  v15(); // _ZN9S20678C163v15Ev
  ~S20678C16(); // tgen
  S20678C16(); // tgen
};
//SIG(-1 S20678C16) C1{ BC2{ VBC3{ m Fp FL[4] Fs} FD Fi FC3 FC3} v1 FL Fc[7] Fp Fi FC4{} FC4 Fc[10]}


void  S20678C16 ::v15(){vfunc_called(this, "_ZN9S20678C163v15Ev");}
S20678C16 ::~S20678C16(){ note_dtor("S20678C16", this);} // tgen
S20678C16 ::S20678C16(){ note_ctor("S20678C16", this);} // tgen

static void Test_S20678C16()
{
  extern Class_Descriptor cd_S20678C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,45)];
    init_test(&cd_S20678C16, buf);
    S20678C16 *dp, &lv = *(dp=new (buf) S20678C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,176), "sizeof(S20678C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C16)");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(176,136), "S20678C16");
    check_base_class_offset(lv, (S20678C5*), 0, "S20678C16");
    check_field_offset(lv, s20678c16f0, ABISELECT(136,100), "S20678C16.s20678c16f0");
    check_field_offset(lv, s20678c16f1, ABISELECT(144,108), "S20678C16.s20678c16f1");
    check_field_offset(lv, s20678c16f2, ABISELECT(152,116), "S20678C16.s20678c16f2");
    check_field_offset(lv, s20678c16f3, ABISELECT(160,120), "S20678C16.s20678c16f3");
    check_field_offset(lv, s20678c16f4, ABISELECT(164,124), "S20678C16.s20678c16f4");
    check_field_offset(lv, s20678c16f5, ABISELECT(165,125), "S20678C16.s20678c16f5");
    check_field_offset(lv, s20678c16f6, ABISELECT(166,126), "S20678C16.s20678c16f6");
    test_class_info(&lv, &cd_S20678C16);
    dp->~S20678C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C16(Test_S20678C16, "S20678C16", ABISELECT(224,176));

#else // __cplusplus

extern void _ZN9S20678C16C1Ev();
extern void _ZN9S20678C16D1Ev();
Name_Map name_map_S20678C16[] = {
  NSPAIR(_ZN9S20678C16C1Ev),
  NSPAIR(_ZN9S20678C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
static Base_Class bases_S20678C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    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
    1, //immediately_derived
  0, 1},
  {&cd_S20678C5,    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 _ZTI9S20678C16[];
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY vtc_S20678C16[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C16[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
extern VTBL_ENTRY _ZTV9S20678C16[];
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C16[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTT_ENTRY vtt_S20678C16[] = {
  {&(_ZTV9S20678C16[3]),  3,4},
  {&(_tg__ZTV8S20678C5__9S20678C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20678C16[];
extern  VTBL_ENTRY _ZTV9S20678C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C16[];
Class_Descriptor cd_S20678C16 = {  "S20678C16", // class name
  bases_S20678C16, 2,
  &(vtc_S20678C16[0]), // expected_vtbl_contents
  &(vtt_S20678C16[0]), // expected_vtt_contents
  ABISELECT(224,176), // object size
  NSPAIRA(_ZTI9S20678C16),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20678C16),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20678C16),2, //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  S20678C15  : S20678C4 , virtual S20678C12 , S20678C5 , virtual S20678C8 , virtual S20678C16 {
  long s20678c15f0;
  __tsi64 s20678c15f1;
  long double s20678c15f2;
  ::S20677C6_nt s20678c15f3;
  virtual void  v16(); // _ZN9S20678C153v16Ev
  ~S20678C15(); // tgen
  S20678C15(); // tgen
};
//SIG(-1 S20678C15) C1{ BC2{ VBC3{ m Fp FL[4] Fs} BC4{ VBC3 FD Fi FC3 FC3} v2 v3 v4 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC5{ VBC3 VBC4 v5 v6 Fi FC4 FL Fi Fp} BC4 VBC6{ v7 FC7{} FC4 FC7 FL FC7 Fp FC7 Fp[2] FC7} VBC8{ BC4 v8 FL Fc[7] Fp Fi FC7 FC7 Fc[10]} v1 Fl FL FD FC7}


void  S20678C15 ::v16(){vfunc_called(this, "_ZN9S20678C153v16Ev");}
S20678C15 ::~S20678C15(){ note_dtor("S20678C15", this);} // tgen
S20678C15 ::S20678C15(){ note_ctor("S20678C15", this);} // tgen

static void Test_S20678C15()
{
  extern Class_Descriptor cd_S20678C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(94,262)];
    init_test(&cd_S20678C15, buf);
    S20678C15 *dp, &lv = *(dp=new (buf) S20678C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1488,1044), "sizeof(S20678C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C15)");
    check_base_class_offset(lv, (S20677C3*)(S20678C4*), ABISELECT(600,420), "S20678C15");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*), ABISELECT(600,420), "S20678C15");
    check_base_class_offset(lv, (S20677C3*)(S20678C12*), ABISELECT(600,420), "S20678C15");
    /*is_ambiguous_... S20678C15::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(600,420), "S20678C15");
    /*is_ambiguous_... S20678C15::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(600,420), "S20678C15");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C16*), ABISELECT(600,420), "S20678C15");
    check_base_class_offset(lv, (S20678C5*)(S20678C4*), 0, "S20678C15");
    check_base_class_offset(lv, (S20678C4*), 0, "S20678C15");
    check_base_class_offset(lv, (S20678C5*)(S20678C12*), ABISELECT(896,624), "S20678C15");
    check_base_class_offset(lv, (S20678C12*), ABISELECT(656,460), "S20678C15");
    /*is_ambiguous_... S20678C15::S20678C5 */ AMB_check_base_class_offset(lv, (S20678C5*), ABISELECT(416,292), "S20678C15");
    check_base_class_offset(lv, (S20678C8*), ABISELECT(1040,724), "S20678C15");
    check_base_class_offset(lv, (S20678C5*)(S20678C16*), ABISELECT(1312,908), "S20678C15");
    check_base_class_offset(lv, (S20678C16*), ABISELECT(1312,908), "S20678C15");
    check_field_offset(lv, s20678c15f0, ABISELECT(552,392), "S20678C15.s20678c15f0");
    check_field_offset(lv, s20678c15f1, ABISELECT(560,396), "S20678C15.s20678c15f1");
    check_field_offset(lv, s20678c15f2, ABISELECT(576,404), "S20678C15.s20678c15f2");
    check_field_offset(lv, s20678c15f3, ABISELECT(592,416), "S20678C15.s20678c15f3");
    test_class_info(&lv, &cd_S20678C15);
    dp->~S20678C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C15(Test_S20678C15, "S20678C15", ABISELECT(1488,1044));

#else // __cplusplus

extern void _ZN9S20678C15C1Ev();
extern void _ZN9S20678C15D1Ev();
Name_Map name_map_S20678C15[] = {
  NSPAIR(_ZN9S20678C15C1Ev),
  NSPAIR(_ZN9S20678C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C8;
extern VTBL_ENTRY _ZTI8S20678C8[];
extern  VTBL_ENTRY _ZTV8S20678C8[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C16;
extern VTBL_ENTRY _ZTI9S20678C16[];
extern  VTBL_ENTRY _ZTV9S20678C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C16[];
static Base_Class bases_S20678C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(600,420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20678C5,    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
    2, //immediately_derived
  0, 0},
  {&cd_S20678C4,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20678C5,    ABISELECT(896,624), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20678C12,    ABISELECT(656,460), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20678C5,    ABISELECT(416,292), //bcp->offset
    11, //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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20678C8,    ABISELECT(1040,724), //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20678C5,    ABISELECT(1312,908), //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
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20678C16,    ABISELECT(1312,908), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20678C15[];
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN9S20678C153v16Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN8S20678C82v8Ev();
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY vtc_S20678C15[] = {
  ABISELECT(1312,908),
  ABISELECT(1040,724),
  ABISELECT(896,624),
  ABISELECT(656,460),
  ABISELECT(600,420),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20678C153v16Ev,
  ABISELECT(184,128),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-56,-40),
  ABISELECT(-656,-460),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  ABISELECT(-296,-204),
  ABISELECT(-896,-624),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  0,
  ABISELECT(-1040,-724),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
  0,
  ABISELECT(-712,-488),
  ABISELECT(-1312,-908),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
extern VTBL_ENTRY _ZTV9S20678C15[];
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C15[] = {
  ABISELECT(600,420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C4__9S20678C15[] = {
  ABISELECT(600,420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A__9S20678C15[] = {
  ABISELECT(184,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C15[] = {
  ABISELECT(240,164),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12__9S20678C15[] = {
  ABISELECT(-296,-204),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C15[] = {
  ABISELECT(-296,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C16__9S20678C15[] = {
  ABISELECT(-712,-488),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C16[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C59S20678C16__A3__9S20678C15[] = {
  ABISELECT(-712,-488),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTT_ENTRY vtt_S20678C15[] = {
  {&(_ZTV9S20678C15[7]),  7,34},
  {&(_tg__ZTV8S20678C4__9S20678C15[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C4__9S20678C15[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A__9S20678C15[3]),  3,3},
  {&(_ZTV9S20678C15[20]),  20,34},
  {&(_ZTV9S20678C15[25]),  25,34},
  {&(_ZTV9S20678C15[14]),  14,34},
  {&(_ZTV9S20678C15[28]),  28,34},
  {&(_ZTV9S20678C15[33]),  33,34},
  {&(_tg__ZTV9S20678C12__9S20678C15[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C12__9S20678C15[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A1__9S20678C15[3]),  3,3},
  {&(_tg__ZTV9S20678C16__9S20678C15[3]),  3,4},
  {&(_tg__ZTV8S20678C59S20678C16__A3__9S20678C15[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20678C15[];
extern  VTBL_ENTRY _ZTV9S20678C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C15[];
Class_Descriptor cd_S20678C15 = {  "S20678C15", // class name
  bases_S20678C15, 9,
  &(vtc_S20678C15[0]), // expected_vtbl_contents
  &(vtt_S20678C15[0]), // expected_vtt_contents
  ABISELECT(1488,1044), // object size
  NSPAIRA(_ZTI9S20678C15),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20678C15),34, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20678C15),14, //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  S20678C17  : virtual S20678C8 {
  ::S20678C15 s20678c17f0;
  ::S20677C6_nt s20678c17f1;
  __tsi64 s20678c17f2;
  int s20678c17f3[2];
  virtual void  v22(); // _ZN9S20678C173v22Ev
  ~S20678C17(); // tgen
  S20678C17(); // tgen
};
//SIG(-1 S20678C17) C1{ VBC2{ v2 FC3{} FC4{ VBC5{ m Fp FL[4] Fs} FD Fi FC5 FC5} FC3 FL FC3 Fp FC3 Fp[2] FC3} v1 FC6{ BC7{ VBC5 BC4 v4 v5 v6 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC8{ VBC5 VBC4 v7 v8 Fi FC4 FL Fi Fp} BC4 VBC2 VBC9{ BC4 v9 FL Fc[7] Fp Fi FC3 FC3 Fc[10]} v3 Fl FL FD FC3} FC3 FL Fi[2]}


void  S20678C17 ::v22(){vfunc_called(this, "_ZN9S20678C173v22Ev");}
S20678C17 ::~S20678C17(){ note_dtor("S20678C17", this);} // tgen
S20678C17 ::S20678C17(){ note_ctor("S20678C17", this);} // tgen

static void Test_S20678C17()
{
  extern Class_Descriptor cd_S20678C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(114,314)];
    init_test(&cd_S20678C17, buf);
    S20678C17 *dp, &lv = *(dp=new (buf) S20678C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1808,1252), "sizeof(S20678C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C17)");
    check_base_class_offset(lv, (S20678C8*), ABISELECT(1536,1068), "S20678C17");
    check_field_offset(lv, s20678c17f0, ABISELECT(16,4), "S20678C17.s20678c17f0");
    check_field_offset(lv, s20678c17f1, ABISELECT(1504,1048), "S20678C17.s20678c17f1");
    check_field_offset(lv, s20678c17f2, ABISELECT(1512,1052), "S20678C17.s20678c17f2");
    check_field_offset(lv, s20678c17f3, ABISELECT(1520,1060), "S20678C17.s20678c17f3");
    test_class_info(&lv, &cd_S20678C17);
    dp->~S20678C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C17(Test_S20678C17, "S20678C17", ABISELECT(1808,1252));

#else // __cplusplus

extern void _ZN9S20678C17C1Ev();
extern void _ZN9S20678C17D1Ev();
Name_Map name_map_S20678C17[] = {
  NSPAIR(_ZN9S20678C17C1Ev),
  NSPAIR(_ZN9S20678C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20678C8;
extern VTBL_ENTRY _ZTI8S20678C8[];
extern  VTBL_ENTRY _ZTV8S20678C8[];
static Base_Class bases_S20678C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20678C8,    ABISELECT(1536,1068), //bcp->offset
    4, //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 _ZTI9S20678C17[];
extern void _ZN9S20678C173v22Ev();
extern void _ZN8S20678C82v8Ev();
static  VTBL_ENTRY vtc_S20678C17[] = {
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C17[0]),
  (VTBL_ENTRY)&_ZN9S20678C173v22Ev,
  0,
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI9S20678C17[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
};
extern VTBL_ENTRY _ZTV9S20678C17[];
static  VTT_ENTRY vtt_S20678C17[] = {
  {&(_ZTV9S20678C17[3]),  3,8},
  {&(_ZTV9S20678C17[7]),  7,8},
};
extern VTBL_ENTRY _ZTI9S20678C17[];
extern  VTBL_ENTRY _ZTV9S20678C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C17[];
Class_Descriptor cd_S20678C17 = {  "S20678C17", // class name
  bases_S20678C17, 1,
  &(vtc_S20678C17[0]), // expected_vtbl_contents
  &(vtt_S20678C17[0]), // expected_vtt_contents
  ABISELECT(1808,1252), // object size
  NSPAIRA(_ZTI9S20678C17),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20678C17),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20678C17),2, //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  S20678C14  : S20678C15 , S20678C17 , S20678C13 {
  void *s20678c14f0;
  __tsi64 s20678c14f1;
  int s20678c14f2;
  void *s20678c14f3;
  int s20678c14f4[3];
  char s20678c14f5;
  __tsi64 s20678c14f6;
  void *s20678c14f7;
  long double s20678c14f8;
  ~S20678C14(); // tgen
  S20678C14(); // tgen
};
//SIG(-1 S20678C14) C1{ BC2{ BC3{ VBC4{ m Fp FL[4] Fs} BC5{ VBC4 FD Fi FC4 FC4} v1 v2 v3 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} VBC6{ VBC4 VBC5 v4 v5 Fi FC5 FL Fi Fp} BC5 VBC7{ v6 FC8{} FC5 FC8 FL FC8 Fp FC8 Fp[2] FC8} VBC9{ BC5 v7 FL Fc[7] Fp Fi FC8 FC8 Fc[10]} v8 Fl FL FD FC8} BC10{ VBC7 v9 FC2 FC8 FL Fi[2]} BC11{ VBC5 BC12{ VBC3 VBC13{ VBC4 VBC3 v10 v11 v12 FL FC8 Fp Fc[2] FC4 Fl FC8} VBC6 v13 v14 FC8 FC8 Fi FC5 FC8 FC8 FC7 FC13 Fp FC8} BC6 Fi Fc:2 FC8 Fi} Fp FL Fi Fp Fi[3] Fc FL Fp FD}


S20678C14 ::~S20678C14(){ note_dtor("S20678C14", this);} // tgen
S20678C14 ::S20678C14(){ note_ctor("S20678C14", this);} // tgen

static void Test_S20678C14()
{
  extern Class_Descriptor cd_S20678C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(311,867)];
    init_test(&cd_S20678C14, buf);
    S20678C14 *dp, &lv = *(dp=new (buf) S20678C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4960,3464), "sizeof(S20678C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C14)");
    check_base_class_offset(lv, (S20677C3*)(S20678C4*)(S20678C15*), ABISELECT(3568,2476), "S20678C14");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*)(S20678C15*), ABISELECT(3568,2476), "S20678C14");
    /*is_ambiguous_... S20678C14::S20678C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C12*), ABISELECT(3568,2476), "S20678C14");
    /*is_ambiguous_... S20678C14::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(3568,2476), "S20678C14");
    /*is_ambiguous_... S20678C15::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C15*), ABISELECT(3568,2476), "S20678C14");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C16*), ABISELECT(3568,2476), "S20678C14");
    /*is_ambiguous_... S20678C14::S20678C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C4*), ABISELECT(3568,2476), "S20678C14");
    /*is_ambiguous_... S20678C14::S20678C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*), ABISELECT(3568,2476), "S20678C14");
    check_base_class_offset(lv, (S20677C3*)(S20678C2*), ABISELECT(3568,2476), "S20678C14");
    /*is_ambiguous_... S20678C13::S20678C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C12*)(S20678C13*), ABISELECT(3568,2476), "S20678C14");
    check_base_class_offset(lv, (S20678C5*)(S20678C4*)(S20678C15*), 0, "S20678C14");
    check_base_class_offset(lv, (S20678C4*)(S20678C15*), 0, "S20678C14");
    /*is_ambiguous_... S20678C14::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C12*), ABISELECT(3856,2680), "S20678C14");
    /*is_ambiguous_... S20678C13::S20678C5 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C13*), ABISELECT(3856,2680), "S20678C14");
    /*is_ambiguous_... S20678C13::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C12*)(S20678C13*), ABISELECT(3856,2680), "S20678C14");
    check_base_class_offset(lv, (S20678C12*)(S20678C15*), ABISELECT(3616,2516), "S20678C14");
    check_base_class_offset(lv, (S20678C12*)(S20678C11*)(S20678C13*), ABISELECT(3616,2516), "S20678C14");
    /*is_ambiguous_... S20678C15::S20678C5 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C15*), ABISELECT(416,292), "S20678C14");
    check_base_class_offset(lv, (S20678C8*)(S20678C15*), ABISELECT(4000,2780), "S20678C14");
    check_base_class_offset(lv, (S20678C8*)(S20678C17*), ABISELECT(4000,2780), "S20678C14");
    check_base_class_offset(lv, (S20678C5*)(S20678C16*), ABISELECT(4272,2964), "S20678C14");
    check_base_class_offset(lv, (S20678C16*)(S20678C15*), ABISELECT(4272,2964), "S20678C14");
    check_base_class_offset(lv, (S20678C15*), 0, "S20678C14");
    check_base_class_offset(lv, (S20678C17*), ABISELECT(608,420), "S20678C14");
    /*is_ambiguous_... S20678C14::S20678C4 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C4*), ABISELECT(4448,3100), "S20678C14");
    check_base_class_offset(lv, (S20678C4*)(S20678C11*)(S20678C13*), ABISELECT(4448,3100), "S20678C14");
    check_base_class_offset(lv, (S20678C4*)(S20678C2*), ABISELECT(4448,3100), "S20678C14");
    check_base_class_offset(lv, (S20678C2*)(S20678C11*)(S20678C13*), ABISELECT(4856,3392), "S20678C14");
    check_base_class_offset(lv, (S20678C11*)(S20678C13*), ABISELECT(2144,1488), "S20678C14");
    /*is_ambiguous_... S20678C13::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C12*)(S20678C13*), ABISELECT(3232,2240), "S20678C14");
    check_base_class_offset(lv, (S20678C13*), ABISELECT(2144,1488), "S20678C14");
    check_field_offset(lv, s20678c14f0, ABISELECT(3480,2416), "S20678C14.s20678c14f0");
    check_field_offset(lv, s20678c14f1, ABISELECT(3488,2420), "S20678C14.s20678c14f1");
    check_field_offset(lv, s20678c14f2, ABISELECT(3496,2428), "S20678C14.s20678c14f2");
    check_field_offset(lv, s20678c14f3, ABISELECT(3504,2432), "S20678C14.s20678c14f3");
    check_field_offset(lv, s20678c14f4, ABISELECT(3512,2436), "S20678C14.s20678c14f4");
    check_field_offset(lv, s20678c14f5, ABISELECT(3524,2448), "S20678C14.s20678c14f5");
    check_field_offset(lv, s20678c14f6, ABISELECT(3528,2452), "S20678C14.s20678c14f6");
    check_field_offset(lv, s20678c14f7, ABISELECT(3536,2460), "S20678C14.s20678c14f7");
    check_field_offset(lv, s20678c14f8, ABISELECT(3552,2464), "S20678C14.s20678c14f8");
    test_class_info(&lv, &cd_S20678C14);
    dp->~S20678C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C14(Test_S20678C14, "S20678C14", ABISELECT(4960,3464));

#else // __cplusplus

extern void _ZN9S20678C14C1Ev();
extern void _ZN9S20678C14D1Ev();
Name_Map name_map_S20678C14[] = {
  NSPAIR(_ZN9S20678C14C1Ev),
  NSPAIR(_ZN9S20678C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C8;
extern VTBL_ENTRY _ZTI8S20678C8[];
extern  VTBL_ENTRY _ZTV8S20678C8[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C16;
extern VTBL_ENTRY _ZTI9S20678C16[];
extern  VTBL_ENTRY _ZTV9S20678C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C16[];
extern Class_Descriptor cd_S20678C15;
extern VTBL_ENTRY _ZTI9S20678C15[];
extern  VTBL_ENTRY _ZTV9S20678C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C15[];
extern Class_Descriptor cd_S20678C17;
extern VTBL_ENTRY _ZTI9S20678C17[];
extern  VTBL_ENTRY _ZTV9S20678C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C17[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C2;
extern VTBL_ENTRY _ZTI8S20678C2[];
extern  VTBL_ENTRY _ZTV8S20678C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C2[];
extern Class_Descriptor cd_S20678C11;
extern VTBL_ENTRY _ZTI9S20678C11[];
extern  VTBL_ENTRY _ZTV9S20678C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C11[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C13;
extern VTBL_ENTRY _ZTI9S20678C13[];
extern  VTBL_ENTRY _ZTV9S20678C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C13[];
static Base_Class bases_S20678C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(3568,2476), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20678C5,    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
    9, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20678C4,    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
    10, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20678C5,    ABISELECT(3856,2680), //bcp->offset
    43, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20678C12,    ABISELECT(3616,2516), //bcp->offset
    35, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20678C5,    ABISELECT(416,292), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20678C8,    ABISELECT(4000,2780), //bcp->offset
    46, //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
    9, //immediately_derived
  0, 1},
  {&cd_S20678C5,    ABISELECT(4272,2964), //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
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20678C16,    ABISELECT(4272,2964), //bcp->offset
    50, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20678C15,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20678C17,    ABISELECT(608,420), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20678C5,    ABISELECT(4448,3100), //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
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20678C4,    ABISELECT(4448,3100), //bcp->offset
    55, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20678C2,    ABISELECT(4856,3392), //bcp->offset
    64, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20678C11,    ABISELECT(2144,1488), //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
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20678C12,    ABISELECT(3232,2240), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20678C13,    ABISELECT(2144,1488), //bcp->offset
    20, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20678C14[];
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN9S20678C153v16Ev();
extern void _ZN9S20678C173v22Ev();
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN8S20678C82v8Ev();
extern void _ZN9S20678C163v15Ev();
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY vtc_S20678C14[] = {
  ABISELECT(4856,3392),
  ABISELECT(4448,3100),
  ABISELECT(4272,2964),
  ABISELECT(4000,2780),
  ABISELECT(3856,2680),
  ABISELECT(3616,2516),
  ABISELECT(3568,2476),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C14[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20678C153v16Ev,
  ABISELECT(3152,2184),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S20678C14[0]),
  ABISELECT(3392,2360),
  ABISELECT(-608,-420),
  (VTBL_ENTRY)&(_ZTI9S20678C14[0]),
  (VTBL_ENTRY)&_ZN9S20678C173v22Ev,
  ABISELECT(1712,1192),
  ABISELECT(1472,1028),
  ABISELECT(2712,1904),
  ABISELECT(1424,988),
  ABISELECT(2304,1612),
  ABISELECT(-2144,-1488),
  (VTBL_ENTRY)&(_ZTI9S20678C14[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
  ABISELECT(624,440),
  ABISELECT(336,236),
  ABISELECT(-3232,-2240),
  (VTBL_ENTRY)&(_ZTI9S20678C14[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-48,-40),
  ABISELECT(-3616,-2516),
  (VTBL_ENTRY)&(_ZTI9S20678C14[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  ABISELECT(-288,-204),
  ABISELECT(-3856,-2680),
  (VTBL_ENTRY)&(_ZTI9S20678C14[0]),
  0,
  ABISELECT(-4000,-2780),
  (VTBL_ENTRY)&(_ZTI9S20678C14[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
  0,
  ABISELECT(-704,-488),
  ABISELECT(-4272,-2964),
  (VTBL_ENTRY)&(_ZTI9S20678C14[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
  0,
  0,
  0,
  ABISELECT(-880,-624),
  ABISELECT(-4448,-3100),
  (VTBL_ENTRY)&(_ZTI9S20678C14[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-1288,-916),
  ABISELECT(-4856,-3392),
  (VTBL_ENTRY)&(_ZTI9S20678C14[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern VTBL_ENTRY _ZTV9S20678C14[];
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN9S20678C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C15__9S20678C14[] = {
  ABISELECT(4272,2964),
  ABISELECT(4000,2780),
  ABISELECT(3856,2680),
  ABISELECT(3616,2516),
  ABISELECT(3568,2476),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20678C153v16Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C49S20678C15__9S20678C14[] = {
  ABISELECT(3568,2476),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C49S20678C15__9S20678C14[] = {
  ABISELECT(3568,2476),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C59S20678C15__A2__9S20678C14[] = {
  ABISELECT(3152,2184),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C15__9S20678C14[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-48,-40),
  ABISELECT(-3616,-2516),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C15__9S20678C14[] = {
  ABISELECT(-288,-204),
  ABISELECT(-3856,-2680),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A__9S20678C15__9S20678C14[] = {
  ABISELECT(3152,2184),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
};
extern void _ZN8S20678C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C8__9S20678C15__9S20678C14[] = {
  0,
  ABISELECT(-4000,-2780),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
};
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C16__9S20678C15__9S20678C14[] = {
  0,
  ABISELECT(-704,-488),
  ABISELECT(-4272,-2964),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
extern void _ZN9S20678C173v22Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C17__9S20678C14[] = {
  ABISELECT(3392,2360),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C17[0]),
  (VTBL_ENTRY)&_ZN9S20678C173v22Ev,
};
extern void _ZN8S20678C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C8__9S20678C17__9S20678C14[] = {
  0,
  ABISELECT(-3392,-2360),
  (VTBL_ENTRY)&(_ZTI9S20678C17[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
};
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C13__9S20678C14[] = {
  ABISELECT(1712,1192),
  ABISELECT(1472,1028),
  ABISELECT(2712,1904),
  ABISELECT(1424,988),
  ABISELECT(2304,1612),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C119S20678C13__9S20678C14[] = {
  ABISELECT(1712,1192),
  ABISELECT(1472,1028),
  ABISELECT(2712,1904),
  ABISELECT(1424,988),
  ABISELECT(2304,1612),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C119S20678C13__9S20678C14[] = {
  0,
  0,
  0,
  ABISELECT(-880,-624),
  ABISELECT(-2304,-1612),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C119S20678C13__9S20678C14[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-1288,-916),
  ABISELECT(-2712,-1904),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C119S20678C13__9S20678C14[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-48,-40),
  ABISELECT(-1472,-1028),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C119S20678C13__9S20678C14[] = {
  ABISELECT(-288,-204),
  ABISELECT(-1712,-1192),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C129S20678C13__A1__9S20678C14[] = {
  ABISELECT(624,440),
  ABISELECT(336,236),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C129S20678C13__A1__9S20678C14[] = {
  ABISELECT(-288,-204),
  ABISELECT(-624,-440),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C13__9S20678C14[] = {
  ABISELECT(-288,-204),
  ABISELECT(-1712,-1192),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C13__9S20678C14[] = {
  0,
  0,
  0,
  ABISELECT(-880,-624),
  ABISELECT(-2304,-1612),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C13__9S20678C14[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-1288,-916),
  ABISELECT(-2712,-1904),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C13__9S20678C14[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-48,-40),
  ABISELECT(-1472,-1028),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__A__9S20678C13__9S20678C14[] = {
  ABISELECT(624,440),
  ABISELECT(336,236),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C14[] = {
  ABISELECT(240,164),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12__9S20678C14[] = {
  ABISELECT(-288,-204),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C14[] = {
  ABISELECT(-288,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C16__9S20678C14[] = {
  ABISELECT(-704,-488),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C16[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C59S20678C16__A3__9S20678C14[] = {
  ABISELECT(-704,-488),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__A1__9S20678C14[] = {
  ABISELECT(-880,-624),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C4__A4__9S20678C14[] = {
  ABISELECT(-880,-624),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C14[] = {
  ABISELECT(-408,-292),
  ABISELECT(-1288,-916),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__8S20678C2__9S20678C14[] = {
  0,
  0,
  0,
  ABISELECT(-880,-624),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTT_ENTRY vtt_S20678C14[] = {
  {&(_ZTV9S20678C14[9]),  9,74},
  {&(_tg__ZTV9S20678C15__9S20678C14[7]),  7,11},
  {&(_tg__ZTV8S20678C49S20678C15__9S20678C14[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C49S20678C15__9S20678C14[3]),  3,3},
  {&(_tg__ZTV8S20678C59S20678C15__A2__9S20678C14[3]),  3,3},
  {&(_tg__ZTV9S20678C12__9S20678C15__9S20678C14[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C15__9S20678C14[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A__9S20678C15__9S20678C14[3]),  3,3},
  {&(_tg__ZTV8S20678C8__9S20678C15__9S20678C14[3]),  3,4},
  {&(_tg__ZTV9S20678C16__9S20678C15__9S20678C14[4]),  4,5},
  {&(_tg__ZTV9S20678C17__9S20678C14[3]),  3,4},
  {&(_tg__ZTV8S20678C8__9S20678C17__9S20678C14[3]),  3,4},
  {&(_tg__ZTV9S20678C13__9S20678C14[7]),  7,9},
  {&(_tg__ZTV9S20678C119S20678C13__9S20678C14[7]),  7,9},
  {&(_tg__ZTV8S20678C4__9S20678C119S20678C13__9S20678C14[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C119S20678C13__9S20678C14[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C119S20678C13__9S20678C14[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C119S20678C13__9S20678C14[3]),  3,3},
  {&(_tg__ZTV9S20678C129S20678C13__A1__9S20678C14[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C129S20678C13__A1__9S20678C14[3]),  3,3},
  {&(_tg__ZTV8S20678C5__9S20678C13__9S20678C14[3]),  3,3},
  {&(_tg__ZTV8S20678C4__9S20678C13__9S20678C14[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C13__9S20678C14[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C13__9S20678C14[6]),  6,8},
  {&(_tg__ZTV9S20678C12__A__9S20678C13__9S20678C14[4]),  4,6},
  {&(_ZTV9S20678C14[41]),  41,74},
  {&(_ZTV9S20678C14[46]),  46,74},
  {&(_ZTV9S20678C14[16]),  16,74},
  {&(_ZTV9S20678C14[49]),  49,74},
  {&(_ZTV9S20678C14[54]),  54,74},
  {&(_ZTV9S20678C14[19]),  19,74},
  {&(_ZTV9S20678C14[27]),  27,74},
  {&(_ZTV9S20678C14[61]),  61,74},
  {&(_ZTV9S20678C14[71]),  71,74},
  {&(_ZTV9S20678C14[33]),  33,74},
  {&(_tg__ZTV9S20678C12__9S20678C14[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C12__9S20678C14[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A1__9S20678C14[3]),  3,3},
  {&(_tg__ZTV9S20678C16__9S20678C14[3]),  3,4},
  {&(_tg__ZTV8S20678C59S20678C16__A3__9S20678C14[3]),  3,3},
  {&(_tg__ZTV8S20678C4__A1__9S20678C14[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C4__A4__9S20678C14[3]),  3,3},
  {&(_tg__ZTV8S20678C2__9S20678C14[4]),  4,7},
  {&(_tg__ZTV8S20678C4__8S20678C2__9S20678C14[6]),  6,9},
};
extern VTBL_ENTRY _ZTI9S20678C14[];
extern  VTBL_ENTRY _ZTV9S20678C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C14[];
Class_Descriptor cd_S20678C14 = {  "S20678C14", // class name
  bases_S20678C14, 17,
  &(vtc_S20678C14[0]), // expected_vtbl_contents
  &(vtt_S20678C14[0]), // expected_vtt_contents
  ABISELECT(4960,3464), // object size
  NSPAIRA(_ZTI9S20678C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20678C14),74, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20678C14),44, //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  S20678C10  : S20678C11 {
  int s20678c10f0[2];
  ::S20677C6_nt s20678c10f1;
  ::S20677C6_nt s20678c10f2;
  ::S20677C6_nt s20678c10f3;
  ::S20677C6_nt s20678c10f4;
  ::S20677C6_nt s20678c10f5;
  ::S20678C13 s20678c10f6;
  __tsi64 s20678c10f7[4];
  ::S20677C6_nt s20678c10f8;
  ::S20678C14 s20678c10f9[2];
  char s20678c10f10;
  ::S20677C6_nt s20678c10f11;
  virtual void  v14(); // _ZN9S20678C103v14Ev
  ~S20678C10(); // tgen
  S20678C10(); // tgen
};
//SIG(-1 S20678C10) C1{ BC2{ VBC3{ VBC4{ m Fp FL[4] Fs} BC5{ VBC4 FD Fi FC4 FC4} v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} VBC6{ VBC4 VBC3 v5 v6 v7 FL FC7{} Fp Fc[2] FC4 Fl FC7} VBC8{ VBC4 VBC5 v8 v9 Fi FC5 FL Fi Fp} v10 v11 FC7 FC7 Fi FC5 FC7 FC7 FC9{ v12 FC7 FC5 FC7 FL FC7 Fp FC7 Fp[2] FC7} FC6 Fp FC7} v1 Fi[2] FC7 FC7 FC7 FC7 FC7 FC10{ VBC5 BC2 BC8 Fi Fc:2 FC7 Fi} FL[4] FC7 FC11{ BC12{ BC3 VBC8 BC5 VBC9 VBC13{ BC5 v13 FL Fc[7] Fp Fi FC7 FC7 Fc[10]} v14 Fl FL FD FC7} BC14{ VBC9 v15 FC12 FC7 FL Fi[2]} BC10 Fp FL Fi Fp Fi[3] Fc FL Fp FD}[2] Fc FC7}


void  S20678C10 ::v14(){vfunc_called(this, "_ZN9S20678C103v14Ev");}
S20678C10 ::~S20678C10(){ note_dtor("S20678C10", this);} // tgen
S20678C10 ::S20678C10(){ note_ctor("S20678C10", this);} // tgen

static void Test_S20678C10()
{
  extern Class_Descriptor cd_S20678C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(896,2501)];
    init_test(&cd_S20678C10, buf);
    S20678C10 *dp, &lv = *(dp=new (buf) S20678C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(14320,10000), "sizeof(S20678C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C10)");
    check_base_class_offset(lv, (S20677C3*)(S20678C4*), ABISELECT(13784,9624), "S20678C10");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*), ABISELECT(13784,9624), "S20678C10");
    check_base_class_offset(lv, (S20677C3*)(S20678C2*), ABISELECT(13784,9624), "S20678C10");
    check_base_class_offset(lv, (S20677C3*)(S20678C12*), ABISELECT(13784,9624), "S20678C10");
    /*is_ambiguous_... S20678C10::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(13784,9624), "S20678C10");
    check_base_class_offset(lv, (S20678C5*)(S20678C4*), ABISELECT(13376,9332), "S20678C10");
    check_base_class_offset(lv, (S20678C4*)(S20678C11*), ABISELECT(13376,9332), "S20678C10");
    check_base_class_offset(lv, (S20678C4*)(S20678C2*), ABISELECT(13376,9332), "S20678C10");
    check_base_class_offset(lv, (S20678C2*)(S20678C11*), ABISELECT(13832,9664), "S20678C10");
    check_base_class_offset(lv, (S20678C5*)(S20678C12*), ABISELECT(14176,9900), "S20678C10");
    check_base_class_offset(lv, (S20678C12*)(S20678C11*), ABISELECT(13936,9736), "S20678C10");
    check_base_class_offset(lv, (S20678C11*), 0, "S20678C10");
    check_field_offset(lv, s20678c10f0, ABISELECT(1084,752), "S20678C10.s20678c10f0");
    check_field_offset(lv, s20678c10f1, ABISELECT(1092,760), "S20678C10.s20678c10f1");
    check_field_offset(lv, s20678c10f2, ABISELECT(1093,761), "S20678C10.s20678c10f2");
    check_field_offset(lv, s20678c10f3, ABISELECT(1094,762), "S20678C10.s20678c10f3");
    check_field_offset(lv, s20678c10f4, ABISELECT(1095,763), "S20678C10.s20678c10f4");
    check_field_offset(lv, s20678c10f5, ABISELECT(1096,764), "S20678C10.s20678c10f5");
    check_field_offset(lv, s20678c10f6, ABISELECT(1104,768), "S20678C10.s20678c10f6");
    check_field_offset(lv, s20678c10f7, ABISELECT(3392,2364), "S20678C10.s20678c10f7");
    check_field_offset(lv, s20678c10f8, ABISELECT(3424,2396), "S20678C10.s20678c10f8");
    check_field_offset(lv, s20678c10f9, ABISELECT(3440,2400), "S20678C10.s20678c10f9");
    check_field_offset(lv, s20678c10f10, ABISELECT(13360,9328), "S20678C10.s20678c10f10");
    check_field_offset(lv, s20678c10f11, ABISELECT(13361,9329), "S20678C10.s20678c10f11");
    test_class_info(&lv, &cd_S20678C10);
    dp->~S20678C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C10(Test_S20678C10, "S20678C10", ABISELECT(14320,10000));

#else // __cplusplus

extern void _ZN9S20678C10C1Ev();
extern void _ZN9S20678C10D1Ev();
Name_Map name_map_S20678C10[] = {
  NSPAIR(_ZN9S20678C10C1Ev),
  NSPAIR(_ZN9S20678C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C2;
extern VTBL_ENTRY _ZTI8S20678C2[];
extern  VTBL_ENTRY _ZTV8S20678C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C2[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C11;
extern VTBL_ENTRY _ZTI9S20678C11[];
extern  VTBL_ENTRY _ZTV9S20678C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C11[];
static Base_Class bases_S20678C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(13784,9624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20678C5,    ABISELECT(13376,9332), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20678C4,    ABISELECT(13376,9332), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //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
    3, //immediately_derived
  0, 1},
  {&cd_S20678C2,    ABISELECT(13832,9664), //bcp->offset
    19, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20678C5,    ABISELECT(14176,9900), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20678C12,    ABISELECT(13936,9736), //bcp->offset
    29, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20678C11,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20678C10[];
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
extern void _ZN9S20678C103v14Ev();
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY vtc_S20678C10[] = {
  ABISELECT(14176,9900),
  ABISELECT(13936,9736),
  ABISELECT(13832,9664),
  ABISELECT(13784,9624),
  ABISELECT(13376,9332),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
  (VTBL_ENTRY)&_ZN9S20678C103v14Ev,
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-13376,-9332),
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-13832,-9664),
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-13936,-9736),
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  ABISELECT(-392,-276),
  ABISELECT(-14176,-9900),
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
};
extern VTBL_ENTRY _ZTV9S20678C10[];
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C11__9S20678C10[] = {
  ABISELECT(14176,9900),
  ABISELECT(13936,9736),
  ABISELECT(13832,9664),
  ABISELECT(13784,9624),
  ABISELECT(13376,9332),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C11__9S20678C10[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-13376,-9332),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C11__9S20678C10[] = {
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-13832,-9664),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C11__9S20678C10[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-13936,-9736),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C11__9S20678C10[] = {
  ABISELECT(-392,-276),
  ABISELECT(-14176,-9900),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C10[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C4__9S20678C10[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C10[] = {
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__8S20678C2__9S20678C10[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(456,332),
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C10[] = {
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12__9S20678C10[] = {
  ABISELECT(-392,-276),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C10[] = {
  ABISELECT(-392,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTT_ENTRY vtt_S20678C10[] = {
  {&(_ZTV9S20678C10[7]),  7,40},
  {&(_tg__ZTV9S20678C11__9S20678C10[7]),  7,9},
  {&(_tg__ZTV8S20678C4__9S20678C11__9S20678C10[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C11__9S20678C10[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C11__9S20678C10[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C11__9S20678C10[3]),  3,3},
  {&(_ZTV9S20678C10[16]),  16,40},
  {&(_ZTV9S20678C10[26]),  26,40},
  {&(_ZTV9S20678C10[35]),  35,40},
  {&(_ZTV9S20678C10[40]),  40,40},
  {&(_tg__ZTV8S20678C4__9S20678C10[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C4__9S20678C10[3]),  3,3},
  {&(_tg__ZTV8S20678C2__9S20678C10[4]),  4,7},
  {&(_tg__ZTV8S20678C4__8S20678C2__9S20678C10[6]),  6,9},
  {&(_tg__ZTV9S20678C12__9S20678C10[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C12__9S20678C10[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A1__9S20678C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20678C10[];
extern  VTBL_ENTRY _ZTV9S20678C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C10[];
Class_Descriptor cd_S20678C10 = {  "S20678C10", // class name
  bases_S20678C10, 7,
  &(vtc_S20678C10[0]), // expected_vtbl_contents
  &(vtt_S20678C10[0]), // expected_vtt_contents
  ABISELECT(14320,10000), // object size
  NSPAIRA(_ZTI9S20678C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20678C10),40, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20678C10),17, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20678C19  : S20678C9 , S20678C12 , virtual S20678C15 {
  void *s20678c19f0;
  char s20678c19f1[4];
  ::S20678C4 s20678c19f2;
  int s20678c19f3[8];
  ::S20677C6_nt s20678c19f4;
  ::S20678C7 s20678c19f5;
  ::S20677C6_nt s20678c19f6;
  long double s20678c19f7;
  ::S20678C5 s20678c19f8[9];
  long double s20678c19f9[10];
  short s20678c19f10;
  virtual void  v17(); // _ZN9S20678C193v17Ev
  virtual void  v18(); // _ZN9S20678C193v18Ev
  virtual void  v19(); // _ZN9S20678C193v19Ev
  virtual void  v20(); // _ZN9S20678C193v20Ev
  ~S20678C19(); // tgen
  S20678C19(); // tgen
};
//SIG(-1 S20678C19) C1{ BC2{ BC3{ m Fp FL[4] Fs} FC3 Fi FD Fi FL Fl} BC4{ VBC3 VBC5{ VBC3 FD Fi FC3 FC3} v5 v6 Fi FC5 FL Fi Fp} VBC6{ BC7{ VBC3 BC5 v7 v8 v9 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} VBC4 BC5 VBC8{ v10 FC9{} FC5 FC9 FL FC9 Fp FC9 Fp[2] FC9} VBC10{ BC5 v11 FL Fc[7] Fp Fi FC9 FC9 Fc[10]} v12 Fl FL FD FC9} v1 v2 v3 v4 Fp Fc[4] FC7 Fi[8] FC9 FC11{ VBC8 BC5 BC2 v13 Fp FC2 Fp Fi[2] FD Fi[2]} FC9 FD FC5[9] FD[10] Fs}


void  S20678C19 ::v17(){vfunc_called(this, "_ZN9S20678C193v17Ev");}
void  S20678C19 ::v18(){vfunc_called(this, "_ZN9S20678C193v18Ev");}
void  S20678C19 ::v19(){vfunc_called(this, "_ZN9S20678C193v19Ev");}
void  S20678C19 ::v20(){vfunc_called(this, "_ZN9S20678C193v20Ev");}
S20678C19 ::~S20678C19(){ note_dtor("S20678C19", this);} // tgen
S20678C19 ::S20678C19(){ note_ctor("S20678C19", this);} // tgen

static void Test_S20678C19()
{
  extern Class_Descriptor cd_S20678C19;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(325,921)];
    init_test(&cd_S20678C19, buf);
    S20678C19 *dp, &lv = *(dp=new (buf) S20678C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5184,3680), "sizeof(S20678C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C19)");
    check_base_class_offset(lv, (S20677C3*)(S20678C9*), ABISELECT(240,164), "S20678C19");
    check_base_class_offset(lv, (S20678C9*), ABISELECT(240,164), "S20678C19");
    /*is_ambiguous_... S20678C19::S20678C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C12*), ABISELECT(3688,2636), "S20678C19");
    /*is_ambiguous_... S20678C19::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(3688,2636), "S20678C19");
    check_base_class_offset(lv, (S20677C3*)(S20678C4*)(S20678C15*), ABISELECT(3688,2636), "S20678C19");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*)(S20678C15*), ABISELECT(3688,2636), "S20678C19");
    /*is_ambiguous_... S20678C19::S20678C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C12*), ABISELECT(3688,2636), "S20678C19");
    /*is_ambiguous_... S20678C15::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C15*), ABISELECT(3688,2636), "S20678C19");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C16*), ABISELECT(3688,2636), "S20678C19");
    /*is_ambiguous_... S20678C19::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C12*), ABISELECT(3744,2676), "S20678C19");
    /*is_ambiguous_... S20678C19::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C12*), ABISELECT(3744,2676), "S20678C19");
    /*is_ambiguous_... S20678C19::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C12*), 0, "S20678C19");
    check_base_class_offset(lv, (S20678C5*)(S20678C4*)(S20678C15*), ABISELECT(3888,2776), "S20678C19");
    check_base_class_offset(lv, (S20678C4*)(S20678C15*), ABISELECT(3888,2776), "S20678C19");
    check_base_class_offset(lv, (S20678C12*)(S20678C15*), ABISELECT(4496,3196), "S20678C19");
    /*is_ambiguous_... S20678C15::S20678C5 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C15*), ABISELECT(4304,3068), "S20678C19");
    check_base_class_offset(lv, (S20678C8*)(S20678C15*), ABISELECT(4736,3360), "S20678C19");
    check_base_class_offset(lv, (S20678C5*)(S20678C16*), ABISELECT(5008,3544), "S20678C19");
    check_base_class_offset(lv, (S20678C16*)(S20678C15*), ABISELECT(5008,3544), "S20678C19");
    check_base_class_offset(lv, (S20678C15*), ABISELECT(3888,2776), "S20678C19");
    check_field_offset(lv, s20678c19f0, ABISELECT(392,276), "S20678C19.s20678c19f0");
    check_field_offset(lv, s20678c19f1, ABISELECT(400,280), "S20678C19.s20678c19f1");
    check_field_offset(lv, s20678c19f2, ABISELECT(416,284), "S20678C19.s20678c19f2");
    check_field_offset(lv, s20678c19f3, ABISELECT(880,616), "S20678C19.s20678c19f3");
    check_field_offset(lv, s20678c19f4, ABISELECT(912,648), "S20678C19.s20678c19f4");
    check_field_offset(lv, s20678c19f5, ABISELECT(928,652), "S20678C19.s20678c19f5");
    check_field_offset(lv, s20678c19f6, ABISELECT(1760,1236), "S20678C19.s20678c19f6");
    check_field_offset(lv, s20678c19f7, ABISELECT(1776,1240), "S20678C19.s20678c19f7");
    check_field_offset(lv, s20678c19f8, ABISELECT(1792,1252), "S20678C19.s20678c19f8");
    check_field_offset(lv, s20678c19f9, ABISELECT(3520,2512), "S20678C19.s20678c19f9");
    check_field_offset(lv, s20678c19f10, ABISELECT(3680,2632), "S20678C19.s20678c19f10");
    test_class_info(&lv, &cd_S20678C19);
    dp->~S20678C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C19(Test_S20678C19, "S20678C19", ABISELECT(5184,3680));

#else // __cplusplus

extern void _ZN9S20678C19C1Ev();
extern void _ZN9S20678C19D1Ev();
Name_Map name_map_S20678C19[] = {
  NSPAIR(_ZN9S20678C19C1Ev),
  NSPAIR(_ZN9S20678C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C9;
extern VTBL_ENTRY _ZTI8S20678C9[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C8;
extern VTBL_ENTRY _ZTI8S20678C8[];
extern  VTBL_ENTRY _ZTV8S20678C8[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C16;
extern VTBL_ENTRY _ZTI9S20678C16[];
extern  VTBL_ENTRY _ZTV9S20678C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C16[];
extern Class_Descriptor cd_S20678C15;
extern VTBL_ENTRY _ZTI9S20678C15[];
extern  VTBL_ENTRY _ZTV9S20678C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C15[];
static Base_Class bases_S20678C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(240,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
  0, 0},
  {&cd_S20678C9,    ABISELECT(240,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, 0},
  {&cd_S20677C3,    ABISELECT(3688,2636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20678C5,    ABISELECT(3744,2676), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20678C12,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20678C5,    ABISELECT(3888,2776), //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20678C4,    ABISELECT(3888,2776), //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
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20678C12,    ABISELECT(4496,3196), //bcp->offset
    35, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20678C5,    ABISELECT(4304,3068), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20678C8,    ABISELECT(4736,3360), //bcp->offset
    43, //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
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20678C5,    ABISELECT(5008,3544), //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
    4, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20678C16,    ABISELECT(5008,3544), //bcp->offset
    47, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20678C15,    ABISELECT(3888,2776), //bcp->offset
    17, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20678C19[];
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN9S20678C193v17Ev();
extern void _ZN9S20678C193v18Ev();
extern void _ZN9S20678C193v19Ev();
extern void _ZN9S20678C193v20Ev();
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN9S20678C153v16Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN8S20678C82v8Ev();
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY vtc_S20678C19[] = {
  ABISELECT(5008,3544),
  ABISELECT(4736,3360),
  ABISELECT(4496,3196),
  ABISELECT(3888,2776),
  ABISELECT(3744,2676),
  ABISELECT(3688,2636),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v17Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v18Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v19Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v20Ev,
  ABISELECT(-56,-40),
  ABISELECT(-3744,-2676),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  0,
  0,
  0,
  0,
  ABISELECT(1120,768),
  ABISELECT(848,584),
  ABISELECT(-144,-100),
  ABISELECT(608,420),
  ABISELECT(-200,-140),
  ABISELECT(-3888,-2776),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20678C153v16Ev,
  ABISELECT(-616,-432),
  ABISELECT(-4304,-3068),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  0,
  0,
  ABISELECT(-752,-520),
  ABISELECT(-808,-560),
  ABISELECT(-4496,-3196),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  0,
  ABISELECT(-4736,-3360),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
  0,
  ABISELECT(-1320,-908),
  ABISELECT(-5008,-3544),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
extern VTBL_ENTRY _ZTV9S20678C19[];
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__A__9S20678C19[] = {
  ABISELECT(3744,2676),
  ABISELECT(3688,2636),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12__A__9S20678C19[] = {
  ABISELECT(-56,-40),
  ABISELECT(-3744,-2676),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C19[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN9S20678C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C15__9S20678C19[] = {
  ABISELECT(1120,768),
  ABISELECT(848,584),
  ABISELECT(-144,-100),
  ABISELECT(608,420),
  ABISELECT(-200,-140),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20678C153v16Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C49S20678C15__9S20678C19[] = {
  ABISELECT(-200,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C49S20678C15__A1__9S20678C19[] = {
  ABISELECT(-200,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C59S20678C15__A2__9S20678C19[] = {
  ABISELECT(-616,-432),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C15__9S20678C19[] = {
  0,
  0,
  ABISELECT(-752,-520),
  ABISELECT(-808,-560),
  ABISELECT(-608,-420),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C15__9S20678C19[] = {
  ABISELECT(-56,-40),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A__9S20678C15__9S20678C19[] = {
  ABISELECT(-616,-432),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
};
extern void _ZN8S20678C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C8__9S20678C15__9S20678C19[] = {
  0,
  ABISELECT(-848,-584),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
};
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C16__9S20678C15__9S20678C19[] = {
  0,
  ABISELECT(-1320,-908),
  ABISELECT(-1120,-768),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__A1__9S20678C19[] = {
  ABISELECT(-752,-520),
  ABISELECT(-808,-560),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12__A1__9S20678C19[] = {
  ABISELECT(-56,-40),
  ABISELECT(752,520),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C16__9S20678C19[] = {
  ABISELECT(-1320,-908),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C16[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C59S20678C16__A3__9S20678C19[] = {
  ABISELECT(-1320,-908),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTT_ENTRY vtt_S20678C19[] = {
  {&(_ZTV9S20678C19[8]),  8,52},
  {&(_tg__ZTV9S20678C12__A__9S20678C19[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C12__A__9S20678C19[3]),  3,3},
  {&(_ZTV9S20678C19[17]),  17,52},
  {&(_ZTV9S20678C19[28]),  28,52},
  {&(_ZTV9S20678C19[41]),  41,52},
  {&(_ZTV9S20678C19[35]),  35,52},
  {&(_ZTV9S20678C19[46]),  46,52},
  {&(_ZTV9S20678C19[51]),  51,52},
  {&(_tg__ZTV8S20678C5__9S20678C19[3]),  3,3},
  {&(_tg__ZTV9S20678C15__9S20678C19[7]),  7,11},
  {&(_tg__ZTV8S20678C49S20678C15__9S20678C19[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C49S20678C15__A1__9S20678C19[3]),  3,3},
  {&(_tg__ZTV8S20678C59S20678C15__A2__9S20678C19[3]),  3,3},
  {&(_tg__ZTV9S20678C12__9S20678C15__9S20678C19[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C15__9S20678C19[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A__9S20678C15__9S20678C19[3]),  3,3},
  {&(_tg__ZTV8S20678C8__9S20678C15__9S20678C19[3]),  3,4},
  {&(_tg__ZTV9S20678C16__9S20678C15__9S20678C19[4]),  4,5},
  {&(_tg__ZTV9S20678C12__A1__9S20678C19[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C12__A1__9S20678C19[3]),  3,3},
  {&(_tg__ZTV9S20678C16__9S20678C19[3]),  3,4},
  {&(_tg__ZTV8S20678C59S20678C16__A3__9S20678C19[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20678C19[];
extern  VTBL_ENTRY _ZTV9S20678C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C19[];
Class_Descriptor cd_S20678C19 = {  "S20678C19", // class name
  bases_S20678C19, 13,
  &(vtc_S20678C19[0]), // expected_vtbl_contents
  &(vtt_S20678C19[0]), // expected_vtt_contents
  ABISELECT(5184,3680), // object size
  NSPAIRA(_ZTI9S20678C19),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20678C19),52, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20678C19),23, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20678C20  : S20678C13 {
  int s20678c20f0;
  ::S20677C6_nt s20678c20f1;
  short s20678c20f2;
  __tsi64 s20678c20f3;
  ::S20678C5 s20678c20f4;
  __tsi64 s20678c20f5;
  virtual void  v23(); // _ZN9S20678C203v23Ev
  ~S20678C20(); // tgen
  S20678C20(); // tgen
};
//SIG(-1 S20678C20) C1{ BC2{ VBC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} BC5{ VBC6{ VBC4 BC3 v2 v3 v4 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi} VBC7{ VBC4 VBC6 v5 v6 v7 FL FC8{} Fp Fc[2] FC4 Fl FC8} VBC9{ VBC4 VBC3 v8 v9 Fi FC3 FL Fi Fp} v10 v11 FC8 FC8 Fi FC3 FC8 FC8 FC10{ v12 FC8 FC3 FC8 FL FC8 Fp FC8 Fp[2] FC8} FC7 Fp FC8} BC9 Fi Fc:2 FC8 Fi} v1 Fi FC8 Fs FL FC3 FL}


void  S20678C20 ::v23(){vfunc_called(this, "_ZN9S20678C203v23Ev");}
S20678C20 ::~S20678C20(){ note_dtor("S20678C20", this);} // tgen
S20678C20 ::S20678C20(){ note_ctor("S20678C20", this);} // tgen

static void Test_S20678C20()
{
  extern Class_Descriptor cd_S20678C20;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(158,441)];
    init_test(&cd_S20678C20, buf);
    S20678C20 *dp, &lv = *(dp=new (buf) S20678C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2512,1760), "sizeof(S20678C20)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C20)");
    /*is_ambiguous_... S20678C20::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(1704,1192), "S20678C20");
    check_base_class_offset(lv, (S20677C3*)(S20678C4*), ABISELECT(1704,1192), "S20678C20");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*), ABISELECT(1704,1192), "S20678C20");
    check_base_class_offset(lv, (S20677C3*)(S20678C2*), ABISELECT(1704,1192), "S20678C20");
    /*is_ambiguous_... S20678C20::S20678C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C12*), ABISELECT(1704,1192), "S20678C20");
    /*is_ambiguous_... S20678C13::S20678C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C12*)(S20678C13*), ABISELECT(1704,1192), "S20678C20");
    /*is_ambiguous_... S20678C13::S20678C5 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C13*), ABISELECT(1568,1092), "S20678C20");
    /*is_ambiguous_... S20678C20::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C12*), ABISELECT(1568,1092), "S20678C20");
    /*is_ambiguous_... S20678C13::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C12*)(S20678C13*), ABISELECT(1568,1092), "S20678C20");
    check_base_class_offset(lv, (S20678C5*)(S20678C4*), ABISELECT(1760,1232), "S20678C20");
    check_base_class_offset(lv, (S20678C4*)(S20678C11*)(S20678C13*), ABISELECT(1760,1232), "S20678C20");
    check_base_class_offset(lv, (S20678C4*)(S20678C2*), ABISELECT(1760,1232), "S20678C20");
    check_base_class_offset(lv, (S20678C2*)(S20678C11*)(S20678C13*), ABISELECT(2168,1524), "S20678C20");
    check_base_class_offset(lv, (S20678C12*)(S20678C11*)(S20678C13*), ABISELECT(2272,1596), "S20678C20");
    check_base_class_offset(lv, (S20678C11*)(S20678C13*), 0, "S20678C20");
    /*is_ambiguous_... S20678C13::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C12*)(S20678C13*), ABISELECT(1088,752), "S20678C20");
    check_base_class_offset(lv, (S20678C13*), 0, "S20678C20");
    check_field_offset(lv, s20678c20f0, ABISELECT(1332,928), "S20678C20.s20678c20f0");
    check_field_offset(lv, s20678c20f1, ABISELECT(1336,932), "S20678C20.s20678c20f1");
    check_field_offset(lv, s20678c20f2, ABISELECT(1338,934), "S20678C20.s20678c20f2");
    check_field_offset(lv, s20678c20f3, ABISELECT(1344,936), "S20678C20.s20678c20f3");
    check_field_offset(lv, s20678c20f4, ABISELECT(1360,944), "S20678C20.s20678c20f4");
    check_field_offset(lv, s20678c20f5, ABISELECT(1552,1084), "S20678C20.s20678c20f5");
    test_class_info(&lv, &cd_S20678C20);
    dp->~S20678C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C20(Test_S20678C20, "S20678C20", ABISELECT(2512,1760));

#else // __cplusplus

extern void _ZN9S20678C20C1Ev();
extern void _ZN9S20678C20D1Ev();
Name_Map name_map_S20678C20[] = {
  NSPAIR(_ZN9S20678C20C1Ev),
  NSPAIR(_ZN9S20678C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C2;
extern VTBL_ENTRY _ZTI8S20678C2[];
extern  VTBL_ENTRY _ZTV8S20678C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C2[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C11;
extern VTBL_ENTRY _ZTI9S20678C11[];
extern  VTBL_ENTRY _ZTV9S20678C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C11[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C13;
extern VTBL_ENTRY _ZTI9S20678C13[];
extern  VTBL_ENTRY _ZTV9S20678C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C13[];
static Base_Class bases_S20678C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1704,1192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20678C5,    ABISELECT(1568,1092), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20678C5,    ABISELECT(1760,1232), //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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20678C4,    ABISELECT(1760,1232), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20678C2,    ABISELECT(2168,1524), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20678C12,    ABISELECT(2272,1596), //bcp->offset
    38, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20678C11,    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
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20678C12,    ABISELECT(1088,752), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20678C13,    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 _ZTI9S20678C20[];
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
extern void _ZN9S20678C203v23Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY vtc_S20678C20[] = {
  ABISELECT(1568,1092),
  ABISELECT(2272,1596),
  ABISELECT(2168,1524),
  ABISELECT(1704,1192),
  ABISELECT(1760,1232),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C20[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
  (VTBL_ENTRY)&_ZN9S20678C203v23Ev,
  ABISELECT(480,340),
  ABISELECT(616,440),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20678C20[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  ABISELECT(136,100),
  ABISELECT(-1568,-1092),
  (VTBL_ENTRY)&(_ZTI9S20678C20[0]),
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1760,-1232),
  (VTBL_ENTRY)&(_ZTI9S20678C20[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-2168,-1524),
  (VTBL_ENTRY)&(_ZTI9S20678C20[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2272,-1596),
  (VTBL_ENTRY)&(_ZTI9S20678C20[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
extern VTBL_ENTRY _ZTV9S20678C20[];
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C13__9S20678C20[] = {
  ABISELECT(1568,1092),
  ABISELECT(2272,1596),
  ABISELECT(2168,1524),
  ABISELECT(1704,1192),
  ABISELECT(1760,1232),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C119S20678C13__9S20678C20[] = {
  ABISELECT(1568,1092),
  ABISELECT(2272,1596),
  ABISELECT(2168,1524),
  ABISELECT(1704,1192),
  ABISELECT(1760,1232),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C119S20678C13__9S20678C20[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1760,-1232),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C119S20678C13__9S20678C20[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-2168,-1524),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C119S20678C13__9S20678C20[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2272,-1596),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C119S20678C13__9S20678C20[] = {
  ABISELECT(136,100),
  ABISELECT(-1568,-1092),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C129S20678C13__A1__9S20678C20[] = {
  ABISELECT(480,340),
  ABISELECT(616,440),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C129S20678C13__A1__9S20678C20[] = {
  ABISELECT(136,100),
  ABISELECT(-480,-340),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C13__9S20678C20[] = {
  ABISELECT(136,100),
  ABISELECT(-1568,-1092),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C13__9S20678C20[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1760,-1232),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C13__9S20678C20[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-2168,-1524),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C13__9S20678C20[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2272,-1596),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__A__9S20678C13__9S20678C20[] = {
  ABISELECT(480,340),
  ABISELECT(616,440),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C20[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C20[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C4__A1__9S20678C20[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C20[] = {
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__8S20678C2__9S20678C20[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C20[] = {
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12__9S20678C20[] = {
  ABISELECT(136,100),
  ABISELECT(704,504),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTT_ENTRY vtt_S20678C20[] = {
  {&(_ZTV9S20678C20[7]),  7,46},
  {&(_tg__ZTV9S20678C13__9S20678C20[7]),  7,9},
  {&(_tg__ZTV9S20678C119S20678C13__9S20678C20[7]),  7,9},
  {&(_tg__ZTV8S20678C4__9S20678C119S20678C13__9S20678C20[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C119S20678C13__9S20678C20[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C119S20678C13__9S20678C20[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C119S20678C13__9S20678C20[3]),  3,3},
  {&(_tg__ZTV9S20678C129S20678C13__A1__9S20678C20[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C129S20678C13__A1__9S20678C20[3]),  3,3},
  {&(_tg__ZTV8S20678C5__9S20678C13__9S20678C20[3]),  3,3},
  {&(_tg__ZTV8S20678C4__9S20678C13__9S20678C20[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C13__9S20678C20[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C13__9S20678C20[6]),  6,8},
  {&(_tg__ZTV9S20678C12__A__9S20678C13__9S20678C20[4]),  4,6},
  {&(_ZTV9S20678C20[19]),  19,46},
  {&(_ZTV9S20678C20[25]),  25,46},
  {&(_ZTV9S20678C20[35]),  35,46},
  {&(_ZTV9S20678C20[44]),  44,46},
  {&(_ZTV9S20678C20[14]),  14,46},
  {&(_tg__ZTV8S20678C5__9S20678C20[3]),  3,3},
  {&(_tg__ZTV8S20678C4__9S20678C20[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C4__A1__9S20678C20[3]),  3,3},
  {&(_tg__ZTV8S20678C2__9S20678C20[4]),  4,7},
  {&(_tg__ZTV8S20678C4__8S20678C2__9S20678C20[6]),  6,9},
  {&(_tg__ZTV9S20678C12__9S20678C20[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C12__9S20678C20[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20678C20[];
extern  VTBL_ENTRY _ZTV9S20678C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C20[];
Class_Descriptor cd_S20678C20 = {  "S20678C20", // class name
  bases_S20678C20, 9,
  &(vtc_S20678C20[0]), // expected_vtbl_contents
  &(vtt_S20678C20[0]), // expected_vtt_contents
  ABISELECT(2512,1760), // object size
  NSPAIRA(_ZTI9S20678C20),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20678C20),46, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20678C20),26, //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  S20678C21  {
  __tsi64 s20678c21f0;
  ::S20678C16 s20678c21f1;
  ::S20677C6_nt s20678c21f2;
  int s20678c21f3;
  virtual void  v24(); // _ZN9S20678C213v24Ev
  ~S20678C21(); // tgen
  S20678C21(); // tgen
};
//SIG(-1 S20678C21) C1{ v1 FL FC2{ BC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} v2 FL Fc[7] Fp Fi FC5{} FC5 Fc[10]} FC5 Fi}


void  S20678C21 ::v24(){vfunc_called(this, "_ZN9S20678C213v24Ev");}
S20678C21 ::~S20678C21(){ note_dtor("S20678C21", this);} // tgen
S20678C21 ::S20678C21(){ note_ctor("S20678C21", this);} // tgen

static void Test_S20678C21()
{
  extern Class_Descriptor cd_S20678C21;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,50)];
    init_test(&cd_S20678C21, buf);
    S20678C21 *dp, &lv = *(dp=new (buf) S20678C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S20678C21)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C21)");
    check_field_offset(lv, s20678c21f0, ABISELECT(8,4), "S20678C21.s20678c21f0");
    check_field_offset(lv, s20678c21f1, ABISELECT(16,12), "S20678C21.s20678c21f1");
    check_field_offset(lv, s20678c21f2, ABISELECT(240,188), "S20678C21.s20678c21f2");
    check_field_offset(lv, s20678c21f3, ABISELECT(244,192), "S20678C21.s20678c21f3");
    test_class_info(&lv, &cd_S20678C21);
    dp->~S20678C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C21(Test_S20678C21, "S20678C21", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN9S20678C21C1Ev();
extern void _ZN9S20678C21D1Ev();
Name_Map name_map_S20678C21[] = {
  NSPAIR(_ZN9S20678C21C1Ev),
  NSPAIR(_ZN9S20678C21D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20678C21[];
extern void _ZN9S20678C213v24Ev();
static  VTBL_ENTRY vtc_S20678C21[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C21[0]),
  (VTBL_ENTRY)&_ZN9S20678C213v24Ev,
};
extern VTBL_ENTRY _ZTI9S20678C21[];
extern  VTBL_ENTRY _ZTV9S20678C21[];
Class_Descriptor cd_S20678C21 = {  "S20678C21", // class name
  0,0,//no base classes
  &(vtc_S20678C21[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI9S20678C21),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20678C21),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  S20678C18  : virtual S20678C11 , virtual S20678C19 {
  void *s20678c18f0;
  ::S20678C20 s20678c18f1;
  void *s20678c18f2;
  __tsi64 s20678c18f3;
  int s20678c18f4;
  ::S20677C6_nt s20678c18f5;
  void *s20678c18f6;
  ::S20678C21 s20678c18f7;
  __tsi64 s20678c18f8;
  virtual void  v21(); // _ZN9S20678C183v21Ev
  ~S20678C18(); // tgen
  S20678C18(); // tgen
};
//SIG(-1 S20678C18) C1{ VBC2{ VBC3{ VBC4{ m Fp FL[4] Fs} BC5{ VBC4 FD Fi FC4 FC4} v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} VBC6{ VBC4 VBC3 v5 v6 v7 FL FC7{} Fp Fc[2] FC4 Fl FC7} VBC8{ VBC4 VBC5 v8 v9 Fi FC5 FL Fi Fp} v10 v11 FC7 FC7 Fi FC5 FC7 FC7 FC9{ v12 FC7 FC5 FC7 FL FC7 Fp FC7 Fp[2] FC7} FC6 Fp FC7} VBC10{ BC11{ BC4 FC4 Fi FD Fi FL Fl} BC8 VBC12{ BC3 VBC8 BC5 VBC9 VBC13{ BC5 v13 FL Fc[7] Fp Fi FC7 FC7 Fc[10]} v14 Fl FL FD FC7} v15 v16 v17 v18 Fp Fc[4] FC3 Fi[8] FC7 FC14{ VBC9 BC5 BC11 v21 Fp FC11 Fp Fi[2] FD Fi[2]} FC7 FD FC5[9] FD[10] Fs} v1 Fp FC15{ BC16{ VBC5 BC2 BC8 Fi Fc:2 FC7 Fi} v19 Fi FC7 Fs FL FC5 FL} Fp FL Fi FC7 Fp FC17{ v20 FL FC13 FC7 Fi} FL}


void  S20678C18 ::v21(){vfunc_called(this, "_ZN9S20678C183v21Ev");}
S20678C18 ::~S20678C18(){ note_dtor("S20678C18", this);} // tgen
S20678C18 ::S20678C18(){ note_ctor("S20678C18", this);} // tgen

static void Test_S20678C18()
{
  extern Class_Descriptor cd_S20678C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(602,1699)];
    init_test(&cd_S20678C18, buf);
    S20678C18 *dp, &lv = *(dp=new (buf) S20678C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9616,6792), "sizeof(S20678C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C18)");
    /*is_ambiguous_... S20678C18::S20678C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C4*), ABISELECT(4328,3040), "S20678C18");
    /*is_ambiguous_... S20678C18::S20678C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*), ABISELECT(4328,3040), "S20678C18");
    check_base_class_offset(lv, (S20677C3*)(S20678C2*), ABISELECT(4328,3040), "S20678C18");
    /*is_ambiguous_... S20678C18::S20678C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C12*), ABISELECT(4328,3040), "S20678C18");
    /*is_ambiguous_... S20678C18::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(4328,3040), "S20678C18");
    /*is_ambiguous_... S20678C19::S20678C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C12*)(S20678C19*), ABISELECT(4328,3040), "S20678C18");
    check_base_class_offset(lv, (S20677C3*)(S20678C4*)(S20678C15*), ABISELECT(4328,3040), "S20678C18");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*)(S20678C15*), ABISELECT(4328,3040), "S20678C18");
    /*is_ambiguous_... S20678C15::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C15*), ABISELECT(4328,3040), "S20678C18");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C16*), ABISELECT(4328,3040), "S20678C18");
    /*is_ambiguous_... S20678C18::S20678C4 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C4*), ABISELECT(3920,2748), "S20678C18");
    check_base_class_offset(lv, (S20678C4*)(S20678C11*), ABISELECT(3920,2748), "S20678C18");
    check_base_class_offset(lv, (S20678C4*)(S20678C2*), ABISELECT(3920,2748), "S20678C18");
    check_base_class_offset(lv, (S20678C2*)(S20678C11*), ABISELECT(4376,3080), "S20678C18");
    /*is_ambiguous_... S20678C18::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C12*), ABISELECT(4720,3316), "S20678C18");
    /*is_ambiguous_... S20678C19::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C12*)(S20678C19*), ABISELECT(4720,3316), "S20678C18");
    check_base_class_offset(lv, (S20678C12*)(S20678C11*), ABISELECT(4480,3152), "S20678C18");
    check_base_class_offset(lv, (S20678C12*)(S20678C15*), ABISELECT(4480,3152), "S20678C18");
    check_base_class_offset(lv, (S20678C11*), ABISELECT(2832,1996), "S20678C18");
    check_base_class_offset(lv, (S20677C3*)(S20678C9*)(S20678C19*), ABISELECT(5104,3580), "S20678C18");
    check_base_class_offset(lv, (S20678C9*)(S20678C19*), ABISELECT(5104,3580), "S20678C18");
    /*is_ambiguous_... S20678C19::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C12*)(S20678C19*), ABISELECT(4864,3416), "S20678C18");
    check_base_class_offset(lv, (S20678C5*)(S20678C4*)(S20678C15*), ABISELECT(8560,6052), "S20678C18");
    check_base_class_offset(lv, (S20678C4*)(S20678C15*), ABISELECT(8560,6052), "S20678C18");
    /*is_ambiguous_... S20678C15::S20678C5 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C15*), ABISELECT(8976,6344), "S20678C18");
    check_base_class_offset(lv, (S20678C8*)(S20678C15*), ABISELECT(9168,6472), "S20678C18");
    check_base_class_offset(lv, (S20678C5*)(S20678C16*), ABISELECT(9440,6656), "S20678C18");
    check_base_class_offset(lv, (S20678C16*)(S20678C15*), ABISELECT(9440,6656), "S20678C18");
    check_base_class_offset(lv, (S20678C15*)(S20678C19*), ABISELECT(8560,6052), "S20678C18");
    check_base_class_offset(lv, (S20678C19*), ABISELECT(4864,3416), "S20678C18");
    check_field_offset(lv, s20678c18f0, ABISELECT(8,4), "S20678C18.s20678c18f0");
    check_field_offset(lv, s20678c18f1, ABISELECT(16,8), "S20678C18.s20678c18f1");
    check_field_offset(lv, s20678c18f2, ABISELECT(2528,1768), "S20678C18.s20678c18f2");
    check_field_offset(lv, s20678c18f3, ABISELECT(2536,1772), "S20678C18.s20678c18f3");
    check_field_offset(lv, s20678c18f4, ABISELECT(2544,1780), "S20678C18.s20678c18f4");
    check_field_offset(lv, s20678c18f5, ABISELECT(2548,1784), "S20678C18.s20678c18f5");
    check_field_offset(lv, s20678c18f6, ABISELECT(2552,1788), "S20678C18.s20678c18f6");
    check_field_offset(lv, s20678c18f7, ABISELECT(2560,1792), "S20678C18.s20678c18f7");
    check_field_offset(lv, s20678c18f8, ABISELECT(2816,1988), "S20678C18.s20678c18f8");
    test_class_info(&lv, &cd_S20678C18);
    dp->~S20678C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C18(Test_S20678C18, "S20678C18", ABISELECT(9616,6792));

#else // __cplusplus

extern void _ZN9S20678C18C1Ev();
extern void _ZN9S20678C18D1Ev();
Name_Map name_map_S20678C18[] = {
  NSPAIR(_ZN9S20678C18C1Ev),
  NSPAIR(_ZN9S20678C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C2;
extern VTBL_ENTRY _ZTI8S20678C2[];
extern  VTBL_ENTRY _ZTV8S20678C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C2[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C11;
extern VTBL_ENTRY _ZTI9S20678C11[];
extern  VTBL_ENTRY _ZTV9S20678C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C11[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C9;
extern VTBL_ENTRY _ZTI8S20678C9[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C8;
extern VTBL_ENTRY _ZTI8S20678C8[];
extern  VTBL_ENTRY _ZTV8S20678C8[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C16;
extern VTBL_ENTRY _ZTI9S20678C16[];
extern  VTBL_ENTRY _ZTV9S20678C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C16[];
extern Class_Descriptor cd_S20678C15;
extern VTBL_ENTRY _ZTI9S20678C15[];
extern  VTBL_ENTRY _ZTV9S20678C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C15[];
extern Class_Descriptor cd_S20678C19;
extern VTBL_ENTRY _ZTI9S20678C19[];
extern  VTBL_ENTRY _ZTV9S20678C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C19[];
static Base_Class bases_S20678C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(4328,3040), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20678C5,    ABISELECT(3920,2748), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20678C4,    ABISELECT(3920,2748), //bcp->offset
    24, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20678C2,    ABISELECT(4376,3080), //bcp->offset
    33, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20678C5,    ABISELECT(4720,3316), //bcp->offset
    51, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20678C12,    ABISELECT(4480,3152), //bcp->offset
    43, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20678C11,    ABISELECT(2832,1996), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C3,    ABISELECT(5104,3580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20678C9,    ABISELECT(5104,3580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20678C12,    ABISELECT(4864,3416), //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
    14, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20678C5,    ABISELECT(8560,6052), //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
    11, //immediately_derived
  0, 0},
  {&cd_S20678C4,    ABISELECT(8560,6052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20678C5,    ABISELECT(8976,6344), //bcp->offset
    89, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20678C8,    ABISELECT(9168,6472), //bcp->offset
    92, //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
    16, //immediately_derived
  0, 1},
  {&cd_S20678C5,    ABISELECT(9440,6656), //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
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20678C16,    ABISELECT(9440,6656), //bcp->offset
    96, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S20678C15,    ABISELECT(8560,6052), //bcp->offset
    74, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S20678C19,    ABISELECT(4864,3416), //bcp->offset
    54, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20678C18[];
extern void _ZN9S20678C183v21Ev();
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN9S20678C193v17Ev();
extern void _ZN9S20678C193v18Ev();
extern void _ZN9S20678C193v19Ev();
extern void _ZN9S20678C193v20Ev();
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN9S20678C153v16Ev();
extern void _ZN8S20678C82v8Ev();
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY vtc_S20678C18[] = {
  ABISELECT(9440,6656),
  ABISELECT(9168,6472),
  ABISELECT(8560,6052),
  ABISELECT(4864,3416),
  ABISELECT(4720,3316),
  ABISELECT(4480,3152),
  ABISELECT(4376,3080),
  ABISELECT(4328,3040),
  ABISELECT(3920,2748),
  ABISELECT(2832,1996),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN9S20678C183v21Ev,
  0,
  0,
  ABISELECT(1888,1320),
  ABISELECT(1648,1156),
  ABISELECT(1544,1084),
  ABISELECT(1496,1044),
  ABISELECT(1088,752),
  ABISELECT(-2832,-1996),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-3920,-2748),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-4376,-3080),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-4480,-3152),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  ABISELECT(-392,-276),
  ABISELECT(-4720,-3316),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(4576,3240),
  ABISELECT(4304,3056),
  ABISELECT(-384,-264),
  ABISELECT(3696,2636),
  ABISELECT(-144,-100),
  ABISELECT(-536,-376),
  ABISELECT(-4864,-3416),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v17Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v18Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v19Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(880,604),
  ABISELECT(608,420),
  ABISELECT(-3840,-2736),
  ABISELECT(-4080,-2900),
  ABISELECT(-4232,-3012),
  ABISELECT(-8560,-6052),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20678C153v16Ev,
  ABISELECT(-4648,-3304),
  ABISELECT(-8976,-6344),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  0,
  ABISELECT(-9168,-6472),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
  0,
  ABISELECT(-5112,-3616),
  ABISELECT(-9440,-6656),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
extern VTBL_ENTRY _ZTV9S20678C18[];
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C11__9S20678C18[] = {
  ABISELECT(1888,1320),
  ABISELECT(1648,1156),
  ABISELECT(1544,1084),
  ABISELECT(1496,1044),
  ABISELECT(1088,752),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C11__9S20678C18[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C11__9S20678C18[] = {
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-1544,-1084),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C11__9S20678C18[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-1648,-1156),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C11__9S20678C18[] = {
  ABISELECT(-392,-276),
  ABISELECT(-1888,-1320),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C18[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C4__9S20678C18[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C18[] = {
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__8S20678C2__9S20678C18[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(456,332),
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C18[] = {
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12__9S20678C18[] = {
  ABISELECT(-392,-276),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C18[] = {
  ABISELECT(-392,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN9S20678C193v17Ev();
extern void _ZN9S20678C193v18Ev();
extern void _ZN9S20678C193v19Ev();
extern void _ZN9S20678C193v20Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C19__9S20678C18[] = {
  ABISELECT(4576,3240),
  ABISELECT(4304,3056),
  ABISELECT(-384,-264),
  ABISELECT(3696,2636),
  ABISELECT(-144,-100),
  ABISELECT(-536,-376),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v17Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v18Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v19Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v20Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C129S20678C19__A1__9S20678C18[] = {
  ABISELECT(-144,-100),
  ABISELECT(-536,-376),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C129S20678C19__A1__9S20678C18[] = {
  ABISELECT(-392,-276),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C19__9S20678C18[] = {
  ABISELECT(-392,-276),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN9S20678C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C15__9S20678C19__9S20678C18[] = {
  0,
  0,
  0,
  0,
  ABISELECT(880,604),
  ABISELECT(608,420),
  ABISELECT(-3840,-2736),
  ABISELECT(-4080,-2900),
  ABISELECT(-4232,-3012),
  ABISELECT(-3696,-2636),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20678C153v16Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__A1__9S20678C19__9S20678C18[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(384,264),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C59S20678C15__A2__9S20678C19__9S20678C18[] = {
  ABISELECT(-4648,-3304),
  ABISELECT(-4112,-2928),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
};
extern void _ZN8S20678C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C8__9S20678C19__9S20678C18[] = {
  0,
  ABISELECT(-4304,-3056),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
};
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C16__9S20678C19__9S20678C18[] = {
  0,
  ABISELECT(-5112,-3616),
  ABISELECT(-4576,-3240),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN9S20678C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C15__9S20678C18[] = {
  ABISELECT(880,604),
  ABISELECT(608,420),
  ABISELECT(-3840,-2736),
  ABISELECT(-4080,-2900),
  ABISELECT(-4232,-3012),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20678C153v16Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C49S20678C15__A1__9S20678C18[] = {
  ABISELECT(-4232,-3012),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C49S20678C15__A2__9S20678C18[] = {
  ABISELECT(-4232,-3012),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C59S20678C15__A3__9S20678C18[] = {
  ABISELECT(-4648,-3304),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C15__9S20678C18[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(4080,2900),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C15__9S20678C18[] = {
  ABISELECT(-392,-276),
  ABISELECT(3840,2736),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A__9S20678C15__9S20678C18[] = {
  ABISELECT(-4648,-3304),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
};
extern void _ZN8S20678C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C8__9S20678C15__9S20678C18[] = {
  0,
  ABISELECT(-608,-420),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
};
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C16__9S20678C15__9S20678C18[] = {
  0,
  ABISELECT(-5112,-3616),
  ABISELECT(-880,-604),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C16__9S20678C18[] = {
  ABISELECT(-5112,-3616),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C16[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C59S20678C16__A4__9S20678C18[] = {
  ABISELECT(-5112,-3616),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTT_ENTRY vtt_S20678C18[] = {
  {&(_ZTV9S20678C18[12]),  12,101},
  {&(_ZTV9S20678C18[22]),  22,101},
  {&(_ZTV9S20678C18[30]),  30,101},
  {&(_ZTV9S20678C18[40]),  40,101},
  {&(_ZTV9S20678C18[49]),  49,101},
  {&(_ZTV9S20678C18[54]),  54,101},
  {&(_ZTV9S20678C18[68]),  68,101},
  {&(_ZTV9S20678C18[85]),  85,101},
  {&(_ZTV9S20678C18[92]),  92,101},
  {&(_ZTV9S20678C18[95]),  95,101},
  {&(_ZTV9S20678C18[100]),  100,101},
  {&(_tg__ZTV9S20678C11__9S20678C18[7]),  7,9},
  {&(_tg__ZTV8S20678C4__9S20678C11__9S20678C18[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C11__9S20678C18[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C11__9S20678C18[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C11__9S20678C18[3]),  3,3},
  {&(_tg__ZTV8S20678C4__9S20678C18[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C4__9S20678C18[3]),  3,3},
  {&(_tg__ZTV8S20678C2__9S20678C18[4]),  4,7},
  {&(_tg__ZTV8S20678C4__8S20678C2__9S20678C18[6]),  6,9},
  {&(_tg__ZTV9S20678C12__9S20678C18[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C12__9S20678C18[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A1__9S20678C18[3]),  3,3},
  {&(_tg__ZTV9S20678C19__9S20678C18[8]),  8,14},
  {&(_tg__ZTV9S20678C129S20678C19__A1__9S20678C18[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C129S20678C19__A1__9S20678C18[3]),  3,3},
  {&(_tg__ZTV8S20678C5__9S20678C19__9S20678C18[3]),  3,3},
  {&(_tg__ZTV9S20678C15__9S20678C19__9S20678C18[11]),  11,15},
  {&(_tg__ZTV9S20678C12__A1__9S20678C19__9S20678C18[6]),  6,8},
  {&(_tg__ZTV8S20678C59S20678C15__A2__9S20678C19__9S20678C18[3]),  3,3},
  {&(_tg__ZTV8S20678C8__9S20678C19__9S20678C18[3]),  3,4},
  {&(_tg__ZTV9S20678C16__9S20678C19__9S20678C18[4]),  4,5},
  {&(_tg__ZTV9S20678C15__9S20678C18[7]),  7,11},
  {&(_tg__ZTV8S20678C49S20678C15__A1__9S20678C18[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C49S20678C15__A2__9S20678C18[3]),  3,3},
  {&(_tg__ZTV8S20678C59S20678C15__A3__9S20678C18[3]),  3,3},
  {&(_tg__ZTV9S20678C12__9S20678C15__9S20678C18[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C15__9S20678C18[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A__9S20678C15__9S20678C18[3]),  3,3},
  {&(_tg__ZTV8S20678C8__9S20678C15__9S20678C18[3]),  3,4},
  {&(_tg__ZTV9S20678C16__9S20678C15__9S20678C18[4]),  4,5},
  {&(_tg__ZTV9S20678C16__9S20678C18[3]),  3,4},
  {&(_tg__ZTV8S20678C59S20678C16__A4__9S20678C18[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20678C18[];
extern  VTBL_ENTRY _ZTV9S20678C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C18[];
Class_Descriptor cd_S20678C18 = {  "S20678C18", // class name
  bases_S20678C18, 18,
  &(vtc_S20678C18[0]), // expected_vtbl_contents
  &(vtt_S20678C18[0]), // expected_vtt_contents
  ABISELECT(9616,6792), // object size
  NSPAIRA(_ZTI9S20678C18),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20678C18),101, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20678C18),43, //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  S20678C22  : S20678C10 , S20678C5 , virtual S20678C11 {
  void *s20678c22f0;
  ::S20677C6_nt s20678c22f1;
  __tsi64 s20678c22f2;
  virtual  ~S20678C22(); // _ZN9S20678C22D2Ev
  S20678C22(); // tgen
};
//SIG(-1 S20678C22) C1{ BC2{ BC3{ VBC4{ VBC5{ m Fp FL[4] Fs} BC6{ VBC5 FD Fi FC5 FC5} v1 v2 v3 Fs FL Fc Fi[2] FC6 Fp FL Fi FL Fi} VBC7{ VBC5 VBC4 v4 v5 v6 FL FC8{} Fp Fc[2] FC5 Fl FC8} VBC9{ VBC5 VBC6 v7 v8 Fi FC6 FL Fi Fp} v9 v10 FC8 FC8 Fi FC6 FC8 FC8 FC10{ v12 FC8 FC6 FC8 FL FC8 Fp FC8 Fp[2] FC8} FC7 Fp FC8} v11 Fi[2] FC8 FC8 FC8 FC8 FC8 FC11{ VBC6 BC3 BC9 Fi Fc:2 FC8 Fi} FL[4] FC8 FC12{ BC13{ BC4 VBC9 BC6 VBC10 VBC14{ BC6 v13 FL Fc[7] Fp Fi FC8 FC8 Fc[10]} v14 Fl FL FD FC8} BC15{ VBC10 v15 FC13 FC8 FL Fi[2]} BC11 Fp FL Fi Fp Fi[3] Fc FL Fp FD}[2] Fc FC8} BC6 VBC3 vd Fp FC8 FL}


 S20678C22 ::~S20678C22(){ note_dtor("S20678C22", this);}
S20678C22 ::S20678C22(){ note_ctor("S20678C22", this);} // tgen

static void Test_S20678C22()
{
  extern Class_Descriptor cd_S20678C22;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(974,2718)];
    init_test(&cd_S20678C22, buf);
    S20678C22 *dp, &lv = *(dp=new (buf) S20678C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(15568,10868), "sizeof(S20678C22)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C22)");
    check_base_class_offset(lv, (S20677C3*)(S20678C4*), ABISELECT(13944,9740), "S20678C22");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*), ABISELECT(13944,9740), "S20678C22");
    check_base_class_offset(lv, (S20677C3*)(S20678C2*), ABISELECT(13944,9740), "S20678C22");
    check_base_class_offset(lv, (S20677C3*)(S20678C12*), ABISELECT(13944,9740), "S20678C22");
    /*is_ambiguous_... S20678C22::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(13944,9740), "S20678C22");
    /*is_ambiguous_... S20678C22::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(13944,9740), "S20678C22");
    check_base_class_offset(lv, (S20678C5*)(S20678C4*), ABISELECT(13536,9448), "S20678C22");
    check_base_class_offset(lv, (S20678C4*)(S20678C11*)(S20678C10*), ABISELECT(13536,9448), "S20678C22");
    check_base_class_offset(lv, (S20678C4*)(S20678C2*), ABISELECT(13536,9448), "S20678C22");
    /*is_ambiguous_... S20678C22::S20678C11 */ AMB_check_base_class_offset(lv, (S20678C4*)(S20678C11*), ABISELECT(13536,9448), "S20678C22");
    check_base_class_offset(lv, (S20678C2*)(S20678C11*)(S20678C10*), ABISELECT(13992,9780), "S20678C22");
    /*is_ambiguous_... S20678C22::S20678C11 */ AMB_check_base_class_offset(lv, (S20678C2*)(S20678C11*), ABISELECT(13992,9780), "S20678C22");
    check_base_class_offset(lv, (S20678C5*)(S20678C12*), ABISELECT(14336,10016), "S20678C22");
    check_base_class_offset(lv, (S20678C12*)(S20678C11*)(S20678C10*), ABISELECT(14096,9852), "S20678C22");
    /*is_ambiguous_... S20678C22::S20678C11 */ AMB_check_base_class_offset(lv, (S20678C12*)(S20678C11*), ABISELECT(14096,9852), "S20678C22");
    check_base_class_offset(lv, (S20678C11*)(S20678C10*), 0, "S20678C22");
    check_base_class_offset(lv, (S20678C10*), 0, "S20678C22");
    /*is_ambiguous_... S20678C22::S20678C5 */ AMB_check_base_class_offset(lv, (S20678C5*), ABISELECT(13376,9332), "S20678C22");
    /*is_ambiguous_... S20678C22::S20678C11 */ AMB_check_base_class_offset(lv, (S20678C11*), ABISELECT(14480,10116), "S20678C22");
    check_field_offset(lv, s20678c22f0, ABISELECT(13512,9432), "S20678C22.s20678c22f0");
    check_field_offset(lv, s20678c22f1, ABISELECT(13520,9436), "S20678C22.s20678c22f1");
    check_field_offset(lv, s20678c22f2, ABISELECT(13528,9440), "S20678C22.s20678c22f2");
    test_class_info(&lv, &cd_S20678C22);
    dp->~S20678C22();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C22(Test_S20678C22, "S20678C22", ABISELECT(15568,10868));

#else // __cplusplus

extern void _ZN9S20678C22C1Ev();
extern void _ZN9S20678C22D2Ev();
Name_Map name_map_S20678C22[] = {
  NSPAIR(_ZN9S20678C22C1Ev),
  NSPAIR(_ZN9S20678C22D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C2;
extern VTBL_ENTRY _ZTI8S20678C2[];
extern  VTBL_ENTRY _ZTV8S20678C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C2[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C11;
extern VTBL_ENTRY _ZTI9S20678C11[];
extern  VTBL_ENTRY _ZTV9S20678C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C11[];
extern Class_Descriptor cd_S20678C10;
extern VTBL_ENTRY _ZTI9S20678C10[];
extern  VTBL_ENTRY _ZTV9S20678C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C10[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C11;
extern VTBL_ENTRY _ZTI9S20678C11[];
extern  VTBL_ENTRY _ZTV9S20678C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C11[];
static Base_Class bases_S20678C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(13944,9740), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20678C5,    ABISELECT(13536,9448), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20678C4,    ABISELECT(13536,9448), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20678C2,    ABISELECT(13992,9780), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20678C5,    ABISELECT(14336,10016), //bcp->offset
    43, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20678C12,    ABISELECT(14096,9852), //bcp->offset
    35, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20678C11,    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
    7, //immediately_derived
  0, 0},
  {&cd_S20678C10,    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_S20678C5,    ABISELECT(13376,9332), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20678C11,    ABISELECT(14480,10116), //bcp->offset
    46, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20678C22[];
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
extern void _ZN9S20678C103v14Ev();
extern void _ZN9S20678C22D1Ev();
extern void _ZN9S20678C22D0Ev();
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY vtc_S20678C22[] = {
  ABISELECT(14480,10116),
  ABISELECT(14336,10016),
  ABISELECT(14096,9852),
  ABISELECT(13992,9780),
  ABISELECT(13944,9740),
  ABISELECT(13536,9448),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C22[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
  (VTBL_ENTRY)&_ZN9S20678C103v14Ev,
  (VTBL_ENTRY)&_ZN9S20678C22D1Ev,
  (VTBL_ENTRY)&_ZN9S20678C22D0Ev,
  ABISELECT(568,408),
  ABISELECT(-13376,-9332),
  (VTBL_ENTRY)&(_ZTI9S20678C22[0]),
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-13536,-9448),
  (VTBL_ENTRY)&(_ZTI9S20678C22[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-13992,-9780),
  (VTBL_ENTRY)&(_ZTI9S20678C22[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-14096,-9852),
  (VTBL_ENTRY)&(_ZTI9S20678C22[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  ABISELECT(-392,-276),
  ABISELECT(-14336,-10016),
  (VTBL_ENTRY)&(_ZTI9S20678C22[0]),
  0,
  0,
  ABISELECT(-144,-100),
  ABISELECT(-384,-264),
  ABISELECT(-488,-336),
  ABISELECT(-536,-376),
  ABISELECT(-944,-668),
  ABISELECT(-14480,-10116),
  (VTBL_ENTRY)&(_ZTI9S20678C22[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern VTBL_ENTRY _ZTV9S20678C22[];
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
extern void _ZN9S20678C103v14Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C10__9S20678C22[] = {
  ABISELECT(14336,10016),
  ABISELECT(14096,9852),
  ABISELECT(13992,9780),
  ABISELECT(13944,9740),
  ABISELECT(13536,9448),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
  (VTBL_ENTRY)&_ZN9S20678C103v14Ev,
};
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C119S20678C10__9S20678C22[] = {
  ABISELECT(14336,10016),
  ABISELECT(14096,9852),
  ABISELECT(13992,9780),
  ABISELECT(13944,9740),
  ABISELECT(13536,9448),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C119S20678C10__9S20678C22[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-13536,-9448),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C119S20678C10__9S20678C22[] = {
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-13992,-9780),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C119S20678C10__9S20678C22[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-14096,-9852),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C119S20678C10__9S20678C22[] = {
  ABISELECT(-392,-276),
  ABISELECT(-14336,-10016),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C10__9S20678C22[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-13536,-9448),
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C10__9S20678C22[] = {
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-13992,-9780),
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C10__9S20678C22[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-14096,-9852),
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C10__9S20678C22[] = {
  ABISELECT(-392,-276),
  ABISELECT(-14336,-10016),
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A__9S20678C22[] = {
  ABISELECT(568,408),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C22[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C4__9S20678C22[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C22[] = {
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__8S20678C2__9S20678C22[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(456,332),
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C22[] = {
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12__9S20678C22[] = {
  ABISELECT(-392,-276),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C22[] = {
  ABISELECT(-392,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C11__A1__9S20678C22[] = {
  ABISELECT(-144,-100),
  ABISELECT(-384,-264),
  ABISELECT(-488,-336),
  ABISELECT(-536,-376),
  ABISELECT(-944,-668),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C11__A1__9S20678C22[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(944,668),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C11__A1__9S20678C22[] = {
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(488,336),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C11__A1__9S20678C22[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(384,264),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C11__A1__9S20678C22[] = {
  ABISELECT(-392,-276),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
};
static  VTT_ENTRY vtt_S20678C22[] = {
  {&(_ZTV9S20678C22[8]),  8,57},
  {&(_tg__ZTV9S20678C10__9S20678C22[7]),  7,10},
  {&(_tg__ZTV9S20678C119S20678C10__9S20678C22[7]),  7,9},
  {&(_tg__ZTV8S20678C4__9S20678C119S20678C10__9S20678C22[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C119S20678C10__9S20678C22[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C119S20678C10__9S20678C22[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C119S20678C10__9S20678C22[3]),  3,3},
  {&(_tg__ZTV8S20678C4__9S20678C10__9S20678C22[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C10__9S20678C22[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C10__9S20678C22[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C10__9S20678C22[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A__9S20678C22[3]),  3,3},
  {&(_ZTV9S20678C22[22]),  22,57},
  {&(_ZTV9S20678C22[32]),  32,57},
  {&(_ZTV9S20678C22[41]),  41,57},
  {&(_ZTV9S20678C22[46]),  46,57},
  {&(_ZTV9S20678C22[16]),  16,57},
  {&(_ZTV9S20678C22[55]),  55,57},
  {&(_tg__ZTV8S20678C4__9S20678C22[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C4__9S20678C22[3]),  3,3},
  {&(_tg__ZTV8S20678C2__9S20678C22[4]),  4,7},
  {&(_tg__ZTV8S20678C4__8S20678C2__9S20678C22[6]),  6,9},
  {&(_tg__ZTV9S20678C12__9S20678C22[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C12__9S20678C22[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A1__9S20678C22[3]),  3,3},
  {&(_tg__ZTV9S20678C11__A1__9S20678C22[7]),  7,9},
  {&(_tg__ZTV8S20678C4__9S20678C11__A1__9S20678C22[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C11__A1__9S20678C22[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C11__A1__9S20678C22[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C11__A1__9S20678C22[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20678C22[];
extern  VTBL_ENTRY _ZTV9S20678C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C22[];
Class_Descriptor cd_S20678C22 = {  "S20678C22", // class name
  bases_S20678C22, 10,
  &(vtc_S20678C22[0]), // expected_vtbl_contents
  &(vtt_S20678C22[0]), // expected_vtt_contents
  ABISELECT(15568,10868), // object size
  NSPAIRA(_ZTI9S20678C22),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20678C22),57, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20678C22),30, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20678C1  : virtual S20678C2 , virtual S20678C7 , virtual S20678C10 , virtual S20678C18 {
  int s20678c1f0[2];
  char s20678c1f1;
  void *s20678c1f2;
  int s20678c1f3;
  ::S20678C22 s20678c1f4;
  virtual  ~S20678C1(); // _ZN8S20678C1D2Ev
  virtual void  v1(); // _ZN8S20678C12v1Ev
  S20678C1(); // tgen
};
//SIG(1 S20678C1) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} VBC4{ VBC3 BC5{ VBC3 FD Fi FC3 FC3} v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} v5 v6 v7 FL FC6{} Fp Fc[2] FC3 Fl FC6} VBC7{ VBC8{ v8 FC6 FC5 FC6 FL FC6 Fp FC6 Fp[2] FC6} BC5 BC9{ BC3 FC3 Fi FD Fi FL Fl} v9 Fp FC9 Fp Fi[2] FD Fi[2]} VBC10{ BC11{ VBC4 VBC2 VBC12{ VBC3 VBC5 v10 v11 Fi FC5 FL Fi Fp} v12 v13 FC6 FC6 Fi FC5 FC6 FC6 FC8 FC2 Fp FC6} v14 Fi[2] FC6 FC6 FC6 FC6 FC6 FC13{ VBC5 BC11 BC12 Fi Fc:2 FC6 Fi} FL[4] FC6 FC14{ BC15{ BC4 VBC12 BC5 VBC8 VBC16{ BC5 v15 FL Fc[7] Fp Fi FC6 FC6 Fc[10]} v16 Fl FL FD FC6} BC17{ VBC8 v22 FC15 FC6 FL Fi[2]} BC13 Fp FL Fi Fp Fi[3] Fc FL Fp FD}[2] Fc FC6} VBC18{ VBC11 VBC19{ BC9 BC12 VBC15 v17 v18 v19 v20 Fp Fc[4] FC4 Fi[8] FC6 FC7 FC6 FD FC5[9] FD[10] Fs} v21 Fp FC20{ BC13 v23 Fi FC6 Fs FL FC5 FL} Fp FL Fi FC6 Fp FC21{ v24 FL FC16 FC6 Fi} FL} vd v1 Fi[2] Fc Fp Fi FC22{ BC10 BC5 VBC11 vd Fp FC6 FL}}


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

static void Test_S20678C1()
{
  extern Class_Descriptor cd_S20678C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2447,6845)];
    init_test(&cd_S20678C1, buf);
    S20678C1 *dp, &lv = *(dp=new (buf) S20678C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(39136,27376), "sizeof(S20678C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C1)");
    check_base_class_offset(lv, (S20677C3*)(S20678C2*), ABISELECT(15720,10964), "S20678C1");
    /*is_ambiguous_... S20678C1::S20678C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C4*), ABISELECT(15720,10964), "S20678C1");
    /*is_ambiguous_... S20678C1::S20678C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*), ABISELECT(15720,10964), "S20678C1");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C7*), ABISELECT(15720,10964), "S20678C1");
    /*is_ambiguous_... S20678C1::S20678C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C12*), ABISELECT(15720,10964), "S20678C1");
    /*is_ambiguous_... S20678C1::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(15720,10964), "S20678C1");
    /*is_ambiguous_... S20678C19::S20678C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C12*)(S20678C19*), ABISELECT(15720,10964), "S20678C1");
    check_base_class_offset(lv, (S20677C3*)(S20678C4*)(S20678C15*), ABISELECT(15720,10964), "S20678C1");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*)(S20678C15*), ABISELECT(15720,10964), "S20678C1");
    /*is_ambiguous_... S20678C15::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C15*), ABISELECT(15720,10964), "S20678C1");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C16*), ABISELECT(15720,10964), "S20678C1");
    /*is_ambiguous_... S20678C1::S20678C4 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C4*), ABISELECT(15776,11004), "S20678C1");
    check_base_class_offset(lv, (S20678C4*)(S20678C2*), ABISELECT(15776,11004), "S20678C1");
    check_base_class_offset(lv, (S20678C4*)(S20678C11*)(S20678C10*), ABISELECT(15776,11004), "S20678C1");
    /*is_ambiguous_... S20678C1::S20678C11 */ AMB_check_base_class_offset(lv, (S20678C4*)(S20678C11*), ABISELECT(15776,11004), "S20678C1");
    check_base_class_offset(lv, (S20678C2*), ABISELECT(15616,10892), "S20678C1");
    check_base_class_offset(lv, (S20678C2*)(S20678C11*)(S20678C10*), ABISELECT(15616,10892), "S20678C1");
    /*is_ambiguous_... S20678C1::S20678C11 */ AMB_check_base_class_offset(lv, (S20678C2*)(S20678C11*), ABISELECT(15616,10892), "S20678C1");
    check_base_class_offset(lv, (S20678C8*)(S20678C7*), ABISELECT(16704,11656), "S20678C1");
    check_base_class_offset(lv, (S20678C8*)(S20678C15*), ABISELECT(16704,11656), "S20678C1");
    check_base_class_offset(lv, (S20678C5*)(S20678C7*), ABISELECT(16192,11296), "S20678C1");
    check_base_class_offset(lv, (S20677C3*)(S20678C9*)(S20678C7*), ABISELECT(16336,11396), "S20678C1");
    check_base_class_offset(lv, (S20678C9*)(S20678C7*), ABISELECT(16336,11396), "S20678C1");
    check_base_class_offset(lv, (S20678C7*), ABISELECT(16192,11296), "S20678C1");
    /*is_ambiguous_... S20678C1::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C12*), ABISELECT(30592,21336), "S20678C1");
    /*is_ambiguous_... S20678C19::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C12*)(S20678C19*), ABISELECT(30592,21336), "S20678C1");
    check_base_class_offset(lv, (S20678C12*)(S20678C11*)(S20678C10*), ABISELECT(30352,21172), "S20678C1");
    /*is_ambiguous_... S20678C1::S20678C11 */ AMB_check_base_class_offset(lv, (S20678C12*)(S20678C11*), ABISELECT(30352,21172), "S20678C1");
    check_base_class_offset(lv, (S20678C12*)(S20678C15*), ABISELECT(30352,21172), "S20678C1");
    check_base_class_offset(lv, (S20678C11*)(S20678C10*), ABISELECT(16976,11840), "S20678C1");
    check_base_class_offset(lv, (S20678C10*), ABISELECT(16976,11840), "S20678C1");
    check_base_class_offset(lv, (S20678C11*)(S20678C18*), ABISELECT(33568,23432), "S20678C1");
    check_base_class_offset(lv, (S20677C3*)(S20678C9*)(S20678C19*), ABISELECT(34896,24348), "S20678C1");
    check_base_class_offset(lv, (S20678C9*)(S20678C19*), ABISELECT(34896,24348), "S20678C1");
    /*is_ambiguous_... S20678C19::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C12*)(S20678C19*), ABISELECT(34656,24184), "S20678C1");
    check_base_class_offset(lv, (S20678C5*)(S20678C4*)(S20678C15*), ABISELECT(38352,26820), "S20678C1");
    check_base_class_offset(lv, (S20678C4*)(S20678C15*), ABISELECT(38352,26820), "S20678C1");
    /*is_ambiguous_... S20678C15::S20678C5 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C15*), ABISELECT(38768,27112), "S20678C1");
    check_base_class_offset(lv, (S20678C5*)(S20678C16*), ABISELECT(38960,27240), "S20678C1");
    check_base_class_offset(lv, (S20678C16*)(S20678C15*), ABISELECT(38960,27240), "S20678C1");
    check_base_class_offset(lv, (S20678C15*)(S20678C19*), ABISELECT(38352,26820), "S20678C1");
    check_base_class_offset(lv, (S20678C19*)(S20678C18*), ABISELECT(34656,24184), "S20678C1");
    check_base_class_offset(lv, (S20678C18*), ABISELECT(30736,21436), "S20678C1");
    check_field_offset(lv, s20678c1f0, ABISELECT(8,4), "S20678C1.s20678c1f0");
    check_field_offset(lv, s20678c1f1, ABISELECT(16,12), "S20678C1.s20678c1f1");
    check_field_offset(lv, s20678c1f2, ABISELECT(24,16), "S20678C1.s20678c1f2");
    check_field_offset(lv, s20678c1f3, ABISELECT(32,20), "S20678C1.s20678c1f3");
    check_field_offset(lv, s20678c1f4, ABISELECT(48,24), "S20678C1.s20678c1f4");
    test_class_info(&lv, &cd_S20678C1);
    dp->~S20678C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C1(Test_S20678C1, "S20678C1", ABISELECT(39136,27376));

#else // __cplusplus

extern void _ZN8S20678C1C1Ev();
extern void _ZN8S20678C1D2Ev();
Name_Map name_map_S20678C1[] = {
  NSPAIR(_ZN8S20678C1C1Ev),
  NSPAIR(_ZN8S20678C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C2;
extern VTBL_ENTRY _ZTI8S20678C2[];
extern  VTBL_ENTRY _ZTV8S20678C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C2[];
extern Class_Descriptor cd_S20678C8;
extern VTBL_ENTRY _ZTI8S20678C8[];
extern  VTBL_ENTRY _ZTV8S20678C8[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C9;
extern VTBL_ENTRY _ZTI8S20678C9[];
extern Class_Descriptor cd_S20678C7;
extern VTBL_ENTRY _ZTI8S20678C7[];
extern  VTBL_ENTRY _ZTV8S20678C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C7[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C11;
extern VTBL_ENTRY _ZTI9S20678C11[];
extern  VTBL_ENTRY _ZTV9S20678C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C11[];
extern Class_Descriptor cd_S20678C10;
extern VTBL_ENTRY _ZTI9S20678C10[];
extern  VTBL_ENTRY _ZTV9S20678C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C10[];
extern Class_Descriptor cd_S20678C11;
extern VTBL_ENTRY _ZTI9S20678C11[];
extern  VTBL_ENTRY _ZTV9S20678C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C11[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C9;
extern VTBL_ENTRY _ZTI8S20678C9[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C16;
extern VTBL_ENTRY _ZTI9S20678C16[];
extern  VTBL_ENTRY _ZTV9S20678C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C16[];
extern Class_Descriptor cd_S20678C15;
extern VTBL_ENTRY _ZTI9S20678C15[];
extern  VTBL_ENTRY _ZTV9S20678C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C15[];
extern Class_Descriptor cd_S20678C19;
extern VTBL_ENTRY _ZTI9S20678C19[];
extern  VTBL_ENTRY _ZTV9S20678C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C19[];
extern Class_Descriptor cd_S20678C18;
extern VTBL_ENTRY _ZTI9S20678C18[];
extern  VTBL_ENTRY _ZTV9S20678C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C18[];
static Base_Class bases_S20678C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(15720,10964), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20678C5,    ABISELECT(15776,11004), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20678C4,    ABISELECT(15776,11004), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20678C2,    ABISELECT(15616,10892), //bcp->offset
    18, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20678C8,    ABISELECT(16704,11656), //bcp->offset
    43, //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
    8, //immediately_derived
  0, 1},
  {&cd_S20678C5,    ABISELECT(16192,11296), //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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20677C3,    ABISELECT(16336,11396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20678C9,    ABISELECT(16336,11396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20678C7,    ABISELECT(16192,11296), //bcp->offset
    37, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20678C5,    ABISELECT(30592,21336), //bcp->offset
    68, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20678C12,    ABISELECT(30352,21172), //bcp->offset
    60, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20678C11,    ABISELECT(16976,11840), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20678C10,    ABISELECT(16976,11840), //bcp->offset
    47, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20678C11,    ABISELECT(33568,23432), //bcp->offset
    85, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S20677C3,    ABISELECT(34896,24348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20678C9,    ABISELECT(34896,24348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20678C12,    ABISELECT(34656,24184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20678C5,    ABISELECT(38352,26820), //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
    14, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20678C4,    ABISELECT(38352,26820), //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
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20678C5,    ABISELECT(38768,27112), //bcp->offset
    131, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20678C5,    ABISELECT(38960,27240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20678C16,    ABISELECT(38960,27240), //bcp->offset
    134, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S20678C15,    ABISELECT(38352,26820), //bcp->offset
    116, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S20678C19,    ABISELECT(34656,24184), //bcp->offset
    96, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S20678C18,    ABISELECT(30736,21436), //bcp->offset
    71, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20678C1[];
extern void _ZN8S20678C1D1Ev();
extern void _ZN8S20678C1D0Ev();
extern void _ZN8S20678C12v1Ev();
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN8S20678C72v9Ev();
extern void _ZN8S20678C82v8Ev();
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
extern void _ZN9S20678C103v14Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN9S20678C183v21Ev();
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN9S20678C193v17Ev();
extern void _ZN9S20678C193v18Ev();
extern void _ZN9S20678C193v19Ev();
extern void _ZN9S20678C193v20Ev();
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN9S20678C153v16Ev();
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY vtc_S20678C1[] = {
  ABISELECT(38960,27240),
  ABISELECT(38352,26820),
  ABISELECT(34656,24184),
  ABISELECT(33568,23432),
  ABISELECT(30736,21436),
  ABISELECT(30592,21336),
  ABISELECT(30352,21172),
  ABISELECT(16976,11840),
  ABISELECT(16704,11656),
  ABISELECT(16192,11296),
  ABISELECT(15776,11004),
  ABISELECT(15720,10964),
  ABISELECT(15616,10892),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  (VTBL_ENTRY)&_ZN8S20678C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20678C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20678C12v1Ev,
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(-15616,-10892),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-15776,-11004),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  0,
  ABISELECT(512,360),
  ABISELECT(-472,-332),
  ABISELECT(-16192,-11296),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  (VTBL_ENTRY)&_ZN8S20678C72v9Ev,
  0,
  ABISELECT(-16704,-11656),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
  0,
  0,
  0,
  ABISELECT(13616,9496),
  ABISELECT(13376,9332),
  ABISELECT(-1360,-948),
  ABISELECT(-1256,-876),
  ABISELECT(-1200,-836),
  ABISELECT(-16976,-11840),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
  (VTBL_ENTRY)&_ZN9S20678C103v14Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10208),
  ABISELECT(-30352,-21172),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  ABISELECT(-14872,-10372),
  ABISELECT(-30592,-21336),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  0,
  ABISELECT(8224,5804),
  ABISELECT(-14032,-9780),
  ABISELECT(7616,5384),
  ABISELECT(3920,2748),
  ABISELECT(-144,-100),
  ABISELECT(-384,-264),
  ABISELECT(-15120,-10544),
  ABISELECT(-15016,-10472),
  ABISELECT(-14960,-10432),
  ABISELECT(2832,1996),
  ABISELECT(-30736,-21436),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  (VTBL_ENTRY)&_ZN9S20678C183v21Ev,
  0,
  0,
  ABISELECT(-2976,-2096),
  ABISELECT(-3216,-2260),
  ABISELECT(-17952,-12540),
  ABISELECT(-17848,-12468),
  ABISELECT(-17792,-12428),
  ABISELECT(-33568,-23432),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(4304,3056),
  ABISELECT(-17952,-12528),
  ABISELECT(-4304,-3012),
  ABISELECT(3696,2636),
  ABISELECT(-4064,-2848),
  ABISELECT(-18936,-13220),
  ABISELECT(-34656,-24184),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v17Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v18Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v19Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(608,420),
  ABISELECT(-21648,-15164),
  ABISELECT(-7760,-5484),
  ABISELECT(-8000,-5648),
  ABISELECT(-22632,-15856),
  ABISELECT(-38352,-26820),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20678C153v16Ev,
  ABISELECT(-23048,-16148),
  ABISELECT(-38768,-27112),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  0,
  ABISELECT(-23240,-16276),
  ABISELECT(-38960,-27240),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
extern VTBL_ENTRY _ZTV8S20678C1[];
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__8S20678C1[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__8S20678C2__8S20678C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__8S20678C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C4__8S20678C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C72v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C7__8S20678C1[] = {
  ABISELECT(512,360),
  ABISELECT(-472,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C7[0]),
  (VTBL_ENTRY)&_ZN8S20678C72v9Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C7__A1__8S20678C1[] = {
  ABISELECT(-472,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C8__8S20678C7__8S20678C1[] = {
  0,
  ABISELECT(-512,-360),
  (VTBL_ENTRY)&(_ZTI8S20678C7[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
};
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
extern void _ZN9S20678C103v14Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C10__8S20678C1[] = {
  ABISELECT(13616,9496),
  ABISELECT(13376,9332),
  ABISELECT(-1360,-948),
  ABISELECT(-1256,-876),
  ABISELECT(-1200,-836),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
  (VTBL_ENTRY)&_ZN9S20678C103v14Ev,
};
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C119S20678C10__8S20678C1[] = {
  ABISELECT(13616,9496),
  ABISELECT(13376,9332),
  ABISELECT(-1360,-948),
  ABISELECT(-1256,-876),
  ABISELECT(-1200,-836),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C119S20678C10__8S20678C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(1200,836),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C119S20678C10__8S20678C1[] = {
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(1360,948),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C119S20678C10__8S20678C1[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10208),
  ABISELECT(-13376,-9332),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C119S20678C10__8S20678C1[] = {
  ABISELECT(-14872,-10372),
  ABISELECT(-13616,-9496),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C10__8S20678C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(1200,836),
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C10__8S20678C1[] = {
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(1360,948),
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C10__8S20678C1[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10208),
  ABISELECT(-13376,-9332),
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C10__8S20678C1[] = {
  ABISELECT(-14872,-10372),
  ABISELECT(-13616,-9496),
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__8S20678C1[] = {
  ABISELECT(240,164),
  ABISELECT(-14632,-10208),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12__8S20678C1[] = {
  ABISELECT(-14872,-10372),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A2__8S20678C1[] = {
  ABISELECT(-14872,-10372),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN9S20678C183v21Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C18__8S20678C1[] = {
  ABISELECT(8224,5804),
  ABISELECT(-14032,-9780),
  ABISELECT(7616,5384),
  ABISELECT(3920,2748),
  ABISELECT(-144,-100),
  ABISELECT(-384,-264),
  ABISELECT(-15120,-10544),
  ABISELECT(-15016,-10472),
  ABISELECT(-14960,-10432),
  ABISELECT(2832,1996),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN9S20678C183v21Ev,
};
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C11__9S20678C18__8S20678C1[] = {
  0,
  0,
  ABISELECT(-2976,-2096),
  ABISELECT(-3216,-2260),
  ABISELECT(-17952,-12540),
  ABISELECT(-17848,-12468),
  ABISELECT(-17792,-12428),
  ABISELECT(-2832,-1996),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C18__8S20678C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(14960,10432),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C18__8S20678C1[] = {
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(15120,10544),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C18__8S20678C1[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10208),
  ABISELECT(384,264),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C18__8S20678C1[] = {
  ABISELECT(-14872,-10372),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN9S20678C193v17Ev();
extern void _ZN9S20678C193v18Ev();
extern void _ZN9S20678C193v19Ev();
extern void _ZN9S20678C193v20Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C19__9S20678C18__8S20678C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(4304,3056),
  ABISELECT(-17952,-12528),
  ABISELECT(-4304,-3012),
  ABISELECT(3696,2636),
  ABISELECT(-4064,-2848),
  ABISELECT(-18936,-13220),
  ABISELECT(-3920,-2748),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v17Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v18Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v19Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v20Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN9S20678C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C15__9S20678C18__8S20678C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(608,420),
  ABISELECT(-21648,-15164),
  ABISELECT(-7760,-5484),
  ABISELECT(-8000,-5648),
  ABISELECT(-22632,-15856),
  ABISELECT(-7616,-5384),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20678C153v16Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C59S20678C15__A3__9S20678C18__8S20678C1[] = {
  ABISELECT(-23048,-16148),
  ABISELECT(-8032,-5676),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
};
extern void _ZN8S20678C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C8__9S20678C18__8S20678C1[] = {
  0,
  ABISELECT(14032,9780),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
};
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C16__9S20678C18__8S20678C1[] = {
  0,
  ABISELECT(-23240,-16276),
  ABISELECT(-8224,-5804),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C11__A1__8S20678C1[] = {
  ABISELECT(-2976,-2096),
  ABISELECT(-3216,-2260),
  ABISELECT(-17952,-12540),
  ABISELECT(-17848,-12468),
  ABISELECT(-17792,-12428),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C11__A1__8S20678C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(17792,12428),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C11__A1__8S20678C1[] = {
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(17952,12540),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C11__A1__8S20678C1[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10208),
  ABISELECT(3216,2260),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C11__A1__8S20678C1[] = {
  ABISELECT(-14872,-10372),
  ABISELECT(2976,2096),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN9S20678C193v17Ev();
extern void _ZN9S20678C193v18Ev();
extern void _ZN9S20678C193v19Ev();
extern void _ZN9S20678C193v20Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C19__8S20678C1[] = {
  ABISELECT(4304,3056),
  ABISELECT(-17952,-12528),
  ABISELECT(-4304,-3012),
  ABISELECT(3696,2636),
  ABISELECT(-4064,-2848),
  ABISELECT(-18936,-13220),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v17Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v18Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v19Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v20Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C129S20678C19__A1__8S20678C1[] = {
  ABISELECT(-4064,-2848),
  ABISELECT(-18936,-13220),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C129S20678C19__A1__8S20678C1[] = {
  ABISELECT(-14872,-10372),
  ABISELECT(4064,2848),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C19__8S20678C1[] = {
  ABISELECT(-14872,-10372),
  ABISELECT(4064,2848),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN9S20678C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C15__9S20678C19__8S20678C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(608,420),
  ABISELECT(-21648,-15164),
  ABISELECT(-7760,-5484),
  ABISELECT(-8000,-5648),
  ABISELECT(-22632,-15856),
  ABISELECT(-3696,-2636),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20678C153v16Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__A1__9S20678C19__8S20678C1[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10208),
  ABISELECT(4304,3012),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C59S20678C15__A2__9S20678C19__8S20678C1[] = {
  ABISELECT(-23048,-16148),
  ABISELECT(-4112,-2928),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
};
extern void _ZN8S20678C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C8__9S20678C19__8S20678C1[] = {
  0,
  ABISELECT(17952,12528),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
};
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C16__9S20678C19__8S20678C1[] = {
  0,
  ABISELECT(-23240,-16276),
  ABISELECT(-4304,-3056),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN9S20678C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C15__8S20678C1[] = {
  ABISELECT(608,420),
  ABISELECT(-21648,-15164),
  ABISELECT(-7760,-5484),
  ABISELECT(-8000,-5648),
  ABISELECT(-22632,-15856),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20678C153v16Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C49S20678C15__A1__8S20678C1[] = {
  ABISELECT(-22632,-15856),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C49S20678C15__A3__8S20678C1[] = {
  ABISELECT(-22632,-15856),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C59S20678C15__A4__8S20678C1[] = {
  ABISELECT(-23048,-16148),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C15__8S20678C1[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10208),
  ABISELECT(8000,5648),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C15__8S20678C1[] = {
  ABISELECT(-14872,-10372),
  ABISELECT(7760,5484),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A__9S20678C15__8S20678C1[] = {
  ABISELECT(-23048,-16148),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
};
extern void _ZN8S20678C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C8__9S20678C15__8S20678C1[] = {
  0,
  ABISELECT(21648,15164),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
};
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C16__9S20678C15__8S20678C1[] = {
  0,
  ABISELECT(-23240,-16276),
  ABISELECT(-608,-420),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C16__8S20678C1[] = {
  ABISELECT(-23240,-16276),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C16[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C59S20678C16__A5__8S20678C1[] = {
  ABISELECT(-23240,-16276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTT_ENTRY vtt_S20678C1[] = {
  {&(_ZTV8S20678C1[15]),  15,139},
  {&(_ZTV8S20678C1[25]),  25,139},
  {&(_ZTV8S20678C1[34]),  34,139},
  {&(_ZTV8S20678C1[42]),  42,139},
  {&(_ZTV8S20678C1[46]),  46,139},
  {&(_ZTV8S20678C1[57]),  57,139},
  {&(_ZTV8S20678C1[66]),  66,139},
  {&(_ZTV8S20678C1[71]),  71,139},
  {&(_ZTV8S20678C1[84]),  84,139},
  {&(_ZTV8S20678C1[94]),  94,139},
  {&(_ZTV8S20678C1[110]),  110,139},
  {&(_ZTV8S20678C1[127]),  127,139},
  {&(_ZTV8S20678C1[134]),  134,139},
  {&(_ZTV8S20678C1[138]),  138,139},
  {&(_tg__ZTV8S20678C2__8S20678C1[4]),  4,7},
  {&(_tg__ZTV8S20678C4__8S20678C2__8S20678C1[6]),  6,9},
  {&(_tg__ZTV8S20678C4__8S20678C1[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C4__8S20678C1[3]),  3,3},
  {&(_tg__ZTV8S20678C7__8S20678C1[4]),  4,5},
  {&(_tg__ZTV8S20678C58S20678C7__A1__8S20678C1[3]),  3,3},
  {&(_tg__ZTV8S20678C8__8S20678C7__8S20678C1[3]),  3,4},
  {&(_tg__ZTV9S20678C10__8S20678C1[7]),  7,10},
  {&(_tg__ZTV9S20678C119S20678C10__8S20678C1[7]),  7,9},
  {&(_tg__ZTV8S20678C4__9S20678C119S20678C10__8S20678C1[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C119S20678C10__8S20678C1[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C119S20678C10__8S20678C1[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C119S20678C10__8S20678C1[3]),  3,3},
  {&(_tg__ZTV8S20678C4__9S20678C10__8S20678C1[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C10__8S20678C1[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C10__8S20678C1[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C10__8S20678C1[3]),  3,3},
  {&(_tg__ZTV9S20678C12__8S20678C1[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C12__8S20678C1[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A2__8S20678C1[3]),  3,3},
  {&(_tg__ZTV9S20678C18__8S20678C1[12]),  12,13},
  {&(_tg__ZTV9S20678C11__9S20678C18__8S20678C1[9]),  9,11},
  {&(_tg__ZTV8S20678C4__9S20678C18__8S20678C1[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C18__8S20678C1[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C18__8S20678C1[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C18__8S20678C1[3]),  3,3},
  {&(_tg__ZTV9S20678C19__9S20678C18__8S20678C1[14]),  14,20},
  {&(_tg__ZTV9S20678C15__9S20678C18__8S20678C1[11]),  11,15},
  {&(_tg__ZTV8S20678C59S20678C15__A3__9S20678C18__8S20678C1[3]),  3,3},
  {&(_tg__ZTV8S20678C8__9S20678C18__8S20678C1[3]),  3,4},
  {&(_tg__ZTV9S20678C16__9S20678C18__8S20678C1[4]),  4,5},
  {&(_tg__ZTV9S20678C11__A1__8S20678C1[7]),  7,9},
  {&(_tg__ZTV8S20678C4__9S20678C11__A1__8S20678C1[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C11__A1__8S20678C1[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C11__A1__8S20678C1[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C11__A1__8S20678C1[3]),  3,3},
  {&(_tg__ZTV9S20678C19__8S20678C1[8]),  8,14},
  {&(_tg__ZTV9S20678C129S20678C19__A1__8S20678C1[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C129S20678C19__A1__8S20678C1[3]),  3,3},
  {&(_tg__ZTV8S20678C5__9S20678C19__8S20678C1[3]),  3,3},
  {&(_tg__ZTV9S20678C15__9S20678C19__8S20678C1[11]),  11,15},
  {&(_tg__ZTV9S20678C12__A1__9S20678C19__8S20678C1[6]),  6,8},
  {&(_tg__ZTV8S20678C59S20678C15__A2__9S20678C19__8S20678C1[3]),  3,3},
  {&(_tg__ZTV8S20678C8__9S20678C19__8S20678C1[3]),  3,4},
  {&(_tg__ZTV9S20678C16__9S20678C19__8S20678C1[4]),  4,5},
  {&(_tg__ZTV9S20678C15__8S20678C1[7]),  7,11},
  {&(_tg__ZTV8S20678C49S20678C15__A1__8S20678C1[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C49S20678C15__A3__8S20678C1[3]),  3,3},
  {&(_tg__ZTV8S20678C59S20678C15__A4__8S20678C1[3]),  3,3},
  {&(_tg__ZTV9S20678C12__9S20678C15__8S20678C1[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C15__8S20678C1[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A__9S20678C15__8S20678C1[3]),  3,3},
  {&(_tg__ZTV8S20678C8__9S20678C15__8S20678C1[3]),  3,4},
  {&(_tg__ZTV9S20678C16__9S20678C15__8S20678C1[4]),  4,5},
  {&(_tg__ZTV9S20678C16__8S20678C1[3]),  3,4},
  {&(_tg__ZTV8S20678C59S20678C16__A5__8S20678C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20678C1[];
extern  VTBL_ENTRY _ZTV8S20678C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C1[];
Class_Descriptor cd_S20678C1 = {  "S20678C1", // class name
  bases_S20678C1, 25,
  &(vtc_S20678C1[0]), // expected_vtbl_contents
  &(vtt_S20678C1[0]), // expected_vtt_contents
  ABISELECT(39136,27376), // object size
  NSPAIRA(_ZTI8S20678C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20678C1),139, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20678C1),70, //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  S210C6  {
  int s210c6f0;
  __tsi64 s210c6f1;
  void *s210c6f2[4];
  int s210c6f3[2];
  void *s210c6f4;
  ::S1503C5_nt s210c6f5;
  void *s210c6f6[2];
  virtual  ~S210C6(); // _ZN6S210C6D1Ev
  virtual void  v4(); // _ZN6S210C62v4Ev
  virtual void  v5(); // _ZN6S210C62v5Ev
  virtual void  v6(); // _ZN6S210C62v6Ev
  virtual void  v7(); // _ZN6S210C62v7Ev
  virtual void  v8(); // _ZN6S210C62v8Ev
  virtual void  v9(); // _ZN6S210C62v9Ev
  virtual void  v10(); // _ZN6S210C63v10Ev
  virtual void  v11(); // _ZN6S210C63v11Ev
  virtual void  v12(); // _ZN6S210C63v12Ev
  virtual void  v13(); // _ZN6S210C63v13Ev
  virtual void  v14(); // _ZN6S210C63v14Ev
  virtual void  v15(); // _ZN6S210C63v15Ev
  virtual void  v16(); // _ZN6S210C63v16Ev
  virtual void  v17(); // _ZN6S210C63v17Ev
  virtual void  v18(); // _ZN6S210C63v18Ev
  virtual void  v19(); // _ZN6S210C63v19Ev
  virtual void  v20(); // _ZN6S210C63v20Ev
  virtual void  v21(); // _ZN6S210C63v21Ev
  virtual void  v22(); // _ZN6S210C63v22Ev
  virtual void  v23(); // _ZN6S210C63v23Ev
  virtual void  v24(); // _ZN6S210C63v24Ev
  virtual void  v25(); // _ZN6S210C63v25Ev
  virtual void  v26(); // _ZN6S210C63v26Ev
  virtual void  v27(); // _ZN6S210C63v27Ev
  virtual void  v28(); // _ZN6S210C63v28Ev
  virtual void  v29(); // _ZN6S210C63v29Ev
  virtual void  v30(); // _ZN6S210C63v30Ev
  virtual void  v31(); // _ZN6S210C63v31Ev
  virtual void  v32(); // _ZN6S210C63v32Ev
  virtual void  v33(); // _ZN6S210C63v33Ev
  virtual void  v34(); // _ZN6S210C63v34Ev
  virtual void  v35(); // _ZN6S210C63v35Ev
  virtual void  v36(); // _ZN6S210C63v36Ev
  virtual void  v37(); // _ZN6S210C63v37Ev
  virtual void  v38(); // _ZN6S210C63v38Ev
  virtual void  v39(); // _ZN6S210C63v39Ev
  virtual void  v40(); // _ZN6S210C63v40Ev
  virtual void  v41(); // _ZN6S210C63v41Ev
  virtual void  v42(); // _ZN6S210C63v42Ev
  virtual void  v43(); // _ZN6S210C63v43Ev
  virtual void  v44(); // _ZN6S210C63v44Ev
  virtual void  v45(); // _ZN6S210C63v45Ev
  virtual void  v46(); // _ZN6S210C63v46Ev
  virtual void  v47(); // _ZN6S210C63v47Ev
  virtual void  v48(); // _ZN6S210C63v48Ev
  virtual void  v49(); // _ZN6S210C63v49Ev
  virtual void  v50(); // _ZN6S210C63v50Ev
  virtual void  v51(); // _ZN6S210C63v51Ev
  virtual void  v52(); // _ZN6S210C63v52Ev
  virtual void  v53(); // _ZN6S210C63v53Ev
  virtual void  v54(); // _ZN6S210C63v54Ev
  virtual void  v55(); // _ZN6S210C63v55Ev
  virtual void  v56(); // _ZN6S210C63v56Ev
  virtual void  v57(); // _ZN6S210C63v57Ev
  virtual void  v58(); // _ZN6S210C63v58Ev
  virtual void  v59(); // _ZN6S210C63v59Ev
  virtual void  v60(); // _ZN6S210C63v60Ev
  virtual void  v61(); // _ZN6S210C63v61Ev
  virtual void  v62(); // _ZN6S210C63v62Ev
  virtual void  v63(); // _ZN6S210C63v63Ev
  virtual void  v64(); // _ZN6S210C63v64Ev
  virtual void  v65(); // _ZN6S210C63v65Ev
  virtual void  v66(); // _ZN6S210C63v66Ev
  virtual void  v67(); // _ZN6S210C63v67Ev
  S210C6(); // tgen
};
//SIG(-1 S210C6) 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]}


 S210C6 ::~S210C6(){ note_dtor("S210C6", this);}
void  S210C6 ::v4(){vfunc_called(this, "_ZN6S210C62v4Ev");}
void  S210C6 ::v5(){vfunc_called(this, "_ZN6S210C62v5Ev");}
void  S210C6 ::v6(){vfunc_called(this, "_ZN6S210C62v6Ev");}
void  S210C6 ::v7(){vfunc_called(this, "_ZN6S210C62v7Ev");}
void  S210C6 ::v8(){vfunc_called(this, "_ZN6S210C62v8Ev");}
void  S210C6 ::v9(){vfunc_called(this, "_ZN6S210C62v9Ev");}
void  S210C6 ::v10(){vfunc_called(this, "_ZN6S210C63v10Ev");}
void  S210C6 ::v11(){vfunc_called(this, "_ZN6S210C63v11Ev");}
void  S210C6 ::v12(){vfunc_called(this, "_ZN6S210C63v12Ev");}
void  S210C6 ::v13(){vfunc_called(this, "_ZN6S210C63v13Ev");}
void  S210C6 ::v14(){vfunc_called(this, "_ZN6S210C63v14Ev");}
void  S210C6 ::v15(){vfunc_called(this, "_ZN6S210C63v15Ev");}
void  S210C6 ::v16(){vfunc_called(this, "_ZN6S210C63v16Ev");}
void  S210C6 ::v17(){vfunc_called(this, "_ZN6S210C63v17Ev");}
void  S210C6 ::v18(){vfunc_called(this, "_ZN6S210C63v18Ev");}
void  S210C6 ::v19(){vfunc_called(this, "_ZN6S210C63v19Ev");}
void  S210C6 ::v20(){vfunc_called(this, "_ZN6S210C63v20Ev");}
void  S210C6 ::v21(){vfunc_called(this, "_ZN6S210C63v21Ev");}
void  S210C6 ::v22(){vfunc_called(this, "_ZN6S210C63v22Ev");}
void  S210C6 ::v23(){vfunc_called(this, "_ZN6S210C63v23Ev");}
void  S210C6 ::v24(){vfunc_called(this, "_ZN6S210C63v24Ev");}
void  S210C6 ::v25(){vfunc_called(this, "_ZN6S210C63v25Ev");}
void  S210C6 ::v26(){vfunc_called(this, "_ZN6S210C63v26Ev");}
void  S210C6 ::v27(){vfunc_called(this, "_ZN6S210C63v27Ev");}
void  S210C6 ::v28(){vfunc_called(this, "_ZN6S210C63v28Ev");}
void  S210C6 ::v29(){vfunc_called(this, "_ZN6S210C63v29Ev");}
void  S210C6 ::v30(){vfunc_called(this, "_ZN6S210C63v30Ev");}
void  S210C6 ::v31(){vfunc_called(this, "_ZN6S210C63v31Ev");}
void  S210C6 ::v32(){vfunc_called(this, "_ZN6S210C63v32Ev");}
void  S210C6 ::v33(){vfunc_called(this, "_ZN6S210C63v33Ev");}
void  S210C6 ::v34(){vfunc_called(this, "_ZN6S210C63v34Ev");}
void  S210C6 ::v35(){vfunc_called(this, "_ZN6S210C63v35Ev");}
void  S210C6 ::v36(){vfunc_called(this, "_ZN6S210C63v36Ev");}
void  S210C6 ::v37(){vfunc_called(this, "_ZN6S210C63v37Ev");}
void  S210C6 ::v38(){vfunc_called(this, "_ZN6S210C63v38Ev");}
void  S210C6 ::v39(){vfunc_called(this, "_ZN6S210C63v39Ev");}
void  S210C6 ::v40(){vfunc_called(this, "_ZN6S210C63v40Ev");}
void  S210C6 ::v41(){vfunc_called(this, "_ZN6S210C63v41Ev");}
void  S210C6 ::v42(){vfunc_called(this, "_ZN6S210C63v42Ev");}
void  S210C6 ::v43(){vfunc_called(this, "_ZN6S210C63v43Ev");}
void  S210C6 ::v44(){vfunc_called(this, "_ZN6S210C63v44Ev");}
void  S210C6 ::v45(){vfunc_called(this, "_ZN6S210C63v45Ev");}
void  S210C6 ::v46(){vfunc_called(this, "_ZN6S210C63v46Ev");}
void  S210C6 ::v47(){vfunc_called(this, "_ZN6S210C63v47Ev");}
void  S210C6 ::v48(){vfunc_called(this, "_ZN6S210C63v48Ev");}
void  S210C6 ::v49(){vfunc_called(this, "_ZN6S210C63v49Ev");}
void  S210C6 ::v50(){vfunc_called(this, "_ZN6S210C63v50Ev");}
void  S210C6 ::v51(){vfunc_called(this, "_ZN6S210C63v51Ev");}
void  S210C6 ::v52(){vfunc_called(this, "_ZN6S210C63v52Ev");}
void  S210C6 ::v53(){vfunc_called(this, "_ZN6S210C63v53Ev");}
void  S210C6 ::v54(){vfunc_called(this, "_ZN6S210C63v54Ev");}
void  S210C6 ::v55(){vfunc_called(this, "_ZN6S210C63v55Ev");}
void  S210C6 ::v56(){vfunc_called(this, "_ZN6S210C63v56Ev");}
void  S210C6 ::v57(){vfunc_called(this, "_ZN6S210C63v57Ev");}
void  S210C6 ::v58(){vfunc_called(this, "_ZN6S210C63v58Ev");}
void  S210C6 ::v59(){vfunc_called(this, "_ZN6S210C63v59Ev");}
void  S210C6 ::v60(){vfunc_called(this, "_ZN6S210C63v60Ev");}
void  S210C6 ::v61(){vfunc_called(this, "_ZN6S210C63v61Ev");}
void  S210C6 ::v62(){vfunc_called(this, "_ZN6S210C63v62Ev");}
void  S210C6 ::v63(){vfunc_called(this, "_ZN6S210C63v63Ev");}
void  S210C6 ::v64(){vfunc_called(this, "_ZN6S210C63v64Ev");}
void  S210C6 ::v65(){vfunc_called(this, "_ZN6S210C63v65Ev");}
void  S210C6 ::v66(){vfunc_called(this, "_ZN6S210C63v66Ev");}
void  S210C6 ::v67(){vfunc_called(this, "_ZN6S210C63v67Ev");}
S210C6 ::S210C6(){ note_ctor("S210C6", this);} // tgen

static void Test_S210C6()
{
  extern Class_Descriptor cd_S210C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S210C6, buf);
    S210C6 *dp, &lv = *(dp=new (buf) S210C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S210C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S210C6)");
    check_field_offset(lv, s210c6f0, ABISELECT(8,4), "S210C6.s210c6f0");
    check_field_offset(lv, s210c6f1, ABISELECT(16,8), "S210C6.s210c6f1");
    check_field_offset(lv, s210c6f2, ABISELECT(24,16), "S210C6.s210c6f2");
    check_field_offset(lv, s210c6f3, ABISELECT(56,32), "S210C6.s210c6f3");
    check_field_offset(lv, s210c6f4, ABISELECT(64,40), "S210C6.s210c6f4");
    check_field_offset(lv, s210c6f5, ABISELECT(72,44), "S210C6.s210c6f5");
    check_field_offset(lv, s210c6f6, ABISELECT(80,52), "S210C6.s210c6f6");
    test_class_info(&lv, &cd_S210C6);
    dp->~S210C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS210C6(Test_S210C6, "S210C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S210C6C1Ev();
extern void _ZN6S210C6D1Ev();
Name_Map name_map_S210C6[] = {
  NSPAIR(_ZN6S210C6C1Ev),
  NSPAIR(_ZN6S210C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S210C6[];
extern void _ZN6S210C6D1Ev();
extern void _ZN6S210C6D0Ev();
extern void _ZN6S210C62v4Ev();
extern void _ZN6S210C62v5Ev();
extern void _ZN6S210C62v6Ev();
extern void _ZN6S210C62v7Ev();
extern void _ZN6S210C62v8Ev();
extern void _ZN6S210C62v9Ev();
extern void _ZN6S210C63v10Ev();
extern void _ZN6S210C63v11Ev();
extern void _ZN6S210C63v12Ev();
extern void _ZN6S210C63v13Ev();
extern void _ZN6S210C63v14Ev();
extern void _ZN6S210C63v15Ev();
extern void _ZN6S210C63v16Ev();
extern void _ZN6S210C63v17Ev();
extern void _ZN6S210C63v18Ev();
extern void _ZN6S210C63v19Ev();
extern void _ZN6S210C63v20Ev();
extern void _ZN6S210C63v21Ev();
extern void _ZN6S210C63v22Ev();
extern void _ZN6S210C63v23Ev();
extern void _ZN6S210C63v24Ev();
extern void _ZN6S210C63v25Ev();
extern void _ZN6S210C63v26Ev();
extern void _ZN6S210C63v27Ev();
extern void _ZN6S210C63v28Ev();
extern void _ZN6S210C63v29Ev();
extern void _ZN6S210C63v30Ev();
extern void _ZN6S210C63v31Ev();
extern void _ZN6S210C63v32Ev();
extern void _ZN6S210C63v33Ev();
extern void _ZN6S210C63v34Ev();
extern void _ZN6S210C63v35Ev();
extern void _ZN6S210C63v36Ev();
extern void _ZN6S210C63v37Ev();
extern void _ZN6S210C63v38Ev();
extern void _ZN6S210C63v39Ev();
extern void _ZN6S210C63v40Ev();
extern void _ZN6S210C63v41Ev();
extern void _ZN6S210C63v42Ev();
extern void _ZN6S210C63v43Ev();
extern void _ZN6S210C63v44Ev();
extern void _ZN6S210C63v45Ev();
extern void _ZN6S210C63v46Ev();
extern void _ZN6S210C63v47Ev();
extern void _ZN6S210C63v48Ev();
extern void _ZN6S210C63v49Ev();
extern void _ZN6S210C63v50Ev();
extern void _ZN6S210C63v51Ev();
extern void _ZN6S210C63v52Ev();
extern void _ZN6S210C63v53Ev();
extern void _ZN6S210C63v54Ev();
extern void _ZN6S210C63v55Ev();
extern void _ZN6S210C63v56Ev();
extern void _ZN6S210C63v57Ev();
extern void _ZN6S210C63v58Ev();
extern void _ZN6S210C63v59Ev();
extern void _ZN6S210C63v60Ev();
extern void _ZN6S210C63v61Ev();
extern void _ZN6S210C63v62Ev();
extern void _ZN6S210C63v63Ev();
extern void _ZN6S210C63v64Ev();
extern void _ZN6S210C63v65Ev();
extern void _ZN6S210C63v66Ev();
extern void _ZN6S210C63v67Ev();
static  VTBL_ENTRY vtc_S210C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S210C6[0]),
  (VTBL_ENTRY)&_ZN6S210C6D1Ev,
  (VTBL_ENTRY)&_ZN6S210C6D0Ev,
  (VTBL_ENTRY)&_ZN6S210C62v4Ev,
  (VTBL_ENTRY)&_ZN6S210C62v5Ev,
  (VTBL_ENTRY)&_ZN6S210C62v6Ev,
  (VTBL_ENTRY)&_ZN6S210C62v7Ev,
  (VTBL_ENTRY)&_ZN6S210C62v8Ev,
  (VTBL_ENTRY)&_ZN6S210C62v9Ev,
  (VTBL_ENTRY)&_ZN6S210C63v10Ev,
  (VTBL_ENTRY)&_ZN6S210C63v11Ev,
  (VTBL_ENTRY)&_ZN6S210C63v12Ev,
  (VTBL_ENTRY)&_ZN6S210C63v13Ev,
  (VTBL_ENTRY)&_ZN6S210C63v14Ev,
  (VTBL_ENTRY)&_ZN6S210C63v15Ev,
  (VTBL_ENTRY)&_ZN6S210C63v16Ev,
  (VTBL_ENTRY)&_ZN6S210C63v17Ev,
  (VTBL_ENTRY)&_ZN6S210C63v18Ev,
  (VTBL_ENTRY)&_ZN6S210C63v19Ev,
  (VTBL_ENTRY)&_ZN6S210C63v20Ev,
  (VTBL_ENTRY)&_ZN6S210C63v21Ev,
  (VTBL_ENTRY)&_ZN6S210C63v22Ev,
  (VTBL_ENTRY)&_ZN6S210C63v23Ev,
  (VTBL_ENTRY)&_ZN6S210C63v24Ev,
  (VTBL_ENTRY)&_ZN6S210C63v25Ev,
  (VTBL_ENTRY)&_ZN6S210C63v26Ev,
  (VTBL_ENTRY)&_ZN6S210C63v27Ev,
  (VTBL_ENTRY)&_ZN6S210C63v28Ev,
  (VTBL_ENTRY)&_ZN6S210C63v29Ev,
  (VTBL_ENTRY)&_ZN6S210C63v30Ev,
  (VTBL_ENTRY)&_ZN6S210C63v31Ev,
  (VTBL_ENTRY)&_ZN6S210C63v32Ev,
  (VTBL_ENTRY)&_ZN6S210C63v33Ev,
  (VTBL_ENTRY)&_ZN6S210C63v34Ev,
  (VTBL_ENTRY)&_ZN6S210C63v35Ev,
  (VTBL_ENTRY)&_ZN6S210C63v36Ev,
  (VTBL_ENTRY)&_ZN6S210C63v37Ev,
  (VTBL_ENTRY)&_ZN6S210C63v38Ev,
  (VTBL_ENTRY)&_ZN6S210C63v39Ev,
  (VTBL_ENTRY)&_ZN6S210C63v40Ev,
  (VTBL_ENTRY)&_ZN6S210C63v41Ev,
  (VTBL_ENTRY)&_ZN6S210C63v42Ev,
  (VTBL_ENTRY)&_ZN6S210C63v43Ev,
  (VTBL_ENTRY)&_ZN6S210C63v44Ev,
  (VTBL_ENTRY)&_ZN6S210C63v45Ev,
  (VTBL_ENTRY)&_ZN6S210C63v46Ev,
  (VTBL_ENTRY)&_ZN6S210C63v47Ev,
  (VTBL_ENTRY)&_ZN6S210C63v48Ev,
  (VTBL_ENTRY)&_ZN6S210C63v49Ev,
  (VTBL_ENTRY)&_ZN6S210C63v50Ev,
  (VTBL_ENTRY)&_ZN6S210C63v51Ev,
  (VTBL_ENTRY)&_ZN6S210C63v52Ev,
  (VTBL_ENTRY)&_ZN6S210C63v53Ev,
  (VTBL_ENTRY)&_ZN6S210C63v54Ev,
  (VTBL_ENTRY)&_ZN6S210C63v55Ev,
  (VTBL_ENTRY)&_ZN6S210C63v56Ev,
  (VTBL_ENTRY)&_ZN6S210C63v57Ev,
  (VTBL_ENTRY)&_ZN6S210C63v58Ev,
  (VTBL_ENTRY)&_ZN6S210C63v59Ev,
  (VTBL_ENTRY)&_ZN6S210C63v60Ev,
  (VTBL_ENTRY)&_ZN6S210C63v61Ev,
  (VTBL_ENTRY)&_ZN6S210C63v62Ev,
  (VTBL_ENTRY)&_ZN6S210C63v63Ev,
  (VTBL_ENTRY)&_ZN6S210C63v64Ev,
  (VTBL_ENTRY)&_ZN6S210C63v65Ev,
  (VTBL_ENTRY)&_ZN6S210C63v66Ev,
  (VTBL_ENTRY)&_ZN6S210C63v67Ev,
};
extern VTBL_ENTRY _ZTI6S210C6[];
extern  VTBL_ENTRY _ZTV6S210C6[];
Class_Descriptor cd_S210C6 = {  "S210C6", // class name
  0,0,//no base classes
  &(vtc_S210C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S210C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S210C6),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  S210C10  : S1503C8_nt {
};
//SIG(-1 S210C10) C1{ BC2{ m Fp Fi[2]}}



static void Test_S210C10()
{
  extern Class_Descriptor cd_S210C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S210C10, buf);
    S210C10 &lv = *(new (buf) S210C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S210C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S210C10)");
    check_base_class_offset(lv, (S1503C8_nt*), 0, "S210C10");
    test_class_info(&lv, &cd_S210C10);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS210C10(Test_S210C10, "S210C10", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
static Base_Class bases_S210C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S210C10 = {  "S210C10", // class name
  bases_S210C10, 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  S210C9  : S210C10 {
};
//SIG(-1 S210C9) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S210C9()
{
  extern Class_Descriptor cd_S210C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S210C9, buf);
    S210C9 &lv = *(new (buf) S210C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S210C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S210C9)");
    check_base_class_offset(lv, (S1503C8_nt*)(S210C10*), 0, "S210C9");
    check_base_class_offset(lv, (S210C10*), 0, "S210C9");
    test_class_info(&lv, &cd_S210C9);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS210C9(Test_S210C9, "S210C9", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
extern Class_Descriptor cd_S210C10;
static Base_Class bases_S210C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S210C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S210C9 = {  "S210C9", // class name
  bases_S210C9, 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  S210C8_nt  : S210C9 {
};
//SIG(-1 S210C8_nt) C1{ BC2{ BC3{ BC4{ m Fp Fi[2]}}}}



//skip512 S210C8_nt

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
extern Class_Descriptor cd_S210C10;
extern Class_Descriptor cd_S210C9;
static Base_Class bases_S210C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S210C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S210C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S210C5_nt  : S210C6 {
  int s210c5f0[2];
  void *s210c5f1;
  int s210c5f2[2];
  ::S210C8_nt s210c5f3;
  ::S210C8_nt s210c5f4;
  ::S629C14 s210c5f5;
  ::S210C8_nt s210c5f6;
  unsigned int s210c5f7:1;
  unsigned int s210c5f8:1;
  unsigned int s210c5f9:1;
  unsigned int s210c5f10:1;
  unsigned int s210c5f11:1;
  int s210c5f12[2];
  virtual  ~S210C5_nt(); // _ZN9S210C5_ntD1Ev
  virtual void  v68(); // _ZN9S210C5_nt3v68Ev
  virtual void  v69(); // _ZN9S210C5_nt3v69Ev
  virtual void  v70(); // _ZN9S210C5_nt3v70Ev
  virtual void  v71(); // _ZN9S210C5_nt3v71Ev
  virtual void  v72(); // _ZN9S210C5_nt3v72Ev
  virtual void  v73(); // _ZN9S210C5_nt3v73Ev
  virtual void  v74(); // _ZN9S210C5_nt3v74Ev
  virtual void  v75(); // _ZN9S210C5_nt3v75Ev
  virtual void  v76(); // _ZN9S210C5_nt3v76Ev
  virtual void  v77(); // _ZN9S210C5_nt3v77Ev
  virtual void  v78(); // _ZN9S210C5_nt3v78Ev
  virtual void  v79(); // _ZN9S210C5_nt3v79Ev
  virtual void  v80(); // _ZN9S210C5_nt3v80Ev
  virtual void  v81(); // _ZN9S210C5_nt3v81Ev
  virtual void  v82(); // _ZN9S210C5_nt3v82Ev
  virtual void  v83(); // _ZN9S210C5_nt3v83Ev
  virtual void  v84(); // _ZN9S210C5_nt3v84Ev
  virtual void  v85(); // _ZN9S210C5_nt3v85Ev
  virtual void  v86(); // _ZN9S210C5_nt3v86Ev
  virtual void  v87(); // _ZN9S210C5_nt3v87Ev
  virtual void  v88(); // _ZN9S210C5_nt3v88Ev
  virtual void  v89(); // _ZN9S210C5_nt3v89Ev
  S210C5_nt(); // tgen
};
//SIG(-1 S210C5_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]}


 S210C5_nt ::~S210C5_nt(){ note_dtor("S210C5_nt", this);}
void  S210C5_nt ::v68(){vfunc_called(this, "_ZN9S210C5_nt3v68Ev");}
void  S210C5_nt ::v69(){vfunc_called(this, "_ZN9S210C5_nt3v69Ev");}
void  S210C5_nt ::v70(){vfunc_called(this, "_ZN9S210C5_nt3v70Ev");}
void  S210C5_nt ::v71(){vfunc_called(this, "_ZN9S210C5_nt3v71Ev");}
void  S210C5_nt ::v72(){vfunc_called(this, "_ZN9S210C5_nt3v72Ev");}
void  S210C5_nt ::v73(){vfunc_called(this, "_ZN9S210C5_nt3v73Ev");}
void  S210C5_nt ::v74(){vfunc_called(this, "_ZN9S210C5_nt3v74Ev");}
void  S210C5_nt ::v75(){vfunc_called(this, "_ZN9S210C5_nt3v75Ev");}
void  S210C5_nt ::v76(){vfunc_called(this, "_ZN9S210C5_nt3v76Ev");}
void  S210C5_nt ::v77(){vfunc_called(this, "_ZN9S210C5_nt3v77Ev");}
void  S210C5_nt ::v78(){vfunc_called(this, "_ZN9S210C5_nt3v78Ev");}
void  S210C5_nt ::v79(){vfunc_called(this, "_ZN9S210C5_nt3v79Ev");}
void  S210C5_nt ::v80(){vfunc_called(this, "_ZN9S210C5_nt3v80Ev");}
void  S210C5_nt ::v81(){vfunc_called(this, "_ZN9S210C5_nt3v81Ev");}
void  S210C5_nt ::v82(){vfunc_called(this, "_ZN9S210C5_nt3v82Ev");}
void  S210C5_nt ::v83(){vfunc_called(this, "_ZN9S210C5_nt3v83Ev");}
void  S210C5_nt ::v84(){vfunc_called(this, "_ZN9S210C5_nt3v84Ev");}
void  S210C5_nt ::v85(){vfunc_called(this, "_ZN9S210C5_nt3v85Ev");}
void  S210C5_nt ::v86(){vfunc_called(this, "_ZN9S210C5_nt3v86Ev");}
void  S210C5_nt ::v87(){vfunc_called(this, "_ZN9S210C5_nt3v87Ev");}
void  S210C5_nt ::v88(){vfunc_called(this, "_ZN9S210C5_nt3v88Ev");}
void  S210C5_nt ::v89(){vfunc_called(this, "_ZN9S210C5_nt3v89Ev");}
S210C5_nt ::S210C5_nt(){ note_ctor("S210C5_nt", this);} // tgen

//skip512 S210C5_nt

#else // __cplusplus

extern void _ZN9S210C5_ntC1Ev();
extern void _ZN9S210C5_ntD1Ev();
Name_Map name_map_S210C5_nt[] = {
  NSPAIR(_ZN9S210C5_ntC1Ev),
  NSPAIR(_ZN9S210C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S210C6;
extern VTBL_ENTRY _ZTI6S210C6[];
extern  VTBL_ENTRY _ZTV6S210C6[];
static Base_Class bases_S210C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S210C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S210C5_nt[];
extern void _ZN9S210C5_ntD1Ev();
extern void _ZN9S210C5_ntD0Ev();
extern void _ZN6S210C62v4Ev();
extern void _ZN6S210C62v5Ev();
extern void _ZN6S210C62v6Ev();
extern void _ZN6S210C62v7Ev();
extern void _ZN6S210C62v8Ev();
extern void _ZN6S210C62v9Ev();
extern void _ZN6S210C63v10Ev();
extern void _ZN6S210C63v11Ev();
extern void _ZN6S210C63v12Ev();
extern void _ZN6S210C63v13Ev();
extern void _ZN6S210C63v14Ev();
extern void _ZN6S210C63v15Ev();
extern void _ZN6S210C63v16Ev();
extern void _ZN6S210C63v17Ev();
extern void _ZN6S210C63v18Ev();
extern void _ZN6S210C63v19Ev();
extern void _ZN6S210C63v20Ev();
extern void _ZN6S210C63v21Ev();
extern void _ZN6S210C63v22Ev();
extern void _ZN6S210C63v23Ev();
extern void _ZN6S210C63v24Ev();
extern void _ZN6S210C63v25Ev();
extern void _ZN6S210C63v26Ev();
extern void _ZN6S210C63v27Ev();
extern void _ZN6S210C63v28Ev();
extern void _ZN6S210C63v29Ev();
extern void _ZN6S210C63v30Ev();
extern void _ZN6S210C63v31Ev();
extern void _ZN6S210C63v32Ev();
extern void _ZN6S210C63v33Ev();
extern void _ZN6S210C63v34Ev();
extern void _ZN6S210C63v35Ev();
extern void _ZN6S210C63v36Ev();
extern void _ZN6S210C63v37Ev();
extern void _ZN6S210C63v38Ev();
extern void _ZN6S210C63v39Ev();
extern void _ZN6S210C63v40Ev();
extern void _ZN6S210C63v41Ev();
extern void _ZN6S210C63v42Ev();
extern void _ZN6S210C63v43Ev();
extern void _ZN6S210C63v44Ev();
extern void _ZN6S210C63v45Ev();
extern void _ZN6S210C63v46Ev();
extern void _ZN6S210C63v47Ev();
extern void _ZN6S210C63v48Ev();
extern void _ZN6S210C63v49Ev();
extern void _ZN6S210C63v50Ev();
extern void _ZN6S210C63v51Ev();
extern void _ZN6S210C63v52Ev();
extern void _ZN6S210C63v53Ev();
extern void _ZN6S210C63v54Ev();
extern void _ZN6S210C63v55Ev();
extern void _ZN6S210C63v56Ev();
extern void _ZN6S210C63v57Ev();
extern void _ZN6S210C63v58Ev();
extern void _ZN6S210C63v59Ev();
extern void _ZN6S210C63v60Ev();
extern void _ZN6S210C63v61Ev();
extern void _ZN6S210C63v62Ev();
extern void _ZN6S210C63v63Ev();
extern void _ZN6S210C63v64Ev();
extern void _ZN6S210C63v65Ev();
extern void _ZN6S210C63v66Ev();
extern void _ZN6S210C63v67Ev();
extern void _ZN9S210C5_nt3v68Ev();
extern void _ZN9S210C5_nt3v69Ev();
extern void _ZN9S210C5_nt3v70Ev();
extern void _ZN9S210C5_nt3v71Ev();
extern void _ZN9S210C5_nt3v72Ev();
extern void _ZN9S210C5_nt3v73Ev();
extern void _ZN9S210C5_nt3v74Ev();
extern void _ZN9S210C5_nt3v75Ev();
extern void _ZN9S210C5_nt3v76Ev();
extern void _ZN9S210C5_nt3v77Ev();
extern void _ZN9S210C5_nt3v78Ev();
extern void _ZN9S210C5_nt3v79Ev();
extern void _ZN9S210C5_nt3v80Ev();
extern void _ZN9S210C5_nt3v81Ev();
extern void _ZN9S210C5_nt3v82Ev();
extern void _ZN9S210C5_nt3v83Ev();
extern void _ZN9S210C5_nt3v84Ev();
extern void _ZN9S210C5_nt3v85Ev();
extern void _ZN9S210C5_nt3v86Ev();
extern void _ZN9S210C5_nt3v87Ev();
extern void _ZN9S210C5_nt3v88Ev();
extern void _ZN9S210C5_nt3v89Ev();
static  VTBL_ENTRY vtc_S210C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S210C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S210C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S210C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S210C62v4Ev,
  (VTBL_ENTRY)&_ZN6S210C62v5Ev,
  (VTBL_ENTRY)&_ZN6S210C62v6Ev,
  (VTBL_ENTRY)&_ZN6S210C62v7Ev,
  (VTBL_ENTRY)&_ZN6S210C62v8Ev,
  (VTBL_ENTRY)&_ZN6S210C62v9Ev,
  (VTBL_ENTRY)&_ZN6S210C63v10Ev,
  (VTBL_ENTRY)&_ZN6S210C63v11Ev,
  (VTBL_ENTRY)&_ZN6S210C63v12Ev,
  (VTBL_ENTRY)&_ZN6S210C63v13Ev,
  (VTBL_ENTRY)&_ZN6S210C63v14Ev,
  (VTBL_ENTRY)&_ZN6S210C63v15Ev,
  (VTBL_ENTRY)&_ZN6S210C63v16Ev,
  (VTBL_ENTRY)&_ZN6S210C63v17Ev,
  (VTBL_ENTRY)&_ZN6S210C63v18Ev,
  (VTBL_ENTRY)&_ZN6S210C63v19Ev,
  (VTBL_ENTRY)&_ZN6S210C63v20Ev,
  (VTBL_ENTRY)&_ZN6S210C63v21Ev,
  (VTBL_ENTRY)&_ZN6S210C63v22Ev,
  (VTBL_ENTRY)&_ZN6S210C63v23Ev,
  (VTBL_ENTRY)&_ZN6S210C63v24Ev,
  (VTBL_ENTRY)&_ZN6S210C63v25Ev,
  (VTBL_ENTRY)&_ZN6S210C63v26Ev,
  (VTBL_ENTRY)&_ZN6S210C63v27Ev,
  (VTBL_ENTRY)&_ZN6S210C63v28Ev,
  (VTBL_ENTRY)&_ZN6S210C63v29Ev,
  (VTBL_ENTRY)&_ZN6S210C63v30Ev,
  (VTBL_ENTRY)&_ZN6S210C63v31Ev,
  (VTBL_ENTRY)&_ZN6S210C63v32Ev,
  (VTBL_ENTRY)&_ZN6S210C63v33Ev,
  (VTBL_ENTRY)&_ZN6S210C63v34Ev,
  (VTBL_ENTRY)&_ZN6S210C63v35Ev,
  (VTBL_ENTRY)&_ZN6S210C63v36Ev,
  (VTBL_ENTRY)&_ZN6S210C63v37Ev,
  (VTBL_ENTRY)&_ZN6S210C63v38Ev,
  (VTBL_ENTRY)&_ZN6S210C63v39Ev,
  (VTBL_ENTRY)&_ZN6S210C63v40Ev,
  (VTBL_ENTRY)&_ZN6S210C63v41Ev,
  (VTBL_ENTRY)&_ZN6S210C63v42Ev,
  (VTBL_ENTRY)&_ZN6S210C63v43Ev,
  (VTBL_ENTRY)&_ZN6S210C63v44Ev,
  (VTBL_ENTRY)&_ZN6S210C63v45Ev,
  (VTBL_ENTRY)&_ZN6S210C63v46Ev,
  (VTBL_ENTRY)&_ZN6S210C63v47Ev,
  (VTBL_ENTRY)&_ZN6S210C63v48Ev,
  (VTBL_ENTRY)&_ZN6S210C63v49Ev,
  (VTBL_ENTRY)&_ZN6S210C63v50Ev,
  (VTBL_ENTRY)&_ZN6S210C63v51Ev,
  (VTBL_ENTRY)&_ZN6S210C63v52Ev,
  (VTBL_ENTRY)&_ZN6S210C63v53Ev,
  (VTBL_ENTRY)&_ZN6S210C63v54Ev,
  (VTBL_ENTRY)&_ZN6S210C63v55Ev,
  (VTBL_ENTRY)&_ZN6S210C63v56Ev,
  (VTBL_ENTRY)&_ZN6S210C63v57Ev,
  (VTBL_ENTRY)&_ZN6S210C63v58Ev,
  (VTBL_ENTRY)&_ZN6S210C63v59Ev,
  (VTBL_ENTRY)&_ZN6S210C63v60Ev,
  (VTBL_ENTRY)&_ZN6S210C63v61Ev,
  (VTBL_ENTRY)&_ZN6S210C63v62Ev,
  (VTBL_ENTRY)&_ZN6S210C63v63Ev,
  (VTBL_ENTRY)&_ZN6S210C63v64Ev,
  (VTBL_ENTRY)&_ZN6S210C63v65Ev,
  (VTBL_ENTRY)&_ZN6S210C63v66Ev,
  (VTBL_ENTRY)&_ZN6S210C63v67Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v89Ev,
};
extern VTBL_ENTRY _ZTI9S210C5_nt[];
VTBL_ENTRY *P__ZTI9S210C5_nt = _ZTI9S210C5_nt; 
extern  VTBL_ENTRY _ZTV9S210C5_nt[];
Class_Descriptor cd_S210C5_nt = {  "S210C5_nt", // class name
  bases_S210C5_nt, 1,
  &(vtc_S210C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI9S210C5_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S210C5_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  S210C4_nt  : S210C5_nt {
  unsigned int s210c4f0:1;
  unsigned int s210c4f1:1;
  unsigned int s210c4f2:1;
  ::S1503C28 s210c4f3;
  ::S1503C24 s210c4f4;
  ::S1503C18 s210c4f5;
  ::S1503C12 s210c4f6;
  int s210c4f7[3];
  virtual  ~S210C4_nt(); // _ZN9S210C4_ntD1Ev
  virtual void  v90(); // _ZN9S210C4_nt3v90Ev
  virtual void  v91(); // _ZN9S210C4_nt3v91Ev
  virtual void  v92(); // _ZN9S210C4_nt3v92Ev
  virtual void  v93(); // _ZN9S210C4_nt3v93Ev
  virtual void  v94(); // _ZN9S210C4_nt3v94Ev
  virtual void  v95(); // _ZN9S210C4_nt3v95Ev
  virtual void  v96(); // _ZN9S210C4_nt3v96Ev
  virtual void  v97(); // _ZN9S210C4_nt3v97Ev
  virtual void  v98(); // _ZN9S210C4_nt3v98Ev
  virtual void  v99(); // _ZN9S210C4_nt3v99Ev
  virtual void  v100(); // _ZN9S210C4_nt4v100Ev
  virtual void  v101(); // _ZN9S210C4_nt4v101Ev
  virtual void  v102(); // _ZN9S210C4_nt4v102Ev
  virtual void  v103(); // _ZN9S210C4_nt4v103Ev
  virtual void  v104(); // _ZN9S210C4_nt4v104Ev
  virtual void  v105(); // _ZN9S210C4_nt4v105Ev
  virtual void  v106(); // _ZN9S210C4_nt4v106Ev
  virtual void  v107(); // _ZN9S210C4_nt4v107Ev
  virtual void  v108(); // _ZN9S210C4_nt4v108Ev
  virtual void  v109(); // _ZN9S210C4_nt4v109Ev
  S210C4_nt(); // tgen
};
//SIG(-1 S210C4_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]}


 S210C4_nt ::~S210C4_nt(){ note_dtor("S210C4_nt", this);}
void  S210C4_nt ::v90(){vfunc_called(this, "_ZN9S210C4_nt3v90Ev");}
void  S210C4_nt ::v91(){vfunc_called(this, "_ZN9S210C4_nt3v91Ev");}
void  S210C4_nt ::v92(){vfunc_called(this, "_ZN9S210C4_nt3v92Ev");}
void  S210C4_nt ::v93(){vfunc_called(this, "_ZN9S210C4_nt3v93Ev");}
void  S210C4_nt ::v94(){vfunc_called(this, "_ZN9S210C4_nt3v94Ev");}
void  S210C4_nt ::v95(){vfunc_called(this, "_ZN9S210C4_nt3v95Ev");}
void  S210C4_nt ::v96(){vfunc_called(this, "_ZN9S210C4_nt3v96Ev");}
void  S210C4_nt ::v97(){vfunc_called(this, "_ZN9S210C4_nt3v97Ev");}
void  S210C4_nt ::v98(){vfunc_called(this, "_ZN9S210C4_nt3v98Ev");}
void  S210C4_nt ::v99(){vfunc_called(this, "_ZN9S210C4_nt3v99Ev");}
void  S210C4_nt ::v100(){vfunc_called(this, "_ZN9S210C4_nt4v100Ev");}
void  S210C4_nt ::v101(){vfunc_called(this, "_ZN9S210C4_nt4v101Ev");}
void  S210C4_nt ::v102(){vfunc_called(this, "_ZN9S210C4_nt4v102Ev");}
void  S210C4_nt ::v103(){vfunc_called(this, "_ZN9S210C4_nt4v103Ev");}
void  S210C4_nt ::v104(){vfunc_called(this, "_ZN9S210C4_nt4v104Ev");}
void  S210C4_nt ::v105(){vfunc_called(this, "_ZN9S210C4_nt4v105Ev");}
void  S210C4_nt ::v106(){vfunc_called(this, "_ZN9S210C4_nt4v106Ev");}
void  S210C4_nt ::v107(){vfunc_called(this, "_ZN9S210C4_nt4v107Ev");}
void  S210C4_nt ::v108(){vfunc_called(this, "_ZN9S210C4_nt4v108Ev");}
void  S210C4_nt ::v109(){vfunc_called(this, "_ZN9S210C4_nt4v109Ev");}
S210C4_nt ::S210C4_nt(){ note_ctor("S210C4_nt", this);} // tgen

//skip512 S210C4_nt

#else // __cplusplus

extern void _ZN9S210C4_ntC1Ev();
extern void _ZN9S210C4_ntD1Ev();
Name_Map name_map_S210C4_nt[] = {
  NSPAIR(_ZN9S210C4_ntC1Ev),
  NSPAIR(_ZN9S210C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S210C6;
extern VTBL_ENTRY _ZTI6S210C6[];
extern  VTBL_ENTRY _ZTV6S210C6[];
extern Class_Descriptor cd_S210C5_nt;
extern VTBL_ENTRY _ZTI9S210C5_nt[];
extern  VTBL_ENTRY _ZTV9S210C5_nt[];
static Base_Class bases_S210C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S210C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S210C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI9S210C4_nt[];
extern void _ZN9S210C4_ntD1Ev();
extern void _ZN9S210C4_ntD0Ev();
extern void _ZN6S210C62v4Ev();
extern void _ZN6S210C62v5Ev();
extern void _ZN6S210C62v6Ev();
extern void _ZN6S210C62v7Ev();
extern void _ZN6S210C62v8Ev();
extern void _ZN6S210C62v9Ev();
extern void _ZN6S210C63v10Ev();
extern void _ZN6S210C63v11Ev();
extern void _ZN6S210C63v12Ev();
extern void _ZN6S210C63v13Ev();
extern void _ZN6S210C63v14Ev();
extern void _ZN6S210C63v15Ev();
extern void _ZN6S210C63v16Ev();
extern void _ZN6S210C63v17Ev();
extern void _ZN6S210C63v18Ev();
extern void _ZN6S210C63v19Ev();
extern void _ZN6S210C63v20Ev();
extern void _ZN6S210C63v21Ev();
extern void _ZN6S210C63v22Ev();
extern void _ZN6S210C63v23Ev();
extern void _ZN6S210C63v24Ev();
extern void _ZN6S210C63v25Ev();
extern void _ZN6S210C63v26Ev();
extern void _ZN6S210C63v27Ev();
extern void _ZN6S210C63v28Ev();
extern void _ZN6S210C63v29Ev();
extern void _ZN6S210C63v30Ev();
extern void _ZN6S210C63v31Ev();
extern void _ZN6S210C63v32Ev();
extern void _ZN6S210C63v33Ev();
extern void _ZN6S210C63v34Ev();
extern void _ZN6S210C63v35Ev();
extern void _ZN6S210C63v36Ev();
extern void _ZN6S210C63v37Ev();
extern void _ZN6S210C63v38Ev();
extern void _ZN6S210C63v39Ev();
extern void _ZN6S210C63v40Ev();
extern void _ZN6S210C63v41Ev();
extern void _ZN6S210C63v42Ev();
extern void _ZN6S210C63v43Ev();
extern void _ZN6S210C63v44Ev();
extern void _ZN6S210C63v45Ev();
extern void _ZN6S210C63v46Ev();
extern void _ZN6S210C63v47Ev();
extern void _ZN6S210C63v48Ev();
extern void _ZN6S210C63v49Ev();
extern void _ZN6S210C63v50Ev();
extern void _ZN6S210C63v51Ev();
extern void _ZN6S210C63v52Ev();
extern void _ZN6S210C63v53Ev();
extern void _ZN6S210C63v54Ev();
extern void _ZN6S210C63v55Ev();
extern void _ZN6S210C63v56Ev();
extern void _ZN6S210C63v57Ev();
extern void _ZN6S210C63v58Ev();
extern void _ZN6S210C63v59Ev();
extern void _ZN6S210C63v60Ev();
extern void _ZN6S210C63v61Ev();
extern void _ZN6S210C63v62Ev();
extern void _ZN6S210C63v63Ev();
extern void _ZN6S210C63v64Ev();
extern void _ZN6S210C63v65Ev();
extern void _ZN6S210C63v66Ev();
extern void _ZN6S210C63v67Ev();
extern void _ZN9S210C5_nt3v68Ev();
extern void _ZN9S210C5_nt3v69Ev();
extern void _ZN9S210C5_nt3v70Ev();
extern void _ZN9S210C5_nt3v71Ev();
extern void _ZN9S210C5_nt3v72Ev();
extern void _ZN9S210C5_nt3v73Ev();
extern void _ZN9S210C5_nt3v74Ev();
extern void _ZN9S210C5_nt3v75Ev();
extern void _ZN9S210C5_nt3v76Ev();
extern void _ZN9S210C5_nt3v77Ev();
extern void _ZN9S210C5_nt3v78Ev();
extern void _ZN9S210C5_nt3v79Ev();
extern void _ZN9S210C5_nt3v80Ev();
extern void _ZN9S210C5_nt3v81Ev();
extern void _ZN9S210C5_nt3v82Ev();
extern void _ZN9S210C5_nt3v83Ev();
extern void _ZN9S210C5_nt3v84Ev();
extern void _ZN9S210C5_nt3v85Ev();
extern void _ZN9S210C5_nt3v86Ev();
extern void _ZN9S210C5_nt3v87Ev();
extern void _ZN9S210C5_nt3v88Ev();
extern void _ZN9S210C5_nt3v89Ev();
extern void _ZN9S210C4_nt3v90Ev();
extern void _ZN9S210C4_nt3v91Ev();
extern void _ZN9S210C4_nt3v92Ev();
extern void _ZN9S210C4_nt3v93Ev();
extern void _ZN9S210C4_nt3v94Ev();
extern void _ZN9S210C4_nt3v95Ev();
extern void _ZN9S210C4_nt3v96Ev();
extern void _ZN9S210C4_nt3v97Ev();
extern void _ZN9S210C4_nt3v98Ev();
extern void _ZN9S210C4_nt3v99Ev();
extern void _ZN9S210C4_nt4v100Ev();
extern void _ZN9S210C4_nt4v101Ev();
extern void _ZN9S210C4_nt4v102Ev();
extern void _ZN9S210C4_nt4v103Ev();
extern void _ZN9S210C4_nt4v104Ev();
extern void _ZN9S210C4_nt4v105Ev();
extern void _ZN9S210C4_nt4v106Ev();
extern void _ZN9S210C4_nt4v107Ev();
extern void _ZN9S210C4_nt4v108Ev();
extern void _ZN9S210C4_nt4v109Ev();
static  VTBL_ENTRY vtc_S210C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S210C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S210C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S210C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S210C62v4Ev,
  (VTBL_ENTRY)&_ZN6S210C62v5Ev,
  (VTBL_ENTRY)&_ZN6S210C62v6Ev,
  (VTBL_ENTRY)&_ZN6S210C62v7Ev,
  (VTBL_ENTRY)&_ZN6S210C62v8Ev,
  (VTBL_ENTRY)&_ZN6S210C62v9Ev,
  (VTBL_ENTRY)&_ZN6S210C63v10Ev,
  (VTBL_ENTRY)&_ZN6S210C63v11Ev,
  (VTBL_ENTRY)&_ZN6S210C63v12Ev,
  (VTBL_ENTRY)&_ZN6S210C63v13Ev,
  (VTBL_ENTRY)&_ZN6S210C63v14Ev,
  (VTBL_ENTRY)&_ZN6S210C63v15Ev,
  (VTBL_ENTRY)&_ZN6S210C63v16Ev,
  (VTBL_ENTRY)&_ZN6S210C63v17Ev,
  (VTBL_ENTRY)&_ZN6S210C63v18Ev,
  (VTBL_ENTRY)&_ZN6S210C63v19Ev,
  (VTBL_ENTRY)&_ZN6S210C63v20Ev,
  (VTBL_ENTRY)&_ZN6S210C63v21Ev,
  (VTBL_ENTRY)&_ZN6S210C63v22Ev,
  (VTBL_ENTRY)&_ZN6S210C63v23Ev,
  (VTBL_ENTRY)&_ZN6S210C63v24Ev,
  (VTBL_ENTRY)&_ZN6S210C63v25Ev,
  (VTBL_ENTRY)&_ZN6S210C63v26Ev,
  (VTBL_ENTRY)&_ZN6S210C63v27Ev,
  (VTBL_ENTRY)&_ZN6S210C63v28Ev,
  (VTBL_ENTRY)&_ZN6S210C63v29Ev,
  (VTBL_ENTRY)&_ZN6S210C63v30Ev,
  (VTBL_ENTRY)&_ZN6S210C63v31Ev,
  (VTBL_ENTRY)&_ZN6S210C63v32Ev,
  (VTBL_ENTRY)&_ZN6S210C63v33Ev,
  (VTBL_ENTRY)&_ZN6S210C63v34Ev,
  (VTBL_ENTRY)&_ZN6S210C63v35Ev,
  (VTBL_ENTRY)&_ZN6S210C63v36Ev,
  (VTBL_ENTRY)&_ZN6S210C63v37Ev,
  (VTBL_ENTRY)&_ZN6S210C63v38Ev,
  (VTBL_ENTRY)&_ZN6S210C63v39Ev,
  (VTBL_ENTRY)&_ZN6S210C63v40Ev,
  (VTBL_ENTRY)&_ZN6S210C63v41Ev,
  (VTBL_ENTRY)&_ZN6S210C63v42Ev,
  (VTBL_ENTRY)&_ZN6S210C63v43Ev,
  (VTBL_ENTRY)&_ZN6S210C63v44Ev,
  (VTBL_ENTRY)&_ZN6S210C63v45Ev,
  (VTBL_ENTRY)&_ZN6S210C63v46Ev,
  (VTBL_ENTRY)&_ZN6S210C63v47Ev,
  (VTBL_ENTRY)&_ZN6S210C63v48Ev,
  (VTBL_ENTRY)&_ZN6S210C63v49Ev,
  (VTBL_ENTRY)&_ZN6S210C63v50Ev,
  (VTBL_ENTRY)&_ZN6S210C63v51Ev,
  (VTBL_ENTRY)&_ZN6S210C63v52Ev,
  (VTBL_ENTRY)&_ZN6S210C63v53Ev,
  (VTBL_ENTRY)&_ZN6S210C63v54Ev,
  (VTBL_ENTRY)&_ZN6S210C63v55Ev,
  (VTBL_ENTRY)&_ZN6S210C63v56Ev,
  (VTBL_ENTRY)&_ZN6S210C63v57Ev,
  (VTBL_ENTRY)&_ZN6S210C63v58Ev,
  (VTBL_ENTRY)&_ZN6S210C63v59Ev,
  (VTBL_ENTRY)&_ZN6S210C63v60Ev,
  (VTBL_ENTRY)&_ZN6S210C63v61Ev,
  (VTBL_ENTRY)&_ZN6S210C63v62Ev,
  (VTBL_ENTRY)&_ZN6S210C63v63Ev,
  (VTBL_ENTRY)&_ZN6S210C63v64Ev,
  (VTBL_ENTRY)&_ZN6S210C63v65Ev,
  (VTBL_ENTRY)&_ZN6S210C63v66Ev,
  (VTBL_ENTRY)&_ZN6S210C63v67Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v109Ev,
};
extern VTBL_ENTRY _ZTI9S210C4_nt[];
VTBL_ENTRY *P__ZTI9S210C4_nt = _ZTI9S210C4_nt; 
extern  VTBL_ENTRY _ZTV9S210C4_nt[];
Class_Descriptor cd_S210C4_nt = {  "S210C4_nt", // class name
  bases_S210C4_nt, 2,
  &(vtc_S210C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI9S210C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S210C4_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  S210C3_nt  : S210C4_nt {
  ::S1503C5_nt s210c3f0;
  unsigned int s210c3f1:1;
  ::S1503C6_nt s210c3f2;
  virtual  ~S210C3_nt(); // _ZN9S210C3_ntD1Ev
  virtual void  v110(); // _ZN9S210C3_nt4v110Ev
  virtual void  v111(); // _ZN9S210C3_nt4v111Ev
  virtual void  v112(); // _ZN9S210C3_nt4v112Ev
  virtual void  v113(); // _ZN9S210C3_nt4v113Ev
  S210C3_nt(); // tgen
};
//SIG(-1 S210C3_nt) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S210C3_nt ::~S210C3_nt(){ note_dtor("S210C3_nt", this);}
void  S210C3_nt ::v110(){vfunc_called(this, "_ZN9S210C3_nt4v110Ev");}
void  S210C3_nt ::v111(){vfunc_called(this, "_ZN9S210C3_nt4v111Ev");}
void  S210C3_nt ::v112(){vfunc_called(this, "_ZN9S210C3_nt4v112Ev");}
void  S210C3_nt ::v113(){vfunc_called(this, "_ZN9S210C3_nt4v113Ev");}
S210C3_nt ::S210C3_nt(){ note_ctor("S210C3_nt", this);} // tgen

//skip512 S210C3_nt

#else // __cplusplus

extern void _ZN9S210C3_ntC1Ev();
extern void _ZN9S210C3_ntD1Ev();
Name_Map name_map_S210C3_nt[] = {
  NSPAIR(_ZN9S210C3_ntC1Ev),
  NSPAIR(_ZN9S210C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S210C6;
extern VTBL_ENTRY _ZTI6S210C6[];
extern  VTBL_ENTRY _ZTV6S210C6[];
extern Class_Descriptor cd_S210C5_nt;
extern VTBL_ENTRY _ZTI9S210C5_nt[];
extern  VTBL_ENTRY _ZTV9S210C5_nt[];
extern Class_Descriptor cd_S210C4_nt;
extern VTBL_ENTRY _ZTI9S210C4_nt[];
extern  VTBL_ENTRY _ZTV9S210C4_nt[];
static Base_Class bases_S210C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S210C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S210C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S210C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S210C3_nt[];
extern void _ZN9S210C3_ntD1Ev();
extern void _ZN9S210C3_ntD0Ev();
extern void _ZN6S210C62v4Ev();
extern void _ZN6S210C62v5Ev();
extern void _ZN6S210C62v6Ev();
extern void _ZN6S210C62v7Ev();
extern void _ZN6S210C62v8Ev();
extern void _ZN6S210C62v9Ev();
extern void _ZN6S210C63v10Ev();
extern void _ZN6S210C63v11Ev();
extern void _ZN6S210C63v12Ev();
extern void _ZN6S210C63v13Ev();
extern void _ZN6S210C63v14Ev();
extern void _ZN6S210C63v15Ev();
extern void _ZN6S210C63v16Ev();
extern void _ZN6S210C63v17Ev();
extern void _ZN6S210C63v18Ev();
extern void _ZN6S210C63v19Ev();
extern void _ZN6S210C63v20Ev();
extern void _ZN6S210C63v21Ev();
extern void _ZN6S210C63v22Ev();
extern void _ZN6S210C63v23Ev();
extern void _ZN6S210C63v24Ev();
extern void _ZN6S210C63v25Ev();
extern void _ZN6S210C63v26Ev();
extern void _ZN6S210C63v27Ev();
extern void _ZN6S210C63v28Ev();
extern void _ZN6S210C63v29Ev();
extern void _ZN6S210C63v30Ev();
extern void _ZN6S210C63v31Ev();
extern void _ZN6S210C63v32Ev();
extern void _ZN6S210C63v33Ev();
extern void _ZN6S210C63v34Ev();
extern void _ZN6S210C63v35Ev();
extern void _ZN6S210C63v36Ev();
extern void _ZN6S210C63v37Ev();
extern void _ZN6S210C63v38Ev();
extern void _ZN6S210C63v39Ev();
extern void _ZN6S210C63v40Ev();
extern void _ZN6S210C63v41Ev();
extern void _ZN6S210C63v42Ev();
extern void _ZN6S210C63v43Ev();
extern void _ZN6S210C63v44Ev();
extern void _ZN6S210C63v45Ev();
extern void _ZN6S210C63v46Ev();
extern void _ZN6S210C63v47Ev();
extern void _ZN6S210C63v48Ev();
extern void _ZN6S210C63v49Ev();
extern void _ZN6S210C63v50Ev();
extern void _ZN6S210C63v51Ev();
extern void _ZN6S210C63v52Ev();
extern void _ZN6S210C63v53Ev();
extern void _ZN6S210C63v54Ev();
extern void _ZN6S210C63v55Ev();
extern void _ZN6S210C63v56Ev();
extern void _ZN6S210C63v57Ev();
extern void _ZN6S210C63v58Ev();
extern void _ZN6S210C63v59Ev();
extern void _ZN6S210C63v60Ev();
extern void _ZN6S210C63v61Ev();
extern void _ZN6S210C63v62Ev();
extern void _ZN6S210C63v63Ev();
extern void _ZN6S210C63v64Ev();
extern void _ZN6S210C63v65Ev();
extern void _ZN6S210C63v66Ev();
extern void _ZN6S210C63v67Ev();
extern void _ZN9S210C5_nt3v68Ev();
extern void _ZN9S210C5_nt3v69Ev();
extern void _ZN9S210C5_nt3v70Ev();
extern void _ZN9S210C5_nt3v71Ev();
extern void _ZN9S210C5_nt3v72Ev();
extern void _ZN9S210C5_nt3v73Ev();
extern void _ZN9S210C5_nt3v74Ev();
extern void _ZN9S210C5_nt3v75Ev();
extern void _ZN9S210C5_nt3v76Ev();
extern void _ZN9S210C5_nt3v77Ev();
extern void _ZN9S210C5_nt3v78Ev();
extern void _ZN9S210C5_nt3v79Ev();
extern void _ZN9S210C5_nt3v80Ev();
extern void _ZN9S210C5_nt3v81Ev();
extern void _ZN9S210C5_nt3v82Ev();
extern void _ZN9S210C5_nt3v83Ev();
extern void _ZN9S210C5_nt3v84Ev();
extern void _ZN9S210C5_nt3v85Ev();
extern void _ZN9S210C5_nt3v86Ev();
extern void _ZN9S210C5_nt3v87Ev();
extern void _ZN9S210C5_nt3v88Ev();
extern void _ZN9S210C5_nt3v89Ev();
extern void _ZN9S210C4_nt3v90Ev();
extern void _ZN9S210C4_nt3v91Ev();
extern void _ZN9S210C4_nt3v92Ev();
extern void _ZN9S210C4_nt3v93Ev();
extern void _ZN9S210C4_nt3v94Ev();
extern void _ZN9S210C4_nt3v95Ev();
extern void _ZN9S210C4_nt3v96Ev();
extern void _ZN9S210C4_nt3v97Ev();
extern void _ZN9S210C4_nt3v98Ev();
extern void _ZN9S210C4_nt3v99Ev();
extern void _ZN9S210C4_nt4v100Ev();
extern void _ZN9S210C4_nt4v101Ev();
extern void _ZN9S210C4_nt4v102Ev();
extern void _ZN9S210C4_nt4v103Ev();
extern void _ZN9S210C4_nt4v104Ev();
extern void _ZN9S210C4_nt4v105Ev();
extern void _ZN9S210C4_nt4v106Ev();
extern void _ZN9S210C4_nt4v107Ev();
extern void _ZN9S210C4_nt4v108Ev();
extern void _ZN9S210C4_nt4v109Ev();
extern void _ZN9S210C3_nt4v110Ev();
extern void _ZN9S210C3_nt4v111Ev();
extern void _ZN9S210C3_nt4v112Ev();
extern void _ZN9S210C3_nt4v113Ev();
static  VTBL_ENTRY vtc_S210C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S210C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S210C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S210C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S210C62v4Ev,
  (VTBL_ENTRY)&_ZN6S210C62v5Ev,
  (VTBL_ENTRY)&_ZN6S210C62v6Ev,
  (VTBL_ENTRY)&_ZN6S210C62v7Ev,
  (VTBL_ENTRY)&_ZN6S210C62v8Ev,
  (VTBL_ENTRY)&_ZN6S210C62v9Ev,
  (VTBL_ENTRY)&_ZN6S210C63v10Ev,
  (VTBL_ENTRY)&_ZN6S210C63v11Ev,
  (VTBL_ENTRY)&_ZN6S210C63v12Ev,
  (VTBL_ENTRY)&_ZN6S210C63v13Ev,
  (VTBL_ENTRY)&_ZN6S210C63v14Ev,
  (VTBL_ENTRY)&_ZN6S210C63v15Ev,
  (VTBL_ENTRY)&_ZN6S210C63v16Ev,
  (VTBL_ENTRY)&_ZN6S210C63v17Ev,
  (VTBL_ENTRY)&_ZN6S210C63v18Ev,
  (VTBL_ENTRY)&_ZN6S210C63v19Ev,
  (VTBL_ENTRY)&_ZN6S210C63v20Ev,
  (VTBL_ENTRY)&_ZN6S210C63v21Ev,
  (VTBL_ENTRY)&_ZN6S210C63v22Ev,
  (VTBL_ENTRY)&_ZN6S210C63v23Ev,
  (VTBL_ENTRY)&_ZN6S210C63v24Ev,
  (VTBL_ENTRY)&_ZN6S210C63v25Ev,
  (VTBL_ENTRY)&_ZN6S210C63v26Ev,
  (VTBL_ENTRY)&_ZN6S210C63v27Ev,
  (VTBL_ENTRY)&_ZN6S210C63v28Ev,
  (VTBL_ENTRY)&_ZN6S210C63v29Ev,
  (VTBL_ENTRY)&_ZN6S210C63v30Ev,
  (VTBL_ENTRY)&_ZN6S210C63v31Ev,
  (VTBL_ENTRY)&_ZN6S210C63v32Ev,
  (VTBL_ENTRY)&_ZN6S210C63v33Ev,
  (VTBL_ENTRY)&_ZN6S210C63v34Ev,
  (VTBL_ENTRY)&_ZN6S210C63v35Ev,
  (VTBL_ENTRY)&_ZN6S210C63v36Ev,
  (VTBL_ENTRY)&_ZN6S210C63v37Ev,
  (VTBL_ENTRY)&_ZN6S210C63v38Ev,
  (VTBL_ENTRY)&_ZN6S210C63v39Ev,
  (VTBL_ENTRY)&_ZN6S210C63v40Ev,
  (VTBL_ENTRY)&_ZN6S210C63v41Ev,
  (VTBL_ENTRY)&_ZN6S210C63v42Ev,
  (VTBL_ENTRY)&_ZN6S210C63v43Ev,
  (VTBL_ENTRY)&_ZN6S210C63v44Ev,
  (VTBL_ENTRY)&_ZN6S210C63v45Ev,
  (VTBL_ENTRY)&_ZN6S210C63v46Ev,
  (VTBL_ENTRY)&_ZN6S210C63v47Ev,
  (VTBL_ENTRY)&_ZN6S210C63v48Ev,
  (VTBL_ENTRY)&_ZN6S210C63v49Ev,
  (VTBL_ENTRY)&_ZN6S210C63v50Ev,
  (VTBL_ENTRY)&_ZN6S210C63v51Ev,
  (VTBL_ENTRY)&_ZN6S210C63v52Ev,
  (VTBL_ENTRY)&_ZN6S210C63v53Ev,
  (VTBL_ENTRY)&_ZN6S210C63v54Ev,
  (VTBL_ENTRY)&_ZN6S210C63v55Ev,
  (VTBL_ENTRY)&_ZN6S210C63v56Ev,
  (VTBL_ENTRY)&_ZN6S210C63v57Ev,
  (VTBL_ENTRY)&_ZN6S210C63v58Ev,
  (VTBL_ENTRY)&_ZN6S210C63v59Ev,
  (VTBL_ENTRY)&_ZN6S210C63v60Ev,
  (VTBL_ENTRY)&_ZN6S210C63v61Ev,
  (VTBL_ENTRY)&_ZN6S210C63v62Ev,
  (VTBL_ENTRY)&_ZN6S210C63v63Ev,
  (VTBL_ENTRY)&_ZN6S210C63v64Ev,
  (VTBL_ENTRY)&_ZN6S210C63v65Ev,
  (VTBL_ENTRY)&_ZN6S210C63v66Ev,
  (VTBL_ENTRY)&_ZN6S210C63v67Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S210C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S210C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S210C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S210C3_nt4v113Ev,
};
extern VTBL_ENTRY _ZTI9S210C3_nt[];
VTBL_ENTRY *P__ZTI9S210C3_nt = _ZTI9S210C3_nt; 
extern  VTBL_ENTRY _ZTV9S210C3_nt[];
Class_Descriptor cd_S210C3_nt = {  "S210C3_nt", // class name
  bases_S210C3_nt, 3,
  &(vtc_S210C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI9S210C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S210C3_nt),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S210C2  : S210C3_nt {
  virtual  ~S210C2(); // _ZN6S210C2D1Ev
  virtual void  v114(); // _ZN6S210C24v114Ev
  virtual void  v115(); // _ZN6S210C24v115Ev
  S210C2(); // tgen
};
//SIG(-1 S210C2) 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 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2}


 S210C2 ::~S210C2(){ note_dtor("S210C2", this);}
void  S210C2 ::v114(){vfunc_called(this, "_ZN6S210C24v114Ev");}
void  S210C2 ::v115(){vfunc_called(this, "_ZN6S210C24v115Ev");}
S210C2 ::S210C2(){ note_ctor("S210C2", this);} // tgen

static void Test_S210C2()
{
  extern Class_Descriptor cd_S210C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S210C2, buf);
    S210C2 *dp, &lv = *(dp=new (buf) S210C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S210C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S210C2)");
    check_base_class_offset(lv, (S210C6*)(S210C5_nt*)(S210C4_nt*)(S210C3_nt*), 0, "S210C2");
    check_base_class_offset(lv, (S210C5_nt*)(S210C4_nt*)(S210C3_nt*), 0, "S210C2");
    check_base_class_offset(lv, (S210C4_nt*)(S210C3_nt*), 0, "S210C2");
    check_base_class_offset(lv, (S210C3_nt*), 0, "S210C2");
    test_class_info(&lv, &cd_S210C2);
    dp->~S210C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS210C2(Test_S210C2, "S210C2", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S210C2C1Ev();
extern void _ZN6S210C2D1Ev();
Name_Map name_map_S210C2[] = {
  NSPAIR(_ZN6S210C2C1Ev),
  NSPAIR(_ZN6S210C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S210C6;
extern VTBL_ENTRY _ZTI6S210C6[];
extern  VTBL_ENTRY _ZTV6S210C6[];
extern Class_Descriptor cd_S210C5_nt;
extern VTBL_ENTRY _ZTI9S210C5_nt[];
extern  VTBL_ENTRY _ZTV9S210C5_nt[];
extern Class_Descriptor cd_S210C4_nt;
extern VTBL_ENTRY _ZTI9S210C4_nt[];
extern  VTBL_ENTRY _ZTV9S210C4_nt[];
extern Class_Descriptor cd_S210C3_nt;
extern VTBL_ENTRY _ZTI9S210C3_nt[];
extern  VTBL_ENTRY _ZTV9S210C3_nt[];
static Base_Class bases_S210C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S210C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S210C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S210C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S210C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S210C2[];
extern void _ZN6S210C2D1Ev();
extern void _ZN6S210C2D0Ev();
extern void _ZN6S210C62v4Ev();
extern void _ZN6S210C62v5Ev();
extern void _ZN6S210C62v6Ev();
extern void _ZN6S210C62v7Ev();
extern void _ZN6S210C62v8Ev();
extern void _ZN6S210C62v9Ev();
extern void _ZN6S210C63v10Ev();
extern void _ZN6S210C63v11Ev();
extern void _ZN6S210C63v12Ev();
extern void _ZN6S210C63v13Ev();
extern void _ZN6S210C63v14Ev();
extern void _ZN6S210C63v15Ev();
extern void _ZN6S210C63v16Ev();
extern void _ZN6S210C63v17Ev();
extern void _ZN6S210C63v18Ev();
extern void _ZN6S210C63v19Ev();
extern void _ZN6S210C63v20Ev();
extern void _ZN6S210C63v21Ev();
extern void _ZN6S210C63v22Ev();
extern void _ZN6S210C63v23Ev();
extern void _ZN6S210C63v24Ev();
extern void _ZN6S210C63v25Ev();
extern void _ZN6S210C63v26Ev();
extern void _ZN6S210C63v27Ev();
extern void _ZN6S210C63v28Ev();
extern void _ZN6S210C63v29Ev();
extern void _ZN6S210C63v30Ev();
extern void _ZN6S210C63v31Ev();
extern void _ZN6S210C63v32Ev();
extern void _ZN6S210C63v33Ev();
extern void _ZN6S210C63v34Ev();
extern void _ZN6S210C63v35Ev();
extern void _ZN6S210C63v36Ev();
extern void _ZN6S210C63v37Ev();
extern void _ZN6S210C63v38Ev();
extern void _ZN6S210C63v39Ev();
extern void _ZN6S210C63v40Ev();
extern void _ZN6S210C63v41Ev();
extern void _ZN6S210C63v42Ev();
extern void _ZN6S210C63v43Ev();
extern void _ZN6S210C63v44Ev();
extern void _ZN6S210C63v45Ev();
extern void _ZN6S210C63v46Ev();
extern void _ZN6S210C63v47Ev();
extern void _ZN6S210C63v48Ev();
extern void _ZN6S210C63v49Ev();
extern void _ZN6S210C63v50Ev();
extern void _ZN6S210C63v51Ev();
extern void _ZN6S210C63v52Ev();
extern void _ZN6S210C63v53Ev();
extern void _ZN6S210C63v54Ev();
extern void _ZN6S210C63v55Ev();
extern void _ZN6S210C63v56Ev();
extern void _ZN6S210C63v57Ev();
extern void _ZN6S210C63v58Ev();
extern void _ZN6S210C63v59Ev();
extern void _ZN6S210C63v60Ev();
extern void _ZN6S210C63v61Ev();
extern void _ZN6S210C63v62Ev();
extern void _ZN6S210C63v63Ev();
extern void _ZN6S210C63v64Ev();
extern void _ZN6S210C63v65Ev();
extern void _ZN6S210C63v66Ev();
extern void _ZN6S210C63v67Ev();
extern void _ZN9S210C5_nt3v68Ev();
extern void _ZN9S210C5_nt3v69Ev();
extern void _ZN9S210C5_nt3v70Ev();
extern void _ZN9S210C5_nt3v71Ev();
extern void _ZN9S210C5_nt3v72Ev();
extern void _ZN9S210C5_nt3v73Ev();
extern void _ZN9S210C5_nt3v74Ev();
extern void _ZN9S210C5_nt3v75Ev();
extern void _ZN9S210C5_nt3v76Ev();
extern void _ZN9S210C5_nt3v77Ev();
extern void _ZN9S210C5_nt3v78Ev();
extern void _ZN9S210C5_nt3v79Ev();
extern void _ZN9S210C5_nt3v80Ev();
extern void _ZN9S210C5_nt3v81Ev();
extern void _ZN9S210C5_nt3v82Ev();
extern void _ZN9S210C5_nt3v83Ev();
extern void _ZN9S210C5_nt3v84Ev();
extern void _ZN9S210C5_nt3v85Ev();
extern void _ZN9S210C5_nt3v86Ev();
extern void _ZN9S210C5_nt3v87Ev();
extern void _ZN9S210C5_nt3v88Ev();
extern void _ZN9S210C5_nt3v89Ev();
extern void _ZN9S210C4_nt3v90Ev();
extern void _ZN9S210C4_nt3v91Ev();
extern void _ZN9S210C4_nt3v92Ev();
extern void _ZN9S210C4_nt3v93Ev();
extern void _ZN9S210C4_nt3v94Ev();
extern void _ZN9S210C4_nt3v95Ev();
extern void _ZN9S210C4_nt3v96Ev();
extern void _ZN9S210C4_nt3v97Ev();
extern void _ZN9S210C4_nt3v98Ev();
extern void _ZN9S210C4_nt3v99Ev();
extern void _ZN9S210C4_nt4v100Ev();
extern void _ZN9S210C4_nt4v101Ev();
extern void _ZN9S210C4_nt4v102Ev();
extern void _ZN9S210C4_nt4v103Ev();
extern void _ZN9S210C4_nt4v104Ev();
extern void _ZN9S210C4_nt4v105Ev();
extern void _ZN9S210C4_nt4v106Ev();
extern void _ZN9S210C4_nt4v107Ev();
extern void _ZN9S210C4_nt4v108Ev();
extern void _ZN9S210C4_nt4v109Ev();
extern void _ZN9S210C3_nt4v110Ev();
extern void _ZN9S210C3_nt4v111Ev();
extern void _ZN9S210C3_nt4v112Ev();
extern void _ZN9S210C3_nt4v113Ev();
extern void _ZN6S210C24v114Ev();
extern void _ZN6S210C24v115Ev();
static  VTBL_ENTRY vtc_S210C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S210C2[0]),
  (VTBL_ENTRY)&_ZN6S210C2D1Ev,
  (VTBL_ENTRY)&_ZN6S210C2D0Ev,
  (VTBL_ENTRY)&_ZN6S210C62v4Ev,
  (VTBL_ENTRY)&_ZN6S210C62v5Ev,
  (VTBL_ENTRY)&_ZN6S210C62v6Ev,
  (VTBL_ENTRY)&_ZN6S210C62v7Ev,
  (VTBL_ENTRY)&_ZN6S210C62v8Ev,
  (VTBL_ENTRY)&_ZN6S210C62v9Ev,
  (VTBL_ENTRY)&_ZN6S210C63v10Ev,
  (VTBL_ENTRY)&_ZN6S210C63v11Ev,
  (VTBL_ENTRY)&_ZN6S210C63v12Ev,
  (VTBL_ENTRY)&_ZN6S210C63v13Ev,
  (VTBL_ENTRY)&_ZN6S210C63v14Ev,
  (VTBL_ENTRY)&_ZN6S210C63v15Ev,
  (VTBL_ENTRY)&_ZN6S210C63v16Ev,
  (VTBL_ENTRY)&_ZN6S210C63v17Ev,
  (VTBL_ENTRY)&_ZN6S210C63v18Ev,
  (VTBL_ENTRY)&_ZN6S210C63v19Ev,
  (VTBL_ENTRY)&_ZN6S210C63v20Ev,
  (VTBL_ENTRY)&_ZN6S210C63v21Ev,
  (VTBL_ENTRY)&_ZN6S210C63v22Ev,
  (VTBL_ENTRY)&_ZN6S210C63v23Ev,
  (VTBL_ENTRY)&_ZN6S210C63v24Ev,
  (VTBL_ENTRY)&_ZN6S210C63v25Ev,
  (VTBL_ENTRY)&_ZN6S210C63v26Ev,
  (VTBL_ENTRY)&_ZN6S210C63v27Ev,
  (VTBL_ENTRY)&_ZN6S210C63v28Ev,
  (VTBL_ENTRY)&_ZN6S210C63v29Ev,
  (VTBL_ENTRY)&_ZN6S210C63v30Ev,
  (VTBL_ENTRY)&_ZN6S210C63v31Ev,
  (VTBL_ENTRY)&_ZN6S210C63v32Ev,
  (VTBL_ENTRY)&_ZN6S210C63v33Ev,
  (VTBL_ENTRY)&_ZN6S210C63v34Ev,
  (VTBL_ENTRY)&_ZN6S210C63v35Ev,
  (VTBL_ENTRY)&_ZN6S210C63v36Ev,
  (VTBL_ENTRY)&_ZN6S210C63v37Ev,
  (VTBL_ENTRY)&_ZN6S210C63v38Ev,
  (VTBL_ENTRY)&_ZN6S210C63v39Ev,
  (VTBL_ENTRY)&_ZN6S210C63v40Ev,
  (VTBL_ENTRY)&_ZN6S210C63v41Ev,
  (VTBL_ENTRY)&_ZN6S210C63v42Ev,
  (VTBL_ENTRY)&_ZN6S210C63v43Ev,
  (VTBL_ENTRY)&_ZN6S210C63v44Ev,
  (VTBL_ENTRY)&_ZN6S210C63v45Ev,
  (VTBL_ENTRY)&_ZN6S210C63v46Ev,
  (VTBL_ENTRY)&_ZN6S210C63v47Ev,
  (VTBL_ENTRY)&_ZN6S210C63v48Ev,
  (VTBL_ENTRY)&_ZN6S210C63v49Ev,
  (VTBL_ENTRY)&_ZN6S210C63v50Ev,
  (VTBL_ENTRY)&_ZN6S210C63v51Ev,
  (VTBL_ENTRY)&_ZN6S210C63v52Ev,
  (VTBL_ENTRY)&_ZN6S210C63v53Ev,
  (VTBL_ENTRY)&_ZN6S210C63v54Ev,
  (VTBL_ENTRY)&_ZN6S210C63v55Ev,
  (VTBL_ENTRY)&_ZN6S210C63v56Ev,
  (VTBL_ENTRY)&_ZN6S210C63v57Ev,
  (VTBL_ENTRY)&_ZN6S210C63v58Ev,
  (VTBL_ENTRY)&_ZN6S210C63v59Ev,
  (VTBL_ENTRY)&_ZN6S210C63v60Ev,
  (VTBL_ENTRY)&_ZN6S210C63v61Ev,
  (VTBL_ENTRY)&_ZN6S210C63v62Ev,
  (VTBL_ENTRY)&_ZN6S210C63v63Ev,
  (VTBL_ENTRY)&_ZN6S210C63v64Ev,
  (VTBL_ENTRY)&_ZN6S210C63v65Ev,
  (VTBL_ENTRY)&_ZN6S210C63v66Ev,
  (VTBL_ENTRY)&_ZN6S210C63v67Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S210C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S210C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S210C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S210C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN6S210C24v114Ev,
  (VTBL_ENTRY)&_ZN6S210C24v115Ev,
};
extern VTBL_ENTRY _ZTI6S210C2[];
extern  VTBL_ENTRY _ZTV6S210C2[];
Class_Descriptor cd_S210C2 = {  "S210C2", // class name
  bases_S210C2, 4,
  &(vtc_S210C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S210C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S210C2),116, //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  S210C1  : S210C2 {
  unsigned int s210c1f0:1;
  int s210c1f1[2];
  virtual  ~S210C1(); // _ZN6S210C1D1Ev
  virtual void  v1(); // _ZN6S210C12v1Ev
  virtual void  v2(); // _ZN6S210C12v2Ev
  virtual void  v3(); // _ZN6S210C12v3Ev
  S210C1(); // tgen
};
//SIG(1 S210C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v110 v111 v112 v113 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v114 v115} vd v1 v2 v3 Fi:1 Fi[2]}


 S210C1 ::~S210C1(){ note_dtor("S210C1", this);}
void  S210C1 ::v1(){vfunc_called(this, "_ZN6S210C12v1Ev");}
void  S210C1 ::v2(){vfunc_called(this, "_ZN6S210C12v2Ev");}
void  S210C1 ::v3(){vfunc_called(this, "_ZN6S210C12v3Ev");}
S210C1 ::S210C1(){ note_ctor("S210C1", this);} // tgen

static void Test_S210C1()
{
  extern Class_Descriptor cd_S210C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,59)];
    init_test(&cd_S210C1, buf);
    S210C1 *dp, &lv = *(dp=new (buf) S210C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,232), "sizeof(S210C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S210C1)");
    check_base_class_offset(lv, (S210C6*)(S210C5_nt*)(S210C4_nt*)(S210C3_nt*)(S210C2*), 0, "S210C1");
    check_base_class_offset(lv, (S210C5_nt*)(S210C4_nt*)(S210C3_nt*)(S210C2*), 0, "S210C1");
    check_base_class_offset(lv, (S210C4_nt*)(S210C3_nt*)(S210C2*), 0, "S210C1");
    check_base_class_offset(lv, (S210C3_nt*)(S210C2*), 0, "S210C1");
    check_base_class_offset(lv, (S210C2*), 0, "S210C1");
    set_bf_and_test(lv, s210c1f0, ABISELECT(296,220), 0, 1, 1, "S210C1");
    check_field_offset(lv, s210c1f1, ABISELECT(300,224), "S210C1.s210c1f1");
    test_class_info(&lv, &cd_S210C1);
    dp->~S210C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS210C1(Test_S210C1, "S210C1", ABISELECT(312,232));

#else // __cplusplus

extern void _ZN6S210C1C1Ev();
extern void _ZN6S210C1D1Ev();
Name_Map name_map_S210C1[] = {
  NSPAIR(_ZN6S210C1C1Ev),
  NSPAIR(_ZN6S210C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S210C6;
extern VTBL_ENTRY _ZTI6S210C6[];
extern  VTBL_ENTRY _ZTV6S210C6[];
extern Class_Descriptor cd_S210C5_nt;
extern VTBL_ENTRY _ZTI9S210C5_nt[];
extern  VTBL_ENTRY _ZTV9S210C5_nt[];
extern Class_Descriptor cd_S210C4_nt;
extern VTBL_ENTRY _ZTI9S210C4_nt[];
extern  VTBL_ENTRY _ZTV9S210C4_nt[];
extern Class_Descriptor cd_S210C3_nt;
extern VTBL_ENTRY _ZTI9S210C3_nt[];
extern  VTBL_ENTRY _ZTV9S210C3_nt[];
extern Class_Descriptor cd_S210C2;
extern VTBL_ENTRY _ZTI6S210C2[];
extern  VTBL_ENTRY _ZTV6S210C2[];
static Base_Class bases_S210C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S210C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S210C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S210C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S210C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S210C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S210C1[];
extern void _ZN6S210C1D1Ev();
extern void _ZN6S210C1D0Ev();
extern void _ZN6S210C62v4Ev();
extern void _ZN6S210C62v5Ev();
extern void _ZN6S210C62v6Ev();
extern void _ZN6S210C62v7Ev();
extern void _ZN6S210C62v8Ev();
extern void _ZN6S210C62v9Ev();
extern void _ZN6S210C63v10Ev();
extern void _ZN6S210C63v11Ev();
extern void _ZN6S210C63v12Ev();
extern void _ZN6S210C63v13Ev();
extern void _ZN6S210C63v14Ev();
extern void _ZN6S210C63v15Ev();
extern void _ZN6S210C63v16Ev();
extern void _ZN6S210C63v17Ev();
extern void _ZN6S210C63v18Ev();
extern void _ZN6S210C63v19Ev();
extern void _ZN6S210C63v20Ev();
extern void _ZN6S210C63v21Ev();
extern void _ZN6S210C63v22Ev();
extern void _ZN6S210C63v23Ev();
extern void _ZN6S210C63v24Ev();
extern void _ZN6S210C63v25Ev();
extern void _ZN6S210C63v26Ev();
extern void _ZN6S210C63v27Ev();
extern void _ZN6S210C63v28Ev();
extern void _ZN6S210C63v29Ev();
extern void _ZN6S210C63v30Ev();
extern void _ZN6S210C63v31Ev();
extern void _ZN6S210C63v32Ev();
extern void _ZN6S210C63v33Ev();
extern void _ZN6S210C63v34Ev();
extern void _ZN6S210C63v35Ev();
extern void _ZN6S210C63v36Ev();
extern void _ZN6S210C63v37Ev();
extern void _ZN6S210C63v38Ev();
extern void _ZN6S210C63v39Ev();
extern void _ZN6S210C63v40Ev();
extern void _ZN6S210C63v41Ev();
extern void _ZN6S210C63v42Ev();
extern void _ZN6S210C63v43Ev();
extern void _ZN6S210C63v44Ev();
extern void _ZN6S210C63v45Ev();
extern void _ZN6S210C63v46Ev();
extern void _ZN6S210C63v47Ev();
extern void _ZN6S210C63v48Ev();
extern void _ZN6S210C63v49Ev();
extern void _ZN6S210C63v50Ev();
extern void _ZN6S210C63v51Ev();
extern void _ZN6S210C63v52Ev();
extern void _ZN6S210C63v53Ev();
extern void _ZN6S210C63v54Ev();
extern void _ZN6S210C63v55Ev();
extern void _ZN6S210C63v56Ev();
extern void _ZN6S210C63v57Ev();
extern void _ZN6S210C63v58Ev();
extern void _ZN6S210C63v59Ev();
extern void _ZN6S210C63v60Ev();
extern void _ZN6S210C63v61Ev();
extern void _ZN6S210C63v62Ev();
extern void _ZN6S210C63v63Ev();
extern void _ZN6S210C63v64Ev();
extern void _ZN6S210C63v65Ev();
extern void _ZN6S210C63v66Ev();
extern void _ZN6S210C63v67Ev();
extern void _ZN9S210C5_nt3v68Ev();
extern void _ZN9S210C5_nt3v69Ev();
extern void _ZN9S210C5_nt3v70Ev();
extern void _ZN9S210C5_nt3v71Ev();
extern void _ZN9S210C5_nt3v72Ev();
extern void _ZN9S210C5_nt3v73Ev();
extern void _ZN9S210C5_nt3v74Ev();
extern void _ZN9S210C5_nt3v75Ev();
extern void _ZN9S210C5_nt3v76Ev();
extern void _ZN9S210C5_nt3v77Ev();
extern void _ZN9S210C5_nt3v78Ev();
extern void _ZN9S210C5_nt3v79Ev();
extern void _ZN9S210C5_nt3v80Ev();
extern void _ZN9S210C5_nt3v81Ev();
extern void _ZN9S210C5_nt3v82Ev();
extern void _ZN9S210C5_nt3v83Ev();
extern void _ZN9S210C5_nt3v84Ev();
extern void _ZN9S210C5_nt3v85Ev();
extern void _ZN9S210C5_nt3v86Ev();
extern void _ZN9S210C5_nt3v87Ev();
extern void _ZN9S210C5_nt3v88Ev();
extern void _ZN9S210C5_nt3v89Ev();
extern void _ZN9S210C4_nt3v90Ev();
extern void _ZN9S210C4_nt3v91Ev();
extern void _ZN9S210C4_nt3v92Ev();
extern void _ZN9S210C4_nt3v93Ev();
extern void _ZN9S210C4_nt3v94Ev();
extern void _ZN9S210C4_nt3v95Ev();
extern void _ZN9S210C4_nt3v96Ev();
extern void _ZN9S210C4_nt3v97Ev();
extern void _ZN9S210C4_nt3v98Ev();
extern void _ZN9S210C4_nt3v99Ev();
extern void _ZN9S210C4_nt4v100Ev();
extern void _ZN9S210C4_nt4v101Ev();
extern void _ZN9S210C4_nt4v102Ev();
extern void _ZN9S210C4_nt4v103Ev();
extern void _ZN9S210C4_nt4v104Ev();
extern void _ZN9S210C4_nt4v105Ev();
extern void _ZN9S210C4_nt4v106Ev();
extern void _ZN9S210C4_nt4v107Ev();
extern void _ZN9S210C4_nt4v108Ev();
extern void _ZN9S210C4_nt4v109Ev();
extern void _ZN9S210C3_nt4v110Ev();
extern void _ZN9S210C3_nt4v111Ev();
extern void _ZN9S210C3_nt4v112Ev();
extern void _ZN9S210C3_nt4v113Ev();
extern void _ZN6S210C24v114Ev();
extern void _ZN6S210C24v115Ev();
extern void _ZN6S210C12v1Ev();
extern void _ZN6S210C12v2Ev();
extern void _ZN6S210C12v3Ev();
static  VTBL_ENTRY vtc_S210C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S210C1[0]),
  (VTBL_ENTRY)&_ZN6S210C1D1Ev,
  (VTBL_ENTRY)&_ZN6S210C1D0Ev,
  (VTBL_ENTRY)&_ZN6S210C62v4Ev,
  (VTBL_ENTRY)&_ZN6S210C62v5Ev,
  (VTBL_ENTRY)&_ZN6S210C62v6Ev,
  (VTBL_ENTRY)&_ZN6S210C62v7Ev,
  (VTBL_ENTRY)&_ZN6S210C62v8Ev,
  (VTBL_ENTRY)&_ZN6S210C62v9Ev,
  (VTBL_ENTRY)&_ZN6S210C63v10Ev,
  (VTBL_ENTRY)&_ZN6S210C63v11Ev,
  (VTBL_ENTRY)&_ZN6S210C63v12Ev,
  (VTBL_ENTRY)&_ZN6S210C63v13Ev,
  (VTBL_ENTRY)&_ZN6S210C63v14Ev,
  (VTBL_ENTRY)&_ZN6S210C63v15Ev,
  (VTBL_ENTRY)&_ZN6S210C63v16Ev,
  (VTBL_ENTRY)&_ZN6S210C63v17Ev,
  (VTBL_ENTRY)&_ZN6S210C63v18Ev,
  (VTBL_ENTRY)&_ZN6S210C63v19Ev,
  (VTBL_ENTRY)&_ZN6S210C63v20Ev,
  (VTBL_ENTRY)&_ZN6S210C63v21Ev,
  (VTBL_ENTRY)&_ZN6S210C63v22Ev,
  (VTBL_ENTRY)&_ZN6S210C63v23Ev,
  (VTBL_ENTRY)&_ZN6S210C63v24Ev,
  (VTBL_ENTRY)&_ZN6S210C63v25Ev,
  (VTBL_ENTRY)&_ZN6S210C63v26Ev,
  (VTBL_ENTRY)&_ZN6S210C63v27Ev,
  (VTBL_ENTRY)&_ZN6S210C63v28Ev,
  (VTBL_ENTRY)&_ZN6S210C63v29Ev,
  (VTBL_ENTRY)&_ZN6S210C63v30Ev,
  (VTBL_ENTRY)&_ZN6S210C63v31Ev,
  (VTBL_ENTRY)&_ZN6S210C63v32Ev,
  (VTBL_ENTRY)&_ZN6S210C63v33Ev,
  (VTBL_ENTRY)&_ZN6S210C63v34Ev,
  (VTBL_ENTRY)&_ZN6S210C63v35Ev,
  (VTBL_ENTRY)&_ZN6S210C63v36Ev,
  (VTBL_ENTRY)&_ZN6S210C63v37Ev,
  (VTBL_ENTRY)&_ZN6S210C63v38Ev,
  (VTBL_ENTRY)&_ZN6S210C63v39Ev,
  (VTBL_ENTRY)&_ZN6S210C63v40Ev,
  (VTBL_ENTRY)&_ZN6S210C63v41Ev,
  (VTBL_ENTRY)&_ZN6S210C63v42Ev,
  (VTBL_ENTRY)&_ZN6S210C63v43Ev,
  (VTBL_ENTRY)&_ZN6S210C63v44Ev,
  (VTBL_ENTRY)&_ZN6S210C63v45Ev,
  (VTBL_ENTRY)&_ZN6S210C63v46Ev,
  (VTBL_ENTRY)&_ZN6S210C63v47Ev,
  (VTBL_ENTRY)&_ZN6S210C63v48Ev,
  (VTBL_ENTRY)&_ZN6S210C63v49Ev,
  (VTBL_ENTRY)&_ZN6S210C63v50Ev,
  (VTBL_ENTRY)&_ZN6S210C63v51Ev,
  (VTBL_ENTRY)&_ZN6S210C63v52Ev,
  (VTBL_ENTRY)&_ZN6S210C63v53Ev,
  (VTBL_ENTRY)&_ZN6S210C63v54Ev,
  (VTBL_ENTRY)&_ZN6S210C63v55Ev,
  (VTBL_ENTRY)&_ZN6S210C63v56Ev,
  (VTBL_ENTRY)&_ZN6S210C63v57Ev,
  (VTBL_ENTRY)&_ZN6S210C63v58Ev,
  (VTBL_ENTRY)&_ZN6S210C63v59Ev,
  (VTBL_ENTRY)&_ZN6S210C63v60Ev,
  (VTBL_ENTRY)&_ZN6S210C63v61Ev,
  (VTBL_ENTRY)&_ZN6S210C63v62Ev,
  (VTBL_ENTRY)&_ZN6S210C63v63Ev,
  (VTBL_ENTRY)&_ZN6S210C63v64Ev,
  (VTBL_ENTRY)&_ZN6S210C63v65Ev,
  (VTBL_ENTRY)&_ZN6S210C63v66Ev,
  (VTBL_ENTRY)&_ZN6S210C63v67Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S210C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S210C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S210C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S210C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN6S210C24v114Ev,
  (VTBL_ENTRY)&_ZN6S210C24v115Ev,
  (VTBL_ENTRY)&_ZN6S210C12v1Ev,
  (VTBL_ENTRY)&_ZN6S210C12v2Ev,
  (VTBL_ENTRY)&_ZN6S210C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S210C1[];
extern  VTBL_ENTRY _ZTV6S210C1[];
Class_Descriptor cd_S210C1 = {  "S210C1", // class name
  bases_S210C1, 5,
  &(vtc_S210C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,232), // object size
  NSPAIRA(_ZTI6S210C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S210C1),119, //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  S209C6  {
  int s209c6f0;
  __tsi64 s209c6f1;
  void *s209c6f2[4];
  int s209c6f3[2];
  void *s209c6f4;
  ::S1503C5_nt s209c6f5;
  void *s209c6f6[2];
  virtual  ~S209C6(); // _ZN6S209C6D1Ev
  virtual void  v4(); // _ZN6S209C62v4Ev
  virtual void  v5(); // _ZN6S209C62v5Ev
  virtual void  v6(); // _ZN6S209C62v6Ev
  virtual void  v7(); // _ZN6S209C62v7Ev
  virtual void  v8(); // _ZN6S209C62v8Ev
  virtual void  v9(); // _ZN6S209C62v9Ev
  virtual void  v10(); // _ZN6S209C63v10Ev
  virtual void  v11(); // _ZN6S209C63v11Ev
  virtual void  v12(); // _ZN6S209C63v12Ev
  virtual void  v13(); // _ZN6S209C63v13Ev
  virtual void  v14(); // _ZN6S209C63v14Ev
  virtual void  v15(); // _ZN6S209C63v15Ev
  virtual void  v16(); // _ZN6S209C63v16Ev
  virtual void  v17(); // _ZN6S209C63v17Ev
  virtual void  v18(); // _ZN6S209C63v18Ev
  virtual void  v19(); // _ZN6S209C63v19Ev
  virtual void  v20(); // _ZN6S209C63v20Ev
  virtual void  v21(); // _ZN6S209C63v21Ev
  virtual void  v22(); // _ZN6S209C63v22Ev
  virtual void  v23(); // _ZN6S209C63v23Ev
  virtual void  v24(); // _ZN6S209C63v24Ev
  virtual void  v25(); // _ZN6S209C63v25Ev
  virtual void  v26(); // _ZN6S209C63v26Ev
  virtual void  v27(); // _ZN6S209C63v27Ev
  virtual void  v28(); // _ZN6S209C63v28Ev
  virtual void  v29(); // _ZN6S209C63v29Ev
  virtual void  v30(); // _ZN6S209C63v30Ev
  virtual void  v31(); // _ZN6S209C63v31Ev
  virtual void  v32(); // _ZN6S209C63v32Ev
  virtual void  v33(); // _ZN6S209C63v33Ev
  virtual void  v34(); // _ZN6S209C63v34Ev
  virtual void  v35(); // _ZN6S209C63v35Ev
  virtual void  v36(); // _ZN6S209C63v36Ev
  virtual void  v37(); // _ZN6S209C63v37Ev
  virtual void  v38(); // _ZN6S209C63v38Ev
  virtual void  v39(); // _ZN6S209C63v39Ev
  virtual void  v40(); // _ZN6S209C63v40Ev
  virtual void  v41(); // _ZN6S209C63v41Ev
  virtual void  v42(); // _ZN6S209C63v42Ev
  virtual void  v43(); // _ZN6S209C63v43Ev
  virtual void  v44(); // _ZN6S209C63v44Ev
  virtual void  v45(); // _ZN6S209C63v45Ev
  virtual void  v46(); // _ZN6S209C63v46Ev
  virtual void  v47(); // _ZN6S209C63v47Ev
  virtual void  v48(); // _ZN6S209C63v48Ev
  virtual void  v49(); // _ZN6S209C63v49Ev
  virtual void  v50(); // _ZN6S209C63v50Ev
  virtual void  v51(); // _ZN6S209C63v51Ev
  virtual void  v52(); // _ZN6S209C63v52Ev
  virtual void  v53(); // _ZN6S209C63v53Ev
  virtual void  v54(); // _ZN6S209C63v54Ev
  virtual void  v55(); // _ZN6S209C63v55Ev
  virtual void  v56(); // _ZN6S209C63v56Ev
  virtual void  v57(); // _ZN6S209C63v57Ev
  virtual void  v58(); // _ZN6S209C63v58Ev
  virtual void  v59(); // _ZN6S209C63v59Ev
  virtual void  v60(); // _ZN6S209C63v60Ev
  virtual void  v61(); // _ZN6S209C63v61Ev
  virtual void  v62(); // _ZN6S209C63v62Ev
  virtual void  v63(); // _ZN6S209C63v63Ev
  virtual void  v64(); // _ZN6S209C63v64Ev
  virtual void  v65(); // _ZN6S209C63v65Ev
  virtual void  v66(); // _ZN6S209C63v66Ev
  virtual void  v67(); // _ZN6S209C63v67Ev
  S209C6(); // tgen
};
//SIG(-1 S209C6) 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]}


 S209C6 ::~S209C6(){ note_dtor("S209C6", this);}
void  S209C6 ::v4(){vfunc_called(this, "_ZN6S209C62v4Ev");}
void  S209C6 ::v5(){vfunc_called(this, "_ZN6S209C62v5Ev");}
void  S209C6 ::v6(){vfunc_called(this, "_ZN6S209C62v6Ev");}
void  S209C6 ::v7(){vfunc_called(this, "_ZN6S209C62v7Ev");}
void  S209C6 ::v8(){vfunc_called(this, "_ZN6S209C62v8Ev");}
void  S209C6 ::v9(){vfunc_called(this, "_ZN6S209C62v9Ev");}
void  S209C6 ::v10(){vfunc_called(this, "_ZN6S209C63v10Ev");}
void  S209C6 ::v11(){vfunc_called(this, "_ZN6S209C63v11Ev");}
void  S209C6 ::v12(){vfunc_called(this, "_ZN6S209C63v12Ev");}
void  S209C6 ::v13(){vfunc_called(this, "_ZN6S209C63v13Ev");}
void  S209C6 ::v14(){vfunc_called(this, "_ZN6S209C63v14Ev");}
void  S209C6 ::v15(){vfunc_called(this, "_ZN6S209C63v15Ev");}
void  S209C6 ::v16(){vfunc_called(this, "_ZN6S209C63v16Ev");}
void  S209C6 ::v17(){vfunc_called(this, "_ZN6S209C63v17Ev");}
void  S209C6 ::v18(){vfunc_called(this, "_ZN6S209C63v18Ev");}
void  S209C6 ::v19(){vfunc_called(this, "_ZN6S209C63v19Ev");}
void  S209C6 ::v20(){vfunc_called(this, "_ZN6S209C63v20Ev");}
void  S209C6 ::v21(){vfunc_called(this, "_ZN6S209C63v21Ev");}
void  S209C6 ::v22(){vfunc_called(this, "_ZN6S209C63v22Ev");}
void  S209C6 ::v23(){vfunc_called(this, "_ZN6S209C63v23Ev");}
void  S209C6 ::v24(){vfunc_called(this, "_ZN6S209C63v24Ev");}
void  S209C6 ::v25(){vfunc_called(this, "_ZN6S209C63v25Ev");}
void  S209C6 ::v26(){vfunc_called(this, "_ZN6S209C63v26Ev");}
void  S209C6 ::v27(){vfunc_called(this, "_ZN6S209C63v27Ev");}
void  S209C6 ::v28(){vfunc_called(this, "_ZN6S209C63v28Ev");}
void  S209C6 ::v29(){vfunc_called(this, "_ZN6S209C63v29Ev");}
void  S209C6 ::v30(){vfunc_called(this, "_ZN6S209C63v30Ev");}
void  S209C6 ::v31(){vfunc_called(this, "_ZN6S209C63v31Ev");}
void  S209C6 ::v32(){vfunc_called(this, "_ZN6S209C63v32Ev");}
void  S209C6 ::v33(){vfunc_called(this, "_ZN6S209C63v33Ev");}
void  S209C6 ::v34(){vfunc_called(this, "_ZN6S209C63v34Ev");}
void  S209C6 ::v35(){vfunc_called(this, "_ZN6S209C63v35Ev");}
void  S209C6 ::v36(){vfunc_called(this, "_ZN6S209C63v36Ev");}
void  S209C6 ::v37(){vfunc_called(this, "_ZN6S209C63v37Ev");}
void  S209C6 ::v38(){vfunc_called(this, "_ZN6S209C63v38Ev");}
void  S209C6 ::v39(){vfunc_called(this, "_ZN6S209C63v39Ev");}
void  S209C6 ::v40(){vfunc_called(this, "_ZN6S209C63v40Ev");}
void  S209C6 ::v41(){vfunc_called(this, "_ZN6S209C63v41Ev");}
void  S209C6 ::v42(){vfunc_called(this, "_ZN6S209C63v42Ev");}
void  S209C6 ::v43(){vfunc_called(this, "_ZN6S209C63v43Ev");}
void  S209C6 ::v44(){vfunc_called(this, "_ZN6S209C63v44Ev");}
void  S209C6 ::v45(){vfunc_called(this, "_ZN6S209C63v45Ev");}
void  S209C6 ::v46(){vfunc_called(this, "_ZN6S209C63v46Ev");}
void  S209C6 ::v47(){vfunc_called(this, "_ZN6S209C63v47Ev");}
void  S209C6 ::v48(){vfunc_called(this, "_ZN6S209C63v48Ev");}
void  S209C6 ::v49(){vfunc_called(this, "_ZN6S209C63v49Ev");}
void  S209C6 ::v50(){vfunc_called(this, "_ZN6S209C63v50Ev");}
void  S209C6 ::v51(){vfunc_called(this, "_ZN6S209C63v51Ev");}
void  S209C6 ::v52(){vfunc_called(this, "_ZN6S209C63v52Ev");}
void  S209C6 ::v53(){vfunc_called(this, "_ZN6S209C63v53Ev");}
void  S209C6 ::v54(){vfunc_called(this, "_ZN6S209C63v54Ev");}
void  S209C6 ::v55(){vfunc_called(this, "_ZN6S209C63v55Ev");}
void  S209C6 ::v56(){vfunc_called(this, "_ZN6S209C63v56Ev");}
void  S209C6 ::v57(){vfunc_called(this, "_ZN6S209C63v57Ev");}
void  S209C6 ::v58(){vfunc_called(this, "_ZN6S209C63v58Ev");}
void  S209C6 ::v59(){vfunc_called(this, "_ZN6S209C63v59Ev");}
void  S209C6 ::v60(){vfunc_called(this, "_ZN6S209C63v60Ev");}
void  S209C6 ::v61(){vfunc_called(this, "_ZN6S209C63v61Ev");}
void  S209C6 ::v62(){vfunc_called(this, "_ZN6S209C63v62Ev");}
void  S209C6 ::v63(){vfunc_called(this, "_ZN6S209C63v63Ev");}
void  S209C6 ::v64(){vfunc_called(this, "_ZN6S209C63v64Ev");}
void  S209C6 ::v65(){vfunc_called(this, "_ZN6S209C63v65Ev");}
void  S209C6 ::v66(){vfunc_called(this, "_ZN6S209C63v66Ev");}
void  S209C6 ::v67(){vfunc_called(this, "_ZN6S209C63v67Ev");}
S209C6 ::S209C6(){ note_ctor("S209C6", this);} // tgen

static void Test_S209C6()
{
  extern Class_Descriptor cd_S209C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S209C6, buf);
    S209C6 *dp, &lv = *(dp=new (buf) S209C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S209C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S209C6)");
    check_field_offset(lv, s209c6f0, ABISELECT(8,4), "S209C6.s209c6f0");
    check_field_offset(lv, s209c6f1, ABISELECT(16,8), "S209C6.s209c6f1");
    check_field_offset(lv, s209c6f2, ABISELECT(24,16), "S209C6.s209c6f2");
    check_field_offset(lv, s209c6f3, ABISELECT(56,32), "S209C6.s209c6f3");
    check_field_offset(lv, s209c6f4, ABISELECT(64,40), "S209C6.s209c6f4");
    check_field_offset(lv, s209c6f5, ABISELECT(72,44), "S209C6.s209c6f5");
    check_field_offset(lv, s209c6f6, ABISELECT(80,52), "S209C6.s209c6f6");
    test_class_info(&lv, &cd_S209C6);
    dp->~S209C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS209C6(Test_S209C6, "S209C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S209C6C1Ev();
extern void _ZN6S209C6D1Ev();
Name_Map name_map_S209C6[] = {
  NSPAIR(_ZN6S209C6C1Ev),
  NSPAIR(_ZN6S209C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S209C6[];
extern void _ZN6S209C6D1Ev();
extern void _ZN6S209C6D0Ev();
extern void _ZN6S209C62v4Ev();
extern void _ZN6S209C62v5Ev();
extern void _ZN6S209C62v6Ev();
extern void _ZN6S209C62v7Ev();
extern void _ZN6S209C62v8Ev();
extern void _ZN6S209C62v9Ev();
extern void _ZN6S209C63v10Ev();
extern void _ZN6S209C63v11Ev();
extern void _ZN6S209C63v12Ev();
extern void _ZN6S209C63v13Ev();
extern void _ZN6S209C63v14Ev();
extern void _ZN6S209C63v15Ev();
extern void _ZN6S209C63v16Ev();
extern void _ZN6S209C63v17Ev();
extern void _ZN6S209C63v18Ev();
extern void _ZN6S209C63v19Ev();
extern void _ZN6S209C63v20Ev();
extern void _ZN6S209C63v21Ev();
extern void _ZN6S209C63v22Ev();
extern void _ZN6S209C63v23Ev();
extern void _ZN6S209C63v24Ev();
extern void _ZN6S209C63v25Ev();
extern void _ZN6S209C63v26Ev();
extern void _ZN6S209C63v27Ev();
extern void _ZN6S209C63v28Ev();
extern void _ZN6S209C63v29Ev();
extern void _ZN6S209C63v30Ev();
extern void _ZN6S209C63v31Ev();
extern void _ZN6S209C63v32Ev();
extern void _ZN6S209C63v33Ev();
extern void _ZN6S209C63v34Ev();
extern void _ZN6S209C63v35Ev();
extern void _ZN6S209C63v36Ev();
extern void _ZN6S209C63v37Ev();
extern void _ZN6S209C63v38Ev();
extern void _ZN6S209C63v39Ev();
extern void _ZN6S209C63v40Ev();
extern void _ZN6S209C63v41Ev();
extern void _ZN6S209C63v42Ev();
extern void _ZN6S209C63v43Ev();
extern void _ZN6S209C63v44Ev();
extern void _ZN6S209C63v45Ev();
extern void _ZN6S209C63v46Ev();
extern void _ZN6S209C63v47Ev();
extern void _ZN6S209C63v48Ev();
extern void _ZN6S209C63v49Ev();
extern void _ZN6S209C63v50Ev();
extern void _ZN6S209C63v51Ev();
extern void _ZN6S209C63v52Ev();
extern void _ZN6S209C63v53Ev();
extern void _ZN6S209C63v54Ev();
extern void _ZN6S209C63v55Ev();
extern void _ZN6S209C63v56Ev();
extern void _ZN6S209C63v57Ev();
extern void _ZN6S209C63v58Ev();
extern void _ZN6S209C63v59Ev();
extern void _ZN6S209C63v60Ev();
extern void _ZN6S209C63v61Ev();
extern void _ZN6S209C63v62Ev();
extern void _ZN6S209C63v63Ev();
extern void _ZN6S209C63v64Ev();
extern void _ZN6S209C63v65Ev();
extern void _ZN6S209C63v66Ev();
extern void _ZN6S209C63v67Ev();
static  VTBL_ENTRY vtc_S209C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S209C6[0]),
  (VTBL_ENTRY)&_ZN6S209C6D1Ev,
  (VTBL_ENTRY)&_ZN6S209C6D0Ev,
  (VTBL_ENTRY)&_ZN6S209C62v4Ev,
  (VTBL_ENTRY)&_ZN6S209C62v5Ev,
  (VTBL_ENTRY)&_ZN6S209C62v6Ev,
  (VTBL_ENTRY)&_ZN6S209C62v7Ev,
  (VTBL_ENTRY)&_ZN6S209C62v8Ev,
  (VTBL_ENTRY)&_ZN6S209C62v9Ev,
  (VTBL_ENTRY)&_ZN6S209C63v10Ev,
  (VTBL_ENTRY)&_ZN6S209C63v11Ev,
  (VTBL_ENTRY)&_ZN6S209C63v12Ev,
  (VTBL_ENTRY)&_ZN6S209C63v13Ev,
  (VTBL_ENTRY)&_ZN6S209C63v14Ev,
  (VTBL_ENTRY)&_ZN6S209C63v15Ev,
  (VTBL_ENTRY)&_ZN6S209C63v16Ev,
  (VTBL_ENTRY)&_ZN6S209C63v17Ev,
  (VTBL_ENTRY)&_ZN6S209C63v18Ev,
  (VTBL_ENTRY)&_ZN6S209C63v19Ev,
  (VTBL_ENTRY)&_ZN6S209C63v20Ev,
  (VTBL_ENTRY)&_ZN6S209C63v21Ev,
  (VTBL_ENTRY)&_ZN6S209C63v22Ev,
  (VTBL_ENTRY)&_ZN6S209C63v23Ev,
  (VTBL_ENTRY)&_ZN6S209C63v24Ev,
  (VTBL_ENTRY)&_ZN6S209C63v25Ev,
  (VTBL_ENTRY)&_ZN6S209C63v26Ev,
  (VTBL_ENTRY)&_ZN6S209C63v27Ev,
  (VTBL_ENTRY)&_ZN6S209C63v28Ev,
  (VTBL_ENTRY)&_ZN6S209C63v29Ev,
  (VTBL_ENTRY)&_ZN6S209C63v30Ev,
  (VTBL_ENTRY)&_ZN6S209C63v31Ev,
  (VTBL_ENTRY)&_ZN6S209C63v32Ev,
  (VTBL_ENTRY)&_ZN6S209C63v33Ev,
  (VTBL_ENTRY)&_ZN6S209C63v34Ev,
  (VTBL_ENTRY)&_ZN6S209C63v35Ev,
  (VTBL_ENTRY)&_ZN6S209C63v36Ev,
  (VTBL_ENTRY)&_ZN6S209C63v37Ev,
  (VTBL_ENTRY)&_ZN6S209C63v38Ev,
  (VTBL_ENTRY)&_ZN6S209C63v39Ev,
  (VTBL_ENTRY)&_ZN6S209C63v40Ev,
  (VTBL_ENTRY)&_ZN6S209C63v41Ev,
  (VTBL_ENTRY)&_ZN6S209C63v42Ev,
  (VTBL_ENTRY)&_ZN6S209C63v43Ev,
  (VTBL_ENTRY)&_ZN6S209C63v44Ev,
  (VTBL_ENTRY)&_ZN6S209C63v45Ev,
  (VTBL_ENTRY)&_ZN6S209C63v46Ev,
  (VTBL_ENTRY)&_ZN6S209C63v47Ev,
  (VTBL_ENTRY)&_ZN6S209C63v48Ev,
  (VTBL_ENTRY)&_ZN6S209C63v49Ev,
  (VTBL_ENTRY)&_ZN6S209C63v50Ev,
  (VTBL_ENTRY)&_ZN6S209C63v51Ev,
  (VTBL_ENTRY)&_ZN6S209C63v52Ev,
  (VTBL_ENTRY)&_ZN6S209C63v53Ev,
  (VTBL_ENTRY)&_ZN6S209C63v54Ev,
  (VTBL_ENTRY)&_ZN6S209C63v55Ev,
  (VTBL_ENTRY)&_ZN6S209C63v56Ev,
  (VTBL_ENTRY)&_ZN6S209C63v57Ev,
  (VTBL_ENTRY)&_ZN6S209C63v58Ev,
  (VTBL_ENTRY)&_ZN6S209C63v59Ev,
  (VTBL_ENTRY)&_ZN6S209C63v60Ev,
  (VTBL_ENTRY)&_ZN6S209C63v61Ev,
  (VTBL_ENTRY)&_ZN6S209C63v62Ev,
  (VTBL_ENTRY)&_ZN6S209C63v63Ev,
  (VTBL_ENTRY)&_ZN6S209C63v64Ev,
  (VTBL_ENTRY)&_ZN6S209C63v65Ev,
  (VTBL_ENTRY)&_ZN6S209C63v66Ev,
  (VTBL_ENTRY)&_ZN6S209C63v67Ev,
};
extern VTBL_ENTRY _ZTI6S209C6[];
extern  VTBL_ENTRY _ZTV6S209C6[];
Class_Descriptor cd_S209C6 = {  "S209C6", // class name
  0,0,//no base classes
  &(vtc_S209C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S209C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S209C6),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  S209C5  : S209C6 {
  int s209c5f0[2];
  void *s209c5f1;
  int s209c5f2[2];
  ::S210C8_nt s209c5f3;
  ::S210C8_nt s209c5f4;
  ::S629C14 s209c5f5;
  ::S210C8_nt s209c5f6;
  unsigned int s209c5f7:1;
  unsigned int s209c5f8:1;
  unsigned int s209c5f9:1;
  unsigned int s209c5f10:1;
  unsigned int s209c5f11:1;
  int s209c5f12[2];
  virtual  ~S209C5(); // _ZN6S209C5D1Ev
  virtual void  v68(); // _ZN6S209C53v68Ev
  virtual void  v69(); // _ZN6S209C53v69Ev
  virtual void  v70(); // _ZN6S209C53v70Ev
  virtual void  v71(); // _ZN6S209C53v71Ev
  virtual void  v72(); // _ZN6S209C53v72Ev
  virtual void  v73(); // _ZN6S209C53v73Ev
  virtual void  v74(); // _ZN6S209C53v74Ev
  virtual void  v75(); // _ZN6S209C53v75Ev
  virtual void  v76(); // _ZN6S209C53v76Ev
  virtual void  v77(); // _ZN6S209C53v77Ev
  virtual void  v78(); // _ZN6S209C53v78Ev
  virtual void  v79(); // _ZN6S209C53v79Ev
  virtual void  v80(); // _ZN6S209C53v80Ev
  virtual void  v81(); // _ZN6S209C53v81Ev
  virtual void  v82(); // _ZN6S209C53v82Ev
  virtual void  v83(); // _ZN6S209C53v83Ev
  virtual void  v84(); // _ZN6S209C53v84Ev
  virtual void  v85(); // _ZN6S209C53v85Ev
  virtual void  v86(); // _ZN6S209C53v86Ev
  virtual void  v87(); // _ZN6S209C53v87Ev
  virtual void  v88(); // _ZN6S209C53v88Ev
  virtual void  v89(); // _ZN6S209C53v89Ev
  S209C5(); // tgen
};
//SIG(-1 S209C5) 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]}


 S209C5 ::~S209C5(){ note_dtor("S209C5", this);}
void  S209C5 ::v68(){vfunc_called(this, "_ZN6S209C53v68Ev");}
void  S209C5 ::v69(){vfunc_called(this, "_ZN6S209C53v69Ev");}
void  S209C5 ::v70(){vfunc_called(this, "_ZN6S209C53v70Ev");}
void  S209C5 ::v71(){vfunc_called(this, "_ZN6S209C53v71Ev");}
void  S209C5 ::v72(){vfunc_called(this, "_ZN6S209C53v72Ev");}
void  S209C5 ::v73(){vfunc_called(this, "_ZN6S209C53v73Ev");}
void  S209C5 ::v74(){vfunc_called(this, "_ZN6S209C53v74Ev");}
void  S209C5 ::v75(){vfunc_called(this, "_ZN6S209C53v75Ev");}
void  S209C5 ::v76(){vfunc_called(this, "_ZN6S209C53v76Ev");}
void  S209C5 ::v77(){vfunc_called(this, "_ZN6S209C53v77Ev");}
void  S209C5 ::v78(){vfunc_called(this, "_ZN6S209C53v78Ev");}
void  S209C5 ::v79(){vfunc_called(this, "_ZN6S209C53v79Ev");}
void  S209C5 ::v80(){vfunc_called(this, "_ZN6S209C53v80Ev");}
void  S209C5 ::v81(){vfunc_called(this, "_ZN6S209C53v81Ev");}
void  S209C5 ::v82(){vfunc_called(this, "_ZN6S209C53v82Ev");}
void  S209C5 ::v83(){vfunc_called(this, "_ZN6S209C53v83Ev");}
void  S209C5 ::v84(){vfunc_called(this, "_ZN6S209C53v84Ev");}
void  S209C5 ::v85(){vfunc_called(this, "_ZN6S209C53v85Ev");}
void  S209C5 ::v86(){vfunc_called(this, "_ZN6S209C53v86Ev");}
void  S209C5 ::v87(){vfunc_called(this, "_ZN6S209C53v87Ev");}
void  S209C5 ::v88(){vfunc_called(this, "_ZN6S209C53v88Ev");}
void  S209C5 ::v89(){vfunc_called(this, "_ZN6S209C53v89Ev");}
S209C5 ::S209C5(){ note_ctor("S209C5", this);} // tgen

static void Test_S209C5()
{
  extern Class_Descriptor cd_S209C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S209C5, buf);
    S209C5 *dp, &lv = *(dp=new (buf) S209C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S209C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S209C5)");
    check_base_class_offset(lv, (S209C6*), 0, "S209C5");
    check_field_offset(lv, s209c5f0, ABISELECT(96,60), "S209C5.s209c5f0");
    check_field_offset(lv, s209c5f1, ABISELECT(104,68), "S209C5.s209c5f1");
    check_field_offset(lv, s209c5f2, ABISELECT(112,72), "S209C5.s209c5f2");
    check_field_offset(lv, s209c5f3, ABISELECT(120,80), "S209C5.s209c5f3");
    check_field_offset(lv, s209c5f4, ABISELECT(136,92), "S209C5.s209c5f4");
    check_field_offset(lv, s209c5f5, ABISELECT(152,104), "S209C5.s209c5f5");
    check_field_offset(lv, s209c5f6, ABISELECT(160,108), "S209C5.s209c5f6");
    set_bf_and_test(lv, s209c5f7, ABISELECT(176,120), 0, 1, 1, "S209C5");
    set_bf_and_test(lv, s209c5f8, ABISELECT(176,120), 1, 1, 1, "S209C5");
    set_bf_and_test(lv, s209c5f9, ABISELECT(176,120), 2, 1, 1, "S209C5");
    set_bf_and_test(lv, s209c5f10, ABISELECT(176,120), 3, 1, 1, "S209C5");
    set_bf_and_test(lv, s209c5f11, ABISELECT(176,120), 4, 1, 1, "S209C5");
    check_field_offset(lv, s209c5f12, ABISELECT(180,124), "S209C5.s209c5f12");
    test_class_info(&lv, &cd_S209C5);
    dp->~S209C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS209C5(Test_S209C5, "S209C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S209C5C1Ev();
extern void _ZN6S209C5D1Ev();
Name_Map name_map_S209C5[] = {
  NSPAIR(_ZN6S209C5C1Ev),
  NSPAIR(_ZN6S209C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S209C6;
extern VTBL_ENTRY _ZTI6S209C6[];
extern  VTBL_ENTRY _ZTV6S209C6[];
static Base_Class bases_S209C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S209C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S209C5[];
extern void _ZN6S209C5D1Ev();
extern void _ZN6S209C5D0Ev();
extern void _ZN6S209C62v4Ev();
extern void _ZN6S209C62v5Ev();
extern void _ZN6S209C62v6Ev();
extern void _ZN6S209C62v7Ev();
extern void _ZN6S209C62v8Ev();
extern void _ZN6S209C62v9Ev();
extern void _ZN6S209C63v10Ev();
extern void _ZN6S209C63v11Ev();
extern void _ZN6S209C63v12Ev();
extern void _ZN6S209C63v13Ev();
extern void _ZN6S209C63v14Ev();
extern void _ZN6S209C63v15Ev();
extern void _ZN6S209C63v16Ev();
extern void _ZN6S209C63v17Ev();
extern void _ZN6S209C63v18Ev();
extern void _ZN6S209C63v19Ev();
extern void _ZN6S209C63v20Ev();
extern void _ZN6S209C63v21Ev();
extern void _ZN6S209C63v22Ev();
extern void _ZN6S209C63v23Ev();
extern void _ZN6S209C63v24Ev();
extern void _ZN6S209C63v25Ev();
extern void _ZN6S209C63v26Ev();
extern void _ZN6S209C63v27Ev();
extern void _ZN6S209C63v28Ev();
extern void _ZN6S209C63v29Ev();
extern void _ZN6S209C63v30Ev();
extern void _ZN6S209C63v31Ev();
extern void _ZN6S209C63v32Ev();
extern void _ZN6S209C63v33Ev();
extern void _ZN6S209C63v34Ev();
extern void _ZN6S209C63v35Ev();
extern void _ZN6S209C63v36Ev();
extern void _ZN6S209C63v37Ev();
extern void _ZN6S209C63v38Ev();
extern void _ZN6S209C63v39Ev();
extern void _ZN6S209C63v40Ev();
extern void _ZN6S209C63v41Ev();
extern void _ZN6S209C63v42Ev();
extern void _ZN6S209C63v43Ev();
extern void _ZN6S209C63v44Ev();
extern void _ZN6S209C63v45Ev();
extern void _ZN6S209C63v46Ev();
extern void _ZN6S209C63v47Ev();
extern void _ZN6S209C63v48Ev();
extern void _ZN6S209C63v49Ev();
extern void _ZN6S209C63v50Ev();
extern void _ZN6S209C63v51Ev();
extern void _ZN6S209C63v52Ev();
extern void _ZN6S209C63v53Ev();
extern void _ZN6S209C63v54Ev();
extern void _ZN6S209C63v55Ev();
extern void _ZN6S209C63v56Ev();
extern void _ZN6S209C63v57Ev();
extern void _ZN6S209C63v58Ev();
extern void _ZN6S209C63v59Ev();
extern void _ZN6S209C63v60Ev();
extern void _ZN6S209C63v61Ev();
extern void _ZN6S209C63v62Ev();
extern void _ZN6S209C63v63Ev();
extern void _ZN6S209C63v64Ev();
extern void _ZN6S209C63v65Ev();
extern void _ZN6S209C63v66Ev();
extern void _ZN6S209C63v67Ev();
extern void _ZN6S209C53v68Ev();
extern void _ZN6S209C53v69Ev();
extern void _ZN6S209C53v70Ev();
extern void _ZN6S209C53v71Ev();
extern void _ZN6S209C53v72Ev();
extern void _ZN6S209C53v73Ev();
extern void _ZN6S209C53v74Ev();
extern void _ZN6S209C53v75Ev();
extern void _ZN6S209C53v76Ev();
extern void _ZN6S209C53v77Ev();
extern void _ZN6S209C53v78Ev();
extern void _ZN6S209C53v79Ev();
extern void _ZN6S209C53v80Ev();
extern void _ZN6S209C53v81Ev();
extern void _ZN6S209C53v82Ev();
extern void _ZN6S209C53v83Ev();
extern void _ZN6S209C53v84Ev();
extern void _ZN6S209C53v85Ev();
extern void _ZN6S209C53v86Ev();
extern void _ZN6S209C53v87Ev();
extern void _ZN6S209C53v88Ev();
extern void _ZN6S209C53v89Ev();
static  VTBL_ENTRY vtc_S209C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S209C5[0]),
  (VTBL_ENTRY)&_ZN6S209C5D1Ev,
  (VTBL_ENTRY)&_ZN6S209C5D0Ev,
  (VTBL_ENTRY)&_ZN6S209C62v4Ev,
  (VTBL_ENTRY)&_ZN6S209C62v5Ev,
  (VTBL_ENTRY)&_ZN6S209C62v6Ev,
  (VTBL_ENTRY)&_ZN6S209C62v7Ev,
  (VTBL_ENTRY)&_ZN6S209C62v8Ev,
  (VTBL_ENTRY)&_ZN6S209C62v9Ev,
  (VTBL_ENTRY)&_ZN6S209C63v10Ev,
  (VTBL_ENTRY)&_ZN6S209C63v11Ev,
  (VTBL_ENTRY)&_ZN6S209C63v12Ev,
  (VTBL_ENTRY)&_ZN6S209C63v13Ev,
  (VTBL_ENTRY)&_ZN6S209C63v14Ev,
  (VTBL_ENTRY)&_ZN6S209C63v15Ev,
  (VTBL_ENTRY)&_ZN6S209C63v16Ev,
  (VTBL_ENTRY)&_ZN6S209C63v17Ev,
  (VTBL_ENTRY)&_ZN6S209C63v18Ev,
  (VTBL_ENTRY)&_ZN6S209C63v19Ev,
  (VTBL_ENTRY)&_ZN6S209C63v20Ev,
  (VTBL_ENTRY)&_ZN6S209C63v21Ev,
  (VTBL_ENTRY)&_ZN6S209C63v22Ev,
  (VTBL_ENTRY)&_ZN6S209C63v23Ev,
  (VTBL_ENTRY)&_ZN6S209C63v24Ev,
  (VTBL_ENTRY)&_ZN6S209C63v25Ev,
  (VTBL_ENTRY)&_ZN6S209C63v26Ev,
  (VTBL_ENTRY)&_ZN6S209C63v27Ev,
  (VTBL_ENTRY)&_ZN6S209C63v28Ev,
  (VTBL_ENTRY)&_ZN6S209C63v29Ev,
  (VTBL_ENTRY)&_ZN6S209C63v30Ev,
  (VTBL_ENTRY)&_ZN6S209C63v31Ev,
  (VTBL_ENTRY)&_ZN6S209C63v32Ev,
  (VTBL_ENTRY)&_ZN6S209C63v33Ev,
  (VTBL_ENTRY)&_ZN6S209C63v34Ev,
  (VTBL_ENTRY)&_ZN6S209C63v35Ev,
  (VTBL_ENTRY)&_ZN6S209C63v36Ev,
  (VTBL_ENTRY)&_ZN6S209C63v37Ev,
  (VTBL_ENTRY)&_ZN6S209C63v38Ev,
  (VTBL_ENTRY)&_ZN6S209C63v39Ev,
  (VTBL_ENTRY)&_ZN6S209C63v40Ev,
  (VTBL_ENTRY)&_ZN6S209C63v41Ev,
  (VTBL_ENTRY)&_ZN6S209C63v42Ev,
  (VTBL_ENTRY)&_ZN6S209C63v43Ev,
  (VTBL_ENTRY)&_ZN6S209C63v44Ev,
  (VTBL_ENTRY)&_ZN6S209C63v45Ev,
  (VTBL_ENTRY)&_ZN6S209C63v46Ev,
  (VTBL_ENTRY)&_ZN6S209C63v47Ev,
  (VTBL_ENTRY)&_ZN6S209C63v48Ev,
  (VTBL_ENTRY)&_ZN6S209C63v49Ev,
  (VTBL_ENTRY)&_ZN6S209C63v50Ev,
  (VTBL_ENTRY)&_ZN6S209C63v51Ev,
  (VTBL_ENTRY)&_ZN6S209C63v52Ev,
  (VTBL_ENTRY)&_ZN6S209C63v53Ev,
  (VTBL_ENTRY)&_ZN6S209C63v54Ev,
  (VTBL_ENTRY)&_ZN6S209C63v55Ev,
  (VTBL_ENTRY)&_ZN6S209C63v56Ev,
  (VTBL_ENTRY)&_ZN6S209C63v57Ev,
  (VTBL_ENTRY)&_ZN6S209C63v58Ev,
  (VTBL_ENTRY)&_ZN6S209C63v59Ev,
  (VTBL_ENTRY)&_ZN6S209C63v60Ev,
  (VTBL_ENTRY)&_ZN6S209C63v61Ev,
  (VTBL_ENTRY)&_ZN6S209C63v62Ev,
  (VTBL_ENTRY)&_ZN6S209C63v63Ev,
  (VTBL_ENTRY)&_ZN6S209C63v64Ev,
  (VTBL_ENTRY)&_ZN6S209C63v65Ev,
  (VTBL_ENTRY)&_ZN6S209C63v66Ev,
  (VTBL_ENTRY)&_ZN6S209C63v67Ev,
  (VTBL_ENTRY)&_ZN6S209C53v68Ev,
  (VTBL_ENTRY)&_ZN6S209C53v69Ev,
  (VTBL_ENTRY)&_ZN6S209C53v70Ev,
  (VTBL_ENTRY)&_ZN6S209C53v71Ev,
  (VTBL_ENTRY)&_ZN6S209C53v72Ev,
  (VTBL_ENTRY)&_ZN6S209C53v73Ev,
  (VTBL_ENTRY)&_ZN6S209C53v74Ev,
  (VTBL_ENTRY)&_ZN6S209C53v75Ev,
  (VTBL_ENTRY)&_ZN6S209C53v76Ev,
  (VTBL_ENTRY)&_ZN6S209C53v77Ev,
  (VTBL_ENTRY)&_ZN6S209C53v78Ev,
  (VTBL_ENTRY)&_ZN6S209C53v79Ev,
  (VTBL_ENTRY)&_ZN6S209C53v80Ev,
  (VTBL_ENTRY)&_ZN6S209C53v81Ev,
  (VTBL_ENTRY)&_ZN6S209C53v82Ev,
  (VTBL_ENTRY)&_ZN6S209C53v83Ev,
  (VTBL_ENTRY)&_ZN6S209C53v84Ev,
  (VTBL_ENTRY)&_ZN6S209C53v85Ev,
  (VTBL_ENTRY)&_ZN6S209C53v86Ev,
  (VTBL_ENTRY)&_ZN6S209C53v87Ev,
  (VTBL_ENTRY)&_ZN6S209C53v88Ev,
  (VTBL_ENTRY)&_ZN6S209C53v89Ev,
};
extern VTBL_ENTRY _ZTI6S209C5[];
extern  VTBL_ENTRY _ZTV6S209C5[];
Class_Descriptor cd_S209C5 = {  "S209C5", // class name
  bases_S209C5, 1,
  &(vtc_S209C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S209C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S209C5),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  S209C4  : S209C5 {
  unsigned int s209c4f0:1;
  unsigned int s209c4f1:1;
  unsigned int s209c4f2:1;
  ::S1503C28 s209c4f3;
  ::S1503C24 s209c4f4;
  ::S1503C18 s209c4f5;
  ::S1503C12 s209c4f6;
  int s209c4f7[3];
  virtual  ~S209C4(); // _ZN6S209C4D1Ev
  virtual void  v90(); // _ZN6S209C43v90Ev
  virtual void  v91(); // _ZN6S209C43v91Ev
  virtual void  v92(); // _ZN6S209C43v92Ev
  virtual void  v93(); // _ZN6S209C43v93Ev
  virtual void  v94(); // _ZN6S209C43v94Ev
  virtual void  v95(); // _ZN6S209C43v95Ev
  virtual void  v96(); // _ZN6S209C43v96Ev
  virtual void  v97(); // _ZN6S209C43v97Ev
  virtual void  v98(); // _ZN6S209C43v98Ev
  virtual void  v99(); // _ZN6S209C43v99Ev
  virtual void  v100(); // _ZN6S209C44v100Ev
  virtual void  v101(); // _ZN6S209C44v101Ev
  virtual void  v102(); // _ZN6S209C44v102Ev
  virtual void  v103(); // _ZN6S209C44v103Ev
  virtual void  v104(); // _ZN6S209C44v104Ev
  virtual void  v105(); // _ZN6S209C44v105Ev
  virtual void  v106(); // _ZN6S209C44v106Ev
  virtual void  v107(); // _ZN6S209C44v107Ev
  virtual void  v108(); // _ZN6S209C44v108Ev
  virtual void  v109(); // _ZN6S209C44v109Ev
  S209C4(); // tgen
};
//SIG(-1 S209C4) 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]}


 S209C4 ::~S209C4(){ note_dtor("S209C4", this);}
void  S209C4 ::v90(){vfunc_called(this, "_ZN6S209C43v90Ev");}
void  S209C4 ::v91(){vfunc_called(this, "_ZN6S209C43v91Ev");}
void  S209C4 ::v92(){vfunc_called(this, "_ZN6S209C43v92Ev");}
void  S209C4 ::v93(){vfunc_called(this, "_ZN6S209C43v93Ev");}
void  S209C4 ::v94(){vfunc_called(this, "_ZN6S209C43v94Ev");}
void  S209C4 ::v95(){vfunc_called(this, "_ZN6S209C43v95Ev");}
void  S209C4 ::v96(){vfunc_called(this, "_ZN6S209C43v96Ev");}
void  S209C4 ::v97(){vfunc_called(this, "_ZN6S209C43v97Ev");}
void  S209C4 ::v98(){vfunc_called(this, "_ZN6S209C43v98Ev");}
void  S209C4 ::v99(){vfunc_called(this, "_ZN6S209C43v99Ev");}
void  S209C4 ::v100(){vfunc_called(this, "_ZN6S209C44v100Ev");}
void  S209C4 ::v101(){vfunc_called(this, "_ZN6S209C44v101Ev");}
void  S209C4 ::v102(){vfunc_called(this, "_ZN6S209C44v102Ev");}
void  S209C4 ::v103(){vfunc_called(this, "_ZN6S209C44v103Ev");}
void  S209C4 ::v104(){vfunc_called(this, "_ZN6S209C44v104Ev");}
void  S209C4 ::v105(){vfunc_called(this, "_ZN6S209C44v105Ev");}
void  S209C4 ::v106(){vfunc_called(this, "_ZN6S209C44v106Ev");}
void  S209C4 ::v107(){vfunc_called(this, "_ZN6S209C44v107Ev");}
void  S209C4 ::v108(){vfunc_called(this, "_ZN6S209C44v108Ev");}
void  S209C4 ::v109(){vfunc_called(this, "_ZN6S209C44v109Ev");}
S209C4 ::S209C4(){ note_ctor("S209C4", this);} // tgen

static void Test_S209C4()
{
  extern Class_Descriptor cd_S209C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S209C4, buf);
    S209C4 *dp, &lv = *(dp=new (buf) S209C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S209C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S209C4)");
    check_base_class_offset(lv, (S209C6*)(S209C5*), 0, "S209C4");
    check_base_class_offset(lv, (S209C5*), 0, "S209C4");
    set_bf_and_test(lv, s209c4f0, ABISELECT(188,132), 0, 1, 1, "S209C4");
    set_bf_and_test(lv, s209c4f1, ABISELECT(188,132), 1, 1, 1, "S209C4");
    set_bf_and_test(lv, s209c4f2, ABISELECT(188,132), 2, 1, 1, "S209C4");
    check_field_offset(lv, s209c4f3, ABISELECT(192,136), "S209C4.s209c4f3");
    check_field_offset(lv, s209c4f4, ABISELECT(208,148), "S209C4.s209c4f4");
    check_field_offset(lv, s209c4f5, ABISELECT(224,160), "S209C4.s209c4f5");
    check_field_offset(lv, s209c4f6, ABISELECT(240,172), "S209C4.s209c4f6");
    check_field_offset(lv, s209c4f7, ABISELECT(256,184), "S209C4.s209c4f7");
    test_class_info(&lv, &cd_S209C4);
    dp->~S209C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS209C4(Test_S209C4, "S209C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S209C4C1Ev();
extern void _ZN6S209C4D1Ev();
Name_Map name_map_S209C4[] = {
  NSPAIR(_ZN6S209C4C1Ev),
  NSPAIR(_ZN6S209C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S209C6;
extern VTBL_ENTRY _ZTI6S209C6[];
extern  VTBL_ENTRY _ZTV6S209C6[];
extern Class_Descriptor cd_S209C5;
extern VTBL_ENTRY _ZTI6S209C5[];
extern  VTBL_ENTRY _ZTV6S209C5[];
static Base_Class bases_S209C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S209C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S209C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S209C4[];
extern void _ZN6S209C4D1Ev();
extern void _ZN6S209C4D0Ev();
extern void _ZN6S209C62v4Ev();
extern void _ZN6S209C62v5Ev();
extern void _ZN6S209C62v6Ev();
extern void _ZN6S209C62v7Ev();
extern void _ZN6S209C62v8Ev();
extern void _ZN6S209C62v9Ev();
extern void _ZN6S209C63v10Ev();
extern void _ZN6S209C63v11Ev();
extern void _ZN6S209C63v12Ev();
extern void _ZN6S209C63v13Ev();
extern void _ZN6S209C63v14Ev();
extern void _ZN6S209C63v15Ev();
extern void _ZN6S209C63v16Ev();
extern void _ZN6S209C63v17Ev();
extern void _ZN6S209C63v18Ev();
extern void _ZN6S209C63v19Ev();
extern void _ZN6S209C63v20Ev();
extern void _ZN6S209C63v21Ev();
extern void _ZN6S209C63v22Ev();
extern void _ZN6S209C63v23Ev();
extern void _ZN6S209C63v24Ev();
extern void _ZN6S209C63v25Ev();
extern void _ZN6S209C63v26Ev();
extern void _ZN6S209C63v27Ev();
extern void _ZN6S209C63v28Ev();
extern void _ZN6S209C63v29Ev();
extern void _ZN6S209C63v30Ev();
extern void _ZN6S209C63v31Ev();
extern void _ZN6S209C63v32Ev();
extern void _ZN6S209C63v33Ev();
extern void _ZN6S209C63v34Ev();
extern void _ZN6S209C63v35Ev();
extern void _ZN6S209C63v36Ev();
extern void _ZN6S209C63v37Ev();
extern void _ZN6S209C63v38Ev();
extern void _ZN6S209C63v39Ev();
extern void _ZN6S209C63v40Ev();
extern void _ZN6S209C63v41Ev();
extern void _ZN6S209C63v42Ev();
extern void _ZN6S209C63v43Ev();
extern void _ZN6S209C63v44Ev();
extern void _ZN6S209C63v45Ev();
extern void _ZN6S209C63v46Ev();
extern void _ZN6S209C63v47Ev();
extern void _ZN6S209C63v48Ev();
extern void _ZN6S209C63v49Ev();
extern void _ZN6S209C63v50Ev();
extern void _ZN6S209C63v51Ev();
extern void _ZN6S209C63v52Ev();
extern void _ZN6S209C63v53Ev();
extern void _ZN6S209C63v54Ev();
extern void _ZN6S209C63v55Ev();
extern void _ZN6S209C63v56Ev();
extern void _ZN6S209C63v57Ev();
extern void _ZN6S209C63v58Ev();
extern void _ZN6S209C63v59Ev();
extern void _ZN6S209C63v60Ev();
extern void _ZN6S209C63v61Ev();
extern void _ZN6S209C63v62Ev();
extern void _ZN6S209C63v63Ev();
extern void _ZN6S209C63v64Ev();
extern void _ZN6S209C63v65Ev();
extern void _ZN6S209C63v66Ev();
extern void _ZN6S209C63v67Ev();
extern void _ZN6S209C53v68Ev();
extern void _ZN6S209C53v69Ev();
extern void _ZN6S209C53v70Ev();
extern void _ZN6S209C53v71Ev();
extern void _ZN6S209C53v72Ev();
extern void _ZN6S209C53v73Ev();
extern void _ZN6S209C53v74Ev();
extern void _ZN6S209C53v75Ev();
extern void _ZN6S209C53v76Ev();
extern void _ZN6S209C53v77Ev();
extern void _ZN6S209C53v78Ev();
extern void _ZN6S209C53v79Ev();
extern void _ZN6S209C53v80Ev();
extern void _ZN6S209C53v81Ev();
extern void _ZN6S209C53v82Ev();
extern void _ZN6S209C53v83Ev();
extern void _ZN6S209C53v84Ev();
extern void _ZN6S209C53v85Ev();
extern void _ZN6S209C53v86Ev();
extern void _ZN6S209C53v87Ev();
extern void _ZN6S209C53v88Ev();
extern void _ZN6S209C53v89Ev();
extern void _ZN6S209C43v90Ev();
extern void _ZN6S209C43v91Ev();
extern void _ZN6S209C43v92Ev();
extern void _ZN6S209C43v93Ev();
extern void _ZN6S209C43v94Ev();
extern void _ZN6S209C43v95Ev();
extern void _ZN6S209C43v96Ev();
extern void _ZN6S209C43v97Ev();
extern void _ZN6S209C43v98Ev();
extern void _ZN6S209C43v99Ev();
extern void _ZN6S209C44v100Ev();
extern void _ZN6S209C44v101Ev();
extern void _ZN6S209C44v102Ev();
extern void _ZN6S209C44v103Ev();
extern void _ZN6S209C44v104Ev();
extern void _ZN6S209C44v105Ev();
extern void _ZN6S209C44v106Ev();
extern void _ZN6S209C44v107Ev();
extern void _ZN6S209C44v108Ev();
extern void _ZN6S209C44v109Ev();
static  VTBL_ENTRY vtc_S209C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S209C4[0]),
  (VTBL_ENTRY)&_ZN6S209C4D1Ev,
  (VTBL_ENTRY)&_ZN6S209C4D0Ev,
  (VTBL_ENTRY)&_ZN6S209C62v4Ev,
  (VTBL_ENTRY)&_ZN6S209C62v5Ev,
  (VTBL_ENTRY)&_ZN6S209C62v6Ev,
  (VTBL_ENTRY)&_ZN6S209C62v7Ev,
  (VTBL_ENTRY)&_ZN6S209C62v8Ev,
  (VTBL_ENTRY)&_ZN6S209C62v9Ev,
  (VTBL_ENTRY)&_ZN6S209C63v10Ev,
  (VTBL_ENTRY)&_ZN6S209C63v11Ev,
  (VTBL_ENTRY)&_ZN6S209C63v12Ev,
  (VTBL_ENTRY)&_ZN6S209C63v13Ev,
  (VTBL_ENTRY)&_ZN6S209C63v14Ev,
  (VTBL_ENTRY)&_ZN6S209C63v15Ev,
  (VTBL_ENTRY)&_ZN6S209C63v16Ev,
  (VTBL_ENTRY)&_ZN6S209C63v17Ev,
  (VTBL_ENTRY)&_ZN6S209C63v18Ev,
  (VTBL_ENTRY)&_ZN6S209C63v19Ev,
  (VTBL_ENTRY)&_ZN6S209C63v20Ev,
  (VTBL_ENTRY)&_ZN6S209C63v21Ev,
  (VTBL_ENTRY)&_ZN6S209C63v22Ev,
  (VTBL_ENTRY)&_ZN6S209C63v23Ev,
  (VTBL_ENTRY)&_ZN6S209C63v24Ev,
  (VTBL_ENTRY)&_ZN6S209C63v25Ev,
  (VTBL_ENTRY)&_ZN6S209C63v26Ev,
  (VTBL_ENTRY)&_ZN6S209C63v27Ev,
  (VTBL_ENTRY)&_ZN6S209C63v28Ev,
  (VTBL_ENTRY)&_ZN6S209C63v29Ev,
  (VTBL_ENTRY)&_ZN6S209C63v30Ev,
  (VTBL_ENTRY)&_ZN6S209C63v31Ev,
  (VTBL_ENTRY)&_ZN6S209C63v32Ev,
  (VTBL_ENTRY)&_ZN6S209C63v33Ev,
  (VTBL_ENTRY)&_ZN6S209C63v34Ev,
  (VTBL_ENTRY)&_ZN6S209C63v35Ev,
  (VTBL_ENTRY)&_ZN6S209C63v36Ev,
  (VTBL_ENTRY)&_ZN6S209C63v37Ev,
  (VTBL_ENTRY)&_ZN6S209C63v38Ev,
  (VTBL_ENTRY)&_ZN6S209C63v39Ev,
  (VTBL_ENTRY)&_ZN6S209C63v40Ev,
  (VTBL_ENTRY)&_ZN6S209C63v41Ev,
  (VTBL_ENTRY)&_ZN6S209C63v42Ev,
  (VTBL_ENTRY)&_ZN6S209C63v43Ev,
  (VTBL_ENTRY)&_ZN6S209C63v44Ev,
  (VTBL_ENTRY)&_ZN6S209C63v45Ev,
  (VTBL_ENTRY)&_ZN6S209C63v46Ev,
  (VTBL_ENTRY)&_ZN6S209C63v47Ev,
  (VTBL_ENTRY)&_ZN6S209C63v48Ev,
  (VTBL_ENTRY)&_ZN6S209C63v49Ev,
  (VTBL_ENTRY)&_ZN6S209C63v50Ev,
  (VTBL_ENTRY)&_ZN6S209C63v51Ev,
  (VTBL_ENTRY)&_ZN6S209C63v52Ev,
  (VTBL_ENTRY)&_ZN6S209C63v53Ev,
  (VTBL_ENTRY)&_ZN6S209C63v54Ev,
  (VTBL_ENTRY)&_ZN6S209C63v55Ev,
  (VTBL_ENTRY)&_ZN6S209C63v56Ev,
  (VTBL_ENTRY)&_ZN6S209C63v57Ev,
  (VTBL_ENTRY)&_ZN6S209C63v58Ev,
  (VTBL_ENTRY)&_ZN6S209C63v59Ev,
  (VTBL_ENTRY)&_ZN6S209C63v60Ev,
  (VTBL_ENTRY)&_ZN6S209C63v61Ev,
  (VTBL_ENTRY)&_ZN6S209C63v62Ev,
  (VTBL_ENTRY)&_ZN6S209C63v63Ev,
  (VTBL_ENTRY)&_ZN6S209C63v64Ev,
  (VTBL_ENTRY)&_ZN6S209C63v65Ev,
  (VTBL_ENTRY)&_ZN6S209C63v66Ev,
  (VTBL_ENTRY)&_ZN6S209C63v67Ev,
  (VTBL_ENTRY)&_ZN6S209C53v68Ev,
  (VTBL_ENTRY)&_ZN6S209C53v69Ev,
  (VTBL_ENTRY)&_ZN6S209C53v70Ev,
  (VTBL_ENTRY)&_ZN6S209C53v71Ev,
  (VTBL_ENTRY)&_ZN6S209C53v72Ev,
  (VTBL_ENTRY)&_ZN6S209C53v73Ev,
  (VTBL_ENTRY)&_ZN6S209C53v74Ev,
  (VTBL_ENTRY)&_ZN6S209C53v75Ev,
  (VTBL_ENTRY)&_ZN6S209C53v76Ev,
  (VTBL_ENTRY)&_ZN6S209C53v77Ev,
  (VTBL_ENTRY)&_ZN6S209C53v78Ev,
  (VTBL_ENTRY)&_ZN6S209C53v79Ev,
  (VTBL_ENTRY)&_ZN6S209C53v80Ev,
  (VTBL_ENTRY)&_ZN6S209C53v81Ev,
  (VTBL_ENTRY)&_ZN6S209C53v82Ev,
  (VTBL_ENTRY)&_ZN6S209C53v83Ev,
  (VTBL_ENTRY)&_ZN6S209C53v84Ev,
  (VTBL_ENTRY)&_ZN6S209C53v85Ev,
  (VTBL_ENTRY)&_ZN6S209C53v86Ev,
  (VTBL_ENTRY)&_ZN6S209C53v87Ev,
  (VTBL_ENTRY)&_ZN6S209C53v88Ev,
  (VTBL_ENTRY)&_ZN6S209C53v89Ev,
  (VTBL_ENTRY)&_ZN6S209C43v90Ev,
  (VTBL_ENTRY)&_ZN6S209C43v91Ev,
  (VTBL_ENTRY)&_ZN6S209C43v92Ev,
  (VTBL_ENTRY)&_ZN6S209C43v93Ev,
  (VTBL_ENTRY)&_ZN6S209C43v94Ev,
  (VTBL_ENTRY)&_ZN6S209C43v95Ev,
  (VTBL_ENTRY)&_ZN6S209C43v96Ev,
  (VTBL_ENTRY)&_ZN6S209C43v97Ev,
  (VTBL_ENTRY)&_ZN6S209C43v98Ev,
  (VTBL_ENTRY)&_ZN6S209C43v99Ev,
  (VTBL_ENTRY)&_ZN6S209C44v100Ev,
  (VTBL_ENTRY)&_ZN6S209C44v101Ev,
  (VTBL_ENTRY)&_ZN6S209C44v102Ev,
  (VTBL_ENTRY)&_ZN6S209C44v103Ev,
  (VTBL_ENTRY)&_ZN6S209C44v104Ev,
  (VTBL_ENTRY)&_ZN6S209C44v105Ev,
  (VTBL_ENTRY)&_ZN6S209C44v106Ev,
  (VTBL_ENTRY)&_ZN6S209C44v107Ev,
  (VTBL_ENTRY)&_ZN6S209C44v108Ev,
  (VTBL_ENTRY)&_ZN6S209C44v109Ev,
};
extern VTBL_ENTRY _ZTI6S209C4[];
extern  VTBL_ENTRY _ZTV6S209C4[];
Class_Descriptor cd_S209C4 = {  "S209C4", // class name
  bases_S209C4, 2,
  &(vtc_S209C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S209C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S209C4),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  S209C3  : S209C4 {
  ::S1503C5_nt s209c3f0;
  unsigned int s209c3f1:1;
  ::S1503C6_nt s209c3f2;
  virtual  ~S209C3(); // _ZN6S209C3D1Ev
  virtual void  v110(); // _ZN6S209C34v110Ev
  virtual void  v111(); // _ZN6S209C34v111Ev
  virtual void  v112(); // _ZN6S209C34v112Ev
  virtual void  v113(); // _ZN6S209C34v113Ev
  S209C3(); // tgen
};
//SIG(-1 S209C3) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S209C3 ::~S209C3(){ note_dtor("S209C3", this);}
void  S209C3 ::v110(){vfunc_called(this, "_ZN6S209C34v110Ev");}
void  S209C3 ::v111(){vfunc_called(this, "_ZN6S209C34v111Ev");}
void  S209C3 ::v112(){vfunc_called(this, "_ZN6S209C34v112Ev");}
void  S209C3 ::v113(){vfunc_called(this, "_ZN6S209C34v113Ev");}
S209C3 ::S209C3(){ note_ctor("S209C3", this);} // tgen

static void Test_S209C3()
{
  extern Class_Descriptor cd_S209C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S209C3, buf);
    S209C3 *dp, &lv = *(dp=new (buf) S209C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S209C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S209C3)");
    check_base_class_offset(lv, (S209C6*)(S209C5*)(S209C4*), 0, "S209C3");
    check_base_class_offset(lv, (S209C5*)(S209C4*), 0, "S209C3");
    check_base_class_offset(lv, (S209C4*), 0, "S209C3");
    check_field_offset(lv, s209c3f0, ABISELECT(268,196), "S209C3.s209c3f0");
    set_bf_and_test(lv, s209c3f1, ABISELECT(276,204), 0, 1, 1, "S209C3");
    check_field_offset(lv, s209c3f2, ABISELECT(280,208), "S209C3.s209c3f2");
    test_class_info(&lv, &cd_S209C3);
    dp->~S209C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS209C3(Test_S209C3, "S209C3", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S209C3C1Ev();
extern void _ZN6S209C3D1Ev();
Name_Map name_map_S209C3[] = {
  NSPAIR(_ZN6S209C3C1Ev),
  NSPAIR(_ZN6S209C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S209C6;
extern VTBL_ENTRY _ZTI6S209C6[];
extern  VTBL_ENTRY _ZTV6S209C6[];
extern Class_Descriptor cd_S209C5;
extern VTBL_ENTRY _ZTI6S209C5[];
extern  VTBL_ENTRY _ZTV6S209C5[];
extern Class_Descriptor cd_S209C4;
extern VTBL_ENTRY _ZTI6S209C4[];
extern  VTBL_ENTRY _ZTV6S209C4[];
static Base_Class bases_S209C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S209C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S209C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S209C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S209C3[];
extern void _ZN6S209C3D1Ev();
extern void _ZN6S209C3D0Ev();
extern void _ZN6S209C62v4Ev();
extern void _ZN6S209C62v5Ev();
extern void _ZN6S209C62v6Ev();
extern void _ZN6S209C62v7Ev();
extern void _ZN6S209C62v8Ev();
extern void _ZN6S209C62v9Ev();
extern void _ZN6S209C63v10Ev();
extern void _ZN6S209C63v11Ev();
extern void _ZN6S209C63v12Ev();
extern void _ZN6S209C63v13Ev();
extern void _ZN6S209C63v14Ev();
extern void _ZN6S209C63v15Ev();
extern void _ZN6S209C63v16Ev();
extern void _ZN6S209C63v17Ev();
extern void _ZN6S209C63v18Ev();
extern void _ZN6S209C63v19Ev();
extern void _ZN6S209C63v20Ev();
extern void _ZN6S209C63v21Ev();
extern void _ZN6S209C63v22Ev();
extern void _ZN6S209C63v23Ev();
extern void _ZN6S209C63v24Ev();
extern void _ZN6S209C63v25Ev();
extern void _ZN6S209C63v26Ev();
extern void _ZN6S209C63v27Ev();
extern void _ZN6S209C63v28Ev();
extern void _ZN6S209C63v29Ev();
extern void _ZN6S209C63v30Ev();
extern void _ZN6S209C63v31Ev();
extern void _ZN6S209C63v32Ev();
extern void _ZN6S209C63v33Ev();
extern void _ZN6S209C63v34Ev();
extern void _ZN6S209C63v35Ev();
extern void _ZN6S209C63v36Ev();
extern void _ZN6S209C63v37Ev();
extern void _ZN6S209C63v38Ev();
extern void _ZN6S209C63v39Ev();
extern void _ZN6S209C63v40Ev();
extern void _ZN6S209C63v41Ev();
extern void _ZN6S209C63v42Ev();
extern void _ZN6S209C63v43Ev();
extern void _ZN6S209C63v44Ev();
extern void _ZN6S209C63v45Ev();
extern void _ZN6S209C63v46Ev();
extern void _ZN6S209C63v47Ev();
extern void _ZN6S209C63v48Ev();
extern void _ZN6S209C63v49Ev();
extern void _ZN6S209C63v50Ev();
extern void _ZN6S209C63v51Ev();
extern void _ZN6S209C63v52Ev();
extern void _ZN6S209C63v53Ev();
extern void _ZN6S209C63v54Ev();
extern void _ZN6S209C63v55Ev();
extern void _ZN6S209C63v56Ev();
extern void _ZN6S209C63v57Ev();
extern void _ZN6S209C63v58Ev();
extern void _ZN6S209C63v59Ev();
extern void _ZN6S209C63v60Ev();
extern void _ZN6S209C63v61Ev();
extern void _ZN6S209C63v62Ev();
extern void _ZN6S209C63v63Ev();
extern void _ZN6S209C63v64Ev();
extern void _ZN6S209C63v65Ev();
extern void _ZN6S209C63v66Ev();
extern void _ZN6S209C63v67Ev();
extern void _ZN6S209C53v68Ev();
extern void _ZN6S209C53v69Ev();
extern void _ZN6S209C53v70Ev();
extern void _ZN6S209C53v71Ev();
extern void _ZN6S209C53v72Ev();
extern void _ZN6S209C53v73Ev();
extern void _ZN6S209C53v74Ev();
extern void _ZN6S209C53v75Ev();
extern void _ZN6S209C53v76Ev();
extern void _ZN6S209C53v77Ev();
extern void _ZN6S209C53v78Ev();
extern void _ZN6S209C53v79Ev();
extern void _ZN6S209C53v80Ev();
extern void _ZN6S209C53v81Ev();
extern void _ZN6S209C53v82Ev();
extern void _ZN6S209C53v83Ev();
extern void _ZN6S209C53v84Ev();
extern void _ZN6S209C53v85Ev();
extern void _ZN6S209C53v86Ev();
extern void _ZN6S209C53v87Ev();
extern void _ZN6S209C53v88Ev();
extern void _ZN6S209C53v89Ev();
extern void _ZN6S209C43v90Ev();
extern void _ZN6S209C43v91Ev();
extern void _ZN6S209C43v92Ev();
extern void _ZN6S209C43v93Ev();
extern void _ZN6S209C43v94Ev();
extern void _ZN6S209C43v95Ev();
extern void _ZN6S209C43v96Ev();
extern void _ZN6S209C43v97Ev();
extern void _ZN6S209C43v98Ev();
extern void _ZN6S209C43v99Ev();
extern void _ZN6S209C44v100Ev();
extern void _ZN6S209C44v101Ev();
extern void _ZN6S209C44v102Ev();
extern void _ZN6S209C44v103Ev();
extern void _ZN6S209C44v104Ev();
extern void _ZN6S209C44v105Ev();
extern void _ZN6S209C44v106Ev();
extern void _ZN6S209C44v107Ev();
extern void _ZN6S209C44v108Ev();
extern void _ZN6S209C44v109Ev();
extern void _ZN6S209C34v110Ev();
extern void _ZN6S209C34v111Ev();
extern void _ZN6S209C34v112Ev();
extern void _ZN6S209C34v113Ev();
static  VTBL_ENTRY vtc_S209C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S209C3[0]),
  (VTBL_ENTRY)&_ZN6S209C3D1Ev,
  (VTBL_ENTRY)&_ZN6S209C3D0Ev,
  (VTBL_ENTRY)&_ZN6S209C62v4Ev,
  (VTBL_ENTRY)&_ZN6S209C62v5Ev,
  (VTBL_ENTRY)&_ZN6S209C62v6Ev,
  (VTBL_ENTRY)&_ZN6S209C62v7Ev,
  (VTBL_ENTRY)&_ZN6S209C62v8Ev,
  (VTBL_ENTRY)&_ZN6S209C62v9Ev,
  (VTBL_ENTRY)&_ZN6S209C63v10Ev,
  (VTBL_ENTRY)&_ZN6S209C63v11Ev,
  (VTBL_ENTRY)&_ZN6S209C63v12Ev,
  (VTBL_ENTRY)&_ZN6S209C63v13Ev,
  (VTBL_ENTRY)&_ZN6S209C63v14Ev,
  (VTBL_ENTRY)&_ZN6S209C63v15Ev,
  (VTBL_ENTRY)&_ZN6S209C63v16Ev,
  (VTBL_ENTRY)&_ZN6S209C63v17Ev,
  (VTBL_ENTRY)&_ZN6S209C63v18Ev,
  (VTBL_ENTRY)&_ZN6S209C63v19Ev,
  (VTBL_ENTRY)&_ZN6S209C63v20Ev,
  (VTBL_ENTRY)&_ZN6S209C63v21Ev,
  (VTBL_ENTRY)&_ZN6S209C63v22Ev,
  (VTBL_ENTRY)&_ZN6S209C63v23Ev,
  (VTBL_ENTRY)&_ZN6S209C63v24Ev,
  (VTBL_ENTRY)&_ZN6S209C63v25Ev,
  (VTBL_ENTRY)&_ZN6S209C63v26Ev,
  (VTBL_ENTRY)&_ZN6S209C63v27Ev,
  (VTBL_ENTRY)&_ZN6S209C63v28Ev,
  (VTBL_ENTRY)&_ZN6S209C63v29Ev,
  (VTBL_ENTRY)&_ZN6S209C63v30Ev,
  (VTBL_ENTRY)&_ZN6S209C63v31Ev,
  (VTBL_ENTRY)&_ZN6S209C63v32Ev,
  (VTBL_ENTRY)&_ZN6S209C63v33Ev,
  (VTBL_ENTRY)&_ZN6S209C63v34Ev,
  (VTBL_ENTRY)&_ZN6S209C63v35Ev,
  (VTBL_ENTRY)&_ZN6S209C63v36Ev,
  (VTBL_ENTRY)&_ZN6S209C63v37Ev,
  (VTBL_ENTRY)&_ZN6S209C63v38Ev,
  (VTBL_ENTRY)&_ZN6S209C63v39Ev,
  (VTBL_ENTRY)&_ZN6S209C63v40Ev,
  (VTBL_ENTRY)&_ZN6S209C63v41Ev,
  (VTBL_ENTRY)&_ZN6S209C63v42Ev,
  (VTBL_ENTRY)&_ZN6S209C63v43Ev,
  (VTBL_ENTRY)&_ZN6S209C63v44Ev,
  (VTBL_ENTRY)&_ZN6S209C63v45Ev,
  (VTBL_ENTRY)&_ZN6S209C63v46Ev,
  (VTBL_ENTRY)&_ZN6S209C63v47Ev,
  (VTBL_ENTRY)&_ZN6S209C63v48Ev,
  (VTBL_ENTRY)&_ZN6S209C63v49Ev,
  (VTBL_ENTRY)&_ZN6S209C63v50Ev,
  (VTBL_ENTRY)&_ZN6S209C63v51Ev,
  (VTBL_ENTRY)&_ZN6S209C63v52Ev,
  (VTBL_ENTRY)&_ZN6S209C63v53Ev,
  (VTBL_ENTRY)&_ZN6S209C63v54Ev,
  (VTBL_ENTRY)&_ZN6S209C63v55Ev,
  (VTBL_ENTRY)&_ZN6S209C63v56Ev,
  (VTBL_ENTRY)&_ZN6S209C63v57Ev,
  (VTBL_ENTRY)&_ZN6S209C63v58Ev,
  (VTBL_ENTRY)&_ZN6S209C63v59Ev,
  (VTBL_ENTRY)&_ZN6S209C63v60Ev,
  (VTBL_ENTRY)&_ZN6S209C63v61Ev,
  (VTBL_ENTRY)&_ZN6S209C63v62Ev,
  (VTBL_ENTRY)&_ZN6S209C63v63Ev,
  (VTBL_ENTRY)&_ZN6S209C63v64Ev,
  (VTBL_ENTRY)&_ZN6S209C63v65Ev,
  (VTBL_ENTRY)&_ZN6S209C63v66Ev,
  (VTBL_ENTRY)&_ZN6S209C63v67Ev,
  (VTBL_ENTRY)&_ZN6S209C53v68Ev,
  (VTBL_ENTRY)&_ZN6S209C53v69Ev,
  (VTBL_ENTRY)&_ZN6S209C53v70Ev,
  (VTBL_ENTRY)&_ZN6S209C53v71Ev,
  (VTBL_ENTRY)&_ZN6S209C53v72Ev,
  (VTBL_ENTRY)&_ZN6S209C53v73Ev,
  (VTBL_ENTRY)&_ZN6S209C53v74Ev,
  (VTBL_ENTRY)&_ZN6S209C53v75Ev,
  (VTBL_ENTRY)&_ZN6S209C53v76Ev,
  (VTBL_ENTRY)&_ZN6S209C53v77Ev,
  (VTBL_ENTRY)&_ZN6S209C53v78Ev,
  (VTBL_ENTRY)&_ZN6S209C53v79Ev,
  (VTBL_ENTRY)&_ZN6S209C53v80Ev,
  (VTBL_ENTRY)&_ZN6S209C53v81Ev,
  (VTBL_ENTRY)&_ZN6S209C53v82Ev,
  (VTBL_ENTRY)&_ZN6S209C53v83Ev,
  (VTBL_ENTRY)&_ZN6S209C53v84Ev,
  (VTBL_ENTRY)&_ZN6S209C53v85Ev,
  (VTBL_ENTRY)&_ZN6S209C53v86Ev,
  (VTBL_ENTRY)&_ZN6S209C53v87Ev,
  (VTBL_ENTRY)&_ZN6S209C53v88Ev,
  (VTBL_ENTRY)&_ZN6S209C53v89Ev,
  (VTBL_ENTRY)&_ZN6S209C43v90Ev,
  (VTBL_ENTRY)&_ZN6S209C43v91Ev,
  (VTBL_ENTRY)&_ZN6S209C43v92Ev,
  (VTBL_ENTRY)&_ZN6S209C43v93Ev,
  (VTBL_ENTRY)&_ZN6S209C43v94Ev,
  (VTBL_ENTRY)&_ZN6S209C43v95Ev,
  (VTBL_ENTRY)&_ZN6S209C43v96Ev,
  (VTBL_ENTRY)&_ZN6S209C43v97Ev,
  (VTBL_ENTRY)&_ZN6S209C43v98Ev,
  (VTBL_ENTRY)&_ZN6S209C43v99Ev,
  (VTBL_ENTRY)&_ZN6S209C44v100Ev,
  (VTBL_ENTRY)&_ZN6S209C44v101Ev,
  (VTBL_ENTRY)&_ZN6S209C44v102Ev,
  (VTBL_ENTRY)&_ZN6S209C44v103Ev,
  (VTBL_ENTRY)&_ZN6S209C44v104Ev,
  (VTBL_ENTRY)&_ZN6S209C44v105Ev,
  (VTBL_ENTRY)&_ZN6S209C44v106Ev,
  (VTBL_ENTRY)&_ZN6S209C44v107Ev,
  (VTBL_ENTRY)&_ZN6S209C44v108Ev,
  (VTBL_ENTRY)&_ZN6S209C44v109Ev,
  (VTBL_ENTRY)&_ZN6S209C34v110Ev,
  (VTBL_ENTRY)&_ZN6S209C34v111Ev,
  (VTBL_ENTRY)&_ZN6S209C34v112Ev,
  (VTBL_ENTRY)&_ZN6S209C34v113Ev,
};
extern VTBL_ENTRY _ZTI6S209C3[];
extern  VTBL_ENTRY _ZTV6S209C3[];
Class_Descriptor cd_S209C3 = {  "S209C3", // class name
  bases_S209C3, 3,
  &(vtc_S209C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S209C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S209C3),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S209C2  : S209C3 {
  virtual  ~S209C2(); // _ZN6S209C2D1Ev
  virtual void  v114(); // _ZN6S209C24v114Ev
  virtual void  v115(); // _ZN6S209C24v115Ev
  S209C2(); // tgen
};
//SIG(-1 S209C2) 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 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2}


 S209C2 ::~S209C2(){ note_dtor("S209C2", this);}
void  S209C2 ::v114(){vfunc_called(this, "_ZN6S209C24v114Ev");}
void  S209C2 ::v115(){vfunc_called(this, "_ZN6S209C24v115Ev");}
S209C2 ::S209C2(){ note_ctor("S209C2", this);} // tgen

static void Test_S209C2()
{
  extern Class_Descriptor cd_S209C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S209C2, buf);
    S209C2 *dp, &lv = *(dp=new (buf) S209C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S209C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S209C2)");
    check_base_class_offset(lv, (S209C6*)(S209C5*)(S209C4*)(S209C3*), 0, "S209C2");
    check_base_class_offset(lv, (S209C5*)(S209C4*)(S209C3*), 0, "S209C2");
    check_base_class_offset(lv, (S209C4*)(S209C3*), 0, "S209C2");
    check_base_class_offset(lv, (S209C3*), 0, "S209C2");
    test_class_info(&lv, &cd_S209C2);
    dp->~S209C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS209C2(Test_S209C2, "S209C2", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S209C2C1Ev();
extern void _ZN6S209C2D1Ev();
Name_Map name_map_S209C2[] = {
  NSPAIR(_ZN6S209C2C1Ev),
  NSPAIR(_ZN6S209C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S209C6;
extern VTBL_ENTRY _ZTI6S209C6[];
extern  VTBL_ENTRY _ZTV6S209C6[];
extern Class_Descriptor cd_S209C5;
extern VTBL_ENTRY _ZTI6S209C5[];
extern  VTBL_ENTRY _ZTV6S209C5[];
extern Class_Descriptor cd_S209C4;
extern VTBL_ENTRY _ZTI6S209C4[];
extern  VTBL_ENTRY _ZTV6S209C4[];
extern Class_Descriptor cd_S209C3;
extern VTBL_ENTRY _ZTI6S209C3[];
extern  VTBL_ENTRY _ZTV6S209C3[];
static Base_Class bases_S209C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S209C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S209C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S209C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S209C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S209C2[];
extern void _ZN6S209C2D1Ev();
extern void _ZN6S209C2D0Ev();
extern void _ZN6S209C62v4Ev();
extern void _ZN6S209C62v5Ev();
extern void _ZN6S209C62v6Ev();
extern void _ZN6S209C62v7Ev();
extern void _ZN6S209C62v8Ev();
extern void _ZN6S209C62v9Ev();
extern void _ZN6S209C63v10Ev();
extern void _ZN6S209C63v11Ev();
extern void _ZN6S209C63v12Ev();
extern void _ZN6S209C63v13Ev();
extern void _ZN6S209C63v14Ev();
extern void _ZN6S209C63v15Ev();
extern void _ZN6S209C63v16Ev();
extern void _ZN6S209C63v17Ev();
extern void _ZN6S209C63v18Ev();
extern void _ZN6S209C63v19Ev();
extern void _ZN6S209C63v20Ev();
extern void _ZN6S209C63v21Ev();
extern void _ZN6S209C63v22Ev();
extern void _ZN6S209C63v23Ev();
extern void _ZN6S209C63v24Ev();
extern void _ZN6S209C63v25Ev();
extern void _ZN6S209C63v26Ev();
extern void _ZN6S209C63v27Ev();
extern void _ZN6S209C63v28Ev();
extern void _ZN6S209C63v29Ev();
extern void _ZN6S209C63v30Ev();
extern void _ZN6S209C63v31Ev();
extern void _ZN6S209C63v32Ev();
extern void _ZN6S209C63v33Ev();
extern void _ZN6S209C63v34Ev();
extern void _ZN6S209C63v35Ev();
extern void _ZN6S209C63v36Ev();
extern void _ZN6S209C63v37Ev();
extern void _ZN6S209C63v38Ev();
extern void _ZN6S209C63v39Ev();
extern void _ZN6S209C63v40Ev();
extern void _ZN6S209C63v41Ev();
extern void _ZN6S209C63v42Ev();
extern void _ZN6S209C63v43Ev();
extern void _ZN6S209C63v44Ev();
extern void _ZN6S209C63v45Ev();
extern void _ZN6S209C63v46Ev();
extern void _ZN6S209C63v47Ev();
extern void _ZN6S209C63v48Ev();
extern void _ZN6S209C63v49Ev();
extern void _ZN6S209C63v50Ev();
extern void _ZN6S209C63v51Ev();
extern void _ZN6S209C63v52Ev();
extern void _ZN6S209C63v53Ev();
extern void _ZN6S209C63v54Ev();
extern void _ZN6S209C63v55Ev();
extern void _ZN6S209C63v56Ev();
extern void _ZN6S209C63v57Ev();
extern void _ZN6S209C63v58Ev();
extern void _ZN6S209C63v59Ev();
extern void _ZN6S209C63v60Ev();
extern void _ZN6S209C63v61Ev();
extern void _ZN6S209C63v62Ev();
extern void _ZN6S209C63v63Ev();
extern void _ZN6S209C63v64Ev();
extern void _ZN6S209C63v65Ev();
extern void _ZN6S209C63v66Ev();
extern void _ZN6S209C63v67Ev();
extern void _ZN6S209C53v68Ev();
extern void _ZN6S209C53v69Ev();
extern void _ZN6S209C53v70Ev();
extern void _ZN6S209C53v71Ev();
extern void _ZN6S209C53v72Ev();
extern void _ZN6S209C53v73Ev();
extern void _ZN6S209C53v74Ev();
extern void _ZN6S209C53v75Ev();
extern void _ZN6S209C53v76Ev();
extern void _ZN6S209C53v77Ev();
extern void _ZN6S209C53v78Ev();
extern void _ZN6S209C53v79Ev();
extern void _ZN6S209C53v80Ev();
extern void _ZN6S209C53v81Ev();
extern void _ZN6S209C53v82Ev();
extern void _ZN6S209C53v83Ev();
extern void _ZN6S209C53v84Ev();
extern void _ZN6S209C53v85Ev();
extern void _ZN6S209C53v86Ev();
extern void _ZN6S209C53v87Ev();
extern void _ZN6S209C53v88Ev();
extern void _ZN6S209C53v89Ev();
extern void _ZN6S209C43v90Ev();
extern void _ZN6S209C43v91Ev();
extern void _ZN6S209C43v92Ev();
extern void _ZN6S209C43v93Ev();
extern void _ZN6S209C43v94Ev();
extern void _ZN6S209C43v95Ev();
extern void _ZN6S209C43v96Ev();
extern void _ZN6S209C43v97Ev();
extern void _ZN6S209C43v98Ev();
extern void _ZN6S209C43v99Ev();
extern void _ZN6S209C44v100Ev();
extern void _ZN6S209C44v101Ev();
extern void _ZN6S209C44v102Ev();
extern void _ZN6S209C44v103Ev();
extern void _ZN6S209C44v104Ev();
extern void _ZN6S209C44v105Ev();
extern void _ZN6S209C44v106Ev();
extern void _ZN6S209C44v107Ev();
extern void _ZN6S209C44v108Ev();
extern void _ZN6S209C44v109Ev();
extern void _ZN6S209C34v110Ev();
extern void _ZN6S209C34v111Ev();
extern void _ZN6S209C34v112Ev();
extern void _ZN6S209C34v113Ev();
extern void _ZN6S209C24v114Ev();
extern void _ZN6S209C24v115Ev();
static  VTBL_ENTRY vtc_S209C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S209C2[0]),
  (VTBL_ENTRY)&_ZN6S209C2D1Ev,
  (VTBL_ENTRY)&_ZN6S209C2D0Ev,
  (VTBL_ENTRY)&_ZN6S209C62v4Ev,
  (VTBL_ENTRY)&_ZN6S209C62v5Ev,
  (VTBL_ENTRY)&_ZN6S209C62v6Ev,
  (VTBL_ENTRY)&_ZN6S209C62v7Ev,
  (VTBL_ENTRY)&_ZN6S209C62v8Ev,
  (VTBL_ENTRY)&_ZN6S209C62v9Ev,
  (VTBL_ENTRY)&_ZN6S209C63v10Ev,
  (VTBL_ENTRY)&_ZN6S209C63v11Ev,
  (VTBL_ENTRY)&_ZN6S209C63v12Ev,
  (VTBL_ENTRY)&_ZN6S209C63v13Ev,
  (VTBL_ENTRY)&_ZN6S209C63v14Ev,
  (VTBL_ENTRY)&_ZN6S209C63v15Ev,
  (VTBL_ENTRY)&_ZN6S209C63v16Ev,
  (VTBL_ENTRY)&_ZN6S209C63v17Ev,
  (VTBL_ENTRY)&_ZN6S209C63v18Ev,
  (VTBL_ENTRY)&_ZN6S209C63v19Ev,
  (VTBL_ENTRY)&_ZN6S209C63v20Ev,
  (VTBL_ENTRY)&_ZN6S209C63v21Ev,
  (VTBL_ENTRY)&_ZN6S209C63v22Ev,
  (VTBL_ENTRY)&_ZN6S209C63v23Ev,
  (VTBL_ENTRY)&_ZN6S209C63v24Ev,
  (VTBL_ENTRY)&_ZN6S209C63v25Ev,
  (VTBL_ENTRY)&_ZN6S209C63v26Ev,
  (VTBL_ENTRY)&_ZN6S209C63v27Ev,
  (VTBL_ENTRY)&_ZN6S209C63v28Ev,
  (VTBL_ENTRY)&_ZN6S209C63v29Ev,
  (VTBL_ENTRY)&_ZN6S209C63v30Ev,
  (VTBL_ENTRY)&_ZN6S209C63v31Ev,
  (VTBL_ENTRY)&_ZN6S209C63v32Ev,
  (VTBL_ENTRY)&_ZN6S209C63v33Ev,
  (VTBL_ENTRY)&_ZN6S209C63v34Ev,
  (VTBL_ENTRY)&_ZN6S209C63v35Ev,
  (VTBL_ENTRY)&_ZN6S209C63v36Ev,
  (VTBL_ENTRY)&_ZN6S209C63v37Ev,
  (VTBL_ENTRY)&_ZN6S209C63v38Ev,
  (VTBL_ENTRY)&_ZN6S209C63v39Ev,
  (VTBL_ENTRY)&_ZN6S209C63v40Ev,
  (VTBL_ENTRY)&_ZN6S209C63v41Ev,
  (VTBL_ENTRY)&_ZN6S209C63v42Ev,
  (VTBL_ENTRY)&_ZN6S209C63v43Ev,
  (VTBL_ENTRY)&_ZN6S209C63v44Ev,
  (VTBL_ENTRY)&_ZN6S209C63v45Ev,
  (VTBL_ENTRY)&_ZN6S209C63v46Ev,
  (VTBL_ENTRY)&_ZN6S209C63v47Ev,
  (VTBL_ENTRY)&_ZN6S209C63v48Ev,
  (VTBL_ENTRY)&_ZN6S209C63v49Ev,
  (VTBL_ENTRY)&_ZN6S209C63v50Ev,
  (VTBL_ENTRY)&_ZN6S209C63v51Ev,
  (VTBL_ENTRY)&_ZN6S209C63v52Ev,
  (VTBL_ENTRY)&_ZN6S209C63v53Ev,
  (VTBL_ENTRY)&_ZN6S209C63v54Ev,
  (VTBL_ENTRY)&_ZN6S209C63v55Ev,
  (VTBL_ENTRY)&_ZN6S209C63v56Ev,
  (VTBL_ENTRY)&_ZN6S209C63v57Ev,
  (VTBL_ENTRY)&_ZN6S209C63v58Ev,
  (VTBL_ENTRY)&_ZN6S209C63v59Ev,
  (VTBL_ENTRY)&_ZN6S209C63v60Ev,
  (VTBL_ENTRY)&_ZN6S209C63v61Ev,
  (VTBL_ENTRY)&_ZN6S209C63v62Ev,
  (VTBL_ENTRY)&_ZN6S209C63v63Ev,
  (VTBL_ENTRY)&_ZN6S209C63v64Ev,
  (VTBL_ENTRY)&_ZN6S209C63v65Ev,
  (VTBL_ENTRY)&_ZN6S209C63v66Ev,
  (VTBL_ENTRY)&_ZN6S209C63v67Ev,
  (VTBL_ENTRY)&_ZN6S209C53v68Ev,
  (VTBL_ENTRY)&_ZN6S209C53v69Ev,
  (VTBL_ENTRY)&_ZN6S209C53v70Ev,
  (VTBL_ENTRY)&_ZN6S209C53v71Ev,
  (VTBL_ENTRY)&_ZN6S209C53v72Ev,
  (VTBL_ENTRY)&_ZN6S209C53v73Ev,
  (VTBL_ENTRY)&_ZN6S209C53v74Ev,
  (VTBL_ENTRY)&_ZN6S209C53v75Ev,
  (VTBL_ENTRY)&_ZN6S209C53v76Ev,
  (VTBL_ENTRY)&_ZN6S209C53v77Ev,
  (VTBL_ENTRY)&_ZN6S209C53v78Ev,
  (VTBL_ENTRY)&_ZN6S209C53v79Ev,
  (VTBL_ENTRY)&_ZN6S209C53v80Ev,
  (VTBL_ENTRY)&_ZN6S209C53v81Ev,
  (VTBL_ENTRY)&_ZN6S209C53v82Ev,
  (VTBL_ENTRY)&_ZN6S209C53v83Ev,
  (VTBL_ENTRY)&_ZN6S209C53v84Ev,
  (VTBL_ENTRY)&_ZN6S209C53v85Ev,
  (VTBL_ENTRY)&_ZN6S209C53v86Ev,
  (VTBL_ENTRY)&_ZN6S209C53v87Ev,
  (VTBL_ENTRY)&_ZN6S209C53v88Ev,
  (VTBL_ENTRY)&_ZN6S209C53v89Ev,
  (VTBL_ENTRY)&_ZN6S209C43v90Ev,
  (VTBL_ENTRY)&_ZN6S209C43v91Ev,
  (VTBL_ENTRY)&_ZN6S209C43v92Ev,
  (VTBL_ENTRY)&_ZN6S209C43v93Ev,
  (VTBL_ENTRY)&_ZN6S209C43v94Ev,
  (VTBL_ENTRY)&_ZN6S209C43v95Ev,
  (VTBL_ENTRY)&_ZN6S209C43v96Ev,
  (VTBL_ENTRY)&_ZN6S209C43v97Ev,
  (VTBL_ENTRY)&_ZN6S209C43v98Ev,
  (VTBL_ENTRY)&_ZN6S209C43v99Ev,
  (VTBL_ENTRY)&_ZN6S209C44v100Ev,
  (VTBL_ENTRY)&_ZN6S209C44v101Ev,
  (VTBL_ENTRY)&_ZN6S209C44v102Ev,
  (VTBL_ENTRY)&_ZN6S209C44v103Ev,
  (VTBL_ENTRY)&_ZN6S209C44v104Ev,
  (VTBL_ENTRY)&_ZN6S209C44v105Ev,
  (VTBL_ENTRY)&_ZN6S209C44v106Ev,
  (VTBL_ENTRY)&_ZN6S209C44v107Ev,
  (VTBL_ENTRY)&_ZN6S209C44v108Ev,
  (VTBL_ENTRY)&_ZN6S209C44v109Ev,
  (VTBL_ENTRY)&_ZN6S209C34v110Ev,
  (VTBL_ENTRY)&_ZN6S209C34v111Ev,
  (VTBL_ENTRY)&_ZN6S209C34v112Ev,
  (VTBL_ENTRY)&_ZN6S209C34v113Ev,
  (VTBL_ENTRY)&_ZN6S209C24v114Ev,
  (VTBL_ENTRY)&_ZN6S209C24v115Ev,
};
extern VTBL_ENTRY _ZTI6S209C2[];
extern  VTBL_ENTRY _ZTV6S209C2[];
Class_Descriptor cd_S209C2 = {  "S209C2", // class name
  bases_S209C2, 4,
  &(vtc_S209C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S209C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S209C2),116, //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  S209C1  : S209C2 {
  ::S210C8_nt s209c1f0;
  ::S210C8_nt s209c1f1;
  virtual  ~S209C1(); // _ZN6S209C1D1Ev
  virtual void  v1(); // _ZN6S209C12v1Ev
  virtual void  v2(); // _ZN6S209C12v2Ev
  virtual void  v3(); // _ZN6S209C12v3Ev
  S209C1(); // tgen
};
//SIG(1 S209C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v110 v111 v112 v113 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v114 v115} vd v1 v2 v3 FC8 FC8}


 S209C1 ::~S209C1(){ note_dtor("S209C1", this);}
void  S209C1 ::v1(){vfunc_called(this, "_ZN6S209C12v1Ev");}
void  S209C1 ::v2(){vfunc_called(this, "_ZN6S209C12v2Ev");}
void  S209C1 ::v3(){vfunc_called(this, "_ZN6S209C12v3Ev");}
S209C1 ::S209C1(){ note_ctor("S209C1", this);} // tgen

static void Test_S209C1()
{
  extern Class_Descriptor cd_S209C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,62)];
    init_test(&cd_S209C1, buf);
    S209C1 *dp, &lv = *(dp=new (buf) S209C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,244), "sizeof(S209C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S209C1)");
    check_base_class_offset(lv, (S209C6*)(S209C5*)(S209C4*)(S209C3*)(S209C2*), 0, "S209C1");
    check_base_class_offset(lv, (S209C5*)(S209C4*)(S209C3*)(S209C2*), 0, "S209C1");
    check_base_class_offset(lv, (S209C4*)(S209C3*)(S209C2*), 0, "S209C1");
    check_base_class_offset(lv, (S209C3*)(S209C2*), 0, "S209C1");
    check_base_class_offset(lv, (S209C2*), 0, "S209C1");
    check_field_offset(lv, s209c1f0, ABISELECT(296,220), "S209C1.s209c1f0");
    check_field_offset(lv, s209c1f1, ABISELECT(312,232), "S209C1.s209c1f1");
    test_class_info(&lv, &cd_S209C1);
    dp->~S209C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS209C1(Test_S209C1, "S209C1", ABISELECT(328,244));

#else // __cplusplus

extern void _ZN6S209C1C1Ev();
extern void _ZN6S209C1D1Ev();
Name_Map name_map_S209C1[] = {
  NSPAIR(_ZN6S209C1C1Ev),
  NSPAIR(_ZN6S209C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S209C6;
extern VTBL_ENTRY _ZTI6S209C6[];
extern  VTBL_ENTRY _ZTV6S209C6[];
extern Class_Descriptor cd_S209C5;
extern VTBL_ENTRY _ZTI6S209C5[];
extern  VTBL_ENTRY _ZTV6S209C5[];
extern Class_Descriptor cd_S209C4;
extern VTBL_ENTRY _ZTI6S209C4[];
extern  VTBL_ENTRY _ZTV6S209C4[];
extern Class_Descriptor cd_S209C3;
extern VTBL_ENTRY _ZTI6S209C3[];
extern  VTBL_ENTRY _ZTV6S209C3[];
extern Class_Descriptor cd_S209C2;
extern VTBL_ENTRY _ZTI6S209C2[];
extern  VTBL_ENTRY _ZTV6S209C2[];
static Base_Class bases_S209C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S209C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S209C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S209C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S209C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S209C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S209C1[];
extern void _ZN6S209C1D1Ev();
extern void _ZN6S209C1D0Ev();
extern void _ZN6S209C62v4Ev();
extern void _ZN6S209C62v5Ev();
extern void _ZN6S209C62v6Ev();
extern void _ZN6S209C62v7Ev();
extern void _ZN6S209C62v8Ev();
extern void _ZN6S209C62v9Ev();
extern void _ZN6S209C63v10Ev();
extern void _ZN6S209C63v11Ev();
extern void _ZN6S209C63v12Ev();
extern void _ZN6S209C63v13Ev();
extern void _ZN6S209C63v14Ev();
extern void _ZN6S209C63v15Ev();
extern void _ZN6S209C63v16Ev();
extern void _ZN6S209C63v17Ev();
extern void _ZN6S209C63v18Ev();
extern void _ZN6S209C63v19Ev();
extern void _ZN6S209C63v20Ev();
extern void _ZN6S209C63v21Ev();
extern void _ZN6S209C63v22Ev();
extern void _ZN6S209C63v23Ev();
extern void _ZN6S209C63v24Ev();
extern void _ZN6S209C63v25Ev();
extern void _ZN6S209C63v26Ev();
extern void _ZN6S209C63v27Ev();
extern void _ZN6S209C63v28Ev();
extern void _ZN6S209C63v29Ev();
extern void _ZN6S209C63v30Ev();
extern void _ZN6S209C63v31Ev();
extern void _ZN6S209C63v32Ev();
extern void _ZN6S209C63v33Ev();
extern void _ZN6S209C63v34Ev();
extern void _ZN6S209C63v35Ev();
extern void _ZN6S209C63v36Ev();
extern void _ZN6S209C63v37Ev();
extern void _ZN6S209C63v38Ev();
extern void _ZN6S209C63v39Ev();
extern void _ZN6S209C63v40Ev();
extern void _ZN6S209C63v41Ev();
extern void _ZN6S209C63v42Ev();
extern void _ZN6S209C63v43Ev();
extern void _ZN6S209C63v44Ev();
extern void _ZN6S209C63v45Ev();
extern void _ZN6S209C63v46Ev();
extern void _ZN6S209C63v47Ev();
extern void _ZN6S209C63v48Ev();
extern void _ZN6S209C63v49Ev();
extern void _ZN6S209C63v50Ev();
extern void _ZN6S209C63v51Ev();
extern void _ZN6S209C63v52Ev();
extern void _ZN6S209C63v53Ev();
extern void _ZN6S209C63v54Ev();
extern void _ZN6S209C63v55Ev();
extern void _ZN6S209C63v56Ev();
extern void _ZN6S209C63v57Ev();
extern void _ZN6S209C63v58Ev();
extern void _ZN6S209C63v59Ev();
extern void _ZN6S209C63v60Ev();
extern void _ZN6S209C63v61Ev();
extern void _ZN6S209C63v62Ev();
extern void _ZN6S209C63v63Ev();
extern void _ZN6S209C63v64Ev();
extern void _ZN6S209C63v65Ev();
extern void _ZN6S209C63v66Ev();
extern void _ZN6S209C63v67Ev();
extern void _ZN6S209C53v68Ev();
extern void _ZN6S209C53v69Ev();
extern void _ZN6S209C53v70Ev();
extern void _ZN6S209C53v71Ev();
extern void _ZN6S209C53v72Ev();
extern void _ZN6S209C53v73Ev();
extern void _ZN6S209C53v74Ev();
extern void _ZN6S209C53v75Ev();
extern void _ZN6S209C53v76Ev();
extern void _ZN6S209C53v77Ev();
extern void _ZN6S209C53v78Ev();
extern void _ZN6S209C53v79Ev();
extern void _ZN6S209C53v80Ev();
extern void _ZN6S209C53v81Ev();
extern void _ZN6S209C53v82Ev();
extern void _ZN6S209C53v83Ev();
extern void _ZN6S209C53v84Ev();
extern void _ZN6S209C53v85Ev();
extern void _ZN6S209C53v86Ev();
extern void _ZN6S209C53v87Ev();
extern void _ZN6S209C53v88Ev();
extern void _ZN6S209C53v89Ev();
extern void _ZN6S209C43v90Ev();
extern void _ZN6S209C43v91Ev();
extern void _ZN6S209C43v92Ev();
extern void _ZN6S209C43v93Ev();
extern void _ZN6S209C43v94Ev();
extern void _ZN6S209C43v95Ev();
extern void _ZN6S209C43v96Ev();
extern void _ZN6S209C43v97Ev();
extern void _ZN6S209C43v98Ev();
extern void _ZN6S209C43v99Ev();
extern void _ZN6S209C44v100Ev();
extern void _ZN6S209C44v101Ev();
extern void _ZN6S209C44v102Ev();
extern void _ZN6S209C44v103Ev();
extern void _ZN6S209C44v104Ev();
extern void _ZN6S209C44v105Ev();
extern void _ZN6S209C44v106Ev();
extern void _ZN6S209C44v107Ev();
extern void _ZN6S209C44v108Ev();
extern void _ZN6S209C44v109Ev();
extern void _ZN6S209C34v110Ev();
extern void _ZN6S209C34v111Ev();
extern void _ZN6S209C34v112Ev();
extern void _ZN6S209C34v113Ev();
extern void _ZN6S209C24v114Ev();
extern void _ZN6S209C24v115Ev();
extern void _ZN6S209C12v1Ev();
extern void _ZN6S209C12v2Ev();
extern void _ZN6S209C12v3Ev();
static  VTBL_ENTRY vtc_S209C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S209C1[0]),
  (VTBL_ENTRY)&_ZN6S209C1D1Ev,
  (VTBL_ENTRY)&_ZN6S209C1D0Ev,
  (VTBL_ENTRY)&_ZN6S209C62v4Ev,
  (VTBL_ENTRY)&_ZN6S209C62v5Ev,
  (VTBL_ENTRY)&_ZN6S209C62v6Ev,
  (VTBL_ENTRY)&_ZN6S209C62v7Ev,
  (VTBL_ENTRY)&_ZN6S209C62v8Ev,
  (VTBL_ENTRY)&_ZN6S209C62v9Ev,
  (VTBL_ENTRY)&_ZN6S209C63v10Ev,
  (VTBL_ENTRY)&_ZN6S209C63v11Ev,
  (VTBL_ENTRY)&_ZN6S209C63v12Ev,
  (VTBL_ENTRY)&_ZN6S209C63v13Ev,
  (VTBL_ENTRY)&_ZN6S209C63v14Ev,
  (VTBL_ENTRY)&_ZN6S209C63v15Ev,
  (VTBL_ENTRY)&_ZN6S209C63v16Ev,
  (VTBL_ENTRY)&_ZN6S209C63v17Ev,
  (VTBL_ENTRY)&_ZN6S209C63v18Ev,
  (VTBL_ENTRY)&_ZN6S209C63v19Ev,
  (VTBL_ENTRY)&_ZN6S209C63v20Ev,
  (VTBL_ENTRY)&_ZN6S209C63v21Ev,
  (VTBL_ENTRY)&_ZN6S209C63v22Ev,
  (VTBL_ENTRY)&_ZN6S209C63v23Ev,
  (VTBL_ENTRY)&_ZN6S209C63v24Ev,
  (VTBL_ENTRY)&_ZN6S209C63v25Ev,
  (VTBL_ENTRY)&_ZN6S209C63v26Ev,
  (VTBL_ENTRY)&_ZN6S209C63v27Ev,
  (VTBL_ENTRY)&_ZN6S209C63v28Ev,
  (VTBL_ENTRY)&_ZN6S209C63v29Ev,
  (VTBL_ENTRY)&_ZN6S209C63v30Ev,
  (VTBL_ENTRY)&_ZN6S209C63v31Ev,
  (VTBL_ENTRY)&_ZN6S209C63v32Ev,
  (VTBL_ENTRY)&_ZN6S209C63v33Ev,
  (VTBL_ENTRY)&_ZN6S209C63v34Ev,
  (VTBL_ENTRY)&_ZN6S209C63v35Ev,
  (VTBL_ENTRY)&_ZN6S209C63v36Ev,
  (VTBL_ENTRY)&_ZN6S209C63v37Ev,
  (VTBL_ENTRY)&_ZN6S209C63v38Ev,
  (VTBL_ENTRY)&_ZN6S209C63v39Ev,
  (VTBL_ENTRY)&_ZN6S209C63v40Ev,
  (VTBL_ENTRY)&_ZN6S209C63v41Ev,
  (VTBL_ENTRY)&_ZN6S209C63v42Ev,
  (VTBL_ENTRY)&_ZN6S209C63v43Ev,
  (VTBL_ENTRY)&_ZN6S209C63v44Ev,
  (VTBL_ENTRY)&_ZN6S209C63v45Ev,
  (VTBL_ENTRY)&_ZN6S209C63v46Ev,
  (VTBL_ENTRY)&_ZN6S209C63v47Ev,
  (VTBL_ENTRY)&_ZN6S209C63v48Ev,
  (VTBL_ENTRY)&_ZN6S209C63v49Ev,
  (VTBL_ENTRY)&_ZN6S209C63v50Ev,
  (VTBL_ENTRY)&_ZN6S209C63v51Ev,
  (VTBL_ENTRY)&_ZN6S209C63v52Ev,
  (VTBL_ENTRY)&_ZN6S209C63v53Ev,
  (VTBL_ENTRY)&_ZN6S209C63v54Ev,
  (VTBL_ENTRY)&_ZN6S209C63v55Ev,
  (VTBL_ENTRY)&_ZN6S209C63v56Ev,
  (VTBL_ENTRY)&_ZN6S209C63v57Ev,
  (VTBL_ENTRY)&_ZN6S209C63v58Ev,
  (VTBL_ENTRY)&_ZN6S209C63v59Ev,
  (VTBL_ENTRY)&_ZN6S209C63v60Ev,
  (VTBL_ENTRY)&_ZN6S209C63v61Ev,
  (VTBL_ENTRY)&_ZN6S209C63v62Ev,
  (VTBL_ENTRY)&_ZN6S209C63v63Ev,
  (VTBL_ENTRY)&_ZN6S209C63v64Ev,
  (VTBL_ENTRY)&_ZN6S209C63v65Ev,
  (VTBL_ENTRY)&_ZN6S209C63v66Ev,
  (VTBL_ENTRY)&_ZN6S209C63v67Ev,
  (VTBL_ENTRY)&_ZN6S209C53v68Ev,
  (VTBL_ENTRY)&_ZN6S209C53v69Ev,
  (VTBL_ENTRY)&_ZN6S209C53v70Ev,
  (VTBL_ENTRY)&_ZN6S209C53v71Ev,
  (VTBL_ENTRY)&_ZN6S209C53v72Ev,
  (VTBL_ENTRY)&_ZN6S209C53v73Ev,
  (VTBL_ENTRY)&_ZN6S209C53v74Ev,
  (VTBL_ENTRY)&_ZN6S209C53v75Ev,
  (VTBL_ENTRY)&_ZN6S209C53v76Ev,
  (VTBL_ENTRY)&_ZN6S209C53v77Ev,
  (VTBL_ENTRY)&_ZN6S209C53v78Ev,
  (VTBL_ENTRY)&_ZN6S209C53v79Ev,
  (VTBL_ENTRY)&_ZN6S209C53v80Ev,
  (VTBL_ENTRY)&_ZN6S209C53v81Ev,
  (VTBL_ENTRY)&_ZN6S209C53v82Ev,
  (VTBL_ENTRY)&_ZN6S209C53v83Ev,
  (VTBL_ENTRY)&_ZN6S209C53v84Ev,
  (VTBL_ENTRY)&_ZN6S209C53v85Ev,
  (VTBL_ENTRY)&_ZN6S209C53v86Ev,
  (VTBL_ENTRY)&_ZN6S209C53v87Ev,
  (VTBL_ENTRY)&_ZN6S209C53v88Ev,
  (VTBL_ENTRY)&_ZN6S209C53v89Ev,
  (VTBL_ENTRY)&_ZN6S209C43v90Ev,
  (VTBL_ENTRY)&_ZN6S209C43v91Ev,
  (VTBL_ENTRY)&_ZN6S209C43v92Ev,
  (VTBL_ENTRY)&_ZN6S209C43v93Ev,
  (VTBL_ENTRY)&_ZN6S209C43v94Ev,
  (VTBL_ENTRY)&_ZN6S209C43v95Ev,
  (VTBL_ENTRY)&_ZN6S209C43v96Ev,
  (VTBL_ENTRY)&_ZN6S209C43v97Ev,
  (VTBL_ENTRY)&_ZN6S209C43v98Ev,
  (VTBL_ENTRY)&_ZN6S209C43v99Ev,
  (VTBL_ENTRY)&_ZN6S209C44v100Ev,
  (VTBL_ENTRY)&_ZN6S209C44v101Ev,
  (VTBL_ENTRY)&_ZN6S209C44v102Ev,
  (VTBL_ENTRY)&_ZN6S209C44v103Ev,
  (VTBL_ENTRY)&_ZN6S209C44v104Ev,
  (VTBL_ENTRY)&_ZN6S209C44v105Ev,
  (VTBL_ENTRY)&_ZN6S209C44v106Ev,
  (VTBL_ENTRY)&_ZN6S209C44v107Ev,
  (VTBL_ENTRY)&_ZN6S209C44v108Ev,
  (VTBL_ENTRY)&_ZN6S209C44v109Ev,
  (VTBL_ENTRY)&_ZN6S209C34v110Ev,
  (VTBL_ENTRY)&_ZN6S209C34v111Ev,
  (VTBL_ENTRY)&_ZN6S209C34v112Ev,
  (VTBL_ENTRY)&_ZN6S209C34v113Ev,
  (VTBL_ENTRY)&_ZN6S209C24v114Ev,
  (VTBL_ENTRY)&_ZN6S209C24v115Ev,
  (VTBL_ENTRY)&_ZN6S209C12v1Ev,
  (VTBL_ENTRY)&_ZN6S209C12v2Ev,
  (VTBL_ENTRY)&_ZN6S209C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S209C1[];
extern  VTBL_ENTRY _ZTV6S209C1[];
Class_Descriptor cd_S209C1 = {  "S209C1", // class name
  bases_S209C1, 5,
  &(vtc_S209C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,244), // object size
  NSPAIRA(_ZTI6S209C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S209C1),119, //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  S247C6  {
  int s247c6f0;
  __tsi64 s247c6f1;
  void *s247c6f2[4];
  int s247c6f3[2];
  void *s247c6f4;
  ::S1503C5_nt s247c6f5;
  void *s247c6f6[2];
  virtual  ~S247C6(); // _ZN6S247C6D1Ev
  virtual void  v5(); // _ZN6S247C62v5Ev
  virtual void  v6(); // _ZN6S247C62v6Ev
  virtual void  v7(); // _ZN6S247C62v7Ev
  virtual void  v8(); // _ZN6S247C62v8Ev
  virtual void  v9(); // _ZN6S247C62v9Ev
  virtual void  v10(); // _ZN6S247C63v10Ev
  virtual void  v11(); // _ZN6S247C63v11Ev
  virtual void  v12(); // _ZN6S247C63v12Ev
  virtual void  v13(); // _ZN6S247C63v13Ev
  virtual void  v14(); // _ZN6S247C63v14Ev
  virtual void  v15(); // _ZN6S247C63v15Ev
  virtual void  v16(); // _ZN6S247C63v16Ev
  virtual void  v17(); // _ZN6S247C63v17Ev
  virtual void  v18(); // _ZN6S247C63v18Ev
  virtual void  v19(); // _ZN6S247C63v19Ev
  virtual void  v20(); // _ZN6S247C63v20Ev
  virtual void  v21(); // _ZN6S247C63v21Ev
  virtual void  v22(); // _ZN6S247C63v22Ev
  virtual void  v23(); // _ZN6S247C63v23Ev
  virtual void  v24(); // _ZN6S247C63v24Ev
  virtual void  v25(); // _ZN6S247C63v25Ev
  virtual void  v26(); // _ZN6S247C63v26Ev
  virtual void  v27(); // _ZN6S247C63v27Ev
  virtual void  v28(); // _ZN6S247C63v28Ev
  virtual void  v29(); // _ZN6S247C63v29Ev
  virtual void  v30(); // _ZN6S247C63v30Ev
  virtual void  v31(); // _ZN6S247C63v31Ev
  virtual void  v32(); // _ZN6S247C63v32Ev
  virtual void  v33(); // _ZN6S247C63v33Ev
  virtual void  v34(); // _ZN6S247C63v34Ev
  virtual void  v35(); // _ZN6S247C63v35Ev
  virtual void  v36(); // _ZN6S247C63v36Ev
  virtual void  v37(); // _ZN6S247C63v37Ev
  virtual void  v38(); // _ZN6S247C63v38Ev
  virtual void  v39(); // _ZN6S247C63v39Ev
  virtual void  v40(); // _ZN6S247C63v40Ev
  virtual void  v41(); // _ZN6S247C63v41Ev
  virtual void  v42(); // _ZN6S247C63v42Ev
  virtual void  v43(); // _ZN6S247C63v43Ev
  virtual void  v44(); // _ZN6S247C63v44Ev
  virtual void  v45(); // _ZN6S247C63v45Ev
  virtual void  v46(); // _ZN6S247C63v46Ev
  virtual void  v47(); // _ZN6S247C63v47Ev
  virtual void  v48(); // _ZN6S247C63v48Ev
  virtual void  v49(); // _ZN6S247C63v49Ev
  virtual void  v50(); // _ZN6S247C63v50Ev
  virtual void  v51(); // _ZN6S247C63v51Ev
  virtual void  v52(); // _ZN6S247C63v52Ev
  virtual void  v53(); // _ZN6S247C63v53Ev
  virtual void  v54(); // _ZN6S247C63v54Ev
  virtual void  v55(); // _ZN6S247C63v55Ev
  virtual void  v56(); // _ZN6S247C63v56Ev
  virtual void  v57(); // _ZN6S247C63v57Ev
  virtual void  v58(); // _ZN6S247C63v58Ev
  virtual void  v59(); // _ZN6S247C63v59Ev
  virtual void  v60(); // _ZN6S247C63v60Ev
  virtual void  v61(); // _ZN6S247C63v61Ev
  virtual void  v62(); // _ZN6S247C63v62Ev
  virtual void  v63(); // _ZN6S247C63v63Ev
  virtual void  v64(); // _ZN6S247C63v64Ev
  virtual void  v65(); // _ZN6S247C63v65Ev
  virtual void  v66(); // _ZN6S247C63v66Ev
  virtual void  v67(); // _ZN6S247C63v67Ev
  virtual void  v68(); // _ZN6S247C63v68Ev
  S247C6(); // tgen
};
//SIG(-1 S247C6) 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]}


 S247C6 ::~S247C6(){ note_dtor("S247C6", this);}
void  S247C6 ::v5(){vfunc_called(this, "_ZN6S247C62v5Ev");}
void  S247C6 ::v6(){vfunc_called(this, "_ZN6S247C62v6Ev");}
void  S247C6 ::v7(){vfunc_called(this, "_ZN6S247C62v7Ev");}
void  S247C6 ::v8(){vfunc_called(this, "_ZN6S247C62v8Ev");}
void  S247C6 ::v9(){vfunc_called(this, "_ZN6S247C62v9Ev");}
void  S247C6 ::v10(){vfunc_called(this, "_ZN6S247C63v10Ev");}
void  S247C6 ::v11(){vfunc_called(this, "_ZN6S247C63v11Ev");}
void  S247C6 ::v12(){vfunc_called(this, "_ZN6S247C63v12Ev");}
void  S247C6 ::v13(){vfunc_called(this, "_ZN6S247C63v13Ev");}
void  S247C6 ::v14(){vfunc_called(this, "_ZN6S247C63v14Ev");}
void  S247C6 ::v15(){vfunc_called(this, "_ZN6S247C63v15Ev");}
void  S247C6 ::v16(){vfunc_called(this, "_ZN6S247C63v16Ev");}
void  S247C6 ::v17(){vfunc_called(this, "_ZN6S247C63v17Ev");}
void  S247C6 ::v18(){vfunc_called(this, "_ZN6S247C63v18Ev");}
void  S247C6 ::v19(){vfunc_called(this, "_ZN6S247C63v19Ev");}
void  S247C6 ::v20(){vfunc_called(this, "_ZN6S247C63v20Ev");}
void  S247C6 ::v21(){vfunc_called(this, "_ZN6S247C63v21Ev");}
void  S247C6 ::v22(){vfunc_called(this, "_ZN6S247C63v22Ev");}
void  S247C6 ::v23(){vfunc_called(this, "_ZN6S247C63v23Ev");}
void  S247C6 ::v24(){vfunc_called(this, "_ZN6S247C63v24Ev");}
void  S247C6 ::v25(){vfunc_called(this, "_ZN6S247C63v25Ev");}
void  S247C6 ::v26(){vfunc_called(this, "_ZN6S247C63v26Ev");}
void  S247C6 ::v27(){vfunc_called(this, "_ZN6S247C63v27Ev");}
void  S247C6 ::v28(){vfunc_called(this, "_ZN6S247C63v28Ev");}
void  S247C6 ::v29(){vfunc_called(this, "_ZN6S247C63v29Ev");}
void  S247C6 ::v30(){vfunc_called(this, "_ZN6S247C63v30Ev");}
void  S247C6 ::v31(){vfunc_called(this, "_ZN6S247C63v31Ev");}
void  S247C6 ::v32(){vfunc_called(this, "_ZN6S247C63v32Ev");}
void  S247C6 ::v33(){vfunc_called(this, "_ZN6S247C63v33Ev");}
void  S247C6 ::v34(){vfunc_called(this, "_ZN6S247C63v34Ev");}
void  S247C6 ::v35(){vfunc_called(this, "_ZN6S247C63v35Ev");}
void  S247C6 ::v36(){vfunc_called(this, "_ZN6S247C63v36Ev");}
void  S247C6 ::v37(){vfunc_called(this, "_ZN6S247C63v37Ev");}
void  S247C6 ::v38(){vfunc_called(this, "_ZN6S247C63v38Ev");}
void  S247C6 ::v39(){vfunc_called(this, "_ZN6S247C63v39Ev");}
void  S247C6 ::v40(){vfunc_called(this, "_ZN6S247C63v40Ev");}
void  S247C6 ::v41(){vfunc_called(this, "_ZN6S247C63v41Ev");}
void  S247C6 ::v42(){vfunc_called(this, "_ZN6S247C63v42Ev");}
void  S247C6 ::v43(){vfunc_called(this, "_ZN6S247C63v43Ev");}
void  S247C6 ::v44(){vfunc_called(this, "_ZN6S247C63v44Ev");}
void  S247C6 ::v45(){vfunc_called(this, "_ZN6S247C63v45Ev");}
void  S247C6 ::v46(){vfunc_called(this, "_ZN6S247C63v46Ev");}
void  S247C6 ::v47(){vfunc_called(this, "_ZN6S247C63v47Ev");}
void  S247C6 ::v48(){vfunc_called(this, "_ZN6S247C63v48Ev");}
void  S247C6 ::v49(){vfunc_called(this, "_ZN6S247C63v49Ev");}
void  S247C6 ::v50(){vfunc_called(this, "_ZN6S247C63v50Ev");}
void  S247C6 ::v51(){vfunc_called(this, "_ZN6S247C63v51Ev");}
void  S247C6 ::v52(){vfunc_called(this, "_ZN6S247C63v52Ev");}
void  S247C6 ::v53(){vfunc_called(this, "_ZN6S247C63v53Ev");}
void  S247C6 ::v54(){vfunc_called(this, "_ZN6S247C63v54Ev");}
void  S247C6 ::v55(){vfunc_called(this, "_ZN6S247C63v55Ev");}
void  S247C6 ::v56(){vfunc_called(this, "_ZN6S247C63v56Ev");}
void  S247C6 ::v57(){vfunc_called(this, "_ZN6S247C63v57Ev");}
void  S247C6 ::v58(){vfunc_called(this, "_ZN6S247C63v58Ev");}
void  S247C6 ::v59(){vfunc_called(this, "_ZN6S247C63v59Ev");}
void  S247C6 ::v60(){vfunc_called(this, "_ZN6S247C63v60Ev");}
void  S247C6 ::v61(){vfunc_called(this, "_ZN6S247C63v61Ev");}
void  S247C6 ::v62(){vfunc_called(this, "_ZN6S247C63v62Ev");}
void  S247C6 ::v63(){vfunc_called(this, "_ZN6S247C63v63Ev");}
void  S247C6 ::v64(){vfunc_called(this, "_ZN6S247C63v64Ev");}
void  S247C6 ::v65(){vfunc_called(this, "_ZN6S247C63v65Ev");}
void  S247C6 ::v66(){vfunc_called(this, "_ZN6S247C63v66Ev");}
void  S247C6 ::v67(){vfunc_called(this, "_ZN6S247C63v67Ev");}
void  S247C6 ::v68(){vfunc_called(this, "_ZN6S247C63v68Ev");}
S247C6 ::S247C6(){ note_ctor("S247C6", this);} // tgen

static void Test_S247C6()
{
  extern Class_Descriptor cd_S247C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S247C6, buf);
    S247C6 *dp, &lv = *(dp=new (buf) S247C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S247C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S247C6)");
    check_field_offset(lv, s247c6f0, ABISELECT(8,4), "S247C6.s247c6f0");
    check_field_offset(lv, s247c6f1, ABISELECT(16,8), "S247C6.s247c6f1");
    check_field_offset(lv, s247c6f2, ABISELECT(24,16), "S247C6.s247c6f2");
    check_field_offset(lv, s247c6f3, ABISELECT(56,32), "S247C6.s247c6f3");
    check_field_offset(lv, s247c6f4, ABISELECT(64,40), "S247C6.s247c6f4");
    check_field_offset(lv, s247c6f5, ABISELECT(72,44), "S247C6.s247c6f5");
    check_field_offset(lv, s247c6f6, ABISELECT(80,52), "S247C6.s247c6f6");
    test_class_info(&lv, &cd_S247C6);
    dp->~S247C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS247C6(Test_S247C6, "S247C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S247C6C1Ev();
extern void _ZN6S247C6D1Ev();
Name_Map name_map_S247C6[] = {
  NSPAIR(_ZN6S247C6C1Ev),
  NSPAIR(_ZN6S247C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S247C6[];
extern void _ZN6S247C6D1Ev();
extern void _ZN6S247C6D0Ev();
extern void _ZN6S247C62v5Ev();
extern void _ZN6S247C62v6Ev();
extern void _ZN6S247C62v7Ev();
extern void _ZN6S247C62v8Ev();
extern void _ZN6S247C62v9Ev();
extern void _ZN6S247C63v10Ev();
extern void _ZN6S247C63v11Ev();
extern void _ZN6S247C63v12Ev();
extern void _ZN6S247C63v13Ev();
extern void _ZN6S247C63v14Ev();
extern void _ZN6S247C63v15Ev();
extern void _ZN6S247C63v16Ev();
extern void _ZN6S247C63v17Ev();
extern void _ZN6S247C63v18Ev();
extern void _ZN6S247C63v19Ev();
extern void _ZN6S247C63v20Ev();
extern void _ZN6S247C63v21Ev();
extern void _ZN6S247C63v22Ev();
extern void _ZN6S247C63v23Ev();
extern void _ZN6S247C63v24Ev();
extern void _ZN6S247C63v25Ev();
extern void _ZN6S247C63v26Ev();
extern void _ZN6S247C63v27Ev();
extern void _ZN6S247C63v28Ev();
extern void _ZN6S247C63v29Ev();
extern void _ZN6S247C63v30Ev();
extern void _ZN6S247C63v31Ev();
extern void _ZN6S247C63v32Ev();
extern void _ZN6S247C63v33Ev();
extern void _ZN6S247C63v34Ev();
extern void _ZN6S247C63v35Ev();
extern void _ZN6S247C63v36Ev();
extern void _ZN6S247C63v37Ev();
extern void _ZN6S247C63v38Ev();
extern void _ZN6S247C63v39Ev();
extern void _ZN6S247C63v40Ev();
extern void _ZN6S247C63v41Ev();
extern void _ZN6S247C63v42Ev();
extern void _ZN6S247C63v43Ev();
extern void _ZN6S247C63v44Ev();
extern void _ZN6S247C63v45Ev();
extern void _ZN6S247C63v46Ev();
extern void _ZN6S247C63v47Ev();
extern void _ZN6S247C63v48Ev();
extern void _ZN6S247C63v49Ev();
extern void _ZN6S247C63v50Ev();
extern void _ZN6S247C63v51Ev();
extern void _ZN6S247C63v52Ev();
extern void _ZN6S247C63v53Ev();
extern void _ZN6S247C63v54Ev();
extern void _ZN6S247C63v55Ev();
extern void _ZN6S247C63v56Ev();
extern void _ZN6S247C63v57Ev();
extern void _ZN6S247C63v58Ev();
extern void _ZN6S247C63v59Ev();
extern void _ZN6S247C63v60Ev();
extern void _ZN6S247C63v61Ev();
extern void _ZN6S247C63v62Ev();
extern void _ZN6S247C63v63Ev();
extern void _ZN6S247C63v64Ev();
extern void _ZN6S247C63v65Ev();
extern void _ZN6S247C63v66Ev();
extern void _ZN6S247C63v67Ev();
extern void _ZN6S247C63v68Ev();
static  VTBL_ENTRY vtc_S247C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S247C6[0]),
  (VTBL_ENTRY)&_ZN6S247C6D1Ev,
  (VTBL_ENTRY)&_ZN6S247C6D0Ev,
  (VTBL_ENTRY)&_ZN6S247C62v5Ev,
  (VTBL_ENTRY)&_ZN6S247C62v6Ev,
  (VTBL_ENTRY)&_ZN6S247C62v7Ev,
  (VTBL_ENTRY)&_ZN6S247C62v8Ev,
  (VTBL_ENTRY)&_ZN6S247C62v9Ev,
  (VTBL_ENTRY)&_ZN6S247C63v10Ev,
  (VTBL_ENTRY)&_ZN6S247C63v11Ev,
  (VTBL_ENTRY)&_ZN6S247C63v12Ev,
  (VTBL_ENTRY)&_ZN6S247C63v13Ev,
  (VTBL_ENTRY)&_ZN6S247C63v14Ev,
  (VTBL_ENTRY)&_ZN6S247C63v15Ev,
  (VTBL_ENTRY)&_ZN6S247C63v16Ev,
  (VTBL_ENTRY)&_ZN6S247C63v17Ev,
  (VTBL_ENTRY)&_ZN6S247C63v18Ev,
  (VTBL_ENTRY)&_ZN6S247C63v19Ev,
  (VTBL_ENTRY)&_ZN6S247C63v20Ev,
  (VTBL_ENTRY)&_ZN6S247C63v21Ev,
  (VTBL_ENTRY)&_ZN6S247C63v22Ev,
  (VTBL_ENTRY)&_ZN6S247C63v23Ev,
  (VTBL_ENTRY)&_ZN6S247C63v24Ev,
  (VTBL_ENTRY)&_ZN6S247C63v25Ev,
  (VTBL_ENTRY)&_ZN6S247C63v26Ev,
  (VTBL_ENTRY)&_ZN6S247C63v27Ev,
  (VTBL_ENTRY)&_ZN6S247C63v28Ev,
  (VTBL_ENTRY)&_ZN6S247C63v29Ev,
  (VTBL_ENTRY)&_ZN6S247C63v30Ev,
  (VTBL_ENTRY)&_ZN6S247C63v31Ev,
  (VTBL_ENTRY)&_ZN6S247C63v32Ev,
  (VTBL_ENTRY)&_ZN6S247C63v33Ev,
  (VTBL_ENTRY)&_ZN6S247C63v34Ev,
  (VTBL_ENTRY)&_ZN6S247C63v35Ev,
  (VTBL_ENTRY)&_ZN6S247C63v36Ev,
  (VTBL_ENTRY)&_ZN6S247C63v37Ev,
  (VTBL_ENTRY)&_ZN6S247C63v38Ev,
  (VTBL_ENTRY)&_ZN6S247C63v39Ev,
  (VTBL_ENTRY)&_ZN6S247C63v40Ev,
  (VTBL_ENTRY)&_ZN6S247C63v41Ev,
  (VTBL_ENTRY)&_ZN6S247C63v42Ev,
  (VTBL_ENTRY)&_ZN6S247C63v43Ev,
  (VTBL_ENTRY)&_ZN6S247C63v44Ev,
  (VTBL_ENTRY)&_ZN6S247C63v45Ev,
  (VTBL_ENTRY)&_ZN6S247C63v46Ev,
  (VTBL_ENTRY)&_ZN6S247C63v47Ev,
  (VTBL_ENTRY)&_ZN6S247C63v48Ev,
  (VTBL_ENTRY)&_ZN6S247C63v49Ev,
  (VTBL_ENTRY)&_ZN6S247C63v50Ev,
  (VTBL_ENTRY)&_ZN6S247C63v51Ev,
  (VTBL_ENTRY)&_ZN6S247C63v52Ev,
  (VTBL_ENTRY)&_ZN6S247C63v53Ev,
  (VTBL_ENTRY)&_ZN6S247C63v54Ev,
  (VTBL_ENTRY)&_ZN6S247C63v55Ev,
  (VTBL_ENTRY)&_ZN6S247C63v56Ev,
  (VTBL_ENTRY)&_ZN6S247C63v57Ev,
  (VTBL_ENTRY)&_ZN6S247C63v58Ev,
  (VTBL_ENTRY)&_ZN6S247C63v59Ev,
  (VTBL_ENTRY)&_ZN6S247C63v60Ev,
  (VTBL_ENTRY)&_ZN6S247C63v61Ev,
  (VTBL_ENTRY)&_ZN6S247C63v62Ev,
  (VTBL_ENTRY)&_ZN6S247C63v63Ev,
  (VTBL_ENTRY)&_ZN6S247C63v64Ev,
  (VTBL_ENTRY)&_ZN6S247C63v65Ev,
  (VTBL_ENTRY)&_ZN6S247C63v66Ev,
  (VTBL_ENTRY)&_ZN6S247C63v67Ev,
  (VTBL_ENTRY)&_ZN6S247C63v68Ev,
};
extern VTBL_ENTRY _ZTI6S247C6[];
extern  VTBL_ENTRY _ZTV6S247C6[];
Class_Descriptor cd_S247C6 = {  "S247C6", // class name
  0,0,//no base classes
  &(vtc_S247C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S247C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S247C6),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  S247C5  : S247C6 {
  int s247c5f0[2];
  void *s247c5f1;
  int s247c5f2[2];
  ::S210C8_nt s247c5f3;
  ::S210C8_nt s247c5f4;
  ::S629C14 s247c5f5;
  ::S210C8_nt s247c5f6;
  unsigned int s247c5f7:1;
  unsigned int s247c5f8:1;
  unsigned int s247c5f9:1;
  unsigned int s247c5f10:1;
  unsigned int s247c5f11:1;
  int s247c5f12[2];
  virtual  ~S247C5(); // _ZN6S247C5D1Ev
  virtual void  v69(); // _ZN6S247C53v69Ev
  virtual void  v70(); // _ZN6S247C53v70Ev
  virtual void  v71(); // _ZN6S247C53v71Ev
  virtual void  v72(); // _ZN6S247C53v72Ev
  virtual void  v73(); // _ZN6S247C53v73Ev
  virtual void  v74(); // _ZN6S247C53v74Ev
  virtual void  v75(); // _ZN6S247C53v75Ev
  virtual void  v76(); // _ZN6S247C53v76Ev
  virtual void  v77(); // _ZN6S247C53v77Ev
  virtual void  v78(); // _ZN6S247C53v78Ev
  virtual void  v79(); // _ZN6S247C53v79Ev
  virtual void  v80(); // _ZN6S247C53v80Ev
  virtual void  v81(); // _ZN6S247C53v81Ev
  virtual void  v82(); // _ZN6S247C53v82Ev
  virtual void  v83(); // _ZN6S247C53v83Ev
  virtual void  v84(); // _ZN6S247C53v84Ev
  virtual void  v85(); // _ZN6S247C53v85Ev
  virtual void  v86(); // _ZN6S247C53v86Ev
  virtual void  v87(); // _ZN6S247C53v87Ev
  virtual void  v88(); // _ZN6S247C53v88Ev
  virtual void  v89(); // _ZN6S247C53v89Ev
  virtual void  v90(); // _ZN6S247C53v90Ev
  S247C5(); // tgen
};
//SIG(-1 S247C5) 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]}


 S247C5 ::~S247C5(){ note_dtor("S247C5", this);}
void  S247C5 ::v69(){vfunc_called(this, "_ZN6S247C53v69Ev");}
void  S247C5 ::v70(){vfunc_called(this, "_ZN6S247C53v70Ev");}
void  S247C5 ::v71(){vfunc_called(this, "_ZN6S247C53v71Ev");}
void  S247C5 ::v72(){vfunc_called(this, "_ZN6S247C53v72Ev");}
void  S247C5 ::v73(){vfunc_called(this, "_ZN6S247C53v73Ev");}
void  S247C5 ::v74(){vfunc_called(this, "_ZN6S247C53v74Ev");}
void  S247C5 ::v75(){vfunc_called(this, "_ZN6S247C53v75Ev");}
void  S247C5 ::v76(){vfunc_called(this, "_ZN6S247C53v76Ev");}
void  S247C5 ::v77(){vfunc_called(this, "_ZN6S247C53v77Ev");}
void  S247C5 ::v78(){vfunc_called(this, "_ZN6S247C53v78Ev");}
void  S247C5 ::v79(){vfunc_called(this, "_ZN6S247C53v79Ev");}
void  S247C5 ::v80(){vfunc_called(this, "_ZN6S247C53v80Ev");}
void  S247C5 ::v81(){vfunc_called(this, "_ZN6S247C53v81Ev");}
void  S247C5 ::v82(){vfunc_called(this, "_ZN6S247C53v82Ev");}
void  S247C5 ::v83(){vfunc_called(this, "_ZN6S247C53v83Ev");}
void  S247C5 ::v84(){vfunc_called(this, "_ZN6S247C53v84Ev");}
void  S247C5 ::v85(){vfunc_called(this, "_ZN6S247C53v85Ev");}
void  S247C5 ::v86(){vfunc_called(this, "_ZN6S247C53v86Ev");}
void  S247C5 ::v87(){vfunc_called(this, "_ZN6S247C53v87Ev");}
void  S247C5 ::v88(){vfunc_called(this, "_ZN6S247C53v88Ev");}
void  S247C5 ::v89(){vfunc_called(this, "_ZN6S247C53v89Ev");}
void  S247C5 ::v90(){vfunc_called(this, "_ZN6S247C53v90Ev");}
S247C5 ::S247C5(){ note_ctor("S247C5", this);} // tgen

static void Test_S247C5()
{
  extern Class_Descriptor cd_S247C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S247C5, buf);
    S247C5 *dp, &lv = *(dp=new (buf) S247C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S247C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S247C5)");
    check_base_class_offset(lv, (S247C6*), 0, "S247C5");
    check_field_offset(lv, s247c5f0, ABISELECT(96,60), "S247C5.s247c5f0");
    check_field_offset(lv, s247c5f1, ABISELECT(104,68), "S247C5.s247c5f1");
    check_field_offset(lv, s247c5f2, ABISELECT(112,72), "S247C5.s247c5f2");
    check_field_offset(lv, s247c5f3, ABISELECT(120,80), "S247C5.s247c5f3");
    check_field_offset(lv, s247c5f4, ABISELECT(136,92), "S247C5.s247c5f4");
    check_field_offset(lv, s247c5f5, ABISELECT(152,104), "S247C5.s247c5f5");
    check_field_offset(lv, s247c5f6, ABISELECT(160,108), "S247C5.s247c5f6");
    set_bf_and_test(lv, s247c5f7, ABISELECT(176,120), 0, 1, 1, "S247C5");
    set_bf_and_test(lv, s247c5f8, ABISELECT(176,120), 1, 1, 1, "S247C5");
    set_bf_and_test(lv, s247c5f9, ABISELECT(176,120), 2, 1, 1, "S247C5");
    set_bf_and_test(lv, s247c5f10, ABISELECT(176,120), 3, 1, 1, "S247C5");
    set_bf_and_test(lv, s247c5f11, ABISELECT(176,120), 4, 1, 1, "S247C5");
    check_field_offset(lv, s247c5f12, ABISELECT(180,124), "S247C5.s247c5f12");
    test_class_info(&lv, &cd_S247C5);
    dp->~S247C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS247C5(Test_S247C5, "S247C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S247C5C1Ev();
extern void _ZN6S247C5D1Ev();
Name_Map name_map_S247C5[] = {
  NSPAIR(_ZN6S247C5C1Ev),
  NSPAIR(_ZN6S247C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S247C6;
extern VTBL_ENTRY _ZTI6S247C6[];
extern  VTBL_ENTRY _ZTV6S247C6[];
static Base_Class bases_S247C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S247C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S247C5[];
extern void _ZN6S247C5D1Ev();
extern void _ZN6S247C5D0Ev();
extern void _ZN6S247C62v5Ev();
extern void _ZN6S247C62v6Ev();
extern void _ZN6S247C62v7Ev();
extern void _ZN6S247C62v8Ev();
extern void _ZN6S247C62v9Ev();
extern void _ZN6S247C63v10Ev();
extern void _ZN6S247C63v11Ev();
extern void _ZN6S247C63v12Ev();
extern void _ZN6S247C63v13Ev();
extern void _ZN6S247C63v14Ev();
extern void _ZN6S247C63v15Ev();
extern void _ZN6S247C63v16Ev();
extern void _ZN6S247C63v17Ev();
extern void _ZN6S247C63v18Ev();
extern void _ZN6S247C63v19Ev();
extern void _ZN6S247C63v20Ev();
extern void _ZN6S247C63v21Ev();
extern void _ZN6S247C63v22Ev();
extern void _ZN6S247C63v23Ev();
extern void _ZN6S247C63v24Ev();
extern void _ZN6S247C63v25Ev();
extern void _ZN6S247C63v26Ev();
extern void _ZN6S247C63v27Ev();
extern void _ZN6S247C63v28Ev();
extern void _ZN6S247C63v29Ev();
extern void _ZN6S247C63v30Ev();
extern void _ZN6S247C63v31Ev();
extern void _ZN6S247C63v32Ev();
extern void _ZN6S247C63v33Ev();
extern void _ZN6S247C63v34Ev();
extern void _ZN6S247C63v35Ev();
extern void _ZN6S247C63v36Ev();
extern void _ZN6S247C63v37Ev();
extern void _ZN6S247C63v38Ev();
extern void _ZN6S247C63v39Ev();
extern void _ZN6S247C63v40Ev();
extern void _ZN6S247C63v41Ev();
extern void _ZN6S247C63v42Ev();
extern void _ZN6S247C63v43Ev();
extern void _ZN6S247C63v44Ev();
extern void _ZN6S247C63v45Ev();
extern void _ZN6S247C63v46Ev();
extern void _ZN6S247C63v47Ev();
extern void _ZN6S247C63v48Ev();
extern void _ZN6S247C63v49Ev();
extern void _ZN6S247C63v50Ev();
extern void _ZN6S247C63v51Ev();
extern void _ZN6S247C63v52Ev();
extern void _ZN6S247C63v53Ev();
extern void _ZN6S247C63v54Ev();
extern void _ZN6S247C63v55Ev();
extern void _ZN6S247C63v56Ev();
extern void _ZN6S247C63v57Ev();
extern void _ZN6S247C63v58Ev();
extern void _ZN6S247C63v59Ev();
extern void _ZN6S247C63v60Ev();
extern void _ZN6S247C63v61Ev();
extern void _ZN6S247C63v62Ev();
extern void _ZN6S247C63v63Ev();
extern void _ZN6S247C63v64Ev();
extern void _ZN6S247C63v65Ev();
extern void _ZN6S247C63v66Ev();
extern void _ZN6S247C63v67Ev();
extern void _ZN6S247C63v68Ev();
extern void _ZN6S247C53v69Ev();
extern void _ZN6S247C53v70Ev();
extern void _ZN6S247C53v71Ev();
extern void _ZN6S247C53v72Ev();
extern void _ZN6S247C53v73Ev();
extern void _ZN6S247C53v74Ev();
extern void _ZN6S247C53v75Ev();
extern void _ZN6S247C53v76Ev();
extern void _ZN6S247C53v77Ev();
extern void _ZN6S247C53v78Ev();
extern void _ZN6S247C53v79Ev();
extern void _ZN6S247C53v80Ev();
extern void _ZN6S247C53v81Ev();
extern void _ZN6S247C53v82Ev();
extern void _ZN6S247C53v83Ev();
extern void _ZN6S247C53v84Ev();
extern void _ZN6S247C53v85Ev();
extern void _ZN6S247C53v86Ev();
extern void _ZN6S247C53v87Ev();
extern void _ZN6S247C53v88Ev();
extern void _ZN6S247C53v89Ev();
extern void _ZN6S247C53v90Ev();
static  VTBL_ENTRY vtc_S247C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S247C5[0]),
  (VTBL_ENTRY)&_ZN6S247C5D1Ev,
  (VTBL_ENTRY)&_ZN6S247C5D0Ev,
  (VTBL_ENTRY)&_ZN6S247C62v5Ev,
  (VTBL_ENTRY)&_ZN6S247C62v6Ev,
  (VTBL_ENTRY)&_ZN6S247C62v7Ev,
  (VTBL_ENTRY)&_ZN6S247C62v8Ev,
  (VTBL_ENTRY)&_ZN6S247C62v9Ev,
  (VTBL_ENTRY)&_ZN6S247C63v10Ev,
  (VTBL_ENTRY)&_ZN6S247C63v11Ev,
  (VTBL_ENTRY)&_ZN6S247C63v12Ev,
  (VTBL_ENTRY)&_ZN6S247C63v13Ev,
  (VTBL_ENTRY)&_ZN6S247C63v14Ev,
  (VTBL_ENTRY)&_ZN6S247C63v15Ev,
  (VTBL_ENTRY)&_ZN6S247C63v16Ev,
  (VTBL_ENTRY)&_ZN6S247C63v17Ev,
  (VTBL_ENTRY)&_ZN6S247C63v18Ev,
  (VTBL_ENTRY)&_ZN6S247C63v19Ev,
  (VTBL_ENTRY)&_ZN6S247C63v20Ev,
  (VTBL_ENTRY)&_ZN6S247C63v21Ev,
  (VTBL_ENTRY)&_ZN6S247C63v22Ev,
  (VTBL_ENTRY)&_ZN6S247C63v23Ev,
  (VTBL_ENTRY)&_ZN6S247C63v24Ev,
  (VTBL_ENTRY)&_ZN6S247C63v25Ev,
  (VTBL_ENTRY)&_ZN6S247C63v26Ev,
  (VTBL_ENTRY)&_ZN6S247C63v27Ev,
  (VTBL_ENTRY)&_ZN6S247C63v28Ev,
  (VTBL_ENTRY)&_ZN6S247C63v29Ev,
  (VTBL_ENTRY)&_ZN6S247C63v30Ev,
  (VTBL_ENTRY)&_ZN6S247C63v31Ev,
  (VTBL_ENTRY)&_ZN6S247C63v32Ev,
  (VTBL_ENTRY)&_ZN6S247C63v33Ev,
  (VTBL_ENTRY)&_ZN6S247C63v34Ev,
  (VTBL_ENTRY)&_ZN6S247C63v35Ev,
  (VTBL_ENTRY)&_ZN6S247C63v36Ev,
  (VTBL_ENTRY)&_ZN6S247C63v37Ev,
  (VTBL_ENTRY)&_ZN6S247C63v38Ev,
  (VTBL_ENTRY)&_ZN6S247C63v39Ev,
  (VTBL_ENTRY)&_ZN6S247C63v40Ev,
  (VTBL_ENTRY)&_ZN6S247C63v41Ev,
  (VTBL_ENTRY)&_ZN6S247C63v42Ev,
  (VTBL_ENTRY)&_ZN6S247C63v43Ev,
  (VTBL_ENTRY)&_ZN6S247C63v44Ev,
  (VTBL_ENTRY)&_ZN6S247C63v45Ev,
  (VTBL_ENTRY)&_ZN6S247C63v46Ev,
  (VTBL_ENTRY)&_ZN6S247C63v47Ev,
  (VTBL_ENTRY)&_ZN6S247C63v48Ev,
  (VTBL_ENTRY)&_ZN6S247C63v49Ev,
  (VTBL_ENTRY)&_ZN6S247C63v50Ev,
  (VTBL_ENTRY)&_ZN6S247C63v51Ev,
  (VTBL_ENTRY)&_ZN6S247C63v52Ev,
  (VTBL_ENTRY)&_ZN6S247C63v53Ev,
  (VTBL_ENTRY)&_ZN6S247C63v54Ev,
  (VTBL_ENTRY)&_ZN6S247C63v55Ev,
  (VTBL_ENTRY)&_ZN6S247C63v56Ev,
  (VTBL_ENTRY)&_ZN6S247C63v57Ev,
  (VTBL_ENTRY)&_ZN6S247C63v58Ev,
  (VTBL_ENTRY)&_ZN6S247C63v59Ev,
  (VTBL_ENTRY)&_ZN6S247C63v60Ev,
  (VTBL_ENTRY)&_ZN6S247C63v61Ev,
  (VTBL_ENTRY)&_ZN6S247C63v62Ev,
  (VTBL_ENTRY)&_ZN6S247C63v63Ev,
  (VTBL_ENTRY)&_ZN6S247C63v64Ev,
  (VTBL_ENTRY)&_ZN6S247C63v65Ev,
  (VTBL_ENTRY)&_ZN6S247C63v66Ev,
  (VTBL_ENTRY)&_ZN6S247C63v67Ev,
  (VTBL_ENTRY)&_ZN6S247C63v68Ev,
  (VTBL_ENTRY)&_ZN6S247C53v69Ev,
  (VTBL_ENTRY)&_ZN6S247C53v70Ev,
  (VTBL_ENTRY)&_ZN6S247C53v71Ev,
  (VTBL_ENTRY)&_ZN6S247C53v72Ev,
  (VTBL_ENTRY)&_ZN6S247C53v73Ev,
  (VTBL_ENTRY)&_ZN6S247C53v74Ev,
  (VTBL_ENTRY)&_ZN6S247C53v75Ev,
  (VTBL_ENTRY)&_ZN6S247C53v76Ev,
  (VTBL_ENTRY)&_ZN6S247C53v77Ev,
  (VTBL_ENTRY)&_ZN6S247C53v78Ev,
  (VTBL_ENTRY)&_ZN6S247C53v79Ev,
  (VTBL_ENTRY)&_ZN6S247C53v80Ev,
  (VTBL_ENTRY)&_ZN6S247C53v81Ev,
  (VTBL_ENTRY)&_ZN6S247C53v82Ev,
  (VTBL_ENTRY)&_ZN6S247C53v83Ev,
  (VTBL_ENTRY)&_ZN6S247C53v84Ev,
  (VTBL_ENTRY)&_ZN6S247C53v85Ev,
  (VTBL_ENTRY)&_ZN6S247C53v86Ev,
  (VTBL_ENTRY)&_ZN6S247C53v87Ev,
  (VTBL_ENTRY)&_ZN6S247C53v88Ev,
  (VTBL_ENTRY)&_ZN6S247C53v89Ev,
  (VTBL_ENTRY)&_ZN6S247C53v90Ev,
};
extern VTBL_ENTRY _ZTI6S247C5[];
extern  VTBL_ENTRY _ZTV6S247C5[];
Class_Descriptor cd_S247C5 = {  "S247C5", // class name
  bases_S247C5, 1,
  &(vtc_S247C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S247C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S247C5),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  S247C4  : S247C5 {
  unsigned int s247c4f0:1;
  unsigned int s247c4f1:1;
  unsigned int s247c4f2:1;
  ::S1503C28 s247c4f3;
  ::S1503C24 s247c4f4;
  ::S1503C18 s247c4f5;
  ::S1503C12 s247c4f6;
  int s247c4f7[3];
  virtual  ~S247C4(); // _ZN6S247C4D1Ev
  virtual void  v91(); // _ZN6S247C43v91Ev
  virtual void  v92(); // _ZN6S247C43v92Ev
  virtual void  v93(); // _ZN6S247C43v93Ev
  virtual void  v94(); // _ZN6S247C43v94Ev
  virtual void  v95(); // _ZN6S247C43v95Ev
  virtual void  v96(); // _ZN6S247C43v96Ev
  virtual void  v97(); // _ZN6S247C43v97Ev
  virtual void  v98(); // _ZN6S247C43v98Ev
  virtual void  v99(); // _ZN6S247C43v99Ev
  virtual void  v100(); // _ZN6S247C44v100Ev
  virtual void  v101(); // _ZN6S247C44v101Ev
  virtual void  v102(); // _ZN6S247C44v102Ev
  virtual void  v103(); // _ZN6S247C44v103Ev
  virtual void  v104(); // _ZN6S247C44v104Ev
  virtual void  v105(); // _ZN6S247C44v105Ev
  virtual void  v106(); // _ZN6S247C44v106Ev
  virtual void  v107(); // _ZN6S247C44v107Ev
  virtual void  v108(); // _ZN6S247C44v108Ev
  virtual void  v109(); // _ZN6S247C44v109Ev
  virtual void  v110(); // _ZN6S247C44v110Ev
  S247C4(); // tgen
};
//SIG(-1 S247C4) 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]}


 S247C4 ::~S247C4(){ note_dtor("S247C4", this);}
void  S247C4 ::v91(){vfunc_called(this, "_ZN6S247C43v91Ev");}
void  S247C4 ::v92(){vfunc_called(this, "_ZN6S247C43v92Ev");}
void  S247C4 ::v93(){vfunc_called(this, "_ZN6S247C43v93Ev");}
void  S247C4 ::v94(){vfunc_called(this, "_ZN6S247C43v94Ev");}
void  S247C4 ::v95(){vfunc_called(this, "_ZN6S247C43v95Ev");}
void  S247C4 ::v96(){vfunc_called(this, "_ZN6S247C43v96Ev");}
void  S247C4 ::v97(){vfunc_called(this, "_ZN6S247C43v97Ev");}
void  S247C4 ::v98(){vfunc_called(this, "_ZN6S247C43v98Ev");}
void  S247C4 ::v99(){vfunc_called(this, "_ZN6S247C43v99Ev");}
void  S247C4 ::v100(){vfunc_called(this, "_ZN6S247C44v100Ev");}
void  S247C4 ::v101(){vfunc_called(this, "_ZN6S247C44v101Ev");}
void  S247C4 ::v102(){vfunc_called(this, "_ZN6S247C44v102Ev");}
void  S247C4 ::v103(){vfunc_called(this, "_ZN6S247C44v103Ev");}
void  S247C4 ::v104(){vfunc_called(this, "_ZN6S247C44v104Ev");}
void  S247C4 ::v105(){vfunc_called(this, "_ZN6S247C44v105Ev");}
void  S247C4 ::v106(){vfunc_called(this, "_ZN6S247C44v106Ev");}
void  S247C4 ::v107(){vfunc_called(this, "_ZN6S247C44v107Ev");}
void  S247C4 ::v108(){vfunc_called(this, "_ZN6S247C44v108Ev");}
void  S247C4 ::v109(){vfunc_called(this, "_ZN6S247C44v109Ev");}
void  S247C4 ::v110(){vfunc_called(this, "_ZN6S247C44v110Ev");}
S247C4 ::S247C4(){ note_ctor("S247C4", this);} // tgen

static void Test_S247C4()
{
  extern Class_Descriptor cd_S247C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S247C4, buf);
    S247C4 *dp, &lv = *(dp=new (buf) S247C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S247C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S247C4)");
    check_base_class_offset(lv, (S247C6*)(S247C5*), 0, "S247C4");
    check_base_class_offset(lv, (S247C5*), 0, "S247C4");
    set_bf_and_test(lv, s247c4f0, ABISELECT(188,132), 0, 1, 1, "S247C4");
    set_bf_and_test(lv, s247c4f1, ABISELECT(188,132), 1, 1, 1, "S247C4");
    set_bf_and_test(lv, s247c4f2, ABISELECT(188,132), 2, 1, 1, "S247C4");
    check_field_offset(lv, s247c4f3, ABISELECT(192,136), "S247C4.s247c4f3");
    check_field_offset(lv, s247c4f4, ABISELECT(208,148), "S247C4.s247c4f4");
    check_field_offset(lv, s247c4f5, ABISELECT(224,160), "S247C4.s247c4f5");
    check_field_offset(lv, s247c4f6, ABISELECT(240,172), "S247C4.s247c4f6");
    check_field_offset(lv, s247c4f7, ABISELECT(256,184), "S247C4.s247c4f7");
    test_class_info(&lv, &cd_S247C4);
    dp->~S247C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS247C4(Test_S247C4, "S247C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S247C4C1Ev();
extern void _ZN6S247C4D1Ev();
Name_Map name_map_S247C4[] = {
  NSPAIR(_ZN6S247C4C1Ev),
  NSPAIR(_ZN6S247C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S247C6;
extern VTBL_ENTRY _ZTI6S247C6[];
extern  VTBL_ENTRY _ZTV6S247C6[];
extern Class_Descriptor cd_S247C5;
extern VTBL_ENTRY _ZTI6S247C5[];
extern  VTBL_ENTRY _ZTV6S247C5[];
static Base_Class bases_S247C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S247C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S247C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S247C4[];
extern void _ZN6S247C4D1Ev();
extern void _ZN6S247C4D0Ev();
extern void _ZN6S247C62v5Ev();
extern void _ZN6S247C62v6Ev();
extern void _ZN6S247C62v7Ev();
extern void _ZN6S247C62v8Ev();
extern void _ZN6S247C62v9Ev();
extern void _ZN6S247C63v10Ev();
extern void _ZN6S247C63v11Ev();
extern void _ZN6S247C63v12Ev();
extern void _ZN6S247C63v13Ev();
extern void _ZN6S247C63v14Ev();
extern void _ZN6S247C63v15Ev();
extern void _ZN6S247C63v16Ev();
extern void _ZN6S247C63v17Ev();
extern void _ZN6S247C63v18Ev();
extern void _ZN6S247C63v19Ev();
extern void _ZN6S247C63v20Ev();
extern void _ZN6S247C63v21Ev();
extern void _ZN6S247C63v22Ev();
extern void _ZN6S247C63v23Ev();
extern void _ZN6S247C63v24Ev();
extern void _ZN6S247C63v25Ev();
extern void _ZN6S247C63v26Ev();
extern void _ZN6S247C63v27Ev();
extern void _ZN6S247C63v28Ev();
extern void _ZN6S247C63v29Ev();
extern void _ZN6S247C63v30Ev();
extern void _ZN6S247C63v31Ev();
extern void _ZN6S247C63v32Ev();
extern void _ZN6S247C63v33Ev();
extern void _ZN6S247C63v34Ev();
extern void _ZN6S247C63v35Ev();
extern void _ZN6S247C63v36Ev();
extern void _ZN6S247C63v37Ev();
extern void _ZN6S247C63v38Ev();
extern void _ZN6S247C63v39Ev();
extern void _ZN6S247C63v40Ev();
extern void _ZN6S247C63v41Ev();
extern void _ZN6S247C63v42Ev();
extern void _ZN6S247C63v43Ev();
extern void _ZN6S247C63v44Ev();
extern void _ZN6S247C63v45Ev();
extern void _ZN6S247C63v46Ev();
extern void _ZN6S247C63v47Ev();
extern void _ZN6S247C63v48Ev();
extern void _ZN6S247C63v49Ev();
extern void _ZN6S247C63v50Ev();
extern void _ZN6S247C63v51Ev();
extern void _ZN6S247C63v52Ev();
extern void _ZN6S247C63v53Ev();
extern void _ZN6S247C63v54Ev();
extern void _ZN6S247C63v55Ev();
extern void _ZN6S247C63v56Ev();
extern void _ZN6S247C63v57Ev();
extern void _ZN6S247C63v58Ev();
extern void _ZN6S247C63v59Ev();
extern void _ZN6S247C63v60Ev();
extern void _ZN6S247C63v61Ev();
extern void _ZN6S247C63v62Ev();
extern void _ZN6S247C63v63Ev();
extern void _ZN6S247C63v64Ev();
extern void _ZN6S247C63v65Ev();
extern void _ZN6S247C63v66Ev();
extern void _ZN6S247C63v67Ev();
extern void _ZN6S247C63v68Ev();
extern void _ZN6S247C53v69Ev();
extern void _ZN6S247C53v70Ev();
extern void _ZN6S247C53v71Ev();
extern void _ZN6S247C53v72Ev();
extern void _ZN6S247C53v73Ev();
extern void _ZN6S247C53v74Ev();
extern void _ZN6S247C53v75Ev();
extern void _ZN6S247C53v76Ev();
extern void _ZN6S247C53v77Ev();
extern void _ZN6S247C53v78Ev();
extern void _ZN6S247C53v79Ev();
extern void _ZN6S247C53v80Ev();
extern void _ZN6S247C53v81Ev();
extern void _ZN6S247C53v82Ev();
extern void _ZN6S247C53v83Ev();
extern void _ZN6S247C53v84Ev();
extern void _ZN6S247C53v85Ev();
extern void _ZN6S247C53v86Ev();
extern void _ZN6S247C53v87Ev();
extern void _ZN6S247C53v88Ev();
extern void _ZN6S247C53v89Ev();
extern void _ZN6S247C53v90Ev();
extern void _ZN6S247C43v91Ev();
extern void _ZN6S247C43v92Ev();
extern void _ZN6S247C43v93Ev();
extern void _ZN6S247C43v94Ev();
extern void _ZN6S247C43v95Ev();
extern void _ZN6S247C43v96Ev();
extern void _ZN6S247C43v97Ev();
extern void _ZN6S247C43v98Ev();
extern void _ZN6S247C43v99Ev();
extern void _ZN6S247C44v100Ev();
extern void _ZN6S247C44v101Ev();
extern void _ZN6S247C44v102Ev();
extern void _ZN6S247C44v103Ev();
extern void _ZN6S247C44v104Ev();
extern void _ZN6S247C44v105Ev();
extern void _ZN6S247C44v106Ev();
extern void _ZN6S247C44v107Ev();
extern void _ZN6S247C44v108Ev();
extern void _ZN6S247C44v109Ev();
extern void _ZN6S247C44v110Ev();
static  VTBL_ENTRY vtc_S247C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S247C4[0]),
  (VTBL_ENTRY)&_ZN6S247C4D1Ev,
  (VTBL_ENTRY)&_ZN6S247C4D0Ev,
  (VTBL_ENTRY)&_ZN6S247C62v5Ev,
  (VTBL_ENTRY)&_ZN6S247C62v6Ev,
  (VTBL_ENTRY)&_ZN6S247C62v7Ev,
  (VTBL_ENTRY)&_ZN6S247C62v8Ev,
  (VTBL_ENTRY)&_ZN6S247C62v9Ev,
  (VTBL_ENTRY)&_ZN6S247C63v10Ev,
  (VTBL_ENTRY)&_ZN6S247C63v11Ev,
  (VTBL_ENTRY)&_ZN6S247C63v12Ev,
  (VTBL_ENTRY)&_ZN6S247C63v13Ev,
  (VTBL_ENTRY)&_ZN6S247C63v14Ev,
  (VTBL_ENTRY)&_ZN6S247C63v15Ev,
  (VTBL_ENTRY)&_ZN6S247C63v16Ev,
  (VTBL_ENTRY)&_ZN6S247C63v17Ev,
  (VTBL_ENTRY)&_ZN6S247C63v18Ev,
  (VTBL_ENTRY)&_ZN6S247C63v19Ev,
  (VTBL_ENTRY)&_ZN6S247C63v20Ev,
  (VTBL_ENTRY)&_ZN6S247C63v21Ev,
  (VTBL_ENTRY)&_ZN6S247C63v22Ev,
  (VTBL_ENTRY)&_ZN6S247C63v23Ev,
  (VTBL_ENTRY)&_ZN6S247C63v24Ev,
  (VTBL_ENTRY)&_ZN6S247C63v25Ev,
  (VTBL_ENTRY)&_ZN6S247C63v26Ev,
  (VTBL_ENTRY)&_ZN6S247C63v27Ev,
  (VTBL_ENTRY)&_ZN6S247C63v28Ev,
  (VTBL_ENTRY)&_ZN6S247C63v29Ev,
  (VTBL_ENTRY)&_ZN6S247C63v30Ev,
  (VTBL_ENTRY)&_ZN6S247C63v31Ev,
  (VTBL_ENTRY)&_ZN6S247C63v32Ev,
  (VTBL_ENTRY)&_ZN6S247C63v33Ev,
  (VTBL_ENTRY)&_ZN6S247C63v34Ev,
  (VTBL_ENTRY)&_ZN6S247C63v35Ev,
  (VTBL_ENTRY)&_ZN6S247C63v36Ev,
  (VTBL_ENTRY)&_ZN6S247C63v37Ev,
  (VTBL_ENTRY)&_ZN6S247C63v38Ev,
  (VTBL_ENTRY)&_ZN6S247C63v39Ev,
  (VTBL_ENTRY)&_ZN6S247C63v40Ev,
  (VTBL_ENTRY)&_ZN6S247C63v41Ev,
  (VTBL_ENTRY)&_ZN6S247C63v42Ev,
  (VTBL_ENTRY)&_ZN6S247C63v43Ev,
  (VTBL_ENTRY)&_ZN6S247C63v44Ev,
  (VTBL_ENTRY)&_ZN6S247C63v45Ev,
  (VTBL_ENTRY)&_ZN6S247C63v46Ev,
  (VTBL_ENTRY)&_ZN6S247C63v47Ev,
  (VTBL_ENTRY)&_ZN6S247C63v48Ev,
  (VTBL_ENTRY)&_ZN6S247C63v49Ev,
  (VTBL_ENTRY)&_ZN6S247C63v50Ev,
  (VTBL_ENTRY)&_ZN6S247C63v51Ev,
  (VTBL_ENTRY)&_ZN6S247C63v52Ev,
  (VTBL_ENTRY)&_ZN6S247C63v53Ev,
  (VTBL_ENTRY)&_ZN6S247C63v54Ev,
  (VTBL_ENTRY)&_ZN6S247C63v55Ev,
  (VTBL_ENTRY)&_ZN6S247C63v56Ev,
  (VTBL_ENTRY)&_ZN6S247C63v57Ev,
  (VTBL_ENTRY)&_ZN6S247C63v58Ev,
  (VTBL_ENTRY)&_ZN6S247C63v59Ev,
  (VTBL_ENTRY)&_ZN6S247C63v60Ev,
  (VTBL_ENTRY)&_ZN6S247C63v61Ev,
  (VTBL_ENTRY)&_ZN6S247C63v62Ev,
  (VTBL_ENTRY)&_ZN6S247C63v63Ev,
  (VTBL_ENTRY)&_ZN6S247C63v64Ev,
  (VTBL_ENTRY)&_ZN6S247C63v65Ev,
  (VTBL_ENTRY)&_ZN6S247C63v66Ev,
  (VTBL_ENTRY)&_ZN6S247C63v67Ev,
  (VTBL_ENTRY)&_ZN6S247C63v68Ev,
  (VTBL_ENTRY)&_ZN6S247C53v69Ev,
  (VTBL_ENTRY)&_ZN6S247C53v70Ev,
  (VTBL_ENTRY)&_ZN6S247C53v71Ev,
  (VTBL_ENTRY)&_ZN6S247C53v72Ev,
  (VTBL_ENTRY)&_ZN6S247C53v73Ev,
  (VTBL_ENTRY)&_ZN6S247C53v74Ev,
  (VTBL_ENTRY)&_ZN6S247C53v75Ev,
  (VTBL_ENTRY)&_ZN6S247C53v76Ev,
  (VTBL_ENTRY)&_ZN6S247C53v77Ev,
  (VTBL_ENTRY)&_ZN6S247C53v78Ev,
  (VTBL_ENTRY)&_ZN6S247C53v79Ev,
  (VTBL_ENTRY)&_ZN6S247C53v80Ev,
  (VTBL_ENTRY)&_ZN6S247C53v81Ev,
  (VTBL_ENTRY)&_ZN6S247C53v82Ev,
  (VTBL_ENTRY)&_ZN6S247C53v83Ev,
  (VTBL_ENTRY)&_ZN6S247C53v84Ev,
  (VTBL_ENTRY)&_ZN6S247C53v85Ev,
  (VTBL_ENTRY)&_ZN6S247C53v86Ev,
  (VTBL_ENTRY)&_ZN6S247C53v87Ev,
  (VTBL_ENTRY)&_ZN6S247C53v88Ev,
  (VTBL_ENTRY)&_ZN6S247C53v89Ev,
  (VTBL_ENTRY)&_ZN6S247C53v90Ev,
  (VTBL_ENTRY)&_ZN6S247C43v91Ev,
  (VTBL_ENTRY)&_ZN6S247C43v92Ev,
  (VTBL_ENTRY)&_ZN6S247C43v93Ev,
  (VTBL_ENTRY)&_ZN6S247C43v94Ev,
  (VTBL_ENTRY)&_ZN6S247C43v95Ev,
  (VTBL_ENTRY)&_ZN6S247C43v96Ev,
  (VTBL_ENTRY)&_ZN6S247C43v97Ev,
  (VTBL_ENTRY)&_ZN6S247C43v98Ev,
  (VTBL_ENTRY)&_ZN6S247C43v99Ev,
  (VTBL_ENTRY)&_ZN6S247C44v100Ev,
  (VTBL_ENTRY)&_ZN6S247C44v101Ev,
  (VTBL_ENTRY)&_ZN6S247C44v102Ev,
  (VTBL_ENTRY)&_ZN6S247C44v103Ev,
  (VTBL_ENTRY)&_ZN6S247C44v104Ev,
  (VTBL_ENTRY)&_ZN6S247C44v105Ev,
  (VTBL_ENTRY)&_ZN6S247C44v106Ev,
  (VTBL_ENTRY)&_ZN6S247C44v107Ev,
  (VTBL_ENTRY)&_ZN6S247C44v108Ev,
  (VTBL_ENTRY)&_ZN6S247C44v109Ev,
  (VTBL_ENTRY)&_ZN6S247C44v110Ev,
};
extern VTBL_ENTRY _ZTI6S247C4[];
extern  VTBL_ENTRY _ZTV6S247C4[];
Class_Descriptor cd_S247C4 = {  "S247C4", // class name
  bases_S247C4, 2,
  &(vtc_S247C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S247C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S247C4),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  S247C3  : S247C4 {
  ::S1503C5_nt s247c3f0;
  unsigned int s247c3f1:1;
  ::S1503C6_nt s247c3f2;
  virtual  ~S247C3(); // _ZN6S247C3D1Ev
  virtual void  v111(); // _ZN6S247C34v111Ev
  virtual void  v112(); // _ZN6S247C34v112Ev
  virtual void  v113(); // _ZN6S247C34v113Ev
  virtual void  v114(); // _ZN6S247C34v114Ev
  S247C3(); // tgen
};
//SIG(-1 S247C3) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S247C3 ::~S247C3(){ note_dtor("S247C3", this);}
void  S247C3 ::v111(){vfunc_called(this, "_ZN6S247C34v111Ev");}
void  S247C3 ::v112(){vfunc_called(this, "_ZN6S247C34v112Ev");}
void  S247C3 ::v113(){vfunc_called(this, "_ZN6S247C34v113Ev");}
void  S247C3 ::v114(){vfunc_called(this, "_ZN6S247C34v114Ev");}
S247C3 ::S247C3(){ note_ctor("S247C3", this);} // tgen

static void Test_S247C3()
{
  extern Class_Descriptor cd_S247C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S247C3, buf);
    S247C3 *dp, &lv = *(dp=new (buf) S247C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S247C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S247C3)");
    check_base_class_offset(lv, (S247C6*)(S247C5*)(S247C4*), 0, "S247C3");
    check_base_class_offset(lv, (S247C5*)(S247C4*), 0, "S247C3");
    check_base_class_offset(lv, (S247C4*), 0, "S247C3");
    check_field_offset(lv, s247c3f0, ABISELECT(268,196), "S247C3.s247c3f0");
    set_bf_and_test(lv, s247c3f1, ABISELECT(276,204), 0, 1, 1, "S247C3");
    check_field_offset(lv, s247c3f2, ABISELECT(280,208), "S247C3.s247c3f2");
    test_class_info(&lv, &cd_S247C3);
    dp->~S247C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS247C3(Test_S247C3, "S247C3", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S247C3C1Ev();
extern void _ZN6S247C3D1Ev();
Name_Map name_map_S247C3[] = {
  NSPAIR(_ZN6S247C3C1Ev),
  NSPAIR(_ZN6S247C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S247C6;
extern VTBL_ENTRY _ZTI6S247C6[];
extern  VTBL_ENTRY _ZTV6S247C6[];
extern Class_Descriptor cd_S247C5;
extern VTBL_ENTRY _ZTI6S247C5[];
extern  VTBL_ENTRY _ZTV6S247C5[];
extern Class_Descriptor cd_S247C4;
extern VTBL_ENTRY _ZTI6S247C4[];
extern  VTBL_ENTRY _ZTV6S247C4[];
static Base_Class bases_S247C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S247C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S247C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S247C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S247C3[];
extern void _ZN6S247C3D1Ev();
extern void _ZN6S247C3D0Ev();
extern void _ZN6S247C62v5Ev();
extern void _ZN6S247C62v6Ev();
extern void _ZN6S247C62v7Ev();
extern void _ZN6S247C62v8Ev();
extern void _ZN6S247C62v9Ev();
extern void _ZN6S247C63v10Ev();
extern void _ZN6S247C63v11Ev();
extern void _ZN6S247C63v12Ev();
extern void _ZN6S247C63v13Ev();
extern void _ZN6S247C63v14Ev();
extern void _ZN6S247C63v15Ev();
extern void _ZN6S247C63v16Ev();
extern void _ZN6S247C63v17Ev();
extern void _ZN6S247C63v18Ev();
extern void _ZN6S247C63v19Ev();
extern void _ZN6S247C63v20Ev();
extern void _ZN6S247C63v21Ev();
extern void _ZN6S247C63v22Ev();
extern void _ZN6S247C63v23Ev();
extern void _ZN6S247C63v24Ev();
extern void _ZN6S247C63v25Ev();
extern void _ZN6S247C63v26Ev();
extern void _ZN6S247C63v27Ev();
extern void _ZN6S247C63v28Ev();
extern void _ZN6S247C63v29Ev();
extern void _ZN6S247C63v30Ev();
extern void _ZN6S247C63v31Ev();
extern void _ZN6S247C63v32Ev();
extern void _ZN6S247C63v33Ev();
extern void _ZN6S247C63v34Ev();
extern void _ZN6S247C63v35Ev();
extern void _ZN6S247C63v36Ev();
extern void _ZN6S247C63v37Ev();
extern void _ZN6S247C63v38Ev();
extern void _ZN6S247C63v39Ev();
extern void _ZN6S247C63v40Ev();
extern void _ZN6S247C63v41Ev();
extern void _ZN6S247C63v42Ev();
extern void _ZN6S247C63v43Ev();
extern void _ZN6S247C63v44Ev();
extern void _ZN6S247C63v45Ev();
extern void _ZN6S247C63v46Ev();
extern void _ZN6S247C63v47Ev();
extern void _ZN6S247C63v48Ev();
extern void _ZN6S247C63v49Ev();
extern void _ZN6S247C63v50Ev();
extern void _ZN6S247C63v51Ev();
extern void _ZN6S247C63v52Ev();
extern void _ZN6S247C63v53Ev();
extern void _ZN6S247C63v54Ev();
extern void _ZN6S247C63v55Ev();
extern void _ZN6S247C63v56Ev();
extern void _ZN6S247C63v57Ev();
extern void _ZN6S247C63v58Ev();
extern void _ZN6S247C63v59Ev();
extern void _ZN6S247C63v60Ev();
extern void _ZN6S247C63v61Ev();
extern void _ZN6S247C63v62Ev();
extern void _ZN6S247C63v63Ev();
extern void _ZN6S247C63v64Ev();
extern void _ZN6S247C63v65Ev();
extern void _ZN6S247C63v66Ev();
extern void _ZN6S247C63v67Ev();
extern void _ZN6S247C63v68Ev();
extern void _ZN6S247C53v69Ev();
extern void _ZN6S247C53v70Ev();
extern void _ZN6S247C53v71Ev();
extern void _ZN6S247C53v72Ev();
extern void _ZN6S247C53v73Ev();
extern void _ZN6S247C53v74Ev();
extern void _ZN6S247C53v75Ev();
extern void _ZN6S247C53v76Ev();
extern void _ZN6S247C53v77Ev();
extern void _ZN6S247C53v78Ev();
extern void _ZN6S247C53v79Ev();
extern void _ZN6S247C53v80Ev();
extern void _ZN6S247C53v81Ev();
extern void _ZN6S247C53v82Ev();
extern void _ZN6S247C53v83Ev();
extern void _ZN6S247C53v84Ev();
extern void _ZN6S247C53v85Ev();
extern void _ZN6S247C53v86Ev();
extern void _ZN6S247C53v87Ev();
extern void _ZN6S247C53v88Ev();
extern void _ZN6S247C53v89Ev();
extern void _ZN6S247C53v90Ev();
extern void _ZN6S247C43v91Ev();
extern void _ZN6S247C43v92Ev();
extern void _ZN6S247C43v93Ev();
extern void _ZN6S247C43v94Ev();
extern void _ZN6S247C43v95Ev();
extern void _ZN6S247C43v96Ev();
extern void _ZN6S247C43v97Ev();
extern void _ZN6S247C43v98Ev();
extern void _ZN6S247C43v99Ev();
extern void _ZN6S247C44v100Ev();
extern void _ZN6S247C44v101Ev();
extern void _ZN6S247C44v102Ev();
extern void _ZN6S247C44v103Ev();
extern void _ZN6S247C44v104Ev();
extern void _ZN6S247C44v105Ev();
extern void _ZN6S247C44v106Ev();
extern void _ZN6S247C44v107Ev();
extern void _ZN6S247C44v108Ev();
extern void _ZN6S247C44v109Ev();
extern void _ZN6S247C44v110Ev();
extern void _ZN6S247C34v111Ev();
extern void _ZN6S247C34v112Ev();
extern void _ZN6S247C34v113Ev();
extern void _ZN6S247C34v114Ev();
static  VTBL_ENTRY vtc_S247C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S247C3[0]),
  (VTBL_ENTRY)&_ZN6S247C3D1Ev,
  (VTBL_ENTRY)&_ZN6S247C3D0Ev,
  (VTBL_ENTRY)&_ZN6S247C62v5Ev,
  (VTBL_ENTRY)&_ZN6S247C62v6Ev,
  (VTBL_ENTRY)&_ZN6S247C62v7Ev,
  (VTBL_ENTRY)&_ZN6S247C62v8Ev,
  (VTBL_ENTRY)&_ZN6S247C62v9Ev,
  (VTBL_ENTRY)&_ZN6S247C63v10Ev,
  (VTBL_ENTRY)&_ZN6S247C63v11Ev,
  (VTBL_ENTRY)&_ZN6S247C63v12Ev,
  (VTBL_ENTRY)&_ZN6S247C63v13Ev,
  (VTBL_ENTRY)&_ZN6S247C63v14Ev,
  (VTBL_ENTRY)&_ZN6S247C63v15Ev,
  (VTBL_ENTRY)&_ZN6S247C63v16Ev,
  (VTBL_ENTRY)&_ZN6S247C63v17Ev,
  (VTBL_ENTRY)&_ZN6S247C63v18Ev,
  (VTBL_ENTRY)&_ZN6S247C63v19Ev,
  (VTBL_ENTRY)&_ZN6S247C63v20Ev,
  (VTBL_ENTRY)&_ZN6S247C63v21Ev,
  (VTBL_ENTRY)&_ZN6S247C63v22Ev,
  (VTBL_ENTRY)&_ZN6S247C63v23Ev,
  (VTBL_ENTRY)&_ZN6S247C63v24Ev,
  (VTBL_ENTRY)&_ZN6S247C63v25Ev,
  (VTBL_ENTRY)&_ZN6S247C63v26Ev,
  (VTBL_ENTRY)&_ZN6S247C63v27Ev,
  (VTBL_ENTRY)&_ZN6S247C63v28Ev,
  (VTBL_ENTRY)&_ZN6S247C63v29Ev,
  (VTBL_ENTRY)&_ZN6S247C63v30Ev,
  (VTBL_ENTRY)&_ZN6S247C63v31Ev,
  (VTBL_ENTRY)&_ZN6S247C63v32Ev,
  (VTBL_ENTRY)&_ZN6S247C63v33Ev,
  (VTBL_ENTRY)&_ZN6S247C63v34Ev,
  (VTBL_ENTRY)&_ZN6S247C63v35Ev,
  (VTBL_ENTRY)&_ZN6S247C63v36Ev,
  (VTBL_ENTRY)&_ZN6S247C63v37Ev,
  (VTBL_ENTRY)&_ZN6S247C63v38Ev,
  (VTBL_ENTRY)&_ZN6S247C63v39Ev,
  (VTBL_ENTRY)&_ZN6S247C63v40Ev,
  (VTBL_ENTRY)&_ZN6S247C63v41Ev,
  (VTBL_ENTRY)&_ZN6S247C63v42Ev,
  (VTBL_ENTRY)&_ZN6S247C63v43Ev,
  (VTBL_ENTRY)&_ZN6S247C63v44Ev,
  (VTBL_ENTRY)&_ZN6S247C63v45Ev,
  (VTBL_ENTRY)&_ZN6S247C63v46Ev,
  (VTBL_ENTRY)&_ZN6S247C63v47Ev,
  (VTBL_ENTRY)&_ZN6S247C63v48Ev,
  (VTBL_ENTRY)&_ZN6S247C63v49Ev,
  (VTBL_ENTRY)&_ZN6S247C63v50Ev,
  (VTBL_ENTRY)&_ZN6S247C63v51Ev,
  (VTBL_ENTRY)&_ZN6S247C63v52Ev,
  (VTBL_ENTRY)&_ZN6S247C63v53Ev,
  (VTBL_ENTRY)&_ZN6S247C63v54Ev,
  (VTBL_ENTRY)&_ZN6S247C63v55Ev,
  (VTBL_ENTRY)&_ZN6S247C63v56Ev,
  (VTBL_ENTRY)&_ZN6S247C63v57Ev,
  (VTBL_ENTRY)&_ZN6S247C63v58Ev,
  (VTBL_ENTRY)&_ZN6S247C63v59Ev,
  (VTBL_ENTRY)&_ZN6S247C63v60Ev,
  (VTBL_ENTRY)&_ZN6S247C63v61Ev,
  (VTBL_ENTRY)&_ZN6S247C63v62Ev,
  (VTBL_ENTRY)&_ZN6S247C63v63Ev,
  (VTBL_ENTRY)&_ZN6S247C63v64Ev,
  (VTBL_ENTRY)&_ZN6S247C63v65Ev,
  (VTBL_ENTRY)&_ZN6S247C63v66Ev,
  (VTBL_ENTRY)&_ZN6S247C63v67Ev,
  (VTBL_ENTRY)&_ZN6S247C63v68Ev,
  (VTBL_ENTRY)&_ZN6S247C53v69Ev,
  (VTBL_ENTRY)&_ZN6S247C53v70Ev,
  (VTBL_ENTRY)&_ZN6S247C53v71Ev,
  (VTBL_ENTRY)&_ZN6S247C53v72Ev,
  (VTBL_ENTRY)&_ZN6S247C53v73Ev,
  (VTBL_ENTRY)&_ZN6S247C53v74Ev,
  (VTBL_ENTRY)&_ZN6S247C53v75Ev,
  (VTBL_ENTRY)&_ZN6S247C53v76Ev,
  (VTBL_ENTRY)&_ZN6S247C53v77Ev,
  (VTBL_ENTRY)&_ZN6S247C53v78Ev,
  (VTBL_ENTRY)&_ZN6S247C53v79Ev,
  (VTBL_ENTRY)&_ZN6S247C53v80Ev,
  (VTBL_ENTRY)&_ZN6S247C53v81Ev,
  (VTBL_ENTRY)&_ZN6S247C53v82Ev,
  (VTBL_ENTRY)&_ZN6S247C53v83Ev,
  (VTBL_ENTRY)&_ZN6S247C53v84Ev,
  (VTBL_ENTRY)&_ZN6S247C53v85Ev,
  (VTBL_ENTRY)&_ZN6S247C53v86Ev,
  (VTBL_ENTRY)&_ZN6S247C53v87Ev,
  (VTBL_ENTRY)&_ZN6S247C53v88Ev,
  (VTBL_ENTRY)&_ZN6S247C53v89Ev,
  (VTBL_ENTRY)&_ZN6S247C53v90Ev,
  (VTBL_ENTRY)&_ZN6S247C43v91Ev,
  (VTBL_ENTRY)&_ZN6S247C43v92Ev,
  (VTBL_ENTRY)&_ZN6S247C43v93Ev,
  (VTBL_ENTRY)&_ZN6S247C43v94Ev,
  (VTBL_ENTRY)&_ZN6S247C43v95Ev,
  (VTBL_ENTRY)&_ZN6S247C43v96Ev,
  (VTBL_ENTRY)&_ZN6S247C43v97Ev,
  (VTBL_ENTRY)&_ZN6S247C43v98Ev,
  (VTBL_ENTRY)&_ZN6S247C43v99Ev,
  (VTBL_ENTRY)&_ZN6S247C44v100Ev,
  (VTBL_ENTRY)&_ZN6S247C44v101Ev,
  (VTBL_ENTRY)&_ZN6S247C44v102Ev,
  (VTBL_ENTRY)&_ZN6S247C44v103Ev,
  (VTBL_ENTRY)&_ZN6S247C44v104Ev,
  (VTBL_ENTRY)&_ZN6S247C44v105Ev,
  (VTBL_ENTRY)&_ZN6S247C44v106Ev,
  (VTBL_ENTRY)&_ZN6S247C44v107Ev,
  (VTBL_ENTRY)&_ZN6S247C44v108Ev,
  (VTBL_ENTRY)&_ZN6S247C44v109Ev,
  (VTBL_ENTRY)&_ZN6S247C44v110Ev,
  (VTBL_ENTRY)&_ZN6S247C34v111Ev,
  (VTBL_ENTRY)&_ZN6S247C34v112Ev,
  (VTBL_ENTRY)&_ZN6S247C34v113Ev,
  (VTBL_ENTRY)&_ZN6S247C34v114Ev,
};
extern VTBL_ENTRY _ZTI6S247C3[];
extern  VTBL_ENTRY _ZTV6S247C3[];
Class_Descriptor cd_S247C3 = {  "S247C3", // class name
  bases_S247C3, 3,
  &(vtc_S247C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S247C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S247C3),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S247C2  : S247C3 {
  virtual  ~S247C2(); // _ZN6S247C2D1Ev
  virtual void  v115(); // _ZN6S247C24v115Ev
  virtual void  v116(); // _ZN6S247C24v116Ev
  S247C2(); // tgen
};
//SIG(-1 S247C2) 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 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2}


 S247C2 ::~S247C2(){ note_dtor("S247C2", this);}
void  S247C2 ::v115(){vfunc_called(this, "_ZN6S247C24v115Ev");}
void  S247C2 ::v116(){vfunc_called(this, "_ZN6S247C24v116Ev");}
S247C2 ::S247C2(){ note_ctor("S247C2", this);} // tgen

static void Test_S247C2()
{
  extern Class_Descriptor cd_S247C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S247C2, buf);
    S247C2 *dp, &lv = *(dp=new (buf) S247C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S247C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S247C2)");
    check_base_class_offset(lv, (S247C6*)(S247C5*)(S247C4*)(S247C3*), 0, "S247C2");
    check_base_class_offset(lv, (S247C5*)(S247C4*)(S247C3*), 0, "S247C2");
    check_base_class_offset(lv, (S247C4*)(S247C3*), 0, "S247C2");
    check_base_class_offset(lv, (S247C3*), 0, "S247C2");
    test_class_info(&lv, &cd_S247C2);
    dp->~S247C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS247C2(Test_S247C2, "S247C2", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S247C2C1Ev();
extern void _ZN6S247C2D1Ev();
Name_Map name_map_S247C2[] = {
  NSPAIR(_ZN6S247C2C1Ev),
  NSPAIR(_ZN6S247C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S247C6;
extern VTBL_ENTRY _ZTI6S247C6[];
extern  VTBL_ENTRY _ZTV6S247C6[];
extern Class_Descriptor cd_S247C5;
extern VTBL_ENTRY _ZTI6S247C5[];
extern  VTBL_ENTRY _ZTV6S247C5[];
extern Class_Descriptor cd_S247C4;
extern VTBL_ENTRY _ZTI6S247C4[];
extern  VTBL_ENTRY _ZTV6S247C4[];
extern Class_Descriptor cd_S247C3;
extern VTBL_ENTRY _ZTI6S247C3[];
extern  VTBL_ENTRY _ZTV6S247C3[];
static Base_Class bases_S247C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S247C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S247C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S247C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S247C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S247C2[];
extern void _ZN6S247C2D1Ev();
extern void _ZN6S247C2D0Ev();
extern void _ZN6S247C62v5Ev();
extern void _ZN6S247C62v6Ev();
extern void _ZN6S247C62v7Ev();
extern void _ZN6S247C62v8Ev();
extern void _ZN6S247C62v9Ev();
extern void _ZN6S247C63v10Ev();
extern void _ZN6S247C63v11Ev();
extern void _ZN6S247C63v12Ev();
extern void _ZN6S247C63v13Ev();
extern void _ZN6S247C63v14Ev();
extern void _ZN6S247C63v15Ev();
extern void _ZN6S247C63v16Ev();
extern void _ZN6S247C63v17Ev();
extern void _ZN6S247C63v18Ev();
extern void _ZN6S247C63v19Ev();
extern void _ZN6S247C63v20Ev();
extern void _ZN6S247C63v21Ev();
extern void _ZN6S247C63v22Ev();
extern void _ZN6S247C63v23Ev();
extern void _ZN6S247C63v24Ev();
extern void _ZN6S247C63v25Ev();
extern void _ZN6S247C63v26Ev();
extern void _ZN6S247C63v27Ev();
extern void _ZN6S247C63v28Ev();
extern void _ZN6S247C63v29Ev();
extern void _ZN6S247C63v30Ev();
extern void _ZN6S247C63v31Ev();
extern void _ZN6S247C63v32Ev();
extern void _ZN6S247C63v33Ev();
extern void _ZN6S247C63v34Ev();
extern void _ZN6S247C63v35Ev();
extern void _ZN6S247C63v36Ev();
extern void _ZN6S247C63v37Ev();
extern void _ZN6S247C63v38Ev();
extern void _ZN6S247C63v39Ev();
extern void _ZN6S247C63v40Ev();
extern void _ZN6S247C63v41Ev();
extern void _ZN6S247C63v42Ev();
extern void _ZN6S247C63v43Ev();
extern void _ZN6S247C63v44Ev();
extern void _ZN6S247C63v45Ev();
extern void _ZN6S247C63v46Ev();
extern void _ZN6S247C63v47Ev();
extern void _ZN6S247C63v48Ev();
extern void _ZN6S247C63v49Ev();
extern void _ZN6S247C63v50Ev();
extern void _ZN6S247C63v51Ev();
extern void _ZN6S247C63v52Ev();
extern void _ZN6S247C63v53Ev();
extern void _ZN6S247C63v54Ev();
extern void _ZN6S247C63v55Ev();
extern void _ZN6S247C63v56Ev();
extern void _ZN6S247C63v57Ev();
extern void _ZN6S247C63v58Ev();
extern void _ZN6S247C63v59Ev();
extern void _ZN6S247C63v60Ev();
extern void _ZN6S247C63v61Ev();
extern void _ZN6S247C63v62Ev();
extern void _ZN6S247C63v63Ev();
extern void _ZN6S247C63v64Ev();
extern void _ZN6S247C63v65Ev();
extern void _ZN6S247C63v66Ev();
extern void _ZN6S247C63v67Ev();
extern void _ZN6S247C63v68Ev();
extern void _ZN6S247C53v69Ev();
extern void _ZN6S247C53v70Ev();
extern void _ZN6S247C53v71Ev();
extern void _ZN6S247C53v72Ev();
extern void _ZN6S247C53v73Ev();
extern void _ZN6S247C53v74Ev();
extern void _ZN6S247C53v75Ev();
extern void _ZN6S247C53v76Ev();
extern void _ZN6S247C53v77Ev();
extern void _ZN6S247C53v78Ev();
extern void _ZN6S247C53v79Ev();
extern void _ZN6S247C53v80Ev();
extern void _ZN6S247C53v81Ev();
extern void _ZN6S247C53v82Ev();
extern void _ZN6S247C53v83Ev();
extern void _ZN6S247C53v84Ev();
extern void _ZN6S247C53v85Ev();
extern void _ZN6S247C53v86Ev();
extern void _ZN6S247C53v87Ev();
extern void _ZN6S247C53v88Ev();
extern void _ZN6S247C53v89Ev();
extern void _ZN6S247C53v90Ev();
extern void _ZN6S247C43v91Ev();
extern void _ZN6S247C43v92Ev();
extern void _ZN6S247C43v93Ev();
extern void _ZN6S247C43v94Ev();
extern void _ZN6S247C43v95Ev();
extern void _ZN6S247C43v96Ev();
extern void _ZN6S247C43v97Ev();
extern void _ZN6S247C43v98Ev();
extern void _ZN6S247C43v99Ev();
extern void _ZN6S247C44v100Ev();
extern void _ZN6S247C44v101Ev();
extern void _ZN6S247C44v102Ev();
extern void _ZN6S247C44v103Ev();
extern void _ZN6S247C44v104Ev();
extern void _ZN6S247C44v105Ev();
extern void _ZN6S247C44v106Ev();
extern void _ZN6S247C44v107Ev();
extern void _ZN6S247C44v108Ev();
extern void _ZN6S247C44v109Ev();
extern void _ZN6S247C44v110Ev();
extern void _ZN6S247C34v111Ev();
extern void _ZN6S247C34v112Ev();
extern void _ZN6S247C34v113Ev();
extern void _ZN6S247C34v114Ev();
extern void _ZN6S247C24v115Ev();
extern void _ZN6S247C24v116Ev();
static  VTBL_ENTRY vtc_S247C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S247C2[0]),
  (VTBL_ENTRY)&_ZN6S247C2D1Ev,
  (VTBL_ENTRY)&_ZN6S247C2D0Ev,
  (VTBL_ENTRY)&_ZN6S247C62v5Ev,
  (VTBL_ENTRY)&_ZN6S247C62v6Ev,
  (VTBL_ENTRY)&_ZN6S247C62v7Ev,
  (VTBL_ENTRY)&_ZN6S247C62v8Ev,
  (VTBL_ENTRY)&_ZN6S247C62v9Ev,
  (VTBL_ENTRY)&_ZN6S247C63v10Ev,
  (VTBL_ENTRY)&_ZN6S247C63v11Ev,
  (VTBL_ENTRY)&_ZN6S247C63v12Ev,
  (VTBL_ENTRY)&_ZN6S247C63v13Ev,
  (VTBL_ENTRY)&_ZN6S247C63v14Ev,
  (VTBL_ENTRY)&_ZN6S247C63v15Ev,
  (VTBL_ENTRY)&_ZN6S247C63v16Ev,
  (VTBL_ENTRY)&_ZN6S247C63v17Ev,
  (VTBL_ENTRY)&_ZN6S247C63v18Ev,
  (VTBL_ENTRY)&_ZN6S247C63v19Ev,
  (VTBL_ENTRY)&_ZN6S247C63v20Ev,
  (VTBL_ENTRY)&_ZN6S247C63v21Ev,
  (VTBL_ENTRY)&_ZN6S247C63v22Ev,
  (VTBL_ENTRY)&_ZN6S247C63v23Ev,
  (VTBL_ENTRY)&_ZN6S247C63v24Ev,
  (VTBL_ENTRY)&_ZN6S247C63v25Ev,
  (VTBL_ENTRY)&_ZN6S247C63v26Ev,
  (VTBL_ENTRY)&_ZN6S247C63v27Ev,
  (VTBL_ENTRY)&_ZN6S247C63v28Ev,
  (VTBL_ENTRY)&_ZN6S247C63v29Ev,
  (VTBL_ENTRY)&_ZN6S247C63v30Ev,
  (VTBL_ENTRY)&_ZN6S247C63v31Ev,
  (VTBL_ENTRY)&_ZN6S247C63v32Ev,
  (VTBL_ENTRY)&_ZN6S247C63v33Ev,
  (VTBL_ENTRY)&_ZN6S247C63v34Ev,
  (VTBL_ENTRY)&_ZN6S247C63v35Ev,
  (VTBL_ENTRY)&_ZN6S247C63v36Ev,
  (VTBL_ENTRY)&_ZN6S247C63v37Ev,
  (VTBL_ENTRY)&_ZN6S247C63v38Ev,
  (VTBL_ENTRY)&_ZN6S247C63v39Ev,
  (VTBL_ENTRY)&_ZN6S247C63v40Ev,
  (VTBL_ENTRY)&_ZN6S247C63v41Ev,
  (VTBL_ENTRY)&_ZN6S247C63v42Ev,
  (VTBL_ENTRY)&_ZN6S247C63v43Ev,
  (VTBL_ENTRY)&_ZN6S247C63v44Ev,
  (VTBL_ENTRY)&_ZN6S247C63v45Ev,
  (VTBL_ENTRY)&_ZN6S247C63v46Ev,
  (VTBL_ENTRY)&_ZN6S247C63v47Ev,
  (VTBL_ENTRY)&_ZN6S247C63v48Ev,
  (VTBL_ENTRY)&_ZN6S247C63v49Ev,
  (VTBL_ENTRY)&_ZN6S247C63v50Ev,
  (VTBL_ENTRY)&_ZN6S247C63v51Ev,
  (VTBL_ENTRY)&_ZN6S247C63v52Ev,
  (VTBL_ENTRY)&_ZN6S247C63v53Ev,
  (VTBL_ENTRY)&_ZN6S247C63v54Ev,
  (VTBL_ENTRY)&_ZN6S247C63v55Ev,
  (VTBL_ENTRY)&_ZN6S247C63v56Ev,
  (VTBL_ENTRY)&_ZN6S247C63v57Ev,
  (VTBL_ENTRY)&_ZN6S247C63v58Ev,
  (VTBL_ENTRY)&_ZN6S247C63v59Ev,
  (VTBL_ENTRY)&_ZN6S247C63v60Ev,
  (VTBL_ENTRY)&_ZN6S247C63v61Ev,
  (VTBL_ENTRY)&_ZN6S247C63v62Ev,
  (VTBL_ENTRY)&_ZN6S247C63v63Ev,
  (VTBL_ENTRY)&_ZN6S247C63v64Ev,
  (VTBL_ENTRY)&_ZN6S247C63v65Ev,
  (VTBL_ENTRY)&_ZN6S247C63v66Ev,
  (VTBL_ENTRY)&_ZN6S247C63v67Ev,
  (VTBL_ENTRY)&_ZN6S247C63v68Ev,
  (VTBL_ENTRY)&_ZN6S247C53v69Ev,
  (VTBL_ENTRY)&_ZN6S247C53v70Ev,
  (VTBL_ENTRY)&_ZN6S247C53v71Ev,
  (VTBL_ENTRY)&_ZN6S247C53v72Ev,
  (VTBL_ENTRY)&_ZN6S247C53v73Ev,
  (VTBL_ENTRY)&_ZN6S247C53v74Ev,
  (VTBL_ENTRY)&_ZN6S247C53v75Ev,
  (VTBL_ENTRY)&_ZN6S247C53v76Ev,
  (VTBL_ENTRY)&_ZN6S247C53v77Ev,
  (VTBL_ENTRY)&_ZN6S247C53v78Ev,
  (VTBL_ENTRY)&_ZN6S247C53v79Ev,
  (VTBL_ENTRY)&_ZN6S247C53v80Ev,
  (VTBL_ENTRY)&_ZN6S247C53v81Ev,
  (VTBL_ENTRY)&_ZN6S247C53v82Ev,
  (VTBL_ENTRY)&_ZN6S247C53v83Ev,
  (VTBL_ENTRY)&_ZN6S247C53v84Ev,
  (VTBL_ENTRY)&_ZN6S247C53v85Ev,
  (VTBL_ENTRY)&_ZN6S247C53v86Ev,
  (VTBL_ENTRY)&_ZN6S247C53v87Ev,
  (VTBL_ENTRY)&_ZN6S247C53v88Ev,
  (VTBL_ENTRY)&_ZN6S247C53v89Ev,
  (VTBL_ENTRY)&_ZN6S247C53v90Ev,
  (VTBL_ENTRY)&_ZN6S247C43v91Ev,
  (VTBL_ENTRY)&_ZN6S247C43v92Ev,
  (VTBL_ENTRY)&_ZN6S247C43v93Ev,
  (VTBL_ENTRY)&_ZN6S247C43v94Ev,
  (VTBL_ENTRY)&_ZN6S247C43v95Ev,
  (VTBL_ENTRY)&_ZN6S247C43v96Ev,
  (VTBL_ENTRY)&_ZN6S247C43v97Ev,
  (VTBL_ENTRY)&_ZN6S247C43v98Ev,
  (VTBL_ENTRY)&_ZN6S247C43v99Ev,
  (VTBL_ENTRY)&_ZN6S247C44v100Ev,
  (VTBL_ENTRY)&_ZN6S247C44v101Ev,
  (VTBL_ENTRY)&_ZN6S247C44v102Ev,
  (VTBL_ENTRY)&_ZN6S247C44v103Ev,
  (VTBL_ENTRY)&_ZN6S247C44v104Ev,
  (VTBL_ENTRY)&_ZN6S247C44v105Ev,
  (VTBL_ENTRY)&_ZN6S247C44v106Ev,
  (VTBL_ENTRY)&_ZN6S247C44v107Ev,
  (VTBL_ENTRY)&_ZN6S247C44v108Ev,
  (VTBL_ENTRY)&_ZN6S247C44v109Ev,
  (VTBL_ENTRY)&_ZN6S247C44v110Ev,
  (VTBL_ENTRY)&_ZN6S247C34v111Ev,
  (VTBL_ENTRY)&_ZN6S247C34v112Ev,
  (VTBL_ENTRY)&_ZN6S247C34v113Ev,
  (VTBL_ENTRY)&_ZN6S247C34v114Ev,
  (VTBL_ENTRY)&_ZN6S247C24v115Ev,
  (VTBL_ENTRY)&_ZN6S247C24v116Ev,
};
extern VTBL_ENTRY _ZTI6S247C2[];
extern  VTBL_ENTRY _ZTV6S247C2[];
Class_Descriptor cd_S247C2 = {  "S247C2", // class name
  bases_S247C2, 4,
  &(vtc_S247C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S247C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S247C2),116, //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  S247C1  : S247C2 {
  int s247c1f0;
  virtual  ~S247C1(); // _ZN6S247C1D1Ev
  virtual void  v1(); // _ZN6S247C12v1Ev
  virtual void  v2(); // _ZN6S247C12v2Ev
  virtual void  v3(); // _ZN6S247C12v3Ev
  virtual void  v4(); // _ZN6S247C12v4Ev
  S247C1(); // tgen
};
//SIG(1 S247C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 FC7{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v111 v112 v113 v114 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v115 v116} vd v1 v2 v3 v4 Fi}


 S247C1 ::~S247C1(){ note_dtor("S247C1", this);}
void  S247C1 ::v1(){vfunc_called(this, "_ZN6S247C12v1Ev");}
void  S247C1 ::v2(){vfunc_called(this, "_ZN6S247C12v2Ev");}
void  S247C1 ::v3(){vfunc_called(this, "_ZN6S247C12v3Ev");}
void  S247C1 ::v4(){vfunc_called(this, "_ZN6S247C12v4Ev");}
S247C1 ::S247C1(){ note_ctor("S247C1", this);} // tgen

static void Test_S247C1()
{
  extern Class_Descriptor cd_S247C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,57)];
    init_test(&cd_S247C1, buf);
    S247C1 *dp, &lv = *(dp=new (buf) S247C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,224), "sizeof(S247C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S247C1)");
    check_base_class_offset(lv, (S247C6*)(S247C5*)(S247C4*)(S247C3*)(S247C2*), 0, "S247C1");
    check_base_class_offset(lv, (S247C5*)(S247C4*)(S247C3*)(S247C2*), 0, "S247C1");
    check_base_class_offset(lv, (S247C4*)(S247C3*)(S247C2*), 0, "S247C1");
    check_base_class_offset(lv, (S247C3*)(S247C2*), 0, "S247C1");
    check_base_class_offset(lv, (S247C2*), 0, "S247C1");
    check_field_offset(lv, s247c1f0, ABISELECT(296,220), "S247C1.s247c1f0");
    test_class_info(&lv, &cd_S247C1);
    dp->~S247C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS247C1(Test_S247C1, "S247C1", ABISELECT(304,224));

#else // __cplusplus

extern void _ZN6S247C1C1Ev();
extern void _ZN6S247C1D1Ev();
Name_Map name_map_S247C1[] = {
  NSPAIR(_ZN6S247C1C1Ev),
  NSPAIR(_ZN6S247C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S247C6;
extern VTBL_ENTRY _ZTI6S247C6[];
extern  VTBL_ENTRY _ZTV6S247C6[];
extern Class_Descriptor cd_S247C5;
extern VTBL_ENTRY _ZTI6S247C5[];
extern  VTBL_ENTRY _ZTV6S247C5[];
extern Class_Descriptor cd_S247C4;
extern VTBL_ENTRY _ZTI6S247C4[];
extern  VTBL_ENTRY _ZTV6S247C4[];
extern Class_Descriptor cd_S247C3;
extern VTBL_ENTRY _ZTI6S247C3[];
extern  VTBL_ENTRY _ZTV6S247C3[];
extern Class_Descriptor cd_S247C2;
extern VTBL_ENTRY _ZTI6S247C2[];
extern  VTBL_ENTRY _ZTV6S247C2[];
static Base_Class bases_S247C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S247C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S247C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S247C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S247C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S247C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S247C1[];
extern void _ZN6S247C1D1Ev();
extern void _ZN6S247C1D0Ev();
extern void _ZN6S247C62v5Ev();
extern void _ZN6S247C62v6Ev();
extern void _ZN6S247C62v7Ev();
extern void _ZN6S247C62v8Ev();
extern void _ZN6S247C62v9Ev();
extern void _ZN6S247C63v10Ev();
extern void _ZN6S247C63v11Ev();
extern void _ZN6S247C63v12Ev();
extern void _ZN6S247C63v13Ev();
extern void _ZN6S247C63v14Ev();
extern void _ZN6S247C63v15Ev();
extern void _ZN6S247C63v16Ev();
extern void _ZN6S247C63v17Ev();
extern void _ZN6S247C63v18Ev();
extern void _ZN6S247C63v19Ev();
extern void _ZN6S247C63v20Ev();
extern void _ZN6S247C63v21Ev();
extern void _ZN6S247C63v22Ev();
extern void _ZN6S247C63v23Ev();
extern void _ZN6S247C63v24Ev();
extern void _ZN6S247C63v25Ev();
extern void _ZN6S247C63v26Ev();
extern void _ZN6S247C63v27Ev();
extern void _ZN6S247C63v28Ev();
extern void _ZN6S247C63v29Ev();
extern void _ZN6S247C63v30Ev();
extern void _ZN6S247C63v31Ev();
extern void _ZN6S247C63v32Ev();
extern void _ZN6S247C63v33Ev();
extern void _ZN6S247C63v34Ev();
extern void _ZN6S247C63v35Ev();
extern void _ZN6S247C63v36Ev();
extern void _ZN6S247C63v37Ev();
extern void _ZN6S247C63v38Ev();
extern void _ZN6S247C63v39Ev();
extern void _ZN6S247C63v40Ev();
extern void _ZN6S247C63v41Ev();
extern void _ZN6S247C63v42Ev();
extern void _ZN6S247C63v43Ev();
extern void _ZN6S247C63v44Ev();
extern void _ZN6S247C63v45Ev();
extern void _ZN6S247C63v46Ev();
extern void _ZN6S247C63v47Ev();
extern void _ZN6S247C63v48Ev();
extern void _ZN6S247C63v49Ev();
extern void _ZN6S247C63v50Ev();
extern void _ZN6S247C63v51Ev();
extern void _ZN6S247C63v52Ev();
extern void _ZN6S247C63v53Ev();
extern void _ZN6S247C63v54Ev();
extern void _ZN6S247C63v55Ev();
extern void _ZN6S247C63v56Ev();
extern void _ZN6S247C63v57Ev();
extern void _ZN6S247C63v58Ev();
extern void _ZN6S247C63v59Ev();
extern void _ZN6S247C63v60Ev();
extern void _ZN6S247C63v61Ev();
extern void _ZN6S247C63v62Ev();
extern void _ZN6S247C63v63Ev();
extern void _ZN6S247C63v64Ev();
extern void _ZN6S247C63v65Ev();
extern void _ZN6S247C63v66Ev();
extern void _ZN6S247C63v67Ev();
extern void _ZN6S247C63v68Ev();
extern void _ZN6S247C53v69Ev();
extern void _ZN6S247C53v70Ev();
extern void _ZN6S247C53v71Ev();
extern void _ZN6S247C53v72Ev();
extern void _ZN6S247C53v73Ev();
extern void _ZN6S247C53v74Ev();
extern void _ZN6S247C53v75Ev();
extern void _ZN6S247C53v76Ev();
extern void _ZN6S247C53v77Ev();
extern void _ZN6S247C53v78Ev();
extern void _ZN6S247C53v79Ev();
extern void _ZN6S247C53v80Ev();
extern void _ZN6S247C53v81Ev();
extern void _ZN6S247C53v82Ev();
extern void _ZN6S247C53v83Ev();
extern void _ZN6S247C53v84Ev();
extern void _ZN6S247C53v85Ev();
extern void _ZN6S247C53v86Ev();
extern void _ZN6S247C53v87Ev();
extern void _ZN6S247C53v88Ev();
extern void _ZN6S247C53v89Ev();
extern void _ZN6S247C53v90Ev();
extern void _ZN6S247C43v91Ev();
extern void _ZN6S247C43v92Ev();
extern void _ZN6S247C43v93Ev();
extern void _ZN6S247C43v94Ev();
extern void _ZN6S247C43v95Ev();
extern void _ZN6S247C43v96Ev();
extern void _ZN6S247C43v97Ev();
extern void _ZN6S247C43v98Ev();
extern void _ZN6S247C43v99Ev();
extern void _ZN6S247C44v100Ev();
extern void _ZN6S247C44v101Ev();
extern void _ZN6S247C44v102Ev();
extern void _ZN6S247C44v103Ev();
extern void _ZN6S247C44v104Ev();
extern void _ZN6S247C44v105Ev();
extern void _ZN6S247C44v106Ev();
extern void _ZN6S247C44v107Ev();
extern void _ZN6S247C44v108Ev();
extern void _ZN6S247C44v109Ev();
extern void _ZN6S247C44v110Ev();
extern void _ZN6S247C34v111Ev();
extern void _ZN6S247C34v112Ev();
extern void _ZN6S247C34v113Ev();
extern void _ZN6S247C34v114Ev();
extern void _ZN6S247C24v115Ev();
extern void _ZN6S247C24v116Ev();
extern void _ZN6S247C12v1Ev();
extern void _ZN6S247C12v2Ev();
extern void _ZN6S247C12v3Ev();
extern void _ZN6S247C12v4Ev();
static  VTBL_ENTRY vtc_S247C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S247C1[0]),
  (VTBL_ENTRY)&_ZN6S247C1D1Ev,
  (VTBL_ENTRY)&_ZN6S247C1D0Ev,
  (VTBL_ENTRY)&_ZN6S247C62v5Ev,
  (VTBL_ENTRY)&_ZN6S247C62v6Ev,
  (VTBL_ENTRY)&_ZN6S247C62v7Ev,
  (VTBL_ENTRY)&_ZN6S247C62v8Ev,
  (VTBL_ENTRY)&_ZN6S247C62v9Ev,
  (VTBL_ENTRY)&_ZN6S247C63v10Ev,
  (VTBL_ENTRY)&_ZN6S247C63v11Ev,
  (VTBL_ENTRY)&_ZN6S247C63v12Ev,
  (VTBL_ENTRY)&_ZN6S247C63v13Ev,
  (VTBL_ENTRY)&_ZN6S247C63v14Ev,
  (VTBL_ENTRY)&_ZN6S247C63v15Ev,
  (VTBL_ENTRY)&_ZN6S247C63v16Ev,
  (VTBL_ENTRY)&_ZN6S247C63v17Ev,
  (VTBL_ENTRY)&_ZN6S247C63v18Ev,
  (VTBL_ENTRY)&_ZN6S247C63v19Ev,
  (VTBL_ENTRY)&_ZN6S247C63v20Ev,
  (VTBL_ENTRY)&_ZN6S247C63v21Ev,
  (VTBL_ENTRY)&_ZN6S247C63v22Ev,
  (VTBL_ENTRY)&_ZN6S247C63v23Ev,
  (VTBL_ENTRY)&_ZN6S247C63v24Ev,
  (VTBL_ENTRY)&_ZN6S247C63v25Ev,
  (VTBL_ENTRY)&_ZN6S247C63v26Ev,
  (VTBL_ENTRY)&_ZN6S247C63v27Ev,
  (VTBL_ENTRY)&_ZN6S247C63v28Ev,
  (VTBL_ENTRY)&_ZN6S247C63v29Ev,
  (VTBL_ENTRY)&_ZN6S247C63v30Ev,
  (VTBL_ENTRY)&_ZN6S247C63v31Ev,
  (VTBL_ENTRY)&_ZN6S247C63v32Ev,
  (VTBL_ENTRY)&_ZN6S247C63v33Ev,
  (VTBL_ENTRY)&_ZN6S247C63v34Ev,
  (VTBL_ENTRY)&_ZN6S247C63v35Ev,
  (VTBL_ENTRY)&_ZN6S247C63v36Ev,
  (VTBL_ENTRY)&_ZN6S247C63v37Ev,
  (VTBL_ENTRY)&_ZN6S247C63v38Ev,
  (VTBL_ENTRY)&_ZN6S247C63v39Ev,
  (VTBL_ENTRY)&_ZN6S247C63v40Ev,
  (VTBL_ENTRY)&_ZN6S247C63v41Ev,
  (VTBL_ENTRY)&_ZN6S247C63v42Ev,
  (VTBL_ENTRY)&_ZN6S247C63v43Ev,
  (VTBL_ENTRY)&_ZN6S247C63v44Ev,
  (VTBL_ENTRY)&_ZN6S247C63v45Ev,
  (VTBL_ENTRY)&_ZN6S247C63v46Ev,
  (VTBL_ENTRY)&_ZN6S247C63v47Ev,
  (VTBL_ENTRY)&_ZN6S247C63v48Ev,
  (VTBL_ENTRY)&_ZN6S247C63v49Ev,
  (VTBL_ENTRY)&_ZN6S247C63v50Ev,
  (VTBL_ENTRY)&_ZN6S247C63v51Ev,
  (VTBL_ENTRY)&_ZN6S247C63v52Ev,
  (VTBL_ENTRY)&_ZN6S247C63v53Ev,
  (VTBL_ENTRY)&_ZN6S247C63v54Ev,
  (VTBL_ENTRY)&_ZN6S247C63v55Ev,
  (VTBL_ENTRY)&_ZN6S247C63v56Ev,
  (VTBL_ENTRY)&_ZN6S247C63v57Ev,
  (VTBL_ENTRY)&_ZN6S247C63v58Ev,
  (VTBL_ENTRY)&_ZN6S247C63v59Ev,
  (VTBL_ENTRY)&_ZN6S247C63v60Ev,
  (VTBL_ENTRY)&_ZN6S247C63v61Ev,
  (VTBL_ENTRY)&_ZN6S247C63v62Ev,
  (VTBL_ENTRY)&_ZN6S247C63v63Ev,
  (VTBL_ENTRY)&_ZN6S247C63v64Ev,
  (VTBL_ENTRY)&_ZN6S247C63v65Ev,
  (VTBL_ENTRY)&_ZN6S247C63v66Ev,
  (VTBL_ENTRY)&_ZN6S247C63v67Ev,
  (VTBL_ENTRY)&_ZN6S247C63v68Ev,
  (VTBL_ENTRY)&_ZN6S247C53v69Ev,
  (VTBL_ENTRY)&_ZN6S247C53v70Ev,
  (VTBL_ENTRY)&_ZN6S247C53v71Ev,
  (VTBL_ENTRY)&_ZN6S247C53v72Ev,
  (VTBL_ENTRY)&_ZN6S247C53v73Ev,
  (VTBL_ENTRY)&_ZN6S247C53v74Ev,
  (VTBL_ENTRY)&_ZN6S247C53v75Ev,
  (VTBL_ENTRY)&_ZN6S247C53v76Ev,
  (VTBL_ENTRY)&_ZN6S247C53v77Ev,
  (VTBL_ENTRY)&_ZN6S247C53v78Ev,
  (VTBL_ENTRY)&_ZN6S247C53v79Ev,
  (VTBL_ENTRY)&_ZN6S247C53v80Ev,
  (VTBL_ENTRY)&_ZN6S247C53v81Ev,
  (VTBL_ENTRY)&_ZN6S247C53v82Ev,
  (VTBL_ENTRY)&_ZN6S247C53v83Ev,
  (VTBL_ENTRY)&_ZN6S247C53v84Ev,
  (VTBL_ENTRY)&_ZN6S247C53v85Ev,
  (VTBL_ENTRY)&_ZN6S247C53v86Ev,
  (VTBL_ENTRY)&_ZN6S247C53v87Ev,
  (VTBL_ENTRY)&_ZN6S247C53v88Ev,
  (VTBL_ENTRY)&_ZN6S247C53v89Ev,
  (VTBL_ENTRY)&_ZN6S247C53v90Ev,
  (VTBL_ENTRY)&_ZN6S247C43v91Ev,
  (VTBL_ENTRY)&_ZN6S247C43v92Ev,
  (VTBL_ENTRY)&_ZN6S247C43v93Ev,
  (VTBL_ENTRY)&_ZN6S247C43v94Ev,
  (VTBL_ENTRY)&_ZN6S247C43v95Ev,
  (VTBL_ENTRY)&_ZN6S247C43v96Ev,
  (VTBL_ENTRY)&_ZN6S247C43v97Ev,
  (VTBL_ENTRY)&_ZN6S247C43v98Ev,
  (VTBL_ENTRY)&_ZN6S247C43v99Ev,
  (VTBL_ENTRY)&_ZN6S247C44v100Ev,
  (VTBL_ENTRY)&_ZN6S247C44v101Ev,
  (VTBL_ENTRY)&_ZN6S247C44v102Ev,
  (VTBL_ENTRY)&_ZN6S247C44v103Ev,
  (VTBL_ENTRY)&_ZN6S247C44v104Ev,
  (VTBL_ENTRY)&_ZN6S247C44v105Ev,
  (VTBL_ENTRY)&_ZN6S247C44v106Ev,
  (VTBL_ENTRY)&_ZN6S247C44v107Ev,
  (VTBL_ENTRY)&_ZN6S247C44v108Ev,
  (VTBL_ENTRY)&_ZN6S247C44v109Ev,
  (VTBL_ENTRY)&_ZN6S247C44v110Ev,
  (VTBL_ENTRY)&_ZN6S247C34v111Ev,
  (VTBL_ENTRY)&_ZN6S247C34v112Ev,
  (VTBL_ENTRY)&_ZN6S247C34v113Ev,
  (VTBL_ENTRY)&_ZN6S247C34v114Ev,
  (VTBL_ENTRY)&_ZN6S247C24v115Ev,
  (VTBL_ENTRY)&_ZN6S247C24v116Ev,
  (VTBL_ENTRY)&_ZN6S247C12v1Ev,
  (VTBL_ENTRY)&_ZN6S247C12v2Ev,
  (VTBL_ENTRY)&_ZN6S247C12v3Ev,
  (VTBL_ENTRY)&_ZN6S247C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S247C1[];
extern  VTBL_ENTRY _ZTV6S247C1[];
Class_Descriptor cd_S247C1 = {  "S247C1", // class name
  bases_S247C1, 5,
  &(vtc_S247C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,224), // object size
  NSPAIRA(_ZTI6S247C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S247C1),120, //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  S212C6  {
  int s212c6f0;
  __tsi64 s212c6f1;
  void *s212c6f2[4];
  int s212c6f3[2];
  void *s212c6f4;
  ::S1503C5_nt s212c6f5;
  void *s212c6f6[2];
  virtual  ~S212C6(); // _ZN6S212C6D1Ev
  virtual void  v4(); // _ZN6S212C62v4Ev
  virtual void  v5(); // _ZN6S212C62v5Ev
  virtual void  v6(); // _ZN6S212C62v6Ev
  virtual void  v7(); // _ZN6S212C62v7Ev
  virtual void  v8(); // _ZN6S212C62v8Ev
  virtual void  v9(); // _ZN6S212C62v9Ev
  virtual void  v10(); // _ZN6S212C63v10Ev
  virtual void  v11(); // _ZN6S212C63v11Ev
  virtual void  v12(); // _ZN6S212C63v12Ev
  virtual void  v13(); // _ZN6S212C63v13Ev
  virtual void  v14(); // _ZN6S212C63v14Ev
  virtual void  v15(); // _ZN6S212C63v15Ev
  virtual void  v16(); // _ZN6S212C63v16Ev
  virtual void  v17(); // _ZN6S212C63v17Ev
  virtual void  v18(); // _ZN6S212C63v18Ev
  virtual void  v19(); // _ZN6S212C63v19Ev
  virtual void  v20(); // _ZN6S212C63v20Ev
  virtual void  v21(); // _ZN6S212C63v21Ev
  virtual void  v22(); // _ZN6S212C63v22Ev
  virtual void  v23(); // _ZN6S212C63v23Ev
  virtual void  v24(); // _ZN6S212C63v24Ev
  virtual void  v25(); // _ZN6S212C63v25Ev
  virtual void  v26(); // _ZN6S212C63v26Ev
  virtual void  v27(); // _ZN6S212C63v27Ev
  virtual void  v28(); // _ZN6S212C63v28Ev
  virtual void  v29(); // _ZN6S212C63v29Ev
  virtual void  v30(); // _ZN6S212C63v30Ev
  virtual void  v31(); // _ZN6S212C63v31Ev
  virtual void  v32(); // _ZN6S212C63v32Ev
  virtual void  v33(); // _ZN6S212C63v33Ev
  virtual void  v34(); // _ZN6S212C63v34Ev
  virtual void  v35(); // _ZN6S212C63v35Ev
  virtual void  v36(); // _ZN6S212C63v36Ev
  virtual void  v37(); // _ZN6S212C63v37Ev
  virtual void  v38(); // _ZN6S212C63v38Ev
  virtual void  v39(); // _ZN6S212C63v39Ev
  virtual void  v40(); // _ZN6S212C63v40Ev
  virtual void  v41(); // _ZN6S212C63v41Ev
  virtual void  v42(); // _ZN6S212C63v42Ev
  virtual void  v43(); // _ZN6S212C63v43Ev
  virtual void  v44(); // _ZN6S212C63v44Ev
  virtual void  v45(); // _ZN6S212C63v45Ev
  virtual void  v46(); // _ZN6S212C63v46Ev
  virtual void  v47(); // _ZN6S212C63v47Ev
  virtual void  v48(); // _ZN6S212C63v48Ev
  virtual void  v49(); // _ZN6S212C63v49Ev
  virtual void  v50(); // _ZN6S212C63v50Ev
  virtual void  v51(); // _ZN6S212C63v51Ev
  virtual void  v52(); // _ZN6S212C63v52Ev
  virtual void  v53(); // _ZN6S212C63v53Ev
  virtual void  v54(); // _ZN6S212C63v54Ev
  virtual void  v55(); // _ZN6S212C63v55Ev
  virtual void  v56(); // _ZN6S212C63v56Ev
  virtual void  v57(); // _ZN6S212C63v57Ev
  virtual void  v58(); // _ZN6S212C63v58Ev
  virtual void  v59(); // _ZN6S212C63v59Ev
  virtual void  v60(); // _ZN6S212C63v60Ev
  virtual void  v61(); // _ZN6S212C63v61Ev
  virtual void  v62(); // _ZN6S212C63v62Ev
  virtual void  v63(); // _ZN6S212C63v63Ev
  virtual void  v64(); // _ZN6S212C63v64Ev
  virtual void  v65(); // _ZN6S212C63v65Ev
  virtual void  v66(); // _ZN6S212C63v66Ev
  virtual void  v67(); // _ZN6S212C63v67Ev
  S212C6(); // tgen
};
//SIG(-1 S212C6) 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]}


 S212C6 ::~S212C6(){ note_dtor("S212C6", this);}
void  S212C6 ::v4(){vfunc_called(this, "_ZN6S212C62v4Ev");}
void  S212C6 ::v5(){vfunc_called(this, "_ZN6S212C62v5Ev");}
void  S212C6 ::v6(){vfunc_called(this, "_ZN6S212C62v6Ev");}
void  S212C6 ::v7(){vfunc_called(this, "_ZN6S212C62v7Ev");}
void  S212C6 ::v8(){vfunc_called(this, "_ZN6S212C62v8Ev");}
void  S212C6 ::v9(){vfunc_called(this, "_ZN6S212C62v9Ev");}
void  S212C6 ::v10(){vfunc_called(this, "_ZN6S212C63v10Ev");}
void  S212C6 ::v11(){vfunc_called(this, "_ZN6S212C63v11Ev");}
void  S212C6 ::v12(){vfunc_called(this, "_ZN6S212C63v12Ev");}
void  S212C6 ::v13(){vfunc_called(this, "_ZN6S212C63v13Ev");}
void  S212C6 ::v14(){vfunc_called(this, "_ZN6S212C63v14Ev");}
void  S212C6 ::v15(){vfunc_called(this, "_ZN6S212C63v15Ev");}
void  S212C6 ::v16(){vfunc_called(this, "_ZN6S212C63v16Ev");}
void  S212C6 ::v17(){vfunc_called(this, "_ZN6S212C63v17Ev");}
void  S212C6 ::v18(){vfunc_called(this, "_ZN6S212C63v18Ev");}
void  S212C6 ::v19(){vfunc_called(this, "_ZN6S212C63v19Ev");}
void  S212C6 ::v20(){vfunc_called(this, "_ZN6S212C63v20Ev");}
void  S212C6 ::v21(){vfunc_called(this, "_ZN6S212C63v21Ev");}
void  S212C6 ::v22(){vfunc_called(this, "_ZN6S212C63v22Ev");}
void  S212C6 ::v23(){vfunc_called(this, "_ZN6S212C63v23Ev");}
void  S212C6 ::v24(){vfunc_called(this, "_ZN6S212C63v24Ev");}
void  S212C6 ::v25(){vfunc_called(this, "_ZN6S212C63v25Ev");}
void  S212C6 ::v26(){vfunc_called(this, "_ZN6S212C63v26Ev");}
void  S212C6 ::v27(){vfunc_called(this, "_ZN6S212C63v27Ev");}
void  S212C6 ::v28(){vfunc_called(this, "_ZN6S212C63v28Ev");}
void  S212C6 ::v29(){vfunc_called(this, "_ZN6S212C63v29Ev");}
void  S212C6 ::v30(){vfunc_called(this, "_ZN6S212C63v30Ev");}
void  S212C6 ::v31(){vfunc_called(this, "_ZN6S212C63v31Ev");}
void  S212C6 ::v32(){vfunc_called(this, "_ZN6S212C63v32Ev");}
void  S212C6 ::v33(){vfunc_called(this, "_ZN6S212C63v33Ev");}
void  S212C6 ::v34(){vfunc_called(this, "_ZN6S212C63v34Ev");}
void  S212C6 ::v35(){vfunc_called(this, "_ZN6S212C63v35Ev");}
void  S212C6 ::v36(){vfunc_called(this, "_ZN6S212C63v36Ev");}
void  S212C6 ::v37(){vfunc_called(this, "_ZN6S212C63v37Ev");}
void  S212C6 ::v38(){vfunc_called(this, "_ZN6S212C63v38Ev");}
void  S212C6 ::v39(){vfunc_called(this, "_ZN6S212C63v39Ev");}
void  S212C6 ::v40(){vfunc_called(this, "_ZN6S212C63v40Ev");}
void  S212C6 ::v41(){vfunc_called(this, "_ZN6S212C63v41Ev");}
void  S212C6 ::v42(){vfunc_called(this, "_ZN6S212C63v42Ev");}
void  S212C6 ::v43(){vfunc_called(this, "_ZN6S212C63v43Ev");}
void  S212C6 ::v44(){vfunc_called(this, "_ZN6S212C63v44Ev");}
void  S212C6 ::v45(){vfunc_called(this, "_ZN6S212C63v45Ev");}
void  S212C6 ::v46(){vfunc_called(this, "_ZN6S212C63v46Ev");}
void  S212C6 ::v47(){vfunc_called(this, "_ZN6S212C63v47Ev");}
void  S212C6 ::v48(){vfunc_called(this, "_ZN6S212C63v48Ev");}
void  S212C6 ::v49(){vfunc_called(this, "_ZN6S212C63v49Ev");}
void  S212C6 ::v50(){vfunc_called(this, "_ZN6S212C63v50Ev");}
void  S212C6 ::v51(){vfunc_called(this, "_ZN6S212C63v51Ev");}
void  S212C6 ::v52(){vfunc_called(this, "_ZN6S212C63v52Ev");}
void  S212C6 ::v53(){vfunc_called(this, "_ZN6S212C63v53Ev");}
void  S212C6 ::v54(){vfunc_called(this, "_ZN6S212C63v54Ev");}
void  S212C6 ::v55(){vfunc_called(this, "_ZN6S212C63v55Ev");}
void  S212C6 ::v56(){vfunc_called(this, "_ZN6S212C63v56Ev");}
void  S212C6 ::v57(){vfunc_called(this, "_ZN6S212C63v57Ev");}
void  S212C6 ::v58(){vfunc_called(this, "_ZN6S212C63v58Ev");}
void  S212C6 ::v59(){vfunc_called(this, "_ZN6S212C63v59Ev");}
void  S212C6 ::v60(){vfunc_called(this, "_ZN6S212C63v60Ev");}
void  S212C6 ::v61(){vfunc_called(this, "_ZN6S212C63v61Ev");}
void  S212C6 ::v62(){vfunc_called(this, "_ZN6S212C63v62Ev");}
void  S212C6 ::v63(){vfunc_called(this, "_ZN6S212C63v63Ev");}
void  S212C6 ::v64(){vfunc_called(this, "_ZN6S212C63v64Ev");}
void  S212C6 ::v65(){vfunc_called(this, "_ZN6S212C63v65Ev");}
void  S212C6 ::v66(){vfunc_called(this, "_ZN6S212C63v66Ev");}
void  S212C6 ::v67(){vfunc_called(this, "_ZN6S212C63v67Ev");}
S212C6 ::S212C6(){ note_ctor("S212C6", this);} // tgen

static void Test_S212C6()
{
  extern Class_Descriptor cd_S212C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S212C6, buf);
    S212C6 *dp, &lv = *(dp=new (buf) S212C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S212C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S212C6)");
    check_field_offset(lv, s212c6f0, ABISELECT(8,4), "S212C6.s212c6f0");
    check_field_offset(lv, s212c6f1, ABISELECT(16,8), "S212C6.s212c6f1");
    check_field_offset(lv, s212c6f2, ABISELECT(24,16), "S212C6.s212c6f2");
    check_field_offset(lv, s212c6f3, ABISELECT(56,32), "S212C6.s212c6f3");
    check_field_offset(lv, s212c6f4, ABISELECT(64,40), "S212C6.s212c6f4");
    check_field_offset(lv, s212c6f5, ABISELECT(72,44), "S212C6.s212c6f5");
    check_field_offset(lv, s212c6f6, ABISELECT(80,52), "S212C6.s212c6f6");
    test_class_info(&lv, &cd_S212C6);
    dp->~S212C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS212C6(Test_S212C6, "S212C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S212C6C1Ev();
extern void _ZN6S212C6D1Ev();
Name_Map name_map_S212C6[] = {
  NSPAIR(_ZN6S212C6C1Ev),
  NSPAIR(_ZN6S212C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S212C6[];
extern void _ZN6S212C6D1Ev();
extern void _ZN6S212C6D0Ev();
extern void _ZN6S212C62v4Ev();
extern void _ZN6S212C62v5Ev();
extern void _ZN6S212C62v6Ev();
extern void _ZN6S212C62v7Ev();
extern void _ZN6S212C62v8Ev();
extern void _ZN6S212C62v9Ev();
extern void _ZN6S212C63v10Ev();
extern void _ZN6S212C63v11Ev();
extern void _ZN6S212C63v12Ev();
extern void _ZN6S212C63v13Ev();
extern void _ZN6S212C63v14Ev();
extern void _ZN6S212C63v15Ev();
extern void _ZN6S212C63v16Ev();
extern void _ZN6S212C63v17Ev();
extern void _ZN6S212C63v18Ev();
extern void _ZN6S212C63v19Ev();
extern void _ZN6S212C63v20Ev();
extern void _ZN6S212C63v21Ev();
extern void _ZN6S212C63v22Ev();
extern void _ZN6S212C63v23Ev();
extern void _ZN6S212C63v24Ev();
extern void _ZN6S212C63v25Ev();
extern void _ZN6S212C63v26Ev();
extern void _ZN6S212C63v27Ev();
extern void _ZN6S212C63v28Ev();
extern void _ZN6S212C63v29Ev();
extern void _ZN6S212C63v30Ev();
extern void _ZN6S212C63v31Ev();
extern void _ZN6S212C63v32Ev();
extern void _ZN6S212C63v33Ev();
extern void _ZN6S212C63v34Ev();
extern void _ZN6S212C63v35Ev();
extern void _ZN6S212C63v36Ev();
extern void _ZN6S212C63v37Ev();
extern void _ZN6S212C63v38Ev();
extern void _ZN6S212C63v39Ev();
extern void _ZN6S212C63v40Ev();
extern void _ZN6S212C63v41Ev();
extern void _ZN6S212C63v42Ev();
extern void _ZN6S212C63v43Ev();
extern void _ZN6S212C63v44Ev();
extern void _ZN6S212C63v45Ev();
extern void _ZN6S212C63v46Ev();
extern void _ZN6S212C63v47Ev();
extern void _ZN6S212C63v48Ev();
extern void _ZN6S212C63v49Ev();
extern void _ZN6S212C63v50Ev();
extern void _ZN6S212C63v51Ev();
extern void _ZN6S212C63v52Ev();
extern void _ZN6S212C63v53Ev();
extern void _ZN6S212C63v54Ev();
extern void _ZN6S212C63v55Ev();
extern void _ZN6S212C63v56Ev();
extern void _ZN6S212C63v57Ev();
extern void _ZN6S212C63v58Ev();
extern void _ZN6S212C63v59Ev();
extern void _ZN6S212C63v60Ev();
extern void _ZN6S212C63v61Ev();
extern void _ZN6S212C63v62Ev();
extern void _ZN6S212C63v63Ev();
extern void _ZN6S212C63v64Ev();
extern void _ZN6S212C63v65Ev();
extern void _ZN6S212C63v66Ev();
extern void _ZN6S212C63v67Ev();
static  VTBL_ENTRY vtc_S212C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S212C6[0]),
  (VTBL_ENTRY)&_ZN6S212C6D1Ev,
  (VTBL_ENTRY)&_ZN6S212C6D0Ev,
  (VTBL_ENTRY)&_ZN6S212C62v4Ev,
  (VTBL_ENTRY)&_ZN6S212C62v5Ev,
  (VTBL_ENTRY)&_ZN6S212C62v6Ev,
  (VTBL_ENTRY)&_ZN6S212C62v7Ev,
  (VTBL_ENTRY)&_ZN6S212C62v8Ev,
  (VTBL_ENTRY)&_ZN6S212C62v9Ev,
  (VTBL_ENTRY)&_ZN6S212C63v10Ev,
  (VTBL_ENTRY)&_ZN6S212C63v11Ev,
  (VTBL_ENTRY)&_ZN6S212C63v12Ev,
  (VTBL_ENTRY)&_ZN6S212C63v13Ev,
  (VTBL_ENTRY)&_ZN6S212C63v14Ev,
  (VTBL_ENTRY)&_ZN6S212C63v15Ev,
  (VTBL_ENTRY)&_ZN6S212C63v16Ev,
  (VTBL_ENTRY)&_ZN6S212C63v17Ev,
  (VTBL_ENTRY)&_ZN6S212C63v18Ev,
  (VTBL_ENTRY)&_ZN6S212C63v19Ev,
  (VTBL_ENTRY)&_ZN6S212C63v20Ev,
  (VTBL_ENTRY)&_ZN6S212C63v21Ev,
  (VTBL_ENTRY)&_ZN6S212C63v22Ev,
  (VTBL_ENTRY)&_ZN6S212C63v23Ev,
  (VTBL_ENTRY)&_ZN6S212C63v24Ev,
  (VTBL_ENTRY)&_ZN6S212C63v25Ev,
  (VTBL_ENTRY)&_ZN6S212C63v26Ev,
  (VTBL_ENTRY)&_ZN6S212C63v27Ev,
  (VTBL_ENTRY)&_ZN6S212C63v28Ev,
  (VTBL_ENTRY)&_ZN6S212C63v29Ev,
  (VTBL_ENTRY)&_ZN6S212C63v30Ev,
  (VTBL_ENTRY)&_ZN6S212C63v31Ev,
  (VTBL_ENTRY)&_ZN6S212C63v32Ev,
  (VTBL_ENTRY)&_ZN6S212C63v33Ev,
  (VTBL_ENTRY)&_ZN6S212C63v34Ev,
  (VTBL_ENTRY)&_ZN6S212C63v35Ev,
  (VTBL_ENTRY)&_ZN6S212C63v36Ev,
  (VTBL_ENTRY)&_ZN6S212C63v37Ev,
  (VTBL_ENTRY)&_ZN6S212C63v38Ev,
  (VTBL_ENTRY)&_ZN6S212C63v39Ev,
  (VTBL_ENTRY)&_ZN6S212C63v40Ev,
  (VTBL_ENTRY)&_ZN6S212C63v41Ev,
  (VTBL_ENTRY)&_ZN6S212C63v42Ev,
  (VTBL_ENTRY)&_ZN6S212C63v43Ev,
  (VTBL_ENTRY)&_ZN6S212C63v44Ev,
  (VTBL_ENTRY)&_ZN6S212C63v45Ev,
  (VTBL_ENTRY)&_ZN6S212C63v46Ev,
  (VTBL_ENTRY)&_ZN6S212C63v47Ev,
  (VTBL_ENTRY)&_ZN6S212C63v48Ev,
  (VTBL_ENTRY)&_ZN6S212C63v49Ev,
  (VTBL_ENTRY)&_ZN6S212C63v50Ev,
  (VTBL_ENTRY)&_ZN6S212C63v51Ev,
  (VTBL_ENTRY)&_ZN6S212C63v52Ev,
  (VTBL_ENTRY)&_ZN6S212C63v53Ev,
  (VTBL_ENTRY)&_ZN6S212C63v54Ev,
  (VTBL_ENTRY)&_ZN6S212C63v55Ev,
  (VTBL_ENTRY)&_ZN6S212C63v56Ev,
  (VTBL_ENTRY)&_ZN6S212C63v57Ev,
  (VTBL_ENTRY)&_ZN6S212C63v58Ev,
  (VTBL_ENTRY)&_ZN6S212C63v59Ev,
  (VTBL_ENTRY)&_ZN6S212C63v60Ev,
  (VTBL_ENTRY)&_ZN6S212C63v61Ev,
  (VTBL_ENTRY)&_ZN6S212C63v62Ev,
  (VTBL_ENTRY)&_ZN6S212C63v63Ev,
  (VTBL_ENTRY)&_ZN6S212C63v64Ev,
  (VTBL_ENTRY)&_ZN6S212C63v65Ev,
  (VTBL_ENTRY)&_ZN6S212C63v66Ev,
  (VTBL_ENTRY)&_ZN6S212C63v67Ev,
};
extern VTBL_ENTRY _ZTI6S212C6[];
extern  VTBL_ENTRY _ZTV6S212C6[];
Class_Descriptor cd_S212C6 = {  "S212C6", // class name
  0,0,//no base classes
  &(vtc_S212C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S212C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S212C6),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  S212C5  : S212C6 {
  int s212c5f0[2];
  void *s212c5f1;
  int s212c5f2[2];
  ::S210C8_nt s212c5f3;
  ::S210C8_nt s212c5f4;
  ::S629C14 s212c5f5;
  ::S210C8_nt s212c5f6;
  unsigned int s212c5f7:1;
  unsigned int s212c5f8:1;
  unsigned int s212c5f9:1;
  unsigned int s212c5f10:1;
  unsigned int s212c5f11:1;
  int s212c5f12[2];
  virtual  ~S212C5(); // _ZN6S212C5D1Ev
  virtual void  v68(); // _ZN6S212C53v68Ev
  virtual void  v69(); // _ZN6S212C53v69Ev
  virtual void  v70(); // _ZN6S212C53v70Ev
  virtual void  v71(); // _ZN6S212C53v71Ev
  virtual void  v72(); // _ZN6S212C53v72Ev
  virtual void  v73(); // _ZN6S212C53v73Ev
  virtual void  v74(); // _ZN6S212C53v74Ev
  virtual void  v75(); // _ZN6S212C53v75Ev
  virtual void  v76(); // _ZN6S212C53v76Ev
  virtual void  v77(); // _ZN6S212C53v77Ev
  virtual void  v78(); // _ZN6S212C53v78Ev
  virtual void  v79(); // _ZN6S212C53v79Ev
  virtual void  v80(); // _ZN6S212C53v80Ev
  virtual void  v81(); // _ZN6S212C53v81Ev
  virtual void  v82(); // _ZN6S212C53v82Ev
  virtual void  v83(); // _ZN6S212C53v83Ev
  virtual void  v84(); // _ZN6S212C53v84Ev
  virtual void  v85(); // _ZN6S212C53v85Ev
  virtual void  v86(); // _ZN6S212C53v86Ev
  virtual void  v87(); // _ZN6S212C53v87Ev
  virtual void  v88(); // _ZN6S212C53v88Ev
  virtual void  v89(); // _ZN6S212C53v89Ev
  S212C5(); // tgen
};
//SIG(-1 S212C5) 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]}


 S212C5 ::~S212C5(){ note_dtor("S212C5", this);}
void  S212C5 ::v68(){vfunc_called(this, "_ZN6S212C53v68Ev");}
void  S212C5 ::v69(){vfunc_called(this, "_ZN6S212C53v69Ev");}
void  S212C5 ::v70(){vfunc_called(this, "_ZN6S212C53v70Ev");}
void  S212C5 ::v71(){vfunc_called(this, "_ZN6S212C53v71Ev");}
void  S212C5 ::v72(){vfunc_called(this, "_ZN6S212C53v72Ev");}
void  S212C5 ::v73(){vfunc_called(this, "_ZN6S212C53v73Ev");}
void  S212C5 ::v74(){vfunc_called(this, "_ZN6S212C53v74Ev");}
void  S212C5 ::v75(){vfunc_called(this, "_ZN6S212C53v75Ev");}
void  S212C5 ::v76(){vfunc_called(this, "_ZN6S212C53v76Ev");}
void  S212C5 ::v77(){vfunc_called(this, "_ZN6S212C53v77Ev");}
void  S212C5 ::v78(){vfunc_called(this, "_ZN6S212C53v78Ev");}
void  S212C5 ::v79(){vfunc_called(this, "_ZN6S212C53v79Ev");}
void  S212C5 ::v80(){vfunc_called(this, "_ZN6S212C53v80Ev");}
void  S212C5 ::v81(){vfunc_called(this, "_ZN6S212C53v81Ev");}
void  S212C5 ::v82(){vfunc_called(this, "_ZN6S212C53v82Ev");}
void  S212C5 ::v83(){vfunc_called(this, "_ZN6S212C53v83Ev");}
void  S212C5 ::v84(){vfunc_called(this, "_ZN6S212C53v84Ev");}
void  S212C5 ::v85(){vfunc_called(this, "_ZN6S212C53v85Ev");}
void  S212C5 ::v86(){vfunc_called(this, "_ZN6S212C53v86Ev");}
void  S212C5 ::v87(){vfunc_called(this, "_ZN6S212C53v87Ev");}
void  S212C5 ::v88(){vfunc_called(this, "_ZN6S212C53v88Ev");}
void  S212C5 ::v89(){vfunc_called(this, "_ZN6S212C53v89Ev");}
S212C5 ::S212C5(){ note_ctor("S212C5", this);} // tgen

static void Test_S212C5()
{
  extern Class_Descriptor cd_S212C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S212C5, buf);
    S212C5 *dp, &lv = *(dp=new (buf) S212C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S212C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S212C5)");
    check_base_class_offset(lv, (S212C6*), 0, "S212C5");
    check_field_offset(lv, s212c5f0, ABISELECT(96,60), "S212C5.s212c5f0");
    check_field_offset(lv, s212c5f1, ABISELECT(104,68), "S212C5.s212c5f1");
    check_field_offset(lv, s212c5f2, ABISELECT(112,72), "S212C5.s212c5f2");
    check_field_offset(lv, s212c5f3, ABISELECT(120,80), "S212C5.s212c5f3");
    check_field_offset(lv, s212c5f4, ABISELECT(136,92), "S212C5.s212c5f4");
    check_field_offset(lv, s212c5f5, ABISELECT(152,104), "S212C5.s212c5f5");
    check_field_offset(lv, s212c5f6, ABISELECT(160,108), "S212C5.s212c5f6");
    set_bf_and_test(lv, s212c5f7, ABISELECT(176,120), 0, 1, 1, "S212C5");
    set_bf_and_test(lv, s212c5f8, ABISELECT(176,120), 1, 1, 1, "S212C5");
    set_bf_and_test(lv, s212c5f9, ABISELECT(176,120), 2, 1, 1, "S212C5");
    set_bf_and_test(lv, s212c5f10, ABISELECT(176,120), 3, 1, 1, "S212C5");
    set_bf_and_test(lv, s212c5f11, ABISELECT(176,120), 4, 1, 1, "S212C5");
    check_field_offset(lv, s212c5f12, ABISELECT(180,124), "S212C5.s212c5f12");
    test_class_info(&lv, &cd_S212C5);
    dp->~S212C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS212C5(Test_S212C5, "S212C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S212C5C1Ev();
extern void _ZN6S212C5D1Ev();
Name_Map name_map_S212C5[] = {
  NSPAIR(_ZN6S212C5C1Ev),
  NSPAIR(_ZN6S212C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S212C6;
extern VTBL_ENTRY _ZTI6S212C6[];
extern  VTBL_ENTRY _ZTV6S212C6[];
static Base_Class bases_S212C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S212C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S212C5[];
extern void _ZN6S212C5D1Ev();
extern void _ZN6S212C5D0Ev();
extern void _ZN6S212C62v4Ev();
extern void _ZN6S212C62v5Ev();
extern void _ZN6S212C62v6Ev();
extern void _ZN6S212C62v7Ev();
extern void _ZN6S212C62v8Ev();
extern void _ZN6S212C62v9Ev();
extern void _ZN6S212C63v10Ev();
extern void _ZN6S212C63v11Ev();
extern void _ZN6S212C63v12Ev();
extern void _ZN6S212C63v13Ev();
extern void _ZN6S212C63v14Ev();
extern void _ZN6S212C63v15Ev();
extern void _ZN6S212C63v16Ev();
extern void _ZN6S212C63v17Ev();
extern void _ZN6S212C63v18Ev();
extern void _ZN6S212C63v19Ev();
extern void _ZN6S212C63v20Ev();
extern void _ZN6S212C63v21Ev();
extern void _ZN6S212C63v22Ev();
extern void _ZN6S212C63v23Ev();
extern void _ZN6S212C63v24Ev();
extern void _ZN6S212C63v25Ev();
extern void _ZN6S212C63v26Ev();
extern void _ZN6S212C63v27Ev();
extern void _ZN6S212C63v28Ev();
extern void _ZN6S212C63v29Ev();
extern void _ZN6S212C63v30Ev();
extern void _ZN6S212C63v31Ev();
extern void _ZN6S212C63v32Ev();
extern void _ZN6S212C63v33Ev();
extern void _ZN6S212C63v34Ev();
extern void _ZN6S212C63v35Ev();
extern void _ZN6S212C63v36Ev();
extern void _ZN6S212C63v37Ev();
extern void _ZN6S212C63v38Ev();
extern void _ZN6S212C63v39Ev();
extern void _ZN6S212C63v40Ev();
extern void _ZN6S212C63v41Ev();
extern void _ZN6S212C63v42Ev();
extern void _ZN6S212C63v43Ev();
extern void _ZN6S212C63v44Ev();
extern void _ZN6S212C63v45Ev();
extern void _ZN6S212C63v46Ev();
extern void _ZN6S212C63v47Ev();
extern void _ZN6S212C63v48Ev();
extern void _ZN6S212C63v49Ev();
extern void _ZN6S212C63v50Ev();
extern void _ZN6S212C63v51Ev();
extern void _ZN6S212C63v52Ev();
extern void _ZN6S212C63v53Ev();
extern void _ZN6S212C63v54Ev();
extern void _ZN6S212C63v55Ev();
extern void _ZN6S212C63v56Ev();
extern void _ZN6S212C63v57Ev();
extern void _ZN6S212C63v58Ev();
extern void _ZN6S212C63v59Ev();
extern void _ZN6S212C63v60Ev();
extern void _ZN6S212C63v61Ev();
extern void _ZN6S212C63v62Ev();
extern void _ZN6S212C63v63Ev();
extern void _ZN6S212C63v64Ev();
extern void _ZN6S212C63v65Ev();
extern void _ZN6S212C63v66Ev();
extern void _ZN6S212C63v67Ev();
extern void _ZN6S212C53v68Ev();
extern void _ZN6S212C53v69Ev();
extern void _ZN6S212C53v70Ev();
extern void _ZN6S212C53v71Ev();
extern void _ZN6S212C53v72Ev();
extern void _ZN6S212C53v73Ev();
extern void _ZN6S212C53v74Ev();
extern void _ZN6S212C53v75Ev();
extern void _ZN6S212C53v76Ev();
extern void _ZN6S212C53v77Ev();
extern void _ZN6S212C53v78Ev();
extern void _ZN6S212C53v79Ev();
extern void _ZN6S212C53v80Ev();
extern void _ZN6S212C53v81Ev();
extern void _ZN6S212C53v82Ev();
extern void _ZN6S212C53v83Ev();
extern void _ZN6S212C53v84Ev();
extern void _ZN6S212C53v85Ev();
extern void _ZN6S212C53v86Ev();
extern void _ZN6S212C53v87Ev();
extern void _ZN6S212C53v88Ev();
extern void _ZN6S212C53v89Ev();
static  VTBL_ENTRY vtc_S212C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S212C5[0]),
  (VTBL_ENTRY)&_ZN6S212C5D1Ev,
  (VTBL_ENTRY)&_ZN6S212C5D0Ev,
  (VTBL_ENTRY)&_ZN6S212C62v4Ev,
  (VTBL_ENTRY)&_ZN6S212C62v5Ev,
  (VTBL_ENTRY)&_ZN6S212C62v6Ev,
  (VTBL_ENTRY)&_ZN6S212C62v7Ev,
  (VTBL_ENTRY)&_ZN6S212C62v8Ev,
  (VTBL_ENTRY)&_ZN6S212C62v9Ev,
  (VTBL_ENTRY)&_ZN6S212C63v10Ev,
  (VTBL_ENTRY)&_ZN6S212C63v11Ev,
  (VTBL_ENTRY)&_ZN6S212C63v12Ev,
  (VTBL_ENTRY)&_ZN6S212C63v13Ev,
  (VTBL_ENTRY)&_ZN6S212C63v14Ev,
  (VTBL_ENTRY)&_ZN6S212C63v15Ev,
  (VTBL_ENTRY)&_ZN6S212C63v16Ev,
  (VTBL_ENTRY)&_ZN6S212C63v17Ev,
  (VTBL_ENTRY)&_ZN6S212C63v18Ev,
  (VTBL_ENTRY)&_ZN6S212C63v19Ev,
  (VTBL_ENTRY)&_ZN6S212C63v20Ev,
  (VTBL_ENTRY)&_ZN6S212C63v21Ev,
  (VTBL_ENTRY)&_ZN6S212C63v22Ev,
  (VTBL_ENTRY)&_ZN6S212C63v23Ev,
  (VTBL_ENTRY)&_ZN6S212C63v24Ev,
  (VTBL_ENTRY)&_ZN6S212C63v25Ev,
  (VTBL_ENTRY)&_ZN6S212C63v26Ev,
  (VTBL_ENTRY)&_ZN6S212C63v27Ev,
  (VTBL_ENTRY)&_ZN6S212C63v28Ev,
  (VTBL_ENTRY)&_ZN6S212C63v29Ev,
  (VTBL_ENTRY)&_ZN6S212C63v30Ev,
  (VTBL_ENTRY)&_ZN6S212C63v31Ev,
  (VTBL_ENTRY)&_ZN6S212C63v32Ev,
  (VTBL_ENTRY)&_ZN6S212C63v33Ev,
  (VTBL_ENTRY)&_ZN6S212C63v34Ev,
  (VTBL_ENTRY)&_ZN6S212C63v35Ev,
  (VTBL_ENTRY)&_ZN6S212C63v36Ev,
  (VTBL_ENTRY)&_ZN6S212C63v37Ev,
  (VTBL_ENTRY)&_ZN6S212C63v38Ev,
  (VTBL_ENTRY)&_ZN6S212C63v39Ev,
  (VTBL_ENTRY)&_ZN6S212C63v40Ev,
  (VTBL_ENTRY)&_ZN6S212C63v41Ev,
  (VTBL_ENTRY)&_ZN6S212C63v42Ev,
  (VTBL_ENTRY)&_ZN6S212C63v43Ev,
  (VTBL_ENTRY)&_ZN6S212C63v44Ev,
  (VTBL_ENTRY)&_ZN6S212C63v45Ev,
  (VTBL_ENTRY)&_ZN6S212C63v46Ev,
  (VTBL_ENTRY)&_ZN6S212C63v47Ev,
  (VTBL_ENTRY)&_ZN6S212C63v48Ev,
  (VTBL_ENTRY)&_ZN6S212C63v49Ev,
  (VTBL_ENTRY)&_ZN6S212C63v50Ev,
  (VTBL_ENTRY)&_ZN6S212C63v51Ev,
  (VTBL_ENTRY)&_ZN6S212C63v52Ev,
  (VTBL_ENTRY)&_ZN6S212C63v53Ev,
  (VTBL_ENTRY)&_ZN6S212C63v54Ev,
  (VTBL_ENTRY)&_ZN6S212C63v55Ev,
  (VTBL_ENTRY)&_ZN6S212C63v56Ev,
  (VTBL_ENTRY)&_ZN6S212C63v57Ev,
  (VTBL_ENTRY)&_ZN6S212C63v58Ev,
  (VTBL_ENTRY)&_ZN6S212C63v59Ev,
  (VTBL_ENTRY)&_ZN6S212C63v60Ev,
  (VTBL_ENTRY)&_ZN6S212C63v61Ev,
  (VTBL_ENTRY)&_ZN6S212C63v62Ev,
  (VTBL_ENTRY)&_ZN6S212C63v63Ev,
  (VTBL_ENTRY)&_ZN6S212C63v64Ev,
  (VTBL_ENTRY)&_ZN6S212C63v65Ev,
  (VTBL_ENTRY)&_ZN6S212C63v66Ev,
  (VTBL_ENTRY)&_ZN6S212C63v67Ev,
  (VTBL_ENTRY)&_ZN6S212C53v68Ev,
  (VTBL_ENTRY)&_ZN6S212C53v69Ev,
  (VTBL_ENTRY)&_ZN6S212C53v70Ev,
  (VTBL_ENTRY)&_ZN6S212C53v71Ev,
  (VTBL_ENTRY)&_ZN6S212C53v72Ev,
  (VTBL_ENTRY)&_ZN6S212C53v73Ev,
  (VTBL_ENTRY)&_ZN6S212C53v74Ev,
  (VTBL_ENTRY)&_ZN6S212C53v75Ev,
  (VTBL_ENTRY)&_ZN6S212C53v76Ev,
  (VTBL_ENTRY)&_ZN6S212C53v77Ev,
  (VTBL_ENTRY)&_ZN6S212C53v78Ev,
  (VTBL_ENTRY)&_ZN6S212C53v79Ev,
  (VTBL_ENTRY)&_ZN6S212C53v80Ev,
  (VTBL_ENTRY)&_ZN6S212C53v81Ev,
  (VTBL_ENTRY)&_ZN6S212C53v82Ev,
  (VTBL_ENTRY)&_ZN6S212C53v83Ev,
  (VTBL_ENTRY)&_ZN6S212C53v84Ev,
  (VTBL_ENTRY)&_ZN6S212C53v85Ev,
  (VTBL_ENTRY)&_ZN6S212C53v86Ev,
  (VTBL_ENTRY)&_ZN6S212C53v87Ev,
  (VTBL_ENTRY)&_ZN6S212C53v88Ev,
  (VTBL_ENTRY)&_ZN6S212C53v89Ev,
};
extern VTBL_ENTRY _ZTI6S212C5[];
extern  VTBL_ENTRY _ZTV6S212C5[];
Class_Descriptor cd_S212C5 = {  "S212C5", // class name
  bases_S212C5, 1,
  &(vtc_S212C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S212C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S212C5),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  S212C4  : S212C5 {
  unsigned int s212c4f0:1;
  unsigned int s212c4f1:1;
  unsigned int s212c4f2:1;
  ::S1503C28 s212c4f3;
  ::S1503C24 s212c4f4;
  ::S1503C18 s212c4f5;
  ::S1503C12 s212c4f6;
  int s212c4f7[3];
  virtual  ~S212C4(); // _ZN6S212C4D1Ev
  virtual void  v90(); // _ZN6S212C43v90Ev
  virtual void  v91(); // _ZN6S212C43v91Ev
  virtual void  v92(); // _ZN6S212C43v92Ev
  virtual void  v93(); // _ZN6S212C43v93Ev
  virtual void  v94(); // _ZN6S212C43v94Ev
  virtual void  v95(); // _ZN6S212C43v95Ev
  virtual void  v96(); // _ZN6S212C43v96Ev
  virtual void  v97(); // _ZN6S212C43v97Ev
  virtual void  v98(); // _ZN6S212C43v98Ev
  virtual void  v99(); // _ZN6S212C43v99Ev
  virtual void  v100(); // _ZN6S212C44v100Ev
  virtual void  v101(); // _ZN6S212C44v101Ev
  virtual void  v102(); // _ZN6S212C44v102Ev
  virtual void  v103(); // _ZN6S212C44v103Ev
  virtual void  v104(); // _ZN6S212C44v104Ev
  virtual void  v105(); // _ZN6S212C44v105Ev
  virtual void  v106(); // _ZN6S212C44v106Ev
  virtual void  v107(); // _ZN6S212C44v107Ev
  virtual void  v108(); // _ZN6S212C44v108Ev
  virtual void  v109(); // _ZN6S212C44v109Ev
  S212C4(); // tgen
};
//SIG(-1 S212C4) 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]}


 S212C4 ::~S212C4(){ note_dtor("S212C4", this);}
void  S212C4 ::v90(){vfunc_called(this, "_ZN6S212C43v90Ev");}
void  S212C4 ::v91(){vfunc_called(this, "_ZN6S212C43v91Ev");}
void  S212C4 ::v92(){vfunc_called(this, "_ZN6S212C43v92Ev");}
void  S212C4 ::v93(){vfunc_called(this, "_ZN6S212C43v93Ev");}
void  S212C4 ::v94(){vfunc_called(this, "_ZN6S212C43v94Ev");}
void  S212C4 ::v95(){vfunc_called(this, "_ZN6S212C43v95Ev");}
void  S212C4 ::v96(){vfunc_called(this, "_ZN6S212C43v96Ev");}
void  S212C4 ::v97(){vfunc_called(this, "_ZN6S212C43v97Ev");}
void  S212C4 ::v98(){vfunc_called(this, "_ZN6S212C43v98Ev");}
void  S212C4 ::v99(){vfunc_called(this, "_ZN6S212C43v99Ev");}
void  S212C4 ::v100(){vfunc_called(this, "_ZN6S212C44v100Ev");}
void  S212C4 ::v101(){vfunc_called(this, "_ZN6S212C44v101Ev");}
void  S212C4 ::v102(){vfunc_called(this, "_ZN6S212C44v102Ev");}
void  S212C4 ::v103(){vfunc_called(this, "_ZN6S212C44v103Ev");}
void  S212C4 ::v104(){vfunc_called(this, "_ZN6S212C44v104Ev");}
void  S212C4 ::v105(){vfunc_called(this, "_ZN6S212C44v105Ev");}
void  S212C4 ::v106(){vfunc_called(this, "_ZN6S212C44v106Ev");}
void  S212C4 ::v107(){vfunc_called(this, "_ZN6S212C44v107Ev");}
void  S212C4 ::v108(){vfunc_called(this, "_ZN6S212C44v108Ev");}
void  S212C4 ::v109(){vfunc_called(this, "_ZN6S212C44v109Ev");}
S212C4 ::S212C4(){ note_ctor("S212C4", this);} // tgen

static void Test_S212C4()
{
  extern Class_Descriptor cd_S212C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S212C4, buf);
    S212C4 *dp, &lv = *(dp=new (buf) S212C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S212C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S212C4)");
    check_base_class_offset(lv, (S212C6*)(S212C5*), 0, "S212C4");
    check_base_class_offset(lv, (S212C5*), 0, "S212C4");
    set_bf_and_test(lv, s212c4f0, ABISELECT(188,132), 0, 1, 1, "S212C4");
    set_bf_and_test(lv, s212c4f1, ABISELECT(188,132), 1, 1, 1, "S212C4");
    set_bf_and_test(lv, s212c4f2, ABISELECT(188,132), 2, 1, 1, "S212C4");
    check_field_offset(lv, s212c4f3, ABISELECT(192,136), "S212C4.s212c4f3");
    check_field_offset(lv, s212c4f4, ABISELECT(208,148), "S212C4.s212c4f4");
    check_field_offset(lv, s212c4f5, ABISELECT(224,160), "S212C4.s212c4f5");
    check_field_offset(lv, s212c4f6, ABISELECT(240,172), "S212C4.s212c4f6");
    check_field_offset(lv, s212c4f7, ABISELECT(256,184), "S212C4.s212c4f7");
    test_class_info(&lv, &cd_S212C4);
    dp->~S212C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS212C4(Test_S212C4, "S212C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S212C4C1Ev();
extern void _ZN6S212C4D1Ev();
Name_Map name_map_S212C4[] = {
  NSPAIR(_ZN6S212C4C1Ev),
  NSPAIR(_ZN6S212C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S212C6;
extern VTBL_ENTRY _ZTI6S212C6[];
extern  VTBL_ENTRY _ZTV6S212C6[];
extern Class_Descriptor cd_S212C5;
extern VTBL_ENTRY _ZTI6S212C5[];
extern  VTBL_ENTRY _ZTV6S212C5[];
static Base_Class bases_S212C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S212C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S212C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S212C4[];
extern void _ZN6S212C4D1Ev();
extern void _ZN6S212C4D0Ev();
extern void _ZN6S212C62v4Ev();
extern void _ZN6S212C62v5Ev();
extern void _ZN6S212C62v6Ev();
extern void _ZN6S212C62v7Ev();
extern void _ZN6S212C62v8Ev();
extern void _ZN6S212C62v9Ev();
extern void _ZN6S212C63v10Ev();
extern void _ZN6S212C63v11Ev();
extern void _ZN6S212C63v12Ev();
extern void _ZN6S212C63v13Ev();
extern void _ZN6S212C63v14Ev();
extern void _ZN6S212C63v15Ev();
extern void _ZN6S212C63v16Ev();
extern void _ZN6S212C63v17Ev();
extern void _ZN6S212C63v18Ev();
extern void _ZN6S212C63v19Ev();
extern void _ZN6S212C63v20Ev();
extern void _ZN6S212C63v21Ev();
extern void _ZN6S212C63v22Ev();
extern void _ZN6S212C63v23Ev();
extern void _ZN6S212C63v24Ev();
extern void _ZN6S212C63v25Ev();
extern void _ZN6S212C63v26Ev();
extern void _ZN6S212C63v27Ev();
extern void _ZN6S212C63v28Ev();
extern void _ZN6S212C63v29Ev();
extern void _ZN6S212C63v30Ev();
extern void _ZN6S212C63v31Ev();
extern void _ZN6S212C63v32Ev();
extern void _ZN6S212C63v33Ev();
extern void _ZN6S212C63v34Ev();
extern void _ZN6S212C63v35Ev();
extern void _ZN6S212C63v36Ev();
extern void _ZN6S212C63v37Ev();
extern void _ZN6S212C63v38Ev();
extern void _ZN6S212C63v39Ev();
extern void _ZN6S212C63v40Ev();
extern void _ZN6S212C63v41Ev();
extern void _ZN6S212C63v42Ev();
extern void _ZN6S212C63v43Ev();
extern void _ZN6S212C63v44Ev();
extern void _ZN6S212C63v45Ev();
extern void _ZN6S212C63v46Ev();
extern void _ZN6S212C63v47Ev();
extern void _ZN6S212C63v48Ev();
extern void _ZN6S212C63v49Ev();
extern void _ZN6S212C63v50Ev();
extern void _ZN6S212C63v51Ev();
extern void _ZN6S212C63v52Ev();
extern void _ZN6S212C63v53Ev();
extern void _ZN6S212C63v54Ev();
extern void _ZN6S212C63v55Ev();
extern void _ZN6S212C63v56Ev();
extern void _ZN6S212C63v57Ev();
extern void _ZN6S212C63v58Ev();
extern void _ZN6S212C63v59Ev();
extern void _ZN6S212C63v60Ev();
extern void _ZN6S212C63v61Ev();
extern void _ZN6S212C63v62Ev();
extern void _ZN6S212C63v63Ev();
extern void _ZN6S212C63v64Ev();
extern void _ZN6S212C63v65Ev();
extern void _ZN6S212C63v66Ev();
extern void _ZN6S212C63v67Ev();
extern void _ZN6S212C53v68Ev();
extern void _ZN6S212C53v69Ev();
extern void _ZN6S212C53v70Ev();
extern void _ZN6S212C53v71Ev();
extern void _ZN6S212C53v72Ev();
extern void _ZN6S212C53v73Ev();
extern void _ZN6S212C53v74Ev();
extern void _ZN6S212C53v75Ev();
extern void _ZN6S212C53v76Ev();
extern void _ZN6S212C53v77Ev();
extern void _ZN6S212C53v78Ev();
extern void _ZN6S212C53v79Ev();
extern void _ZN6S212C53v80Ev();
extern void _ZN6S212C53v81Ev();
extern void _ZN6S212C53v82Ev();
extern void _ZN6S212C53v83Ev();
extern void _ZN6S212C53v84Ev();
extern void _ZN6S212C53v85Ev();
extern void _ZN6S212C53v86Ev();
extern void _ZN6S212C53v87Ev();
extern void _ZN6S212C53v88Ev();
extern void _ZN6S212C53v89Ev();
extern void _ZN6S212C43v90Ev();
extern void _ZN6S212C43v91Ev();
extern void _ZN6S212C43v92Ev();
extern void _ZN6S212C43v93Ev();
extern void _ZN6S212C43v94Ev();
extern void _ZN6S212C43v95Ev();
extern void _ZN6S212C43v96Ev();
extern void _ZN6S212C43v97Ev();
extern void _ZN6S212C43v98Ev();
extern void _ZN6S212C43v99Ev();
extern void _ZN6S212C44v100Ev();
extern void _ZN6S212C44v101Ev();
extern void _ZN6S212C44v102Ev();
extern void _ZN6S212C44v103Ev();
extern void _ZN6S212C44v104Ev();
extern void _ZN6S212C44v105Ev();
extern void _ZN6S212C44v106Ev();
extern void _ZN6S212C44v107Ev();
extern void _ZN6S212C44v108Ev();
extern void _ZN6S212C44v109Ev();
static  VTBL_ENTRY vtc_S212C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S212C4[0]),
  (VTBL_ENTRY)&_ZN6S212C4D1Ev,
  (VTBL_ENTRY)&_ZN6S212C4D0Ev,
  (VTBL_ENTRY)&_ZN6S212C62v4Ev,
  (VTBL_ENTRY)&_ZN6S212C62v5Ev,
  (VTBL_ENTRY)&_ZN6S212C62v6Ev,
  (VTBL_ENTRY)&_ZN6S212C62v7Ev,
  (VTBL_ENTRY)&_ZN6S212C62v8Ev,
  (VTBL_ENTRY)&_ZN6S212C62v9Ev,
  (VTBL_ENTRY)&_ZN6S212C63v10Ev,
  (VTBL_ENTRY)&_ZN6S212C63v11Ev,
  (VTBL_ENTRY)&_ZN6S212C63v12Ev,
  (VTBL_ENTRY)&_ZN6S212C63v13Ev,
  (VTBL_ENTRY)&_ZN6S212C63v14Ev,
  (VTBL_ENTRY)&_ZN6S212C63v15Ev,
  (VTBL_ENTRY)&_ZN6S212C63v16Ev,
  (VTBL_ENTRY)&_ZN6S212C63v17Ev,
  (VTBL_ENTRY)&_ZN6S212C63v18Ev,
  (VTBL_ENTRY)&_ZN6S212C63v19Ev,
  (VTBL_ENTRY)&_ZN6S212C63v20Ev,
  (VTBL_ENTRY)&_ZN6S212C63v21Ev,
  (VTBL_ENTRY)&_ZN6S212C63v22Ev,
  (VTBL_ENTRY)&_ZN6S212C63v23Ev,
  (VTBL_ENTRY)&_ZN6S212C63v24Ev,
  (VTBL_ENTRY)&_ZN6S212C63v25Ev,
  (VTBL_ENTRY)&_ZN6S212C63v26Ev,
  (VTBL_ENTRY)&_ZN6S212C63v27Ev,
  (VTBL_ENTRY)&_ZN6S212C63v28Ev,
  (VTBL_ENTRY)&_ZN6S212C63v29Ev,
  (VTBL_ENTRY)&_ZN6S212C63v30Ev,
  (VTBL_ENTRY)&_ZN6S212C63v31Ev,
  (VTBL_ENTRY)&_ZN6S212C63v32Ev,
  (VTBL_ENTRY)&_ZN6S212C63v33Ev,
  (VTBL_ENTRY)&_ZN6S212C63v34Ev,
  (VTBL_ENTRY)&_ZN6S212C63v35Ev,
  (VTBL_ENTRY)&_ZN6S212C63v36Ev,
  (VTBL_ENTRY)&_ZN6S212C63v37Ev,
  (VTBL_ENTRY)&_ZN6S212C63v38Ev,
  (VTBL_ENTRY)&_ZN6S212C63v39Ev,
  (VTBL_ENTRY)&_ZN6S212C63v40Ev,
  (VTBL_ENTRY)&_ZN6S212C63v41Ev,
  (VTBL_ENTRY)&_ZN6S212C63v42Ev,
  (VTBL_ENTRY)&_ZN6S212C63v43Ev,
  (VTBL_ENTRY)&_ZN6S212C63v44Ev,
  (VTBL_ENTRY)&_ZN6S212C63v45Ev,
  (VTBL_ENTRY)&_ZN6S212C63v46Ev,
  (VTBL_ENTRY)&_ZN6S212C63v47Ev,
  (VTBL_ENTRY)&_ZN6S212C63v48Ev,
  (VTBL_ENTRY)&_ZN6S212C63v49Ev,
  (VTBL_ENTRY)&_ZN6S212C63v50Ev,
  (VTBL_ENTRY)&_ZN6S212C63v51Ev,
  (VTBL_ENTRY)&_ZN6S212C63v52Ev,
  (VTBL_ENTRY)&_ZN6S212C63v53Ev,
  (VTBL_ENTRY)&_ZN6S212C63v54Ev,
  (VTBL_ENTRY)&_ZN6S212C63v55Ev,
  (VTBL_ENTRY)&_ZN6S212C63v56Ev,
  (VTBL_ENTRY)&_ZN6S212C63v57Ev,
  (VTBL_ENTRY)&_ZN6S212C63v58Ev,
  (VTBL_ENTRY)&_ZN6S212C63v59Ev,
  (VTBL_ENTRY)&_ZN6S212C63v60Ev,
  (VTBL_ENTRY)&_ZN6S212C63v61Ev,
  (VTBL_ENTRY)&_ZN6S212C63v62Ev,
  (VTBL_ENTRY)&_ZN6S212C63v63Ev,
  (VTBL_ENTRY)&_ZN6S212C63v64Ev,
  (VTBL_ENTRY)&_ZN6S212C63v65Ev,
  (VTBL_ENTRY)&_ZN6S212C63v66Ev,
  (VTBL_ENTRY)&_ZN6S212C63v67Ev,
  (VTBL_ENTRY)&_ZN6S212C53v68Ev,
  (VTBL_ENTRY)&_ZN6S212C53v69Ev,
  (VTBL_ENTRY)&_ZN6S212C53v70Ev,
  (VTBL_ENTRY)&_ZN6S212C53v71Ev,
  (VTBL_ENTRY)&_ZN6S212C53v72Ev,
  (VTBL_ENTRY)&_ZN6S212C53v73Ev,
  (VTBL_ENTRY)&_ZN6S212C53v74Ev,
  (VTBL_ENTRY)&_ZN6S212C53v75Ev,
  (VTBL_ENTRY)&_ZN6S212C53v76Ev,
  (VTBL_ENTRY)&_ZN6S212C53v77Ev,
  (VTBL_ENTRY)&_ZN6S212C53v78Ev,
  (VTBL_ENTRY)&_ZN6S212C53v79Ev,
  (VTBL_ENTRY)&_ZN6S212C53v80Ev,
  (VTBL_ENTRY)&_ZN6S212C53v81Ev,
  (VTBL_ENTRY)&_ZN6S212C53v82Ev,
  (VTBL_ENTRY)&_ZN6S212C53v83Ev,
  (VTBL_ENTRY)&_ZN6S212C53v84Ev,
  (VTBL_ENTRY)&_ZN6S212C53v85Ev,
  (VTBL_ENTRY)&_ZN6S212C53v86Ev,
  (VTBL_ENTRY)&_ZN6S212C53v87Ev,
  (VTBL_ENTRY)&_ZN6S212C53v88Ev,
  (VTBL_ENTRY)&_ZN6S212C53v89Ev,
  (VTBL_ENTRY)&_ZN6S212C43v90Ev,
  (VTBL_ENTRY)&_ZN6S212C43v91Ev,
  (VTBL_ENTRY)&_ZN6S212C43v92Ev,
  (VTBL_ENTRY)&_ZN6S212C43v93Ev,
  (VTBL_ENTRY)&_ZN6S212C43v94Ev,
  (VTBL_ENTRY)&_ZN6S212C43v95Ev,
  (VTBL_ENTRY)&_ZN6S212C43v96Ev,
  (VTBL_ENTRY)&_ZN6S212C43v97Ev,
  (VTBL_ENTRY)&_ZN6S212C43v98Ev,
  (VTBL_ENTRY)&_ZN6S212C43v99Ev,
  (VTBL_ENTRY)&_ZN6S212C44v100Ev,
  (VTBL_ENTRY)&_ZN6S212C44v101Ev,
  (VTBL_ENTRY)&_ZN6S212C44v102Ev,
  (VTBL_ENTRY)&_ZN6S212C44v103Ev,
  (VTBL_ENTRY)&_ZN6S212C44v104Ev,
  (VTBL_ENTRY)&_ZN6S212C44v105Ev,
  (VTBL_ENTRY)&_ZN6S212C44v106Ev,
  (VTBL_ENTRY)&_ZN6S212C44v107Ev,
  (VTBL_ENTRY)&_ZN6S212C44v108Ev,
  (VTBL_ENTRY)&_ZN6S212C44v109Ev,
};
extern VTBL_ENTRY _ZTI6S212C4[];
extern  VTBL_ENTRY _ZTV6S212C4[];
Class_Descriptor cd_S212C4 = {  "S212C4", // class name
  bases_S212C4, 2,
  &(vtc_S212C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S212C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S212C4),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  S212C3  : S212C4 {
  ::S1503C5_nt s212c3f0;
  unsigned int s212c3f1:1;
  ::S1503C6_nt s212c3f2;
  virtual  ~S212C3(); // _ZN6S212C3D1Ev
  virtual void  v110(); // _ZN6S212C34v110Ev
  virtual void  v111(); // _ZN6S212C34v111Ev
  virtual void  v112(); // _ZN6S212C34v112Ev
  virtual void  v113(); // _ZN6S212C34v113Ev
  S212C3(); // tgen
};
//SIG(-1 S212C3) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S212C3 ::~S212C3(){ note_dtor("S212C3", this);}
void  S212C3 ::v110(){vfunc_called(this, "_ZN6S212C34v110Ev");}
void  S212C3 ::v111(){vfunc_called(this, "_ZN6S212C34v111Ev");}
void  S212C3 ::v112(){vfunc_called(this, "_ZN6S212C34v112Ev");}
void  S212C3 ::v113(){vfunc_called(this, "_ZN6S212C34v113Ev");}
S212C3 ::S212C3(){ note_ctor("S212C3", this);} // tgen

static void Test_S212C3()
{
  extern Class_Descriptor cd_S212C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S212C3, buf);
    S212C3 *dp, &lv = *(dp=new (buf) S212C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S212C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S212C3)");
    check_base_class_offset(lv, (S212C6*)(S212C5*)(S212C4*), 0, "S212C3");
    check_base_class_offset(lv, (S212C5*)(S212C4*), 0, "S212C3");
    check_base_class_offset(lv, (S212C4*), 0, "S212C3");
    check_field_offset(lv, s212c3f0, ABISELECT(268,196), "S212C3.s212c3f0");
    set_bf_and_test(lv, s212c3f1, ABISELECT(276,204), 0, 1, 1, "S212C3");
    check_field_offset(lv, s212c3f2, ABISELECT(280,208), "S212C3.s212c3f2");
    test_class_info(&lv, &cd_S212C3);
    dp->~S212C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS212C3(Test_S212C3, "S212C3", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S212C3C1Ev();
extern void _ZN6S212C3D1Ev();
Name_Map name_map_S212C3[] = {
  NSPAIR(_ZN6S212C3C1Ev),
  NSPAIR(_ZN6S212C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S212C6;
extern VTBL_ENTRY _ZTI6S212C6[];
extern  VTBL_ENTRY _ZTV6S212C6[];
extern Class_Descriptor cd_S212C5;
extern VTBL_ENTRY _ZTI6S212C5[];
extern  VTBL_ENTRY _ZTV6S212C5[];
extern Class_Descriptor cd_S212C4;
extern VTBL_ENTRY _ZTI6S212C4[];
extern  VTBL_ENTRY _ZTV6S212C4[];
static Base_Class bases_S212C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S212C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S212C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S212C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S212C3[];
extern void _ZN6S212C3D1Ev();
extern void _ZN6S212C3D0Ev();
extern void _ZN6S212C62v4Ev();
extern void _ZN6S212C62v5Ev();
extern void _ZN6S212C62v6Ev();
extern void _ZN6S212C62v7Ev();
extern void _ZN6S212C62v8Ev();
extern void _ZN6S212C62v9Ev();
extern void _ZN6S212C63v10Ev();
extern void _ZN6S212C63v11Ev();
extern void _ZN6S212C63v12Ev();
extern void _ZN6S212C63v13Ev();
extern void _ZN6S212C63v14Ev();
extern void _ZN6S212C63v15Ev();
extern void _ZN6S212C63v16Ev();
extern void _ZN6S212C63v17Ev();
extern void _ZN6S212C63v18Ev();
extern void _ZN6S212C63v19Ev();
extern void _ZN6S212C63v20Ev();
extern void _ZN6S212C63v21Ev();
extern void _ZN6S212C63v22Ev();
extern void _ZN6S212C63v23Ev();
extern void _ZN6S212C63v24Ev();
extern void _ZN6S212C63v25Ev();
extern void _ZN6S212C63v26Ev();
extern void _ZN6S212C63v27Ev();
extern void _ZN6S212C63v28Ev();
extern void _ZN6S212C63v29Ev();
extern void _ZN6S212C63v30Ev();
extern void _ZN6S212C63v31Ev();
extern void _ZN6S212C63v32Ev();
extern void _ZN6S212C63v33Ev();
extern void _ZN6S212C63v34Ev();
extern void _ZN6S212C63v35Ev();
extern void _ZN6S212C63v36Ev();
extern void _ZN6S212C63v37Ev();
extern void _ZN6S212C63v38Ev();
extern void _ZN6S212C63v39Ev();
extern void _ZN6S212C63v40Ev();
extern void _ZN6S212C63v41Ev();
extern void _ZN6S212C63v42Ev();
extern void _ZN6S212C63v43Ev();
extern void _ZN6S212C63v44Ev();
extern void _ZN6S212C63v45Ev();
extern void _ZN6S212C63v46Ev();
extern void _ZN6S212C63v47Ev();
extern void _ZN6S212C63v48Ev();
extern void _ZN6S212C63v49Ev();
extern void _ZN6S212C63v50Ev();
extern void _ZN6S212C63v51Ev();
extern void _ZN6S212C63v52Ev();
extern void _ZN6S212C63v53Ev();
extern void _ZN6S212C63v54Ev();
extern void _ZN6S212C63v55Ev();
extern void _ZN6S212C63v56Ev();
extern void _ZN6S212C63v57Ev();
extern void _ZN6S212C63v58Ev();
extern void _ZN6S212C63v59Ev();
extern void _ZN6S212C63v60Ev();
extern void _ZN6S212C63v61Ev();
extern void _ZN6S212C63v62Ev();
extern void _ZN6S212C63v63Ev();
extern void _ZN6S212C63v64Ev();
extern void _ZN6S212C63v65Ev();
extern void _ZN6S212C63v66Ev();
extern void _ZN6S212C63v67Ev();
extern void _ZN6S212C53v68Ev();
extern void _ZN6S212C53v69Ev();
extern void _ZN6S212C53v70Ev();
extern void _ZN6S212C53v71Ev();
extern void _ZN6S212C53v72Ev();
extern void _ZN6S212C53v73Ev();
extern void _ZN6S212C53v74Ev();
extern void _ZN6S212C53v75Ev();
extern void _ZN6S212C53v76Ev();
extern void _ZN6S212C53v77Ev();
extern void _ZN6S212C53v78Ev();
extern void _ZN6S212C53v79Ev();
extern void _ZN6S212C53v80Ev();
extern void _ZN6S212C53v81Ev();
extern void _ZN6S212C53v82Ev();
extern void _ZN6S212C53v83Ev();
extern void _ZN6S212C53v84Ev();
extern void _ZN6S212C53v85Ev();
extern void _ZN6S212C53v86Ev();
extern void _ZN6S212C53v87Ev();
extern void _ZN6S212C53v88Ev();
extern void _ZN6S212C53v89Ev();
extern void _ZN6S212C43v90Ev();
extern void _ZN6S212C43v91Ev();
extern void _ZN6S212C43v92Ev();
extern void _ZN6S212C43v93Ev();
extern void _ZN6S212C43v94Ev();
extern void _ZN6S212C43v95Ev();
extern void _ZN6S212C43v96Ev();
extern void _ZN6S212C43v97Ev();
extern void _ZN6S212C43v98Ev();
extern void _ZN6S212C43v99Ev();
extern void _ZN6S212C44v100Ev();
extern void _ZN6S212C44v101Ev();
extern void _ZN6S212C44v102Ev();
extern void _ZN6S212C44v103Ev();
extern void _ZN6S212C44v104Ev();
extern void _ZN6S212C44v105Ev();
extern void _ZN6S212C44v106Ev();
extern void _ZN6S212C44v107Ev();
extern void _ZN6S212C44v108Ev();
extern void _ZN6S212C44v109Ev();
extern void _ZN6S212C34v110Ev();
extern void _ZN6S212C34v111Ev();
extern void _ZN6S212C34v112Ev();
extern void _ZN6S212C34v113Ev();
static  VTBL_ENTRY vtc_S212C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S212C3[0]),
  (VTBL_ENTRY)&_ZN6S212C3D1Ev,
  (VTBL_ENTRY)&_ZN6S212C3D0Ev,
  (VTBL_ENTRY)&_ZN6S212C62v4Ev,
  (VTBL_ENTRY)&_ZN6S212C62v5Ev,
  (VTBL_ENTRY)&_ZN6S212C62v6Ev,
  (VTBL_ENTRY)&_ZN6S212C62v7Ev,
  (VTBL_ENTRY)&_ZN6S212C62v8Ev,
  (VTBL_ENTRY)&_ZN6S212C62v9Ev,
  (VTBL_ENTRY)&_ZN6S212C63v10Ev,
  (VTBL_ENTRY)&_ZN6S212C63v11Ev,
  (VTBL_ENTRY)&_ZN6S212C63v12Ev,
  (VTBL_ENTRY)&_ZN6S212C63v13Ev,
  (VTBL_ENTRY)&_ZN6S212C63v14Ev,
  (VTBL_ENTRY)&_ZN6S212C63v15Ev,
  (VTBL_ENTRY)&_ZN6S212C63v16Ev,
  (VTBL_ENTRY)&_ZN6S212C63v17Ev,
  (VTBL_ENTRY)&_ZN6S212C63v18Ev,
  (VTBL_ENTRY)&_ZN6S212C63v19Ev,
  (VTBL_ENTRY)&_ZN6S212C63v20Ev,
  (VTBL_ENTRY)&_ZN6S212C63v21Ev,
  (VTBL_ENTRY)&_ZN6S212C63v22Ev,
  (VTBL_ENTRY)&_ZN6S212C63v23Ev,
  (VTBL_ENTRY)&_ZN6S212C63v24Ev,
  (VTBL_ENTRY)&_ZN6S212C63v25Ev,
  (VTBL_ENTRY)&_ZN6S212C63v26Ev,
  (VTBL_ENTRY)&_ZN6S212C63v27Ev,
  (VTBL_ENTRY)&_ZN6S212C63v28Ev,
  (VTBL_ENTRY)&_ZN6S212C63v29Ev,
  (VTBL_ENTRY)&_ZN6S212C63v30Ev,
  (VTBL_ENTRY)&_ZN6S212C63v31Ev,
  (VTBL_ENTRY)&_ZN6S212C63v32Ev,
  (VTBL_ENTRY)&_ZN6S212C63v33Ev,
  (VTBL_ENTRY)&_ZN6S212C63v34Ev,
  (VTBL_ENTRY)&_ZN6S212C63v35Ev,
  (VTBL_ENTRY)&_ZN6S212C63v36Ev,
  (VTBL_ENTRY)&_ZN6S212C63v37Ev,
  (VTBL_ENTRY)&_ZN6S212C63v38Ev,
  (VTBL_ENTRY)&_ZN6S212C63v39Ev,
  (VTBL_ENTRY)&_ZN6S212C63v40Ev,
  (VTBL_ENTRY)&_ZN6S212C63v41Ev,
  (VTBL_ENTRY)&_ZN6S212C63v42Ev,
  (VTBL_ENTRY)&_ZN6S212C63v43Ev,
  (VTBL_ENTRY)&_ZN6S212C63v44Ev,
  (VTBL_ENTRY)&_ZN6S212C63v45Ev,
  (VTBL_ENTRY)&_ZN6S212C63v46Ev,
  (VTBL_ENTRY)&_ZN6S212C63v47Ev,
  (VTBL_ENTRY)&_ZN6S212C63v48Ev,
  (VTBL_ENTRY)&_ZN6S212C63v49Ev,
  (VTBL_ENTRY)&_ZN6S212C63v50Ev,
  (VTBL_ENTRY)&_ZN6S212C63v51Ev,
  (VTBL_ENTRY)&_ZN6S212C63v52Ev,
  (VTBL_ENTRY)&_ZN6S212C63v53Ev,
  (VTBL_ENTRY)&_ZN6S212C63v54Ev,
  (VTBL_ENTRY)&_ZN6S212C63v55Ev,
  (VTBL_ENTRY)&_ZN6S212C63v56Ev,
  (VTBL_ENTRY)&_ZN6S212C63v57Ev,
  (VTBL_ENTRY)&_ZN6S212C63v58Ev,
  (VTBL_ENTRY)&_ZN6S212C63v59Ev,
  (VTBL_ENTRY)&_ZN6S212C63v60Ev,
  (VTBL_ENTRY)&_ZN6S212C63v61Ev,
  (VTBL_ENTRY)&_ZN6S212C63v62Ev,
  (VTBL_ENTRY)&_ZN6S212C63v63Ev,
  (VTBL_ENTRY)&_ZN6S212C63v64Ev,
  (VTBL_ENTRY)&_ZN6S212C63v65Ev,
  (VTBL_ENTRY)&_ZN6S212C63v66Ev,
  (VTBL_ENTRY)&_ZN6S212C63v67Ev,
  (VTBL_ENTRY)&_ZN6S212C53v68Ev,
  (VTBL_ENTRY)&_ZN6S212C53v69Ev,
  (VTBL_ENTRY)&_ZN6S212C53v70Ev,
  (VTBL_ENTRY)&_ZN6S212C53v71Ev,
  (VTBL_ENTRY)&_ZN6S212C53v72Ev,
  (VTBL_ENTRY)&_ZN6S212C53v73Ev,
  (VTBL_ENTRY)&_ZN6S212C53v74Ev,
  (VTBL_ENTRY)&_ZN6S212C53v75Ev,
  (VTBL_ENTRY)&_ZN6S212C53v76Ev,
  (VTBL_ENTRY)&_ZN6S212C53v77Ev,
  (VTBL_ENTRY)&_ZN6S212C53v78Ev,
  (VTBL_ENTRY)&_ZN6S212C53v79Ev,
  (VTBL_ENTRY)&_ZN6S212C53v80Ev,
  (VTBL_ENTRY)&_ZN6S212C53v81Ev,
  (VTBL_ENTRY)&_ZN6S212C53v82Ev,
  (VTBL_ENTRY)&_ZN6S212C53v83Ev,
  (VTBL_ENTRY)&_ZN6S212C53v84Ev,
  (VTBL_ENTRY)&_ZN6S212C53v85Ev,
  (VTBL_ENTRY)&_ZN6S212C53v86Ev,
  (VTBL_ENTRY)&_ZN6S212C53v87Ev,
  (VTBL_ENTRY)&_ZN6S212C53v88Ev,
  (VTBL_ENTRY)&_ZN6S212C53v89Ev,
  (VTBL_ENTRY)&_ZN6S212C43v90Ev,
  (VTBL_ENTRY)&_ZN6S212C43v91Ev,
  (VTBL_ENTRY)&_ZN6S212C43v92Ev,
  (VTBL_ENTRY)&_ZN6S212C43v93Ev,
  (VTBL_ENTRY)&_ZN6S212C43v94Ev,
  (VTBL_ENTRY)&_ZN6S212C43v95Ev,
  (VTBL_ENTRY)&_ZN6S212C43v96Ev,
  (VTBL_ENTRY)&_ZN6S212C43v97Ev,
  (VTBL_ENTRY)&_ZN6S212C43v98Ev,
  (VTBL_ENTRY)&_ZN6S212C43v99Ev,
  (VTBL_ENTRY)&_ZN6S212C44v100Ev,
  (VTBL_ENTRY)&_ZN6S212C44v101Ev,
  (VTBL_ENTRY)&_ZN6S212C44v102Ev,
  (VTBL_ENTRY)&_ZN6S212C44v103Ev,
  (VTBL_ENTRY)&_ZN6S212C44v104Ev,
  (VTBL_ENTRY)&_ZN6S212C44v105Ev,
  (VTBL_ENTRY)&_ZN6S212C44v106Ev,
  (VTBL_ENTRY)&_ZN6S212C44v107Ev,
  (VTBL_ENTRY)&_ZN6S212C44v108Ev,
  (VTBL_ENTRY)&_ZN6S212C44v109Ev,
  (VTBL_ENTRY)&_ZN6S212C34v110Ev,
  (VTBL_ENTRY)&_ZN6S212C34v111Ev,
  (VTBL_ENTRY)&_ZN6S212C34v112Ev,
  (VTBL_ENTRY)&_ZN6S212C34v113Ev,
};
extern VTBL_ENTRY _ZTI6S212C3[];
extern  VTBL_ENTRY _ZTV6S212C3[];
Class_Descriptor cd_S212C3 = {  "S212C3", // class name
  bases_S212C3, 3,
  &(vtc_S212C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S212C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S212C3),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S212C2  : S212C3 {
  virtual  ~S212C2(); // _ZN6S212C2D1Ev
  virtual void  v114(); // _ZN6S212C24v114Ev
  virtual void  v115(); // _ZN6S212C24v115Ev
  S212C2(); // tgen
};
//SIG(-1 S212C2) 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 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2}


 S212C2 ::~S212C2(){ note_dtor("S212C2", this);}
void  S212C2 ::v114(){vfunc_called(this, "_ZN6S212C24v114Ev");}
void  S212C2 ::v115(){vfunc_called(this, "_ZN6S212C24v115Ev");}
S212C2 ::S212C2(){ note_ctor("S212C2", this);} // tgen

static void Test_S212C2()
{
  extern Class_Descriptor cd_S212C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S212C2, buf);
    S212C2 *dp, &lv = *(dp=new (buf) S212C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S212C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S212C2)");
    check_base_class_offset(lv, (S212C6*)(S212C5*)(S212C4*)(S212C3*), 0, "S212C2");
    check_base_class_offset(lv, (S212C5*)(S212C4*)(S212C3*), 0, "S212C2");
    check_base_class_offset(lv, (S212C4*)(S212C3*), 0, "S212C2");
    check_base_class_offset(lv, (S212C3*), 0, "S212C2");
    test_class_info(&lv, &cd_S212C2);
    dp->~S212C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS212C2(Test_S212C2, "S212C2", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S212C2C1Ev();
extern void _ZN6S212C2D1Ev();
Name_Map name_map_S212C2[] = {
  NSPAIR(_ZN6S212C2C1Ev),
  NSPAIR(_ZN6S212C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S212C6;
extern VTBL_ENTRY _ZTI6S212C6[];
extern  VTBL_ENTRY _ZTV6S212C6[];
extern Class_Descriptor cd_S212C5;
extern VTBL_ENTRY _ZTI6S212C5[];
extern  VTBL_ENTRY _ZTV6S212C5[];
extern Class_Descriptor cd_S212C4;
extern VTBL_ENTRY _ZTI6S212C4[];
extern  VTBL_ENTRY _ZTV6S212C4[];
extern Class_Descriptor cd_S212C3;
extern VTBL_ENTRY _ZTI6S212C3[];
extern  VTBL_ENTRY _ZTV6S212C3[];
static Base_Class bases_S212C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S212C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S212C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S212C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S212C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S212C2[];
extern void _ZN6S212C2D1Ev();
extern void _ZN6S212C2D0Ev();
extern void _ZN6S212C62v4Ev();
extern void _ZN6S212C62v5Ev();
extern void _ZN6S212C62v6Ev();
extern void _ZN6S212C62v7Ev();
extern void _ZN6S212C62v8Ev();
extern void _ZN6S212C62v9Ev();
extern void _ZN6S212C63v10Ev();
extern void _ZN6S212C63v11Ev();
extern void _ZN6S212C63v12Ev();
extern void _ZN6S212C63v13Ev();
extern void _ZN6S212C63v14Ev();
extern void _ZN6S212C63v15Ev();
extern void _ZN6S212C63v16Ev();
extern void _ZN6S212C63v17Ev();
extern void _ZN6S212C63v18Ev();
extern void _ZN6S212C63v19Ev();
extern void _ZN6S212C63v20Ev();
extern void _ZN6S212C63v21Ev();
extern void _ZN6S212C63v22Ev();
extern void _ZN6S212C63v23Ev();
extern void _ZN6S212C63v24Ev();
extern void _ZN6S212C63v25Ev();
extern void _ZN6S212C63v26Ev();
extern void _ZN6S212C63v27Ev();
extern void _ZN6S212C63v28Ev();
extern void _ZN6S212C63v29Ev();
extern void _ZN6S212C63v30Ev();
extern void _ZN6S212C63v31Ev();
extern void _ZN6S212C63v32Ev();
extern void _ZN6S212C63v33Ev();
extern void _ZN6S212C63v34Ev();
extern void _ZN6S212C63v35Ev();
extern void _ZN6S212C63v36Ev();
extern void _ZN6S212C63v37Ev();
extern void _ZN6S212C63v38Ev();
extern void _ZN6S212C63v39Ev();
extern void _ZN6S212C63v40Ev();
extern void _ZN6S212C63v41Ev();
extern void _ZN6S212C63v42Ev();
extern void _ZN6S212C63v43Ev();
extern void _ZN6S212C63v44Ev();
extern void _ZN6S212C63v45Ev();
extern void _ZN6S212C63v46Ev();
extern void _ZN6S212C63v47Ev();
extern void _ZN6S212C63v48Ev();
extern void _ZN6S212C63v49Ev();
extern void _ZN6S212C63v50Ev();
extern void _ZN6S212C63v51Ev();
extern void _ZN6S212C63v52Ev();
extern void _ZN6S212C63v53Ev();
extern void _ZN6S212C63v54Ev();
extern void _ZN6S212C63v55Ev();
extern void _ZN6S212C63v56Ev();
extern void _ZN6S212C63v57Ev();
extern void _ZN6S212C63v58Ev();
extern void _ZN6S212C63v59Ev();
extern void _ZN6S212C63v60Ev();
extern void _ZN6S212C63v61Ev();
extern void _ZN6S212C63v62Ev();
extern void _ZN6S212C63v63Ev();
extern void _ZN6S212C63v64Ev();
extern void _ZN6S212C63v65Ev();
extern void _ZN6S212C63v66Ev();
extern void _ZN6S212C63v67Ev();
extern void _ZN6S212C53v68Ev();
extern void _ZN6S212C53v69Ev();
extern void _ZN6S212C53v70Ev();
extern void _ZN6S212C53v71Ev();
extern void _ZN6S212C53v72Ev();
extern void _ZN6S212C53v73Ev();
extern void _ZN6S212C53v74Ev();
extern void _ZN6S212C53v75Ev();
extern void _ZN6S212C53v76Ev();
extern void _ZN6S212C53v77Ev();
extern void _ZN6S212C53v78Ev();
extern void _ZN6S212C53v79Ev();
extern void _ZN6S212C53v80Ev();
extern void _ZN6S212C53v81Ev();
extern void _ZN6S212C53v82Ev();
extern void _ZN6S212C53v83Ev();
extern void _ZN6S212C53v84Ev();
extern void _ZN6S212C53v85Ev();
extern void _ZN6S212C53v86Ev();
extern void _ZN6S212C53v87Ev();
extern void _ZN6S212C53v88Ev();
extern void _ZN6S212C53v89Ev();
extern void _ZN6S212C43v90Ev();
extern void _ZN6S212C43v91Ev();
extern void _ZN6S212C43v92Ev();
extern void _ZN6S212C43v93Ev();
extern void _ZN6S212C43v94Ev();
extern void _ZN6S212C43v95Ev();
extern void _ZN6S212C43v96Ev();
extern void _ZN6S212C43v97Ev();
extern void _ZN6S212C43v98Ev();
extern void _ZN6S212C43v99Ev();
extern void _ZN6S212C44v100Ev();
extern void _ZN6S212C44v101Ev();
extern void _ZN6S212C44v102Ev();
extern void _ZN6S212C44v103Ev();
extern void _ZN6S212C44v104Ev();
extern void _ZN6S212C44v105Ev();
extern void _ZN6S212C44v106Ev();
extern void _ZN6S212C44v107Ev();
extern void _ZN6S212C44v108Ev();
extern void _ZN6S212C44v109Ev();
extern void _ZN6S212C34v110Ev();
extern void _ZN6S212C34v111Ev();
extern void _ZN6S212C34v112Ev();
extern void _ZN6S212C34v113Ev();
extern void _ZN6S212C24v114Ev();
extern void _ZN6S212C24v115Ev();
static  VTBL_ENTRY vtc_S212C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S212C2[0]),
  (VTBL_ENTRY)&_ZN6S212C2D1Ev,
  (VTBL_ENTRY)&_ZN6S212C2D0Ev,
  (VTBL_ENTRY)&_ZN6S212C62v4Ev,
  (VTBL_ENTRY)&_ZN6S212C62v5Ev,
  (VTBL_ENTRY)&_ZN6S212C62v6Ev,
  (VTBL_ENTRY)&_ZN6S212C62v7Ev,
  (VTBL_ENTRY)&_ZN6S212C62v8Ev,
  (VTBL_ENTRY)&_ZN6S212C62v9Ev,
  (VTBL_ENTRY)&_ZN6S212C63v10Ev,
  (VTBL_ENTRY)&_ZN6S212C63v11Ev,
  (VTBL_ENTRY)&_ZN6S212C63v12Ev,
  (VTBL_ENTRY)&_ZN6S212C63v13Ev,
  (VTBL_ENTRY)&_ZN6S212C63v14Ev,
  (VTBL_ENTRY)&_ZN6S212C63v15Ev,
  (VTBL_ENTRY)&_ZN6S212C63v16Ev,
  (VTBL_ENTRY)&_ZN6S212C63v17Ev,
  (VTBL_ENTRY)&_ZN6S212C63v18Ev,
  (VTBL_ENTRY)&_ZN6S212C63v19Ev,
  (VTBL_ENTRY)&_ZN6S212C63v20Ev,
  (VTBL_ENTRY)&_ZN6S212C63v21Ev,
  (VTBL_ENTRY)&_ZN6S212C63v22Ev,
  (VTBL_ENTRY)&_ZN6S212C63v23Ev,
  (VTBL_ENTRY)&_ZN6S212C63v24Ev,
  (VTBL_ENTRY)&_ZN6S212C63v25Ev,
  (VTBL_ENTRY)&_ZN6S212C63v26Ev,
  (VTBL_ENTRY)&_ZN6S212C63v27Ev,
  (VTBL_ENTRY)&_ZN6S212C63v28Ev,
  (VTBL_ENTRY)&_ZN6S212C63v29Ev,
  (VTBL_ENTRY)&_ZN6S212C63v30Ev,
  (VTBL_ENTRY)&_ZN6S212C63v31Ev,
  (VTBL_ENTRY)&_ZN6S212C63v32Ev,
  (VTBL_ENTRY)&_ZN6S212C63v33Ev,
  (VTBL_ENTRY)&_ZN6S212C63v34Ev,
  (VTBL_ENTRY)&_ZN6S212C63v35Ev,
  (VTBL_ENTRY)&_ZN6S212C63v36Ev,
  (VTBL_ENTRY)&_ZN6S212C63v37Ev,
  (VTBL_ENTRY)&_ZN6S212C63v38Ev,
  (VTBL_ENTRY)&_ZN6S212C63v39Ev,
  (VTBL_ENTRY)&_ZN6S212C63v40Ev,
  (VTBL_ENTRY)&_ZN6S212C63v41Ev,
  (VTBL_ENTRY)&_ZN6S212C63v42Ev,
  (VTBL_ENTRY)&_ZN6S212C63v43Ev,
  (VTBL_ENTRY)&_ZN6S212C63v44Ev,
  (VTBL_ENTRY)&_ZN6S212C63v45Ev,
  (VTBL_ENTRY)&_ZN6S212C63v46Ev,
  (VTBL_ENTRY)&_ZN6S212C63v47Ev,
  (VTBL_ENTRY)&_ZN6S212C63v48Ev,
  (VTBL_ENTRY)&_ZN6S212C63v49Ev,
  (VTBL_ENTRY)&_ZN6S212C63v50Ev,
  (VTBL_ENTRY)&_ZN6S212C63v51Ev,
  (VTBL_ENTRY)&_ZN6S212C63v52Ev,
  (VTBL_ENTRY)&_ZN6S212C63v53Ev,
  (VTBL_ENTRY)&_ZN6S212C63v54Ev,
  (VTBL_ENTRY)&_ZN6S212C63v55Ev,
  (VTBL_ENTRY)&_ZN6S212C63v56Ev,
  (VTBL_ENTRY)&_ZN6S212C63v57Ev,
  (VTBL_ENTRY)&_ZN6S212C63v58Ev,
  (VTBL_ENTRY)&_ZN6S212C63v59Ev,
  (VTBL_ENTRY)&_ZN6S212C63v60Ev,
  (VTBL_ENTRY)&_ZN6S212C63v61Ev,
  (VTBL_ENTRY)&_ZN6S212C63v62Ev,
  (VTBL_ENTRY)&_ZN6S212C63v63Ev,
  (VTBL_ENTRY)&_ZN6S212C63v64Ev,
  (VTBL_ENTRY)&_ZN6S212C63v65Ev,
  (VTBL_ENTRY)&_ZN6S212C63v66Ev,
  (VTBL_ENTRY)&_ZN6S212C63v67Ev,
  (VTBL_ENTRY)&_ZN6S212C53v68Ev,
  (VTBL_ENTRY)&_ZN6S212C53v69Ev,
  (VTBL_ENTRY)&_ZN6S212C53v70Ev,
  (VTBL_ENTRY)&_ZN6S212C53v71Ev,
  (VTBL_ENTRY)&_ZN6S212C53v72Ev,
  (VTBL_ENTRY)&_ZN6S212C53v73Ev,
  (VTBL_ENTRY)&_ZN6S212C53v74Ev,
  (VTBL_ENTRY)&_ZN6S212C53v75Ev,
  (VTBL_ENTRY)&_ZN6S212C53v76Ev,
  (VTBL_ENTRY)&_ZN6S212C53v77Ev,
  (VTBL_ENTRY)&_ZN6S212C53v78Ev,
  (VTBL_ENTRY)&_ZN6S212C53v79Ev,
  (VTBL_ENTRY)&_ZN6S212C53v80Ev,
  (VTBL_ENTRY)&_ZN6S212C53v81Ev,
  (VTBL_ENTRY)&_ZN6S212C53v82Ev,
  (VTBL_ENTRY)&_ZN6S212C53v83Ev,
  (VTBL_ENTRY)&_ZN6S212C53v84Ev,
  (VTBL_ENTRY)&_ZN6S212C53v85Ev,
  (VTBL_ENTRY)&_ZN6S212C53v86Ev,
  (VTBL_ENTRY)&_ZN6S212C53v87Ev,
  (VTBL_ENTRY)&_ZN6S212C53v88Ev,
  (VTBL_ENTRY)&_ZN6S212C53v89Ev,
  (VTBL_ENTRY)&_ZN6S212C43v90Ev,
  (VTBL_ENTRY)&_ZN6S212C43v91Ev,
  (VTBL_ENTRY)&_ZN6S212C43v92Ev,
  (VTBL_ENTRY)&_ZN6S212C43v93Ev,
  (VTBL_ENTRY)&_ZN6S212C43v94Ev,
  (VTBL_ENTRY)&_ZN6S212C43v95Ev,
  (VTBL_ENTRY)&_ZN6S212C43v96Ev,
  (VTBL_ENTRY)&_ZN6S212C43v97Ev,
  (VTBL_ENTRY)&_ZN6S212C43v98Ev,
  (VTBL_ENTRY)&_ZN6S212C43v99Ev,
  (VTBL_ENTRY)&_ZN6S212C44v100Ev,
  (VTBL_ENTRY)&_ZN6S212C44v101Ev,
  (VTBL_ENTRY)&_ZN6S212C44v102Ev,
  (VTBL_ENTRY)&_ZN6S212C44v103Ev,
  (VTBL_ENTRY)&_ZN6S212C44v104Ev,
  (VTBL_ENTRY)&_ZN6S212C44v105Ev,
  (VTBL_ENTRY)&_ZN6S212C44v106Ev,
  (VTBL_ENTRY)&_ZN6S212C44v107Ev,
  (VTBL_ENTRY)&_ZN6S212C44v108Ev,
  (VTBL_ENTRY)&_ZN6S212C44v109Ev,
  (VTBL_ENTRY)&_ZN6S212C34v110Ev,
  (VTBL_ENTRY)&_ZN6S212C34v111Ev,
  (VTBL_ENTRY)&_ZN6S212C34v112Ev,
  (VTBL_ENTRY)&_ZN6S212C34v113Ev,
  (VTBL_ENTRY)&_ZN6S212C24v114Ev,
  (VTBL_ENTRY)&_ZN6S212C24v115Ev,
};
extern VTBL_ENTRY _ZTI6S212C2[];
extern  VTBL_ENTRY _ZTV6S212C2[];
Class_Descriptor cd_S212C2 = {  "S212C2", // class name
  bases_S212C2, 4,
  &(vtc_S212C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S212C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S212C2),116, //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  S212C1  : S212C2 {
  int s212c1f0[2];
  virtual  ~S212C1(); // _ZN6S212C1D1Ev
  virtual void  v1(); // _ZN6S212C12v1Ev
  virtual void  v2(); // _ZN6S212C12v2Ev
  virtual void  v3(); // _ZN6S212C12v3Ev
  S212C1(); // tgen
};
//SIG(1 S212C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v110 v111 v112 v113 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v114 v115} vd v1 v2 v3 Fi[2]}


 S212C1 ::~S212C1(){ note_dtor("S212C1", this);}
void  S212C1 ::v1(){vfunc_called(this, "_ZN6S212C12v1Ev");}
void  S212C1 ::v2(){vfunc_called(this, "_ZN6S212C12v2Ev");}
void  S212C1 ::v3(){vfunc_called(this, "_ZN6S212C12v3Ev");}
S212C1 ::S212C1(){ note_ctor("S212C1", this);} // tgen

static void Test_S212C1()
{
  extern Class_Descriptor cd_S212C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,58)];
    init_test(&cd_S212C1, buf);
    S212C1 *dp, &lv = *(dp=new (buf) S212C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,228), "sizeof(S212C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S212C1)");
    check_base_class_offset(lv, (S212C6*)(S212C5*)(S212C4*)(S212C3*)(S212C2*), 0, "S212C1");
    check_base_class_offset(lv, (S212C5*)(S212C4*)(S212C3*)(S212C2*), 0, "S212C1");
    check_base_class_offset(lv, (S212C4*)(S212C3*)(S212C2*), 0, "S212C1");
    check_base_class_offset(lv, (S212C3*)(S212C2*), 0, "S212C1");
    check_base_class_offset(lv, (S212C2*), 0, "S212C1");
    check_field_offset(lv, s212c1f0, ABISELECT(296,220), "S212C1.s212c1f0");
    test_class_info(&lv, &cd_S212C1);
    dp->~S212C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS212C1(Test_S212C1, "S212C1", ABISELECT(304,228));

#else // __cplusplus

extern void _ZN6S212C1C1Ev();
extern void _ZN6S212C1D1Ev();
Name_Map name_map_S212C1[] = {
  NSPAIR(_ZN6S212C1C1Ev),
  NSPAIR(_ZN6S212C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S212C6;
extern VTBL_ENTRY _ZTI6S212C6[];
extern  VTBL_ENTRY _ZTV6S212C6[];
extern Class_Descriptor cd_S212C5;
extern VTBL_ENTRY _ZTI6S212C5[];
extern  VTBL_ENTRY _ZTV6S212C5[];
extern Class_Descriptor cd_S212C4;
extern VTBL_ENTRY _ZTI6S212C4[];
extern  VTBL_ENTRY _ZTV6S212C4[];
extern Class_Descriptor cd_S212C3;
extern VTBL_ENTRY _ZTI6S212C3[];
extern  VTBL_ENTRY _ZTV6S212C3[];
extern Class_Descriptor cd_S212C2;
extern VTBL_ENTRY _ZTI6S212C2[];
extern  VTBL_ENTRY _ZTV6S212C2[];
static Base_Class bases_S212C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S212C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S212C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S212C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S212C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S212C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S212C1[];
extern void _ZN6S212C1D1Ev();
extern void _ZN6S212C1D0Ev();
extern void _ZN6S212C62v4Ev();
extern void _ZN6S212C62v5Ev();
extern void _ZN6S212C62v6Ev();
extern void _ZN6S212C62v7Ev();
extern void _ZN6S212C62v8Ev();
extern void _ZN6S212C62v9Ev();
extern void _ZN6S212C63v10Ev();
extern void _ZN6S212C63v11Ev();
extern void _ZN6S212C63v12Ev();
extern void _ZN6S212C63v13Ev();
extern void _ZN6S212C63v14Ev();
extern void _ZN6S212C63v15Ev();
extern void _ZN6S212C63v16Ev();
extern void _ZN6S212C63v17Ev();
extern void _ZN6S212C63v18Ev();
extern void _ZN6S212C63v19Ev();
extern void _ZN6S212C63v20Ev();
extern void _ZN6S212C63v21Ev();
extern void _ZN6S212C63v22Ev();
extern void _ZN6S212C63v23Ev();
extern void _ZN6S212C63v24Ev();
extern void _ZN6S212C63v25Ev();
extern void _ZN6S212C63v26Ev();
extern void _ZN6S212C63v27Ev();
extern void _ZN6S212C63v28Ev();
extern void _ZN6S212C63v29Ev();
extern void _ZN6S212C63v30Ev();
extern void _ZN6S212C63v31Ev();
extern void _ZN6S212C63v32Ev();
extern void _ZN6S212C63v33Ev();
extern void _ZN6S212C63v34Ev();
extern void _ZN6S212C63v35Ev();
extern void _ZN6S212C63v36Ev();
extern void _ZN6S212C63v37Ev();
extern void _ZN6S212C63v38Ev();
extern void _ZN6S212C63v39Ev();
extern void _ZN6S212C63v40Ev();
extern void _ZN6S212C63v41Ev();
extern void _ZN6S212C63v42Ev();
extern void _ZN6S212C63v43Ev();
extern void _ZN6S212C63v44Ev();
extern void _ZN6S212C63v45Ev();
extern void _ZN6S212C63v46Ev();
extern void _ZN6S212C63v47Ev();
extern void _ZN6S212C63v48Ev();
extern void _ZN6S212C63v49Ev();
extern void _ZN6S212C63v50Ev();
extern void _ZN6S212C63v51Ev();
extern void _ZN6S212C63v52Ev();
extern void _ZN6S212C63v53Ev();
extern void _ZN6S212C63v54Ev();
extern void _ZN6S212C63v55Ev();
extern void _ZN6S212C63v56Ev();
extern void _ZN6S212C63v57Ev();
extern void _ZN6S212C63v58Ev();
extern void _ZN6S212C63v59Ev();
extern void _ZN6S212C63v60Ev();
extern void _ZN6S212C63v61Ev();
extern void _ZN6S212C63v62Ev();
extern void _ZN6S212C63v63Ev();
extern void _ZN6S212C63v64Ev();
extern void _ZN6S212C63v65Ev();
extern void _ZN6S212C63v66Ev();
extern void _ZN6S212C63v67Ev();
extern void _ZN6S212C53v68Ev();
extern void _ZN6S212C53v69Ev();
extern void _ZN6S212C53v70Ev();
extern void _ZN6S212C53v71Ev();
extern void _ZN6S212C53v72Ev();
extern void _ZN6S212C53v73Ev();
extern void _ZN6S212C53v74Ev();
extern void _ZN6S212C53v75Ev();
extern void _ZN6S212C53v76Ev();
extern void _ZN6S212C53v77Ev();
extern void _ZN6S212C53v78Ev();
extern void _ZN6S212C53v79Ev();
extern void _ZN6S212C53v80Ev();
extern void _ZN6S212C53v81Ev();
extern void _ZN6S212C53v82Ev();
extern void _ZN6S212C53v83Ev();
extern void _ZN6S212C53v84Ev();
extern void _ZN6S212C53v85Ev();
extern void _ZN6S212C53v86Ev();
extern void _ZN6S212C53v87Ev();
extern void _ZN6S212C53v88Ev();
extern void _ZN6S212C53v89Ev();
extern void _ZN6S212C43v90Ev();
extern void _ZN6S212C43v91Ev();
extern void _ZN6S212C43v92Ev();
extern void _ZN6S212C43v93Ev();
extern void _ZN6S212C43v94Ev();
extern void _ZN6S212C43v95Ev();
extern void _ZN6S212C43v96Ev();
extern void _ZN6S212C43v97Ev();
extern void _ZN6S212C43v98Ev();
extern void _ZN6S212C43v99Ev();
extern void _ZN6S212C44v100Ev();
extern void _ZN6S212C44v101Ev();
extern void _ZN6S212C44v102Ev();
extern void _ZN6S212C44v103Ev();
extern void _ZN6S212C44v104Ev();
extern void _ZN6S212C44v105Ev();
extern void _ZN6S212C44v106Ev();
extern void _ZN6S212C44v107Ev();
extern void _ZN6S212C44v108Ev();
extern void _ZN6S212C44v109Ev();
extern void _ZN6S212C34v110Ev();
extern void _ZN6S212C34v111Ev();
extern void _ZN6S212C34v112Ev();
extern void _ZN6S212C34v113Ev();
extern void _ZN6S212C24v114Ev();
extern void _ZN6S212C24v115Ev();
extern void _ZN6S212C12v1Ev();
extern void _ZN6S212C12v2Ev();
extern void _ZN6S212C12v3Ev();
static  VTBL_ENTRY vtc_S212C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S212C1[0]),
  (VTBL_ENTRY)&_ZN6S212C1D1Ev,
  (VTBL_ENTRY)&_ZN6S212C1D0Ev,
  (VTBL_ENTRY)&_ZN6S212C62v4Ev,
  (VTBL_ENTRY)&_ZN6S212C62v5Ev,
  (VTBL_ENTRY)&_ZN6S212C62v6Ev,
  (VTBL_ENTRY)&_ZN6S212C62v7Ev,
  (VTBL_ENTRY)&_ZN6S212C62v8Ev,
  (VTBL_ENTRY)&_ZN6S212C62v9Ev,
  (VTBL_ENTRY)&_ZN6S212C63v10Ev,
  (VTBL_ENTRY)&_ZN6S212C63v11Ev,
  (VTBL_ENTRY)&_ZN6S212C63v12Ev,
  (VTBL_ENTRY)&_ZN6S212C63v13Ev,
  (VTBL_ENTRY)&_ZN6S212C63v14Ev,
  (VTBL_ENTRY)&_ZN6S212C63v15Ev,
  (VTBL_ENTRY)&_ZN6S212C63v16Ev,
  (VTBL_ENTRY)&_ZN6S212C63v17Ev,
  (VTBL_ENTRY)&_ZN6S212C63v18Ev,
  (VTBL_ENTRY)&_ZN6S212C63v19Ev,
  (VTBL_ENTRY)&_ZN6S212C63v20Ev,
  (VTBL_ENTRY)&_ZN6S212C63v21Ev,
  (VTBL_ENTRY)&_ZN6S212C63v22Ev,
  (VTBL_ENTRY)&_ZN6S212C63v23Ev,
  (VTBL_ENTRY)&_ZN6S212C63v24Ev,
  (VTBL_ENTRY)&_ZN6S212C63v25Ev,
  (VTBL_ENTRY)&_ZN6S212C63v26Ev,
  (VTBL_ENTRY)&_ZN6S212C63v27Ev,
  (VTBL_ENTRY)&_ZN6S212C63v28Ev,
  (VTBL_ENTRY)&_ZN6S212C63v29Ev,
  (VTBL_ENTRY)&_ZN6S212C63v30Ev,
  (VTBL_ENTRY)&_ZN6S212C63v31Ev,
  (VTBL_ENTRY)&_ZN6S212C63v32Ev,
  (VTBL_ENTRY)&_ZN6S212C63v33Ev,
  (VTBL_ENTRY)&_ZN6S212C63v34Ev,
  (VTBL_ENTRY)&_ZN6S212C63v35Ev,
  (VTBL_ENTRY)&_ZN6S212C63v36Ev,
  (VTBL_ENTRY)&_ZN6S212C63v37Ev,
  (VTBL_ENTRY)&_ZN6S212C63v38Ev,
  (VTBL_ENTRY)&_ZN6S212C63v39Ev,
  (VTBL_ENTRY)&_ZN6S212C63v40Ev,
  (VTBL_ENTRY)&_ZN6S212C63v41Ev,
  (VTBL_ENTRY)&_ZN6S212C63v42Ev,
  (VTBL_ENTRY)&_ZN6S212C63v43Ev,
  (VTBL_ENTRY)&_ZN6S212C63v44Ev,
  (VTBL_ENTRY)&_ZN6S212C63v45Ev,
  (VTBL_ENTRY)&_ZN6S212C63v46Ev,
  (VTBL_ENTRY)&_ZN6S212C63v47Ev,
  (VTBL_ENTRY)&_ZN6S212C63v48Ev,
  (VTBL_ENTRY)&_ZN6S212C63v49Ev,
  (VTBL_ENTRY)&_ZN6S212C63v50Ev,
  (VTBL_ENTRY)&_ZN6S212C63v51Ev,
  (VTBL_ENTRY)&_ZN6S212C63v52Ev,
  (VTBL_ENTRY)&_ZN6S212C63v53Ev,
  (VTBL_ENTRY)&_ZN6S212C63v54Ev,
  (VTBL_ENTRY)&_ZN6S212C63v55Ev,
  (VTBL_ENTRY)&_ZN6S212C63v56Ev,
  (VTBL_ENTRY)&_ZN6S212C63v57Ev,
  (VTBL_ENTRY)&_ZN6S212C63v58Ev,
  (VTBL_ENTRY)&_ZN6S212C63v59Ev,
  (VTBL_ENTRY)&_ZN6S212C63v60Ev,
  (VTBL_ENTRY)&_ZN6S212C63v61Ev,
  (VTBL_ENTRY)&_ZN6S212C63v62Ev,
  (VTBL_ENTRY)&_ZN6S212C63v63Ev,
  (VTBL_ENTRY)&_ZN6S212C63v64Ev,
  (VTBL_ENTRY)&_ZN6S212C63v65Ev,
  (VTBL_ENTRY)&_ZN6S212C63v66Ev,
  (VTBL_ENTRY)&_ZN6S212C63v67Ev,
  (VTBL_ENTRY)&_ZN6S212C53v68Ev,
  (VTBL_ENTRY)&_ZN6S212C53v69Ev,
  (VTBL_ENTRY)&_ZN6S212C53v70Ev,
  (VTBL_ENTRY)&_ZN6S212C53v71Ev,
  (VTBL_ENTRY)&_ZN6S212C53v72Ev,
  (VTBL_ENTRY)&_ZN6S212C53v73Ev,
  (VTBL_ENTRY)&_ZN6S212C53v74Ev,
  (VTBL_ENTRY)&_ZN6S212C53v75Ev,
  (VTBL_ENTRY)&_ZN6S212C53v76Ev,
  (VTBL_ENTRY)&_ZN6S212C53v77Ev,
  (VTBL_ENTRY)&_ZN6S212C53v78Ev,
  (VTBL_ENTRY)&_ZN6S212C53v79Ev,
  (VTBL_ENTRY)&_ZN6S212C53v80Ev,
  (VTBL_ENTRY)&_ZN6S212C53v81Ev,
  (VTBL_ENTRY)&_ZN6S212C53v82Ev,
  (VTBL_ENTRY)&_ZN6S212C53v83Ev,
  (VTBL_ENTRY)&_ZN6S212C53v84Ev,
  (VTBL_ENTRY)&_ZN6S212C53v85Ev,
  (VTBL_ENTRY)&_ZN6S212C53v86Ev,
  (VTBL_ENTRY)&_ZN6S212C53v87Ev,
  (VTBL_ENTRY)&_ZN6S212C53v88Ev,
  (VTBL_ENTRY)&_ZN6S212C53v89Ev,
  (VTBL_ENTRY)&_ZN6S212C43v90Ev,
  (VTBL_ENTRY)&_ZN6S212C43v91Ev,
  (VTBL_ENTRY)&_ZN6S212C43v92Ev,
  (VTBL_ENTRY)&_ZN6S212C43v93Ev,
  (VTBL_ENTRY)&_ZN6S212C43v94Ev,
  (VTBL_ENTRY)&_ZN6S212C43v95Ev,
  (VTBL_ENTRY)&_ZN6S212C43v96Ev,
  (VTBL_ENTRY)&_ZN6S212C43v97Ev,
  (VTBL_ENTRY)&_ZN6S212C43v98Ev,
  (VTBL_ENTRY)&_ZN6S212C43v99Ev,
  (VTBL_ENTRY)&_ZN6S212C44v100Ev,
  (VTBL_ENTRY)&_ZN6S212C44v101Ev,
  (VTBL_ENTRY)&_ZN6S212C44v102Ev,
  (VTBL_ENTRY)&_ZN6S212C44v103Ev,
  (VTBL_ENTRY)&_ZN6S212C44v104Ev,
  (VTBL_ENTRY)&_ZN6S212C44v105Ev,
  (VTBL_ENTRY)&_ZN6S212C44v106Ev,
  (VTBL_ENTRY)&_ZN6S212C44v107Ev,
  (VTBL_ENTRY)&_ZN6S212C44v108Ev,
  (VTBL_ENTRY)&_ZN6S212C44v109Ev,
  (VTBL_ENTRY)&_ZN6S212C34v110Ev,
  (VTBL_ENTRY)&_ZN6S212C34v111Ev,
  (VTBL_ENTRY)&_ZN6S212C34v112Ev,
  (VTBL_ENTRY)&_ZN6S212C34v113Ev,
  (VTBL_ENTRY)&_ZN6S212C24v114Ev,
  (VTBL_ENTRY)&_ZN6S212C24v115Ev,
  (VTBL_ENTRY)&_ZN6S212C12v1Ev,
  (VTBL_ENTRY)&_ZN6S212C12v2Ev,
  (VTBL_ENTRY)&_ZN6S212C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S212C1[];
extern  VTBL_ENTRY _ZTV6S212C1[];
Class_Descriptor cd_S212C1 = {  "S212C1", // class name
  bases_S212C1, 5,
  &(vtc_S212C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,228), // object size
  NSPAIRA(_ZTI6S212C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S212C1),119, //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  S214C6  {
  int s214c6f0;
  __tsi64 s214c6f1;
  void *s214c6f2[4];
  int s214c6f3[2];
  void *s214c6f4;
  ::S1503C5_nt s214c6f5;
  void *s214c6f6[2];
  virtual  ~S214C6(); // _ZN6S214C6D1Ev
  virtual void  v4(); // _ZN6S214C62v4Ev
  virtual void  v5(); // _ZN6S214C62v5Ev
  virtual void  v6(); // _ZN6S214C62v6Ev
  virtual void  v7(); // _ZN6S214C62v7Ev
  virtual void  v8(); // _ZN6S214C62v8Ev
  virtual void  v9(); // _ZN6S214C62v9Ev
  virtual void  v10(); // _ZN6S214C63v10Ev
  virtual void  v11(); // _ZN6S214C63v11Ev
  virtual void  v12(); // _ZN6S214C63v12Ev
  virtual void  v13(); // _ZN6S214C63v13Ev
  virtual void  v14(); // _ZN6S214C63v14Ev
  virtual void  v15(); // _ZN6S214C63v15Ev
  virtual void  v16(); // _ZN6S214C63v16Ev
  virtual void  v17(); // _ZN6S214C63v17Ev
  virtual void  v18(); // _ZN6S214C63v18Ev
  virtual void  v19(); // _ZN6S214C63v19Ev
  virtual void  v20(); // _ZN6S214C63v20Ev
  virtual void  v21(); // _ZN6S214C63v21Ev
  virtual void  v22(); // _ZN6S214C63v22Ev
  virtual void  v23(); // _ZN6S214C63v23Ev
  virtual void  v24(); // _ZN6S214C63v24Ev
  virtual void  v25(); // _ZN6S214C63v25Ev
  virtual void  v26(); // _ZN6S214C63v26Ev
  virtual void  v27(); // _ZN6S214C63v27Ev
  virtual void  v28(); // _ZN6S214C63v28Ev
  virtual void  v29(); // _ZN6S214C63v29Ev
  virtual void  v30(); // _ZN6S214C63v30Ev
  virtual void  v31(); // _ZN6S214C63v31Ev
  virtual void  v32(); // _ZN6S214C63v32Ev
  virtual void  v33(); // _ZN6S214C63v33Ev
  virtual void  v34(); // _ZN6S214C63v34Ev
  virtual void  v35(); // _ZN6S214C63v35Ev
  virtual void  v36(); // _ZN6S214C63v36Ev
  virtual void  v37(); // _ZN6S214C63v37Ev
  virtual void  v38(); // _ZN6S214C63v38Ev
  virtual void  v39(); // _ZN6S214C63v39Ev
  virtual void  v40(); // _ZN6S214C63v40Ev
  virtual void  v41(); // _ZN6S214C63v41Ev
  virtual void  v42(); // _ZN6S214C63v42Ev
  virtual void  v43(); // _ZN6S214C63v43Ev
  virtual void  v44(); // _ZN6S214C63v44Ev
  virtual void  v45(); // _ZN6S214C63v45Ev
  virtual void  v46(); // _ZN6S214C63v46Ev
  virtual void  v47(); // _ZN6S214C63v47Ev
  virtual void  v48(); // _ZN6S214C63v48Ev
  virtual void  v49(); // _ZN6S214C63v49Ev
  virtual void  v50(); // _ZN6S214C63v50Ev
  virtual void  v51(); // _ZN6S214C63v51Ev
  virtual void  v52(); // _ZN6S214C63v52Ev
  virtual void  v53(); // _ZN6S214C63v53Ev
  virtual void  v54(); // _ZN6S214C63v54Ev
  virtual void  v55(); // _ZN6S214C63v55Ev
  virtual void  v56(); // _ZN6S214C63v56Ev
  virtual void  v57(); // _ZN6S214C63v57Ev
  virtual void  v58(); // _ZN6S214C63v58Ev
  virtual void  v59(); // _ZN6S214C63v59Ev
  virtual void  v60(); // _ZN6S214C63v60Ev
  virtual void  v61(); // _ZN6S214C63v61Ev
  virtual void  v62(); // _ZN6S214C63v62Ev
  virtual void  v63(); // _ZN6S214C63v63Ev
  virtual void  v64(); // _ZN6S214C63v64Ev
  virtual void  v65(); // _ZN6S214C63v65Ev
  virtual void  v66(); // _ZN6S214C63v66Ev
  virtual void  v67(); // _ZN6S214C63v67Ev
  S214C6(); // tgen
};
//SIG(-1 S214C6) 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]}


 S214C6 ::~S214C6(){ note_dtor("S214C6", this);}
void  S214C6 ::v4(){vfunc_called(this, "_ZN6S214C62v4Ev");}
void  S214C6 ::v5(){vfunc_called(this, "_ZN6S214C62v5Ev");}
void  S214C6 ::v6(){vfunc_called(this, "_ZN6S214C62v6Ev");}
void  S214C6 ::v7(){vfunc_called(this, "_ZN6S214C62v7Ev");}
void  S214C6 ::v8(){vfunc_called(this, "_ZN6S214C62v8Ev");}
void  S214C6 ::v9(){vfunc_called(this, "_ZN6S214C62v9Ev");}
void  S214C6 ::v10(){vfunc_called(this, "_ZN6S214C63v10Ev");}
void  S214C6 ::v11(){vfunc_called(this, "_ZN6S214C63v11Ev");}
void  S214C6 ::v12(){vfunc_called(this, "_ZN6S214C63v12Ev");}
void  S214C6 ::v13(){vfunc_called(this, "_ZN6S214C63v13Ev");}
void  S214C6 ::v14(){vfunc_called(this, "_ZN6S214C63v14Ev");}
void  S214C6 ::v15(){vfunc_called(this, "_ZN6S214C63v15Ev");}
void  S214C6 ::v16(){vfunc_called(this, "_ZN6S214C63v16Ev");}
void  S214C6 ::v17(){vfunc_called(this, "_ZN6S214C63v17Ev");}
void  S214C6 ::v18(){vfunc_called(this, "_ZN6S214C63v18Ev");}
void  S214C6 ::v19(){vfunc_called(this, "_ZN6S214C63v19Ev");}
void  S214C6 ::v20(){vfunc_called(this, "_ZN6S214C63v20Ev");}
void  S214C6 ::v21(){vfunc_called(this, "_ZN6S214C63v21Ev");}
void  S214C6 ::v22(){vfunc_called(this, "_ZN6S214C63v22Ev");}
void  S214C6 ::v23(){vfunc_called(this, "_ZN6S214C63v23Ev");}
void  S214C6 ::v24(){vfunc_called(this, "_ZN6S214C63v24Ev");}
void  S214C6 ::v25(){vfunc_called(this, "_ZN6S214C63v25Ev");}
void  S214C6 ::v26(){vfunc_called(this, "_ZN6S214C63v26Ev");}
void  S214C6 ::v27(){vfunc_called(this, "_ZN6S214C63v27Ev");}
void  S214C6 ::v28(){vfunc_called(this, "_ZN6S214C63v28Ev");}
void  S214C6 ::v29(){vfunc_called(this, "_ZN6S214C63v29Ev");}
void  S214C6 ::v30(){vfunc_called(this, "_ZN6S214C63v30Ev");}
void  S214C6 ::v31(){vfunc_called(this, "_ZN6S214C63v31Ev");}
void  S214C6 ::v32(){vfunc_called(this, "_ZN6S214C63v32Ev");}
void  S214C6 ::v33(){vfunc_called(this, "_ZN6S214C63v33Ev");}
void  S214C6 ::v34(){vfunc_called(this, "_ZN6S214C63v34Ev");}
void  S214C6 ::v35(){vfunc_called(this, "_ZN6S214C63v35Ev");}
void  S214C6 ::v36(){vfunc_called(this, "_ZN6S214C63v36Ev");}
void  S214C6 ::v37(){vfunc_called(this, "_ZN6S214C63v37Ev");}
void  S214C6 ::v38(){vfunc_called(this, "_ZN6S214C63v38Ev");}
void  S214C6 ::v39(){vfunc_called(this, "_ZN6S214C63v39Ev");}
void  S214C6 ::v40(){vfunc_called(this, "_ZN6S214C63v40Ev");}
void  S214C6 ::v41(){vfunc_called(this, "_ZN6S214C63v41Ev");}
void  S214C6 ::v42(){vfunc_called(this, "_ZN6S214C63v42Ev");}
void  S214C6 ::v43(){vfunc_called(this, "_ZN6S214C63v43Ev");}
void  S214C6 ::v44(){vfunc_called(this, "_ZN6S214C63v44Ev");}
void  S214C6 ::v45(){vfunc_called(this, "_ZN6S214C63v45Ev");}
void  S214C6 ::v46(){vfunc_called(this, "_ZN6S214C63v46Ev");}
void  S214C6 ::v47(){vfunc_called(this, "_ZN6S214C63v47Ev");}
void  S214C6 ::v48(){vfunc_called(this, "_ZN6S214C63v48Ev");}
void  S214C6 ::v49(){vfunc_called(this, "_ZN6S214C63v49Ev");}
void  S214C6 ::v50(){vfunc_called(this, "_ZN6S214C63v50Ev");}
void  S214C6 ::v51(){vfunc_called(this, "_ZN6S214C63v51Ev");}
void  S214C6 ::v52(){vfunc_called(this, "_ZN6S214C63v52Ev");}
void  S214C6 ::v53(){vfunc_called(this, "_ZN6S214C63v53Ev");}
void  S214C6 ::v54(){vfunc_called(this, "_ZN6S214C63v54Ev");}
void  S214C6 ::v55(){vfunc_called(this, "_ZN6S214C63v55Ev");}
void  S214C6 ::v56(){vfunc_called(this, "_ZN6S214C63v56Ev");}
void  S214C6 ::v57(){vfunc_called(this, "_ZN6S214C63v57Ev");}
void  S214C6 ::v58(){vfunc_called(this, "_ZN6S214C63v58Ev");}
void  S214C6 ::v59(){vfunc_called(this, "_ZN6S214C63v59Ev");}
void  S214C6 ::v60(){vfunc_called(this, "_ZN6S214C63v60Ev");}
void  S214C6 ::v61(){vfunc_called(this, "_ZN6S214C63v61Ev");}
void  S214C6 ::v62(){vfunc_called(this, "_ZN6S214C63v62Ev");}
void  S214C6 ::v63(){vfunc_called(this, "_ZN6S214C63v63Ev");}
void  S214C6 ::v64(){vfunc_called(this, "_ZN6S214C63v64Ev");}
void  S214C6 ::v65(){vfunc_called(this, "_ZN6S214C63v65Ev");}
void  S214C6 ::v66(){vfunc_called(this, "_ZN6S214C63v66Ev");}
void  S214C6 ::v67(){vfunc_called(this, "_ZN6S214C63v67Ev");}
S214C6 ::S214C6(){ note_ctor("S214C6", this);} // tgen

static void Test_S214C6()
{
  extern Class_Descriptor cd_S214C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S214C6, buf);
    S214C6 *dp, &lv = *(dp=new (buf) S214C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S214C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S214C6)");
    check_field_offset(lv, s214c6f0, ABISELECT(8,4), "S214C6.s214c6f0");
    check_field_offset(lv, s214c6f1, ABISELECT(16,8), "S214C6.s214c6f1");
    check_field_offset(lv, s214c6f2, ABISELECT(24,16), "S214C6.s214c6f2");
    check_field_offset(lv, s214c6f3, ABISELECT(56,32), "S214C6.s214c6f3");
    check_field_offset(lv, s214c6f4, ABISELECT(64,40), "S214C6.s214c6f4");
    check_field_offset(lv, s214c6f5, ABISELECT(72,44), "S214C6.s214c6f5");
    check_field_offset(lv, s214c6f6, ABISELECT(80,52), "S214C6.s214c6f6");
    test_class_info(&lv, &cd_S214C6);
    dp->~S214C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS214C6(Test_S214C6, "S214C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S214C6C1Ev();
extern void _ZN6S214C6D1Ev();
Name_Map name_map_S214C6[] = {
  NSPAIR(_ZN6S214C6C1Ev),
  NSPAIR(_ZN6S214C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S214C6[];
extern void _ZN6S214C6D1Ev();
extern void _ZN6S214C6D0Ev();
extern void _ZN6S214C62v4Ev();
extern void _ZN6S214C62v5Ev();
extern void _ZN6S214C62v6Ev();
extern void _ZN6S214C62v7Ev();
extern void _ZN6S214C62v8Ev();
extern void _ZN6S214C62v9Ev();
extern void _ZN6S214C63v10Ev();
extern void _ZN6S214C63v11Ev();
extern void _ZN6S214C63v12Ev();
extern void _ZN6S214C63v13Ev();
extern void _ZN6S214C63v14Ev();
extern void _ZN6S214C63v15Ev();
extern void _ZN6S214C63v16Ev();
extern void _ZN6S214C63v17Ev();
extern void _ZN6S214C63v18Ev();
extern void _ZN6S214C63v19Ev();
extern void _ZN6S214C63v20Ev();
extern void _ZN6S214C63v21Ev();
extern void _ZN6S214C63v22Ev();
extern void _ZN6S214C63v23Ev();
extern void _ZN6S214C63v24Ev();
extern void _ZN6S214C63v25Ev();
extern void _ZN6S214C63v26Ev();
extern void _ZN6S214C63v27Ev();
extern void _ZN6S214C63v28Ev();
extern void _ZN6S214C63v29Ev();
extern void _ZN6S214C63v30Ev();
extern void _ZN6S214C63v31Ev();
extern void _ZN6S214C63v32Ev();
extern void _ZN6S214C63v33Ev();
extern void _ZN6S214C63v34Ev();
extern void _ZN6S214C63v35Ev();
extern void _ZN6S214C63v36Ev();
extern void _ZN6S214C63v37Ev();
extern void _ZN6S214C63v38Ev();
extern void _ZN6S214C63v39Ev();
extern void _ZN6S214C63v40Ev();
extern void _ZN6S214C63v41Ev();
extern void _ZN6S214C63v42Ev();
extern void _ZN6S214C63v43Ev();
extern void _ZN6S214C63v44Ev();
extern void _ZN6S214C63v45Ev();
extern void _ZN6S214C63v46Ev();
extern void _ZN6S214C63v47Ev();
extern void _ZN6S214C63v48Ev();
extern void _ZN6S214C63v49Ev();
extern void _ZN6S214C63v50Ev();
extern void _ZN6S214C63v51Ev();
extern void _ZN6S214C63v52Ev();
extern void _ZN6S214C63v53Ev();
extern void _ZN6S214C63v54Ev();
extern void _ZN6S214C63v55Ev();
extern void _ZN6S214C63v56Ev();
extern void _ZN6S214C63v57Ev();
extern void _ZN6S214C63v58Ev();
extern void _ZN6S214C63v59Ev();
extern void _ZN6S214C63v60Ev();
extern void _ZN6S214C63v61Ev();
extern void _ZN6S214C63v62Ev();
extern void _ZN6S214C63v63Ev();
extern void _ZN6S214C63v64Ev();
extern void _ZN6S214C63v65Ev();
extern void _ZN6S214C63v66Ev();
extern void _ZN6S214C63v67Ev();
static  VTBL_ENTRY vtc_S214C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S214C6[0]),
  (VTBL_ENTRY)&_ZN6S214C6D1Ev,
  (VTBL_ENTRY)&_ZN6S214C6D0Ev,
  (VTBL_ENTRY)&_ZN6S214C62v4Ev,
  (VTBL_ENTRY)&_ZN6S214C62v5Ev,
  (VTBL_ENTRY)&_ZN6S214C62v6Ev,
  (VTBL_ENTRY)&_ZN6S214C62v7Ev,
  (VTBL_ENTRY)&_ZN6S214C62v8Ev,
  (VTBL_ENTRY)&_ZN6S214C62v9Ev,
  (VTBL_ENTRY)&_ZN6S214C63v10Ev,
  (VTBL_ENTRY)&_ZN6S214C63v11Ev,
  (VTBL_ENTRY)&_ZN6S214C63v12Ev,
  (VTBL_ENTRY)&_ZN6S214C63v13Ev,
  (VTBL_ENTRY)&_ZN6S214C63v14Ev,
  (VTBL_ENTRY)&_ZN6S214C63v15Ev,
  (VTBL_ENTRY)&_ZN6S214C63v16Ev,
  (VTBL_ENTRY)&_ZN6S214C63v17Ev,
  (VTBL_ENTRY)&_ZN6S214C63v18Ev,
  (VTBL_ENTRY)&_ZN6S214C63v19Ev,
  (VTBL_ENTRY)&_ZN6S214C63v20Ev,
  (VTBL_ENTRY)&_ZN6S214C63v21Ev,
  (VTBL_ENTRY)&_ZN6S214C63v22Ev,
  (VTBL_ENTRY)&_ZN6S214C63v23Ev,
  (VTBL_ENTRY)&_ZN6S214C63v24Ev,
  (VTBL_ENTRY)&_ZN6S214C63v25Ev,
  (VTBL_ENTRY)&_ZN6S214C63v26Ev,
  (VTBL_ENTRY)&_ZN6S214C63v27Ev,
  (VTBL_ENTRY)&_ZN6S214C63v28Ev,
  (VTBL_ENTRY)&_ZN6S214C63v29Ev,
  (VTBL_ENTRY)&_ZN6S214C63v30Ev,
  (VTBL_ENTRY)&_ZN6S214C63v31Ev,
  (VTBL_ENTRY)&_ZN6S214C63v32Ev,
  (VTBL_ENTRY)&_ZN6S214C63v33Ev,
  (VTBL_ENTRY)&_ZN6S214C63v34Ev,
  (VTBL_ENTRY)&_ZN6S214C63v35Ev,
  (VTBL_ENTRY)&_ZN6S214C63v36Ev,
  (VTBL_ENTRY)&_ZN6S214C63v37Ev,
  (VTBL_ENTRY)&_ZN6S214C63v38Ev,
  (VTBL_ENTRY)&_ZN6S214C63v39Ev,
  (VTBL_ENTRY)&_ZN6S214C63v40Ev,
  (VTBL_ENTRY)&_ZN6S214C63v41Ev,
  (VTBL_ENTRY)&_ZN6S214C63v42Ev,
  (VTBL_ENTRY)&_ZN6S214C63v43Ev,
  (VTBL_ENTRY)&_ZN6S214C63v44Ev,
  (VTBL_ENTRY)&_ZN6S214C63v45Ev,
  (VTBL_ENTRY)&_ZN6S214C63v46Ev,
  (VTBL_ENTRY)&_ZN6S214C63v47Ev,
  (VTBL_ENTRY)&_ZN6S214C63v48Ev,
  (VTBL_ENTRY)&_ZN6S214C63v49Ev,
  (VTBL_ENTRY)&_ZN6S214C63v50Ev,
  (VTBL_ENTRY)&_ZN6S214C63v51Ev,
  (VTBL_ENTRY)&_ZN6S214C63v52Ev,
  (VTBL_ENTRY)&_ZN6S214C63v53Ev,
  (VTBL_ENTRY)&_ZN6S214C63v54Ev,
  (VTBL_ENTRY)&_ZN6S214C63v55Ev,
  (VTBL_ENTRY)&_ZN6S214C63v56Ev,
  (VTBL_ENTRY)&_ZN6S214C63v57Ev,
  (VTBL_ENTRY)&_ZN6S214C63v58Ev,
  (VTBL_ENTRY)&_ZN6S214C63v59Ev,
  (VTBL_ENTRY)&_ZN6S214C63v60Ev,
  (VTBL_ENTRY)&_ZN6S214C63v61Ev,
  (VTBL_ENTRY)&_ZN6S214C63v62Ev,
  (VTBL_ENTRY)&_ZN6S214C63v63Ev,
  (VTBL_ENTRY)&_ZN6S214C63v64Ev,
  (VTBL_ENTRY)&_ZN6S214C63v65Ev,
  (VTBL_ENTRY)&_ZN6S214C63v66Ev,
  (VTBL_ENTRY)&_ZN6S214C63v67Ev,
};
extern VTBL_ENTRY _ZTI6S214C6[];
extern  VTBL_ENTRY _ZTV6S214C6[];
Class_Descriptor cd_S214C6 = {  "S214C6", // class name
  0,0,//no base classes
  &(vtc_S214C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S214C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S214C6),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  S214C5  : S214C6 {
  int s214c5f0[2];
  void *s214c5f1;
  int s214c5f2[2];
  ::S210C8_nt s214c5f3;
  ::S210C8_nt s214c5f4;
  ::S629C14 s214c5f5;
  ::S210C8_nt s214c5f6;
  unsigned int s214c5f7:1;
  unsigned int s214c5f8:1;
  unsigned int s214c5f9:1;
  unsigned int s214c5f10:1;
  unsigned int s214c5f11:1;
  int s214c5f12[2];
  virtual  ~S214C5(); // _ZN6S214C5D1Ev
  virtual void  v68(); // _ZN6S214C53v68Ev
  virtual void  v69(); // _ZN6S214C53v69Ev
  virtual void  v70(); // _ZN6S214C53v70Ev
  virtual void  v71(); // _ZN6S214C53v71Ev
  virtual void  v72(); // _ZN6S214C53v72Ev
  virtual void  v73(); // _ZN6S214C53v73Ev
  virtual void  v74(); // _ZN6S214C53v74Ev
  virtual void  v75(); // _ZN6S214C53v75Ev
  virtual void  v76(); // _ZN6S214C53v76Ev
  virtual void  v77(); // _ZN6S214C53v77Ev
  virtual void  v78(); // _ZN6S214C53v78Ev
  virtual void  v79(); // _ZN6S214C53v79Ev
  virtual void  v80(); // _ZN6S214C53v80Ev
  virtual void  v81(); // _ZN6S214C53v81Ev
  virtual void  v82(); // _ZN6S214C53v82Ev
  virtual void  v83(); // _ZN6S214C53v83Ev
  virtual void  v84(); // _ZN6S214C53v84Ev
  virtual void  v85(); // _ZN6S214C53v85Ev
  virtual void  v86(); // _ZN6S214C53v86Ev
  virtual void  v87(); // _ZN6S214C53v87Ev
  virtual void  v88(); // _ZN6S214C53v88Ev
  virtual void  v89(); // _ZN6S214C53v89Ev
  S214C5(); // tgen
};
//SIG(-1 S214C5) 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]}


 S214C5 ::~S214C5(){ note_dtor("S214C5", this);}
void  S214C5 ::v68(){vfunc_called(this, "_ZN6S214C53v68Ev");}
void  S214C5 ::v69(){vfunc_called(this, "_ZN6S214C53v69Ev");}
void  S214C5 ::v70(){vfunc_called(this, "_ZN6S214C53v70Ev");}
void  S214C5 ::v71(){vfunc_called(this, "_ZN6S214C53v71Ev");}
void  S214C5 ::v72(){vfunc_called(this, "_ZN6S214C53v72Ev");}
void  S214C5 ::v73(){vfunc_called(this, "_ZN6S214C53v73Ev");}
void  S214C5 ::v74(){vfunc_called(this, "_ZN6S214C53v74Ev");}
void  S214C5 ::v75(){vfunc_called(this, "_ZN6S214C53v75Ev");}
void  S214C5 ::v76(){vfunc_called(this, "_ZN6S214C53v76Ev");}
void  S214C5 ::v77(){vfunc_called(this, "_ZN6S214C53v77Ev");}
void  S214C5 ::v78(){vfunc_called(this, "_ZN6S214C53v78Ev");}
void  S214C5 ::v79(){vfunc_called(this, "_ZN6S214C53v79Ev");}
void  S214C5 ::v80(){vfunc_called(this, "_ZN6S214C53v80Ev");}
void  S214C5 ::v81(){vfunc_called(this, "_ZN6S214C53v81Ev");}
void  S214C5 ::v82(){vfunc_called(this, "_ZN6S214C53v82Ev");}
void  S214C5 ::v83(){vfunc_called(this, "_ZN6S214C53v83Ev");}
void  S214C5 ::v84(){vfunc_called(this, "_ZN6S214C53v84Ev");}
void  S214C5 ::v85(){vfunc_called(this, "_ZN6S214C53v85Ev");}
void  S214C5 ::v86(){vfunc_called(this, "_ZN6S214C53v86Ev");}
void  S214C5 ::v87(){vfunc_called(this, "_ZN6S214C53v87Ev");}
void  S214C5 ::v88(){vfunc_called(this, "_ZN6S214C53v88Ev");}
void  S214C5 ::v89(){vfunc_called(this, "_ZN6S214C53v89Ev");}
S214C5 ::S214C5(){ note_ctor("S214C5", this);} // tgen

static void Test_S214C5()
{
  extern Class_Descriptor cd_S214C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S214C5, buf);
    S214C5 *dp, &lv = *(dp=new (buf) S214C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S214C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S214C5)");
    check_base_class_offset(lv, (S214C6*), 0, "S214C5");
    check_field_offset(lv, s214c5f0, ABISELECT(96,60), "S214C5.s214c5f0");
    check_field_offset(lv, s214c5f1, ABISELECT(104,68), "S214C5.s214c5f1");
    check_field_offset(lv, s214c5f2, ABISELECT(112,72), "S214C5.s214c5f2");
    check_field_offset(lv, s214c5f3, ABISELECT(120,80), "S214C5.s214c5f3");
    check_field_offset(lv, s214c5f4, ABISELECT(136,92), "S214C5.s214c5f4");
    check_field_offset(lv, s214c5f5, ABISELECT(152,104), "S214C5.s214c5f5");
    check_field_offset(lv, s214c5f6, ABISELECT(160,108), "S214C5.s214c5f6");
    set_bf_and_test(lv, s214c5f7, ABISELECT(176,120), 0, 1, 1, "S214C5");
    set_bf_and_test(lv, s214c5f8, ABISELECT(176,120), 1, 1, 1, "S214C5");
    set_bf_and_test(lv, s214c5f9, ABISELECT(176,120), 2, 1, 1, "S214C5");
    set_bf_and_test(lv, s214c5f10, ABISELECT(176,120), 3, 1, 1, "S214C5");
    set_bf_and_test(lv, s214c5f11, ABISELECT(176,120), 4, 1, 1, "S214C5");
    check_field_offset(lv, s214c5f12, ABISELECT(180,124), "S214C5.s214c5f12");
    test_class_info(&lv, &cd_S214C5);
    dp->~S214C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS214C5(Test_S214C5, "S214C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S214C5C1Ev();
extern void _ZN6S214C5D1Ev();
Name_Map name_map_S214C5[] = {
  NSPAIR(_ZN6S214C5C1Ev),
  NSPAIR(_ZN6S214C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S214C6;
extern VTBL_ENTRY _ZTI6S214C6[];
extern  VTBL_ENTRY _ZTV6S214C6[];
static Base_Class bases_S214C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S214C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S214C5[];
extern void _ZN6S214C5D1Ev();
extern void _ZN6S214C5D0Ev();
extern void _ZN6S214C62v4Ev();
extern void _ZN6S214C62v5Ev();
extern void _ZN6S214C62v6Ev();
extern void _ZN6S214C62v7Ev();
extern void _ZN6S214C62v8Ev();
extern void _ZN6S214C62v9Ev();
extern void _ZN6S214C63v10Ev();
extern void _ZN6S214C63v11Ev();
extern void _ZN6S214C63v12Ev();
extern void _ZN6S214C63v13Ev();
extern void _ZN6S214C63v14Ev();
extern void _ZN6S214C63v15Ev();
extern void _ZN6S214C63v16Ev();
extern void _ZN6S214C63v17Ev();
extern void _ZN6S214C63v18Ev();
extern void _ZN6S214C63v19Ev();
extern void _ZN6S214C63v20Ev();
extern void _ZN6S214C63v21Ev();
extern void _ZN6S214C63v22Ev();
extern void _ZN6S214C63v23Ev();
extern void _ZN6S214C63v24Ev();
extern void _ZN6S214C63v25Ev();
extern void _ZN6S214C63v26Ev();
extern void _ZN6S214C63v27Ev();
extern void _ZN6S214C63v28Ev();
extern void _ZN6S214C63v29Ev();
extern void _ZN6S214C63v30Ev();
extern void _ZN6S214C63v31Ev();
extern void _ZN6S214C63v32Ev();
extern void _ZN6S214C63v33Ev();
extern void _ZN6S214C63v34Ev();
extern void _ZN6S214C63v35Ev();
extern void _ZN6S214C63v36Ev();
extern void _ZN6S214C63v37Ev();
extern void _ZN6S214C63v38Ev();
extern void _ZN6S214C63v39Ev();
extern void _ZN6S214C63v40Ev();
extern void _ZN6S214C63v41Ev();
extern void _ZN6S214C63v42Ev();
extern void _ZN6S214C63v43Ev();
extern void _ZN6S214C63v44Ev();
extern void _ZN6S214C63v45Ev();
extern void _ZN6S214C63v46Ev();
extern void _ZN6S214C63v47Ev();
extern void _ZN6S214C63v48Ev();
extern void _ZN6S214C63v49Ev();
extern void _ZN6S214C63v50Ev();
extern void _ZN6S214C63v51Ev();
extern void _ZN6S214C63v52Ev();
extern void _ZN6S214C63v53Ev();
extern void _ZN6S214C63v54Ev();
extern void _ZN6S214C63v55Ev();
extern void _ZN6S214C63v56Ev();
extern void _ZN6S214C63v57Ev();
extern void _ZN6S214C63v58Ev();
extern void _ZN6S214C63v59Ev();
extern void _ZN6S214C63v60Ev();
extern void _ZN6S214C63v61Ev();
extern void _ZN6S214C63v62Ev();
extern void _ZN6S214C63v63Ev();
extern void _ZN6S214C63v64Ev();
extern void _ZN6S214C63v65Ev();
extern void _ZN6S214C63v66Ev();
extern void _ZN6S214C63v67Ev();
extern void _ZN6S214C53v68Ev();
extern void _ZN6S214C53v69Ev();
extern void _ZN6S214C53v70Ev();
extern void _ZN6S214C53v71Ev();
extern void _ZN6S214C53v72Ev();
extern void _ZN6S214C53v73Ev();
extern void _ZN6S214C53v74Ev();
extern void _ZN6S214C53v75Ev();
extern void _ZN6S214C53v76Ev();
extern void _ZN6S214C53v77Ev();
extern void _ZN6S214C53v78Ev();
extern void _ZN6S214C53v79Ev();
extern void _ZN6S214C53v80Ev();
extern void _ZN6S214C53v81Ev();
extern void _ZN6S214C53v82Ev();
extern void _ZN6S214C53v83Ev();
extern void _ZN6S214C53v84Ev();
extern void _ZN6S214C53v85Ev();
extern void _ZN6S214C53v86Ev();
extern void _ZN6S214C53v87Ev();
extern void _ZN6S214C53v88Ev();
extern void _ZN6S214C53v89Ev();
static  VTBL_ENTRY vtc_S214C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S214C5[0]),
  (VTBL_ENTRY)&_ZN6S214C5D1Ev,
  (VTBL_ENTRY)&_ZN6S214C5D0Ev,
  (VTBL_ENTRY)&_ZN6S214C62v4Ev,
  (VTBL_ENTRY)&_ZN6S214C62v5Ev,
  (VTBL_ENTRY)&_ZN6S214C62v6Ev,
  (VTBL_ENTRY)&_ZN6S214C62v7Ev,
  (VTBL_ENTRY)&_ZN6S214C62v8Ev,
  (VTBL_ENTRY)&_ZN6S214C62v9Ev,
  (VTBL_ENTRY)&_ZN6S214C63v10Ev,
  (VTBL_ENTRY)&_ZN6S214C63v11Ev,
  (VTBL_ENTRY)&_ZN6S214C63v12Ev,
  (VTBL_ENTRY)&_ZN6S214C63v13Ev,
  (VTBL_ENTRY)&_ZN6S214C63v14Ev,
  (VTBL_ENTRY)&_ZN6S214C63v15Ev,
  (VTBL_ENTRY)&_ZN6S214C63v16Ev,
  (VTBL_ENTRY)&_ZN6S214C63v17Ev,
  (VTBL_ENTRY)&_ZN6S214C63v18Ev,
  (VTBL_ENTRY)&_ZN6S214C63v19Ev,
  (VTBL_ENTRY)&_ZN6S214C63v20Ev,
  (VTBL_ENTRY)&_ZN6S214C63v21Ev,
  (VTBL_ENTRY)&_ZN6S214C63v22Ev,
  (VTBL_ENTRY)&_ZN6S214C63v23Ev,
  (VTBL_ENTRY)&_ZN6S214C63v24Ev,
  (VTBL_ENTRY)&_ZN6S214C63v25Ev,
  (VTBL_ENTRY)&_ZN6S214C63v26Ev,
  (VTBL_ENTRY)&_ZN6S214C63v27Ev,
  (VTBL_ENTRY)&_ZN6S214C63v28Ev,
  (VTBL_ENTRY)&_ZN6S214C63v29Ev,
  (VTBL_ENTRY)&_ZN6S214C63v30Ev,
  (VTBL_ENTRY)&_ZN6S214C63v31Ev,
  (VTBL_ENTRY)&_ZN6S214C63v32Ev,
  (VTBL_ENTRY)&_ZN6S214C63v33Ev,
  (VTBL_ENTRY)&_ZN6S214C63v34Ev,
  (VTBL_ENTRY)&_ZN6S214C63v35Ev,
  (VTBL_ENTRY)&_ZN6S214C63v36Ev,
  (VTBL_ENTRY)&_ZN6S214C63v37Ev,
  (VTBL_ENTRY)&_ZN6S214C63v38Ev,
  (VTBL_ENTRY)&_ZN6S214C63v39Ev,
  (VTBL_ENTRY)&_ZN6S214C63v40Ev,
  (VTBL_ENTRY)&_ZN6S214C63v41Ev,
  (VTBL_ENTRY)&_ZN6S214C63v42Ev,
  (VTBL_ENTRY)&_ZN6S214C63v43Ev,
  (VTBL_ENTRY)&_ZN6S214C63v44Ev,
  (VTBL_ENTRY)&_ZN6S214C63v45Ev,
  (VTBL_ENTRY)&_ZN6S214C63v46Ev,
  (VTBL_ENTRY)&_ZN6S214C63v47Ev,
  (VTBL_ENTRY)&_ZN6S214C63v48Ev,
  (VTBL_ENTRY)&_ZN6S214C63v49Ev,
  (VTBL_ENTRY)&_ZN6S214C63v50Ev,
  (VTBL_ENTRY)&_ZN6S214C63v51Ev,
  (VTBL_ENTRY)&_ZN6S214C63v52Ev,
  (VTBL_ENTRY)&_ZN6S214C63v53Ev,
  (VTBL_ENTRY)&_ZN6S214C63v54Ev,
  (VTBL_ENTRY)&_ZN6S214C63v55Ev,
  (VTBL_ENTRY)&_ZN6S214C63v56Ev,
  (VTBL_ENTRY)&_ZN6S214C63v57Ev,
  (VTBL_ENTRY)&_ZN6S214C63v58Ev,
  (VTBL_ENTRY)&_ZN6S214C63v59Ev,
  (VTBL_ENTRY)&_ZN6S214C63v60Ev,
  (VTBL_ENTRY)&_ZN6S214C63v61Ev,
  (VTBL_ENTRY)&_ZN6S214C63v62Ev,
  (VTBL_ENTRY)&_ZN6S214C63v63Ev,
  (VTBL_ENTRY)&_ZN6S214C63v64Ev,
  (VTBL_ENTRY)&_ZN6S214C63v65Ev,
  (VTBL_ENTRY)&_ZN6S214C63v66Ev,
  (VTBL_ENTRY)&_ZN6S214C63v67Ev,
  (VTBL_ENTRY)&_ZN6S214C53v68Ev,
  (VTBL_ENTRY)&_ZN6S214C53v69Ev,
  (VTBL_ENTRY)&_ZN6S214C53v70Ev,
  (VTBL_ENTRY)&_ZN6S214C53v71Ev,
  (VTBL_ENTRY)&_ZN6S214C53v72Ev,
  (VTBL_ENTRY)&_ZN6S214C53v73Ev,
  (VTBL_ENTRY)&_ZN6S214C53v74Ev,
  (VTBL_ENTRY)&_ZN6S214C53v75Ev,
  (VTBL_ENTRY)&_ZN6S214C53v76Ev,
  (VTBL_ENTRY)&_ZN6S214C53v77Ev,
  (VTBL_ENTRY)&_ZN6S214C53v78Ev,
  (VTBL_ENTRY)&_ZN6S214C53v79Ev,
  (VTBL_ENTRY)&_ZN6S214C53v80Ev,
  (VTBL_ENTRY)&_ZN6S214C53v81Ev,
  (VTBL_ENTRY)&_ZN6S214C53v82Ev,
  (VTBL_ENTRY)&_ZN6S214C53v83Ev,
  (VTBL_ENTRY)&_ZN6S214C53v84Ev,
  (VTBL_ENTRY)&_ZN6S214C53v85Ev,
  (VTBL_ENTRY)&_ZN6S214C53v86Ev,
  (VTBL_ENTRY)&_ZN6S214C53v87Ev,
  (VTBL_ENTRY)&_ZN6S214C53v88Ev,
  (VTBL_ENTRY)&_ZN6S214C53v89Ev,
};
extern VTBL_ENTRY _ZTI6S214C5[];
extern  VTBL_ENTRY _ZTV6S214C5[];
Class_Descriptor cd_S214C5 = {  "S214C5", // class name
  bases_S214C5, 1,
  &(vtc_S214C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S214C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S214C5),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  S214C4  : S214C5 {
  unsigned int s214c4f0:1;
  unsigned int s214c4f1:1;
  unsigned int s214c4f2:1;
  ::S1503C28 s214c4f3;
  ::S1503C24 s214c4f4;
  ::S1503C18 s214c4f5;
  ::S1503C12 s214c4f6;
  int s214c4f7[3];
  virtual  ~S214C4(); // _ZN6S214C4D1Ev
  virtual void  v90(); // _ZN6S214C43v90Ev
  virtual void  v91(); // _ZN6S214C43v91Ev
  virtual void  v92(); // _ZN6S214C43v92Ev
  virtual void  v93(); // _ZN6S214C43v93Ev
  virtual void  v94(); // _ZN6S214C43v94Ev
  virtual void  v95(); // _ZN6S214C43v95Ev
  virtual void  v96(); // _ZN6S214C43v96Ev
  virtual void  v97(); // _ZN6S214C43v97Ev
  virtual void  v98(); // _ZN6S214C43v98Ev
  virtual void  v99(); // _ZN6S214C43v99Ev
  virtual void  v100(); // _ZN6S214C44v100Ev
  virtual void  v101(); // _ZN6S214C44v101Ev
  virtual void  v102(); // _ZN6S214C44v102Ev
  virtual void  v103(); // _ZN6S214C44v103Ev
  virtual void  v104(); // _ZN6S214C44v104Ev
  virtual void  v105(); // _ZN6S214C44v105Ev
  virtual void  v106(); // _ZN6S214C44v106Ev
  virtual void  v107(); // _ZN6S214C44v107Ev
  virtual void  v108(); // _ZN6S214C44v108Ev
  virtual void  v109(); // _ZN6S214C44v109Ev
  S214C4(); // tgen
};
//SIG(-1 S214C4) 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]}


 S214C4 ::~S214C4(){ note_dtor("S214C4", this);}
void  S214C4 ::v90(){vfunc_called(this, "_ZN6S214C43v90Ev");}
void  S214C4 ::v91(){vfunc_called(this, "_ZN6S214C43v91Ev");}
void  S214C4 ::v92(){vfunc_called(this, "_ZN6S214C43v92Ev");}
void  S214C4 ::v93(){vfunc_called(this, "_ZN6S214C43v93Ev");}
void  S214C4 ::v94(){vfunc_called(this, "_ZN6S214C43v94Ev");}
void  S214C4 ::v95(){vfunc_called(this, "_ZN6S214C43v95Ev");}
void  S214C4 ::v96(){vfunc_called(this, "_ZN6S214C43v96Ev");}
void  S214C4 ::v97(){vfunc_called(this, "_ZN6S214C43v97Ev");}
void  S214C4 ::v98(){vfunc_called(this, "_ZN6S214C43v98Ev");}
void  S214C4 ::v99(){vfunc_called(this, "_ZN6S214C43v99Ev");}
void  S214C4 ::v100(){vfunc_called(this, "_ZN6S214C44v100Ev");}
void  S214C4 ::v101(){vfunc_called(this, "_ZN6S214C44v101Ev");}
void  S214C4 ::v102(){vfunc_called(this, "_ZN6S214C44v102Ev");}
void  S214C4 ::v103(){vfunc_called(this, "_ZN6S214C44v103Ev");}
void  S214C4 ::v104(){vfunc_called(this, "_ZN6S214C44v104Ev");}
void  S214C4 ::v105(){vfunc_called(this, "_ZN6S214C44v105Ev");}
void  S214C4 ::v106(){vfunc_called(this, "_ZN6S214C44v106Ev");}
void  S214C4 ::v107(){vfunc_called(this, "_ZN6S214C44v107Ev");}
void  S214C4 ::v108(){vfunc_called(this, "_ZN6S214C44v108Ev");}
void  S214C4 ::v109(){vfunc_called(this, "_ZN6S214C44v109Ev");}
S214C4 ::S214C4(){ note_ctor("S214C4", this);} // tgen

static void Test_S214C4()
{
  extern Class_Descriptor cd_S214C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S214C4, buf);
    S214C4 *dp, &lv = *(dp=new (buf) S214C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S214C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S214C4)");
    check_base_class_offset(lv, (S214C6*)(S214C5*), 0, "S214C4");
    check_base_class_offset(lv, (S214C5*), 0, "S214C4");
    set_bf_and_test(lv, s214c4f0, ABISELECT(188,132), 0, 1, 1, "S214C4");
    set_bf_and_test(lv, s214c4f1, ABISELECT(188,132), 1, 1, 1, "S214C4");
    set_bf_and_test(lv, s214c4f2, ABISELECT(188,132), 2, 1, 1, "S214C4");
    check_field_offset(lv, s214c4f3, ABISELECT(192,136), "S214C4.s214c4f3");
    check_field_offset(lv, s214c4f4, ABISELECT(208,148), "S214C4.s214c4f4");
    check_field_offset(lv, s214c4f5, ABISELECT(224,160), "S214C4.s214c4f5");
    check_field_offset(lv, s214c4f6, ABISELECT(240,172), "S214C4.s214c4f6");
    check_field_offset(lv, s214c4f7, ABISELECT(256,184), "S214C4.s214c4f7");
    test_class_info(&lv, &cd_S214C4);
    dp->~S214C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS214C4(Test_S214C4, "S214C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S214C4C1Ev();
extern void _ZN6S214C4D1Ev();
Name_Map name_map_S214C4[] = {
  NSPAIR(_ZN6S214C4C1Ev),
  NSPAIR(_ZN6S214C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S214C6;
extern VTBL_ENTRY _ZTI6S214C6[];
extern  VTBL_ENTRY _ZTV6S214C6[];
extern Class_Descriptor cd_S214C5;
extern VTBL_ENTRY _ZTI6S214C5[];
extern  VTBL_ENTRY _ZTV6S214C5[];
static Base_Class bases_S214C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S214C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S214C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S214C4[];
extern void _ZN6S214C4D1Ev();
extern void _ZN6S214C4D0Ev();
extern void _ZN6S214C62v4Ev();
extern void _ZN6S214C62v5Ev();
extern void _ZN6S214C62v6Ev();
extern void _ZN6S214C62v7Ev();
extern void _ZN6S214C62v8Ev();
extern void _ZN6S214C62v9Ev();
extern void _ZN6S214C63v10Ev();
extern void _ZN6S214C63v11Ev();
extern void _ZN6S214C63v12Ev();
extern void _ZN6S214C63v13Ev();
extern void _ZN6S214C63v14Ev();
extern void _ZN6S214C63v15Ev();
extern void _ZN6S214C63v16Ev();
extern void _ZN6S214C63v17Ev();
extern void _ZN6S214C63v18Ev();
extern void _ZN6S214C63v19Ev();
extern void _ZN6S214C63v20Ev();
extern void _ZN6S214C63v21Ev();
extern void _ZN6S214C63v22Ev();
extern void _ZN6S214C63v23Ev();
extern void _ZN6S214C63v24Ev();
extern void _ZN6S214C63v25Ev();
extern void _ZN6S214C63v26Ev();
extern void _ZN6S214C63v27Ev();
extern void _ZN6S214C63v28Ev();
extern void _ZN6S214C63v29Ev();
extern void _ZN6S214C63v30Ev();
extern void _ZN6S214C63v31Ev();
extern void _ZN6S214C63v32Ev();
extern void _ZN6S214C63v33Ev();
extern void _ZN6S214C63v34Ev();
extern void _ZN6S214C63v35Ev();
extern void _ZN6S214C63v36Ev();
extern void _ZN6S214C63v37Ev();
extern void _ZN6S214C63v38Ev();
extern void _ZN6S214C63v39Ev();
extern void _ZN6S214C63v40Ev();
extern void _ZN6S214C63v41Ev();
extern void _ZN6S214C63v42Ev();
extern void _ZN6S214C63v43Ev();
extern void _ZN6S214C63v44Ev();
extern void _ZN6S214C63v45Ev();
extern void _ZN6S214C63v46Ev();
extern void _ZN6S214C63v47Ev();
extern void _ZN6S214C63v48Ev();
extern void _ZN6S214C63v49Ev();
extern void _ZN6S214C63v50Ev();
extern void _ZN6S214C63v51Ev();
extern void _ZN6S214C63v52Ev();
extern void _ZN6S214C63v53Ev();
extern void _ZN6S214C63v54Ev();
extern void _ZN6S214C63v55Ev();
extern void _ZN6S214C63v56Ev();
extern void _ZN6S214C63v57Ev();
extern void _ZN6S214C63v58Ev();
extern void _ZN6S214C63v59Ev();
extern void _ZN6S214C63v60Ev();
extern void _ZN6S214C63v61Ev();
extern void _ZN6S214C63v62Ev();
extern void _ZN6S214C63v63Ev();
extern void _ZN6S214C63v64Ev();
extern void _ZN6S214C63v65Ev();
extern void _ZN6S214C63v66Ev();
extern void _ZN6S214C63v67Ev();
extern void _ZN6S214C53v68Ev();
extern void _ZN6S214C53v69Ev();
extern void _ZN6S214C53v70Ev();
extern void _ZN6S214C53v71Ev();
extern void _ZN6S214C53v72Ev();
extern void _ZN6S214C53v73Ev();
extern void _ZN6S214C53v74Ev();
extern void _ZN6S214C53v75Ev();
extern void _ZN6S214C53v76Ev();
extern void _ZN6S214C53v77Ev();
extern void _ZN6S214C53v78Ev();
extern void _ZN6S214C53v79Ev();
extern void _ZN6S214C53v80Ev();
extern void _ZN6S214C53v81Ev();
extern void _ZN6S214C53v82Ev();
extern void _ZN6S214C53v83Ev();
extern void _ZN6S214C53v84Ev();
extern void _ZN6S214C53v85Ev();
extern void _ZN6S214C53v86Ev();
extern void _ZN6S214C53v87Ev();
extern void _ZN6S214C53v88Ev();
extern void _ZN6S214C53v89Ev();
extern void _ZN6S214C43v90Ev();
extern void _ZN6S214C43v91Ev();
extern void _ZN6S214C43v92Ev();
extern void _ZN6S214C43v93Ev();
extern void _ZN6S214C43v94Ev();
extern void _ZN6S214C43v95Ev();
extern void _ZN6S214C43v96Ev();
extern void _ZN6S214C43v97Ev();
extern void _ZN6S214C43v98Ev();
extern void _ZN6S214C43v99Ev();
extern void _ZN6S214C44v100Ev();
extern void _ZN6S214C44v101Ev();
extern void _ZN6S214C44v102Ev();
extern void _ZN6S214C44v103Ev();
extern void _ZN6S214C44v104Ev();
extern void _ZN6S214C44v105Ev();
extern void _ZN6S214C44v106Ev();
extern void _ZN6S214C44v107Ev();
extern void _ZN6S214C44v108Ev();
extern void _ZN6S214C44v109Ev();
static  VTBL_ENTRY vtc_S214C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S214C4[0]),
  (VTBL_ENTRY)&_ZN6S214C4D1Ev,
  (VTBL_ENTRY)&_ZN6S214C4D0Ev,
  (VTBL_ENTRY)&_ZN6S214C62v4Ev,
  (VTBL_ENTRY)&_ZN6S214C62v5Ev,
  (VTBL_ENTRY)&_ZN6S214C62v6Ev,
  (VTBL_ENTRY)&_ZN6S214C62v7Ev,
  (VTBL_ENTRY)&_ZN6S214C62v8Ev,
  (VTBL_ENTRY)&_ZN6S214C62v9Ev,
  (VTBL_ENTRY)&_ZN6S214C63v10Ev,
  (VTBL_ENTRY)&_ZN6S214C63v11Ev,
  (VTBL_ENTRY)&_ZN6S214C63v12Ev,
  (VTBL_ENTRY)&_ZN6S214C63v13Ev,
  (VTBL_ENTRY)&_ZN6S214C63v14Ev,
  (VTBL_ENTRY)&_ZN6S214C63v15Ev,
  (VTBL_ENTRY)&_ZN6S214C63v16Ev,
  (VTBL_ENTRY)&_ZN6S214C63v17Ev,
  (VTBL_ENTRY)&_ZN6S214C63v18Ev,
  (VTBL_ENTRY)&_ZN6S214C63v19Ev,
  (VTBL_ENTRY)&_ZN6S214C63v20Ev,
  (VTBL_ENTRY)&_ZN6S214C63v21Ev,
  (VTBL_ENTRY)&_ZN6S214C63v22Ev,
  (VTBL_ENTRY)&_ZN6S214C63v23Ev,
  (VTBL_ENTRY)&_ZN6S214C63v24Ev,
  (VTBL_ENTRY)&_ZN6S214C63v25Ev,
  (VTBL_ENTRY)&_ZN6S214C63v26Ev,
  (VTBL_ENTRY)&_ZN6S214C63v27Ev,
  (VTBL_ENTRY)&_ZN6S214C63v28Ev,
  (VTBL_ENTRY)&_ZN6S214C63v29Ev,
  (VTBL_ENTRY)&_ZN6S214C63v30Ev,
  (VTBL_ENTRY)&_ZN6S214C63v31Ev,
  (VTBL_ENTRY)&_ZN6S214C63v32Ev,
  (VTBL_ENTRY)&_ZN6S214C63v33Ev,
  (VTBL_ENTRY)&_ZN6S214C63v34Ev,
  (VTBL_ENTRY)&_ZN6S214C63v35Ev,
  (VTBL_ENTRY)&_ZN6S214C63v36Ev,
  (VTBL_ENTRY)&_ZN6S214C63v37Ev,
  (VTBL_ENTRY)&_ZN6S214C63v38Ev,
  (VTBL_ENTRY)&_ZN6S214C63v39Ev,
  (VTBL_ENTRY)&_ZN6S214C63v40Ev,
  (VTBL_ENTRY)&_ZN6S214C63v41Ev,
  (VTBL_ENTRY)&_ZN6S214C63v42Ev,
  (VTBL_ENTRY)&_ZN6S214C63v43Ev,
  (VTBL_ENTRY)&_ZN6S214C63v44Ev,
  (VTBL_ENTRY)&_ZN6S214C63v45Ev,
  (VTBL_ENTRY)&_ZN6S214C63v46Ev,
  (VTBL_ENTRY)&_ZN6S214C63v47Ev,
  (VTBL_ENTRY)&_ZN6S214C63v48Ev,
  (VTBL_ENTRY)&_ZN6S214C63v49Ev,
  (VTBL_ENTRY)&_ZN6S214C63v50Ev,
  (VTBL_ENTRY)&_ZN6S214C63v51Ev,
  (VTBL_ENTRY)&_ZN6S214C63v52Ev,
  (VTBL_ENTRY)&_ZN6S214C63v53Ev,
  (VTBL_ENTRY)&_ZN6S214C63v54Ev,
  (VTBL_ENTRY)&_ZN6S214C63v55Ev,
  (VTBL_ENTRY)&_ZN6S214C63v56Ev,
  (VTBL_ENTRY)&_ZN6S214C63v57Ev,
  (VTBL_ENTRY)&_ZN6S214C63v58Ev,
  (VTBL_ENTRY)&_ZN6S214C63v59Ev,
  (VTBL_ENTRY)&_ZN6S214C63v60Ev,
  (VTBL_ENTRY)&_ZN6S214C63v61Ev,
  (VTBL_ENTRY)&_ZN6S214C63v62Ev,
  (VTBL_ENTRY)&_ZN6S214C63v63Ev,
  (VTBL_ENTRY)&_ZN6S214C63v64Ev,
  (VTBL_ENTRY)&_ZN6S214C63v65Ev,
  (VTBL_ENTRY)&_ZN6S214C63v66Ev,
  (VTBL_ENTRY)&_ZN6S214C63v67Ev,
  (VTBL_ENTRY)&_ZN6S214C53v68Ev,
  (VTBL_ENTRY)&_ZN6S214C53v69Ev,
  (VTBL_ENTRY)&_ZN6S214C53v70Ev,
  (VTBL_ENTRY)&_ZN6S214C53v71Ev,
  (VTBL_ENTRY)&_ZN6S214C53v72Ev,
  (VTBL_ENTRY)&_ZN6S214C53v73Ev,
  (VTBL_ENTRY)&_ZN6S214C53v74Ev,
  (VTBL_ENTRY)&_ZN6S214C53v75Ev,
  (VTBL_ENTRY)&_ZN6S214C53v76Ev,
  (VTBL_ENTRY)&_ZN6S214C53v77Ev,
  (VTBL_ENTRY)&_ZN6S214C53v78Ev,
  (VTBL_ENTRY)&_ZN6S214C53v79Ev,
  (VTBL_ENTRY)&_ZN6S214C53v80Ev,
  (VTBL_ENTRY)&_ZN6S214C53v81Ev,
  (VTBL_ENTRY)&_ZN6S214C53v82Ev,
  (VTBL_ENTRY)&_ZN6S214C53v83Ev,
  (VTBL_ENTRY)&_ZN6S214C53v84Ev,
  (VTBL_ENTRY)&_ZN6S214C53v85Ev,
  (VTBL_ENTRY)&_ZN6S214C53v86Ev,
  (VTBL_ENTRY)&_ZN6S214C53v87Ev,
  (VTBL_ENTRY)&_ZN6S214C53v88Ev,
  (VTBL_ENTRY)&_ZN6S214C53v89Ev,
  (VTBL_ENTRY)&_ZN6S214C43v90Ev,
  (VTBL_ENTRY)&_ZN6S214C43v91Ev,
  (VTBL_ENTRY)&_ZN6S214C43v92Ev,
  (VTBL_ENTRY)&_ZN6S214C43v93Ev,
  (VTBL_ENTRY)&_ZN6S214C43v94Ev,
  (VTBL_ENTRY)&_ZN6S214C43v95Ev,
  (VTBL_ENTRY)&_ZN6S214C43v96Ev,
  (VTBL_ENTRY)&_ZN6S214C43v97Ev,
  (VTBL_ENTRY)&_ZN6S214C43v98Ev,
  (VTBL_ENTRY)&_ZN6S214C43v99Ev,
  (VTBL_ENTRY)&_ZN6S214C44v100Ev,
  (VTBL_ENTRY)&_ZN6S214C44v101Ev,
  (VTBL_ENTRY)&_ZN6S214C44v102Ev,
  (VTBL_ENTRY)&_ZN6S214C44v103Ev,
  (VTBL_ENTRY)&_ZN6S214C44v104Ev,
  (VTBL_ENTRY)&_ZN6S214C44v105Ev,
  (VTBL_ENTRY)&_ZN6S214C44v106Ev,
  (VTBL_ENTRY)&_ZN6S214C44v107Ev,
  (VTBL_ENTRY)&_ZN6S214C44v108Ev,
  (VTBL_ENTRY)&_ZN6S214C44v109Ev,
};
extern VTBL_ENTRY _ZTI6S214C4[];
extern  VTBL_ENTRY _ZTV6S214C4[];
Class_Descriptor cd_S214C4 = {  "S214C4", // class name
  bases_S214C4, 2,
  &(vtc_S214C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S214C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S214C4),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  S214C3  : S214C4 {
  ::S1503C5_nt s214c3f0;
  unsigned int s214c3f1:1;
  ::S1503C6_nt s214c3f2;
  virtual  ~S214C3(); // _ZN6S214C3D1Ev
  virtual void  v110(); // _ZN6S214C34v110Ev
  virtual void  v111(); // _ZN6S214C34v111Ev
  virtual void  v112(); // _ZN6S214C34v112Ev
  virtual void  v113(); // _ZN6S214C34v113Ev
  S214C3(); // tgen
};
//SIG(-1 S214C3) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S214C3 ::~S214C3(){ note_dtor("S214C3", this);}
void  S214C3 ::v110(){vfunc_called(this, "_ZN6S214C34v110Ev");}
void  S214C3 ::v111(){vfunc_called(this, "_ZN6S214C34v111Ev");}
void  S214C3 ::v112(){vfunc_called(this, "_ZN6S214C34v112Ev");}
void  S214C3 ::v113(){vfunc_called(this, "_ZN6S214C34v113Ev");}
S214C3 ::S214C3(){ note_ctor("S214C3", this);} // tgen

static void Test_S214C3()
{
  extern Class_Descriptor cd_S214C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S214C3, buf);
    S214C3 *dp, &lv = *(dp=new (buf) S214C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S214C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S214C3)");
    check_base_class_offset(lv, (S214C6*)(S214C5*)(S214C4*), 0, "S214C3");
    check_base_class_offset(lv, (S214C5*)(S214C4*), 0, "S214C3");
    check_base_class_offset(lv, (S214C4*), 0, "S214C3");
    check_field_offset(lv, s214c3f0, ABISELECT(268,196), "S214C3.s214c3f0");
    set_bf_and_test(lv, s214c3f1, ABISELECT(276,204), 0, 1, 1, "S214C3");
    check_field_offset(lv, s214c3f2, ABISELECT(280,208), "S214C3.s214c3f2");
    test_class_info(&lv, &cd_S214C3);
    dp->~S214C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS214C3(Test_S214C3, "S214C3", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S214C3C1Ev();
extern void _ZN6S214C3D1Ev();
Name_Map name_map_S214C3[] = {
  NSPAIR(_ZN6S214C3C1Ev),
  NSPAIR(_ZN6S214C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S214C6;
extern VTBL_ENTRY _ZTI6S214C6[];
extern  VTBL_ENTRY _ZTV6S214C6[];
extern Class_Descriptor cd_S214C5;
extern VTBL_ENTRY _ZTI6S214C5[];
extern  VTBL_ENTRY _ZTV6S214C5[];
extern Class_Descriptor cd_S214C4;
extern VTBL_ENTRY _ZTI6S214C4[];
extern  VTBL_ENTRY _ZTV6S214C4[];
static Base_Class bases_S214C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S214C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S214C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S214C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S214C3[];
extern void _ZN6S214C3D1Ev();
extern void _ZN6S214C3D0Ev();
extern void _ZN6S214C62v4Ev();
extern void _ZN6S214C62v5Ev();
extern void _ZN6S214C62v6Ev();
extern void _ZN6S214C62v7Ev();
extern void _ZN6S214C62v8Ev();
extern void _ZN6S214C62v9Ev();
extern void _ZN6S214C63v10Ev();
extern void _ZN6S214C63v11Ev();
extern void _ZN6S214C63v12Ev();
extern void _ZN6S214C63v13Ev();
extern void _ZN6S214C63v14Ev();
extern void _ZN6S214C63v15Ev();
extern void _ZN6S214C63v16Ev();
extern void _ZN6S214C63v17Ev();
extern void _ZN6S214C63v18Ev();
extern void _ZN6S214C63v19Ev();
extern void _ZN6S214C63v20Ev();
extern void _ZN6S214C63v21Ev();
extern void _ZN6S214C63v22Ev();
extern void _ZN6S214C63v23Ev();
extern void _ZN6S214C63v24Ev();
extern void _ZN6S214C63v25Ev();
extern void _ZN6S214C63v26Ev();
extern void _ZN6S214C63v27Ev();
extern void _ZN6S214C63v28Ev();
extern void _ZN6S214C63v29Ev();
extern void _ZN6S214C63v30Ev();
extern void _ZN6S214C63v31Ev();
extern void _ZN6S214C63v32Ev();
extern void _ZN6S214C63v33Ev();
extern void _ZN6S214C63v34Ev();
extern void _ZN6S214C63v35Ev();
extern void _ZN6S214C63v36Ev();
extern void _ZN6S214C63v37Ev();
extern void _ZN6S214C63v38Ev();
extern void _ZN6S214C63v39Ev();
extern void _ZN6S214C63v40Ev();
extern void _ZN6S214C63v41Ev();
extern void _ZN6S214C63v42Ev();
extern void _ZN6S214C63v43Ev();
extern void _ZN6S214C63v44Ev();
extern void _ZN6S214C63v45Ev();
extern void _ZN6S214C63v46Ev();
extern void _ZN6S214C63v47Ev();
extern void _ZN6S214C63v48Ev();
extern void _ZN6S214C63v49Ev();
extern void _ZN6S214C63v50Ev();
extern void _ZN6S214C63v51Ev();
extern void _ZN6S214C63v52Ev();
extern void _ZN6S214C63v53Ev();
extern void _ZN6S214C63v54Ev();
extern void _ZN6S214C63v55Ev();
extern void _ZN6S214C63v56Ev();
extern void _ZN6S214C63v57Ev();
extern void _ZN6S214C63v58Ev();
extern void _ZN6S214C63v59Ev();
extern void _ZN6S214C63v60Ev();
extern void _ZN6S214C63v61Ev();
extern void _ZN6S214C63v62Ev();
extern void _ZN6S214C63v63Ev();
extern void _ZN6S214C63v64Ev();
extern void _ZN6S214C63v65Ev();
extern void _ZN6S214C63v66Ev();
extern void _ZN6S214C63v67Ev();
extern void _ZN6S214C53v68Ev();
extern void _ZN6S214C53v69Ev();
extern void _ZN6S214C53v70Ev();
extern void _ZN6S214C53v71Ev();
extern void _ZN6S214C53v72Ev();
extern void _ZN6S214C53v73Ev();
extern void _ZN6S214C53v74Ev();
extern void _ZN6S214C53v75Ev();
extern void _ZN6S214C53v76Ev();
extern void _ZN6S214C53v77Ev();
extern void _ZN6S214C53v78Ev();
extern void _ZN6S214C53v79Ev();
extern void _ZN6S214C53v80Ev();
extern void _ZN6S214C53v81Ev();
extern void _ZN6S214C53v82Ev();
extern void _ZN6S214C53v83Ev();
extern void _ZN6S214C53v84Ev();
extern void _ZN6S214C53v85Ev();
extern void _ZN6S214C53v86Ev();
extern void _ZN6S214C53v87Ev();
extern void _ZN6S214C53v88Ev();
extern void _ZN6S214C53v89Ev();
extern void _ZN6S214C43v90Ev();
extern void _ZN6S214C43v91Ev();
extern void _ZN6S214C43v92Ev();
extern void _ZN6S214C43v93Ev();
extern void _ZN6S214C43v94Ev();
extern void _ZN6S214C43v95Ev();
extern void _ZN6S214C43v96Ev();
extern void _ZN6S214C43v97Ev();
extern void _ZN6S214C43v98Ev();
extern void _ZN6S214C43v99Ev();
extern void _ZN6S214C44v100Ev();
extern void _ZN6S214C44v101Ev();
extern void _ZN6S214C44v102Ev();
extern void _ZN6S214C44v103Ev();
extern void _ZN6S214C44v104Ev();
extern void _ZN6S214C44v105Ev();
extern void _ZN6S214C44v106Ev();
extern void _ZN6S214C44v107Ev();
extern void _ZN6S214C44v108Ev();
extern void _ZN6S214C44v109Ev();
extern void _ZN6S214C34v110Ev();
extern void _ZN6S214C34v111Ev();
extern void _ZN6S214C34v112Ev();
extern void _ZN6S214C34v113Ev();
static  VTBL_ENTRY vtc_S214C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S214C3[0]),
  (VTBL_ENTRY)&_ZN6S214C3D1Ev,
  (VTBL_ENTRY)&_ZN6S214C3D0Ev,
  (VTBL_ENTRY)&_ZN6S214C62v4Ev,
  (VTBL_ENTRY)&_ZN6S214C62v5Ev,
  (VTBL_ENTRY)&_ZN6S214C62v6Ev,
  (VTBL_ENTRY)&_ZN6S214C62v7Ev,
  (VTBL_ENTRY)&_ZN6S214C62v8Ev,
  (VTBL_ENTRY)&_ZN6S214C62v9Ev,
  (VTBL_ENTRY)&_ZN6S214C63v10Ev,
  (VTBL_ENTRY)&_ZN6S214C63v11Ev,
  (VTBL_ENTRY)&_ZN6S214C63v12Ev,
  (VTBL_ENTRY)&_ZN6S214C63v13Ev,
  (VTBL_ENTRY)&_ZN6S214C63v14Ev,
  (VTBL_ENTRY)&_ZN6S214C63v15Ev,
  (VTBL_ENTRY)&_ZN6S214C63v16Ev,
  (VTBL_ENTRY)&_ZN6S214C63v17Ev,
  (VTBL_ENTRY)&_ZN6S214C63v18Ev,
  (VTBL_ENTRY)&_ZN6S214C63v19Ev,
  (VTBL_ENTRY)&_ZN6S214C63v20Ev,
  (VTBL_ENTRY)&_ZN6S214C63v21Ev,
  (VTBL_ENTRY)&_ZN6S214C63v22Ev,
  (VTBL_ENTRY)&_ZN6S214C63v23Ev,
  (VTBL_ENTRY)&_ZN6S214C63v24Ev,
  (VTBL_ENTRY)&_ZN6S214C63v25Ev,
  (VTBL_ENTRY)&_ZN6S214C63v26Ev,
  (VTBL_ENTRY)&_ZN6S214C63v27Ev,
  (VTBL_ENTRY)&_ZN6S214C63v28Ev,
  (VTBL_ENTRY)&_ZN6S214C63v29Ev,
  (VTBL_ENTRY)&_ZN6S214C63v30Ev,
  (VTBL_ENTRY)&_ZN6S214C63v31Ev,
  (VTBL_ENTRY)&_ZN6S214C63v32Ev,
  (VTBL_ENTRY)&_ZN6S214C63v33Ev,
  (VTBL_ENTRY)&_ZN6S214C63v34Ev,
  (VTBL_ENTRY)&_ZN6S214C63v35Ev,
  (VTBL_ENTRY)&_ZN6S214C63v36Ev,
  (VTBL_ENTRY)&_ZN6S214C63v37Ev,
  (VTBL_ENTRY)&_ZN6S214C63v38Ev,
  (VTBL_ENTRY)&_ZN6S214C63v39Ev,
  (VTBL_ENTRY)&_ZN6S214C63v40Ev,
  (VTBL_ENTRY)&_ZN6S214C63v41Ev,
  (VTBL_ENTRY)&_ZN6S214C63v42Ev,
  (VTBL_ENTRY)&_ZN6S214C63v43Ev,
  (VTBL_ENTRY)&_ZN6S214C63v44Ev,
  (VTBL_ENTRY)&_ZN6S214C63v45Ev,
  (VTBL_ENTRY)&_ZN6S214C63v46Ev,
  (VTBL_ENTRY)&_ZN6S214C63v47Ev,
  (VTBL_ENTRY)&_ZN6S214C63v48Ev,
  (VTBL_ENTRY)&_ZN6S214C63v49Ev,
  (VTBL_ENTRY)&_ZN6S214C63v50Ev,
  (VTBL_ENTRY)&_ZN6S214C63v51Ev,
  (VTBL_ENTRY)&_ZN6S214C63v52Ev,
  (VTBL_ENTRY)&_ZN6S214C63v53Ev,
  (VTBL_ENTRY)&_ZN6S214C63v54Ev,
  (VTBL_ENTRY)&_ZN6S214C63v55Ev,
  (VTBL_ENTRY)&_ZN6S214C63v56Ev,
  (VTBL_ENTRY)&_ZN6S214C63v57Ev,
  (VTBL_ENTRY)&_ZN6S214C63v58Ev,
  (VTBL_ENTRY)&_ZN6S214C63v59Ev,
  (VTBL_ENTRY)&_ZN6S214C63v60Ev,
  (VTBL_ENTRY)&_ZN6S214C63v61Ev,
  (VTBL_ENTRY)&_ZN6S214C63v62Ev,
  (VTBL_ENTRY)&_ZN6S214C63v63Ev,
  (VTBL_ENTRY)&_ZN6S214C63v64Ev,
  (VTBL_ENTRY)&_ZN6S214C63v65Ev,
  (VTBL_ENTRY)&_ZN6S214C63v66Ev,
  (VTBL_ENTRY)&_ZN6S214C63v67Ev,
  (VTBL_ENTRY)&_ZN6S214C53v68Ev,
  (VTBL_ENTRY)&_ZN6S214C53v69Ev,
  (VTBL_ENTRY)&_ZN6S214C53v70Ev,
  (VTBL_ENTRY)&_ZN6S214C53v71Ev,
  (VTBL_ENTRY)&_ZN6S214C53v72Ev,
  (VTBL_ENTRY)&_ZN6S214C53v73Ev,
  (VTBL_ENTRY)&_ZN6S214C53v74Ev,
  (VTBL_ENTRY)&_ZN6S214C53v75Ev,
  (VTBL_ENTRY)&_ZN6S214C53v76Ev,
  (VTBL_ENTRY)&_ZN6S214C53v77Ev,
  (VTBL_ENTRY)&_ZN6S214C53v78Ev,
  (VTBL_ENTRY)&_ZN6S214C53v79Ev,
  (VTBL_ENTRY)&_ZN6S214C53v80Ev,
  (VTBL_ENTRY)&_ZN6S214C53v81Ev,
  (VTBL_ENTRY)&_ZN6S214C53v82Ev,
  (VTBL_ENTRY)&_ZN6S214C53v83Ev,
  (VTBL_ENTRY)&_ZN6S214C53v84Ev,
  (VTBL_ENTRY)&_ZN6S214C53v85Ev,
  (VTBL_ENTRY)&_ZN6S214C53v86Ev,
  (VTBL_ENTRY)&_ZN6S214C53v87Ev,
  (VTBL_ENTRY)&_ZN6S214C53v88Ev,
  (VTBL_ENTRY)&_ZN6S214C53v89Ev,
  (VTBL_ENTRY)&_ZN6S214C43v90Ev,
  (VTBL_ENTRY)&_ZN6S214C43v91Ev,
  (VTBL_ENTRY)&_ZN6S214C43v92Ev,
  (VTBL_ENTRY)&_ZN6S214C43v93Ev,
  (VTBL_ENTRY)&_ZN6S214C43v94Ev,
  (VTBL_ENTRY)&_ZN6S214C43v95Ev,
  (VTBL_ENTRY)&_ZN6S214C43v96Ev,
  (VTBL_ENTRY)&_ZN6S214C43v97Ev,
  (VTBL_ENTRY)&_ZN6S214C43v98Ev,
  (VTBL_ENTRY)&_ZN6S214C43v99Ev,
  (VTBL_ENTRY)&_ZN6S214C44v100Ev,
  (VTBL_ENTRY)&_ZN6S214C44v101Ev,
  (VTBL_ENTRY)&_ZN6S214C44v102Ev,
  (VTBL_ENTRY)&_ZN6S214C44v103Ev,
  (VTBL_ENTRY)&_ZN6S214C44v104Ev,
  (VTBL_ENTRY)&_ZN6S214C44v105Ev,
  (VTBL_ENTRY)&_ZN6S214C44v106Ev,
  (VTBL_ENTRY)&_ZN6S214C44v107Ev,
  (VTBL_ENTRY)&_ZN6S214C44v108Ev,
  (VTBL_ENTRY)&_ZN6S214C44v109Ev,
  (VTBL_ENTRY)&_ZN6S214C34v110Ev,
  (VTBL_ENTRY)&_ZN6S214C34v111Ev,
  (VTBL_ENTRY)&_ZN6S214C34v112Ev,
  (VTBL_ENTRY)&_ZN6S214C34v113Ev,
};
extern VTBL_ENTRY _ZTI6S214C3[];
extern  VTBL_ENTRY _ZTV6S214C3[];
Class_Descriptor cd_S214C3 = {  "S214C3", // class name
  bases_S214C3, 3,
  &(vtc_S214C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S214C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S214C3),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S214C2  : S214C3 {
  virtual  ~S214C2(); // _ZN6S214C2D1Ev
  virtual void  v114(); // _ZN6S214C24v114Ev
  virtual void  v115(); // _ZN6S214C24v115Ev
  S214C2(); // tgen
};
//SIG(-1 S214C2) 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 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2}


 S214C2 ::~S214C2(){ note_dtor("S214C2", this);}
void  S214C2 ::v114(){vfunc_called(this, "_ZN6S214C24v114Ev");}
void  S214C2 ::v115(){vfunc_called(this, "_ZN6S214C24v115Ev");}
S214C2 ::S214C2(){ note_ctor("S214C2", this);} // tgen

static void Test_S214C2()
{
  extern Class_Descriptor cd_S214C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S214C2, buf);
    S214C2 *dp, &lv = *(dp=new (buf) S214C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S214C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S214C2)");
    check_base_class_offset(lv, (S214C6*)(S214C5*)(S214C4*)(S214C3*), 0, "S214C2");
    check_base_class_offset(lv, (S214C5*)(S214C4*)(S214C3*), 0, "S214C2");
    check_base_class_offset(lv, (S214C4*)(S214C3*), 0, "S214C2");
    check_base_class_offset(lv, (S214C3*), 0, "S214C2");
    test_class_info(&lv, &cd_S214C2);
    dp->~S214C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS214C2(Test_S214C2, "S214C2", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S214C2C1Ev();
extern void _ZN6S214C2D1Ev();
Name_Map name_map_S214C2[] = {
  NSPAIR(_ZN6S214C2C1Ev),
  NSPAIR(_ZN6S214C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S214C6;
extern VTBL_ENTRY _ZTI6S214C6[];
extern  VTBL_ENTRY _ZTV6S214C6[];
extern Class_Descriptor cd_S214C5;
extern VTBL_ENTRY _ZTI6S214C5[];
extern  VTBL_ENTRY _ZTV6S214C5[];
extern Class_Descriptor cd_S214C4;
extern VTBL_ENTRY _ZTI6S214C4[];
extern  VTBL_ENTRY _ZTV6S214C4[];
extern Class_Descriptor cd_S214C3;
extern VTBL_ENTRY _ZTI6S214C3[];
extern  VTBL_ENTRY _ZTV6S214C3[];
static Base_Class bases_S214C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S214C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S214C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S214C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S214C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S214C2[];
extern void _ZN6S214C2D1Ev();
extern void _ZN6S214C2D0Ev();
extern void _ZN6S214C62v4Ev();
extern void _ZN6S214C62v5Ev();
extern void _ZN6S214C62v6Ev();
extern void _ZN6S214C62v7Ev();
extern void _ZN6S214C62v8Ev();
extern void _ZN6S214C62v9Ev();
extern void _ZN6S214C63v10Ev();
extern void _ZN6S214C63v11Ev();
extern void _ZN6S214C63v12Ev();
extern void _ZN6S214C63v13Ev();
extern void _ZN6S214C63v14Ev();
extern void _ZN6S214C63v15Ev();
extern void _ZN6S214C63v16Ev();
extern void _ZN6S214C63v17Ev();
extern void _ZN6S214C63v18Ev();
extern void _ZN6S214C63v19Ev();
extern void _ZN6S214C63v20Ev();
extern void _ZN6S214C63v21Ev();
extern void _ZN6S214C63v22Ev();
extern void _ZN6S214C63v23Ev();
extern void _ZN6S214C63v24Ev();
extern void _ZN6S214C63v25Ev();
extern void _ZN6S214C63v26Ev();
extern void _ZN6S214C63v27Ev();
extern void _ZN6S214C63v28Ev();
extern void _ZN6S214C63v29Ev();
extern void _ZN6S214C63v30Ev();
extern void _ZN6S214C63v31Ev();
extern void _ZN6S214C63v32Ev();
extern void _ZN6S214C63v33Ev();
extern void _ZN6S214C63v34Ev();
extern void _ZN6S214C63v35Ev();
extern void _ZN6S214C63v36Ev();
extern void _ZN6S214C63v37Ev();
extern void _ZN6S214C63v38Ev();
extern void _ZN6S214C63v39Ev();
extern void _ZN6S214C63v40Ev();
extern void _ZN6S214C63v41Ev();
extern void _ZN6S214C63v42Ev();
extern void _ZN6S214C63v43Ev();
extern void _ZN6S214C63v44Ev();
extern void _ZN6S214C63v45Ev();
extern void _ZN6S214C63v46Ev();
extern void _ZN6S214C63v47Ev();
extern void _ZN6S214C63v48Ev();
extern void _ZN6S214C63v49Ev();
extern void _ZN6S214C63v50Ev();
extern void _ZN6S214C63v51Ev();
extern void _ZN6S214C63v52Ev();
extern void _ZN6S214C63v53Ev();
extern void _ZN6S214C63v54Ev();
extern void _ZN6S214C63v55Ev();
extern void _ZN6S214C63v56Ev();
extern void _ZN6S214C63v57Ev();
extern void _ZN6S214C63v58Ev();
extern void _ZN6S214C63v59Ev();
extern void _ZN6S214C63v60Ev();
extern void _ZN6S214C63v61Ev();
extern void _ZN6S214C63v62Ev();
extern void _ZN6S214C63v63Ev();
extern void _ZN6S214C63v64Ev();
extern void _ZN6S214C63v65Ev();
extern void _ZN6S214C63v66Ev();
extern void _ZN6S214C63v67Ev();
extern void _ZN6S214C53v68Ev();
extern void _ZN6S214C53v69Ev();
extern void _ZN6S214C53v70Ev();
extern void _ZN6S214C53v71Ev();
extern void _ZN6S214C53v72Ev();
extern void _ZN6S214C53v73Ev();
extern void _ZN6S214C53v74Ev();
extern void _ZN6S214C53v75Ev();
extern void _ZN6S214C53v76Ev();
extern void _ZN6S214C53v77Ev();
extern void _ZN6S214C53v78Ev();
extern void _ZN6S214C53v79Ev();
extern void _ZN6S214C53v80Ev();
extern void _ZN6S214C53v81Ev();
extern void _ZN6S214C53v82Ev();
extern void _ZN6S214C53v83Ev();
extern void _ZN6S214C53v84Ev();
extern void _ZN6S214C53v85Ev();
extern void _ZN6S214C53v86Ev();
extern void _ZN6S214C53v87Ev();
extern void _ZN6S214C53v88Ev();
extern void _ZN6S214C53v89Ev();
extern void _ZN6S214C43v90Ev();
extern void _ZN6S214C43v91Ev();
extern void _ZN6S214C43v92Ev();
extern void _ZN6S214C43v93Ev();
extern void _ZN6S214C43v94Ev();
extern void _ZN6S214C43v95Ev();
extern void _ZN6S214C43v96Ev();
extern void _ZN6S214C43v97Ev();
extern void _ZN6S214C43v98Ev();
extern void _ZN6S214C43v99Ev();
extern void _ZN6S214C44v100Ev();
extern void _ZN6S214C44v101Ev();
extern void _ZN6S214C44v102Ev();
extern void _ZN6S214C44v103Ev();
extern void _ZN6S214C44v104Ev();
extern void _ZN6S214C44v105Ev();
extern void _ZN6S214C44v106Ev();
extern void _ZN6S214C44v107Ev();
extern void _ZN6S214C44v108Ev();
extern void _ZN6S214C44v109Ev();
extern void _ZN6S214C34v110Ev();
extern void _ZN6S214C34v111Ev();
extern void _ZN6S214C34v112Ev();
extern void _ZN6S214C34v113Ev();
extern void _ZN6S214C24v114Ev();
extern void _ZN6S214C24v115Ev();
static  VTBL_ENTRY vtc_S214C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S214C2[0]),
  (VTBL_ENTRY)&_ZN6S214C2D1Ev,
  (VTBL_ENTRY)&_ZN6S214C2D0Ev,
  (VTBL_ENTRY)&_ZN6S214C62v4Ev,
  (VTBL_ENTRY)&_ZN6S214C62v5Ev,
  (VTBL_ENTRY)&_ZN6S214C62v6Ev,
  (VTBL_ENTRY)&_ZN6S214C62v7Ev,
  (VTBL_ENTRY)&_ZN6S214C62v8Ev,
  (VTBL_ENTRY)&_ZN6S214C62v9Ev,
  (VTBL_ENTRY)&_ZN6S214C63v10Ev,
  (VTBL_ENTRY)&_ZN6S214C63v11Ev,
  (VTBL_ENTRY)&_ZN6S214C63v12Ev,
  (VTBL_ENTRY)&_ZN6S214C63v13Ev,
  (VTBL_ENTRY)&_ZN6S214C63v14Ev,
  (VTBL_ENTRY)&_ZN6S214C63v15Ev,
  (VTBL_ENTRY)&_ZN6S214C63v16Ev,
  (VTBL_ENTRY)&_ZN6S214C63v17Ev,
  (VTBL_ENTRY)&_ZN6S214C63v18Ev,
  (VTBL_ENTRY)&_ZN6S214C63v19Ev,
  (VTBL_ENTRY)&_ZN6S214C63v20Ev,
  (VTBL_ENTRY)&_ZN6S214C63v21Ev,
  (VTBL_ENTRY)&_ZN6S214C63v22Ev,
  (VTBL_ENTRY)&_ZN6S214C63v23Ev,
  (VTBL_ENTRY)&_ZN6S214C63v24Ev,
  (VTBL_ENTRY)&_ZN6S214C63v25Ev,
  (VTBL_ENTRY)&_ZN6S214C63v26Ev,
  (VTBL_ENTRY)&_ZN6S214C63v27Ev,
  (VTBL_ENTRY)&_ZN6S214C63v28Ev,
  (VTBL_ENTRY)&_ZN6S214C63v29Ev,
  (VTBL_ENTRY)&_ZN6S214C63v30Ev,
  (VTBL_ENTRY)&_ZN6S214C63v31Ev,
  (VTBL_ENTRY)&_ZN6S214C63v32Ev,
  (VTBL_ENTRY)&_ZN6S214C63v33Ev,
  (VTBL_ENTRY)&_ZN6S214C63v34Ev,
  (VTBL_ENTRY)&_ZN6S214C63v35Ev,
  (VTBL_ENTRY)&_ZN6S214C63v36Ev,
  (VTBL_ENTRY)&_ZN6S214C63v37Ev,
  (VTBL_ENTRY)&_ZN6S214C63v38Ev,
  (VTBL_ENTRY)&_ZN6S214C63v39Ev,
  (VTBL_ENTRY)&_ZN6S214C63v40Ev,
  (VTBL_ENTRY)&_ZN6S214C63v41Ev,
  (VTBL_ENTRY)&_ZN6S214C63v42Ev,
  (VTBL_ENTRY)&_ZN6S214C63v43Ev,
  (VTBL_ENTRY)&_ZN6S214C63v44Ev,
  (VTBL_ENTRY)&_ZN6S214C63v45Ev,
  (VTBL_ENTRY)&_ZN6S214C63v46Ev,
  (VTBL_ENTRY)&_ZN6S214C63v47Ev,
  (VTBL_ENTRY)&_ZN6S214C63v48Ev,
  (VTBL_ENTRY)&_ZN6S214C63v49Ev,
  (VTBL_ENTRY)&_ZN6S214C63v50Ev,
  (VTBL_ENTRY)&_ZN6S214C63v51Ev,
  (VTBL_ENTRY)&_ZN6S214C63v52Ev,
  (VTBL_ENTRY)&_ZN6S214C63v53Ev,
  (VTBL_ENTRY)&_ZN6S214C63v54Ev,
  (VTBL_ENTRY)&_ZN6S214C63v55Ev,
  (VTBL_ENTRY)&_ZN6S214C63v56Ev,
  (VTBL_ENTRY)&_ZN6S214C63v57Ev,
  (VTBL_ENTRY)&_ZN6S214C63v58Ev,
  (VTBL_ENTRY)&_ZN6S214C63v59Ev,
  (VTBL_ENTRY)&_ZN6S214C63v60Ev,
  (VTBL_ENTRY)&_ZN6S214C63v61Ev,
  (VTBL_ENTRY)&_ZN6S214C63v62Ev,
  (VTBL_ENTRY)&_ZN6S214C63v63Ev,
  (VTBL_ENTRY)&_ZN6S214C63v64Ev,
  (VTBL_ENTRY)&_ZN6S214C63v65Ev,
  (VTBL_ENTRY)&_ZN6S214C63v66Ev,
  (VTBL_ENTRY)&_ZN6S214C63v67Ev,
  (VTBL_ENTRY)&_ZN6S214C53v68Ev,
  (VTBL_ENTRY)&_ZN6S214C53v69Ev,
  (VTBL_ENTRY)&_ZN6S214C53v70Ev,
  (VTBL_ENTRY)&_ZN6S214C53v71Ev,
  (VTBL_ENTRY)&_ZN6S214C53v72Ev,
  (VTBL_ENTRY)&_ZN6S214C53v73Ev,
  (VTBL_ENTRY)&_ZN6S214C53v74Ev,
  (VTBL_ENTRY)&_ZN6S214C53v75Ev,
  (VTBL_ENTRY)&_ZN6S214C53v76Ev,
  (VTBL_ENTRY)&_ZN6S214C53v77Ev,
  (VTBL_ENTRY)&_ZN6S214C53v78Ev,
  (VTBL_ENTRY)&_ZN6S214C53v79Ev,
  (VTBL_ENTRY)&_ZN6S214C53v80Ev,
  (VTBL_ENTRY)&_ZN6S214C53v81Ev,
  (VTBL_ENTRY)&_ZN6S214C53v82Ev,
  (VTBL_ENTRY)&_ZN6S214C53v83Ev,
  (VTBL_ENTRY)&_ZN6S214C53v84Ev,
  (VTBL_ENTRY)&_ZN6S214C53v85Ev,
  (VTBL_ENTRY)&_ZN6S214C53v86Ev,
  (VTBL_ENTRY)&_ZN6S214C53v87Ev,
  (VTBL_ENTRY)&_ZN6S214C53v88Ev,
  (VTBL_ENTRY)&_ZN6S214C53v89Ev,
  (VTBL_ENTRY)&_ZN6S214C43v90Ev,
  (VTBL_ENTRY)&_ZN6S214C43v91Ev,
  (VTBL_ENTRY)&_ZN6S214C43v92Ev,
  (VTBL_ENTRY)&_ZN6S214C43v93Ev,
  (VTBL_ENTRY)&_ZN6S214C43v94Ev,
  (VTBL_ENTRY)&_ZN6S214C43v95Ev,
  (VTBL_ENTRY)&_ZN6S214C43v96Ev,
  (VTBL_ENTRY)&_ZN6S214C43v97Ev,
  (VTBL_ENTRY)&_ZN6S214C43v98Ev,
  (VTBL_ENTRY)&_ZN6S214C43v99Ev,
  (VTBL_ENTRY)&_ZN6S214C44v100Ev,
  (VTBL_ENTRY)&_ZN6S214C44v101Ev,
  (VTBL_ENTRY)&_ZN6S214C44v102Ev,
  (VTBL_ENTRY)&_ZN6S214C44v103Ev,
  (VTBL_ENTRY)&_ZN6S214C44v104Ev,
  (VTBL_ENTRY)&_ZN6S214C44v105Ev,
  (VTBL_ENTRY)&_ZN6S214C44v106Ev,
  (VTBL_ENTRY)&_ZN6S214C44v107Ev,
  (VTBL_ENTRY)&_ZN6S214C44v108Ev,
  (VTBL_ENTRY)&_ZN6S214C44v109Ev,
  (VTBL_ENTRY)&_ZN6S214C34v110Ev,
  (VTBL_ENTRY)&_ZN6S214C34v111Ev,
  (VTBL_ENTRY)&_ZN6S214C34v112Ev,
  (VTBL_ENTRY)&_ZN6S214C34v113Ev,
  (VTBL_ENTRY)&_ZN6S214C24v114Ev,
  (VTBL_ENTRY)&_ZN6S214C24v115Ev,
};
extern VTBL_ENTRY _ZTI6S214C2[];
extern  VTBL_ENTRY _ZTV6S214C2[];
Class_Descriptor cd_S214C2 = {  "S214C2", // class name
  bases_S214C2, 4,
  &(vtc_S214C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S214C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S214C2),116, //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  S214C1  : S214C2 {
  void *s214c1f0[2];
  virtual  ~S214C1(); // _ZN6S214C1D1Ev
  virtual void  v1(); // _ZN6S214C12v1Ev
  virtual void  v2(); // _ZN6S214C12v2Ev
  virtual void  v3(); // _ZN6S214C12v3Ev
  S214C1(); // tgen
};
//SIG(1 S214C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v110 v111 v112 v113 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v114 v115} vd v1 v2 v3 Fp[2]}


 S214C1 ::~S214C1(){ note_dtor("S214C1", this);}
void  S214C1 ::v1(){vfunc_called(this, "_ZN6S214C12v1Ev");}
void  S214C1 ::v2(){vfunc_called(this, "_ZN6S214C12v2Ev");}
void  S214C1 ::v3(){vfunc_called(this, "_ZN6S214C12v3Ev");}
S214C1 ::S214C1(){ note_ctor("S214C1", this);} // tgen

static void Test_S214C1()
{
  extern Class_Descriptor cd_S214C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,58)];
    init_test(&cd_S214C1, buf);
    S214C1 *dp, &lv = *(dp=new (buf) S214C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,228), "sizeof(S214C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S214C1)");
    check_base_class_offset(lv, (S214C6*)(S214C5*)(S214C4*)(S214C3*)(S214C2*), 0, "S214C1");
    check_base_class_offset(lv, (S214C5*)(S214C4*)(S214C3*)(S214C2*), 0, "S214C1");
    check_base_class_offset(lv, (S214C4*)(S214C3*)(S214C2*), 0, "S214C1");
    check_base_class_offset(lv, (S214C3*)(S214C2*), 0, "S214C1");
    check_base_class_offset(lv, (S214C2*), 0, "S214C1");
    check_field_offset(lv, s214c1f0, ABISELECT(296,220), "S214C1.s214c1f0");
    test_class_info(&lv, &cd_S214C1);
    dp->~S214C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS214C1(Test_S214C1, "S214C1", ABISELECT(312,228));

#else // __cplusplus

extern void _ZN6S214C1C1Ev();
extern void _ZN6S214C1D1Ev();
Name_Map name_map_S214C1[] = {
  NSPAIR(_ZN6S214C1C1Ev),
  NSPAIR(_ZN6S214C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S214C6;
extern VTBL_ENTRY _ZTI6S214C6[];
extern  VTBL_ENTRY _ZTV6S214C6[];
extern Class_Descriptor cd_S214C5;
extern VTBL_ENTRY _ZTI6S214C5[];
extern  VTBL_ENTRY _ZTV6S214C5[];
extern Class_Descriptor cd_S214C4;
extern VTBL_ENTRY _ZTI6S214C4[];
extern  VTBL_ENTRY _ZTV6S214C4[];
extern Class_Descriptor cd_S214C3;
extern VTBL_ENTRY _ZTI6S214C3[];
extern  VTBL_ENTRY _ZTV6S214C3[];
extern Class_Descriptor cd_S214C2;
extern VTBL_ENTRY _ZTI6S214C2[];
extern  VTBL_ENTRY _ZTV6S214C2[];
static Base_Class bases_S214C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S214C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S214C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S214C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S214C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S214C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S214C1[];
extern void _ZN6S214C1D1Ev();
extern void _ZN6S214C1D0Ev();
extern void _ZN6S214C62v4Ev();
extern void _ZN6S214C62v5Ev();
extern void _ZN6S214C62v6Ev();
extern void _ZN6S214C62v7Ev();
extern void _ZN6S214C62v8Ev();
extern void _ZN6S214C62v9Ev();
extern void _ZN6S214C63v10Ev();
extern void _ZN6S214C63v11Ev();
extern void _ZN6S214C63v12Ev();
extern void _ZN6S214C63v13Ev();
extern void _ZN6S214C63v14Ev();
extern void _ZN6S214C63v15Ev();
extern void _ZN6S214C63v16Ev();
extern void _ZN6S214C63v17Ev();
extern void _ZN6S214C63v18Ev();
extern void _ZN6S214C63v19Ev();
extern void _ZN6S214C63v20Ev();
extern void _ZN6S214C63v21Ev();
extern void _ZN6S214C63v22Ev();
extern void _ZN6S214C63v23Ev();
extern void _ZN6S214C63v24Ev();
extern void _ZN6S214C63v25Ev();
extern void _ZN6S214C63v26Ev();
extern void _ZN6S214C63v27Ev();
extern void _ZN6S214C63v28Ev();
extern void _ZN6S214C63v29Ev();
extern void _ZN6S214C63v30Ev();
extern void _ZN6S214C63v31Ev();
extern void _ZN6S214C63v32Ev();
extern void _ZN6S214C63v33Ev();
extern void _ZN6S214C63v34Ev();
extern void _ZN6S214C63v35Ev();
extern void _ZN6S214C63v36Ev();
extern void _ZN6S214C63v37Ev();
extern void _ZN6S214C63v38Ev();
extern void _ZN6S214C63v39Ev();
extern void _ZN6S214C63v40Ev();
extern void _ZN6S214C63v41Ev();
extern void _ZN6S214C63v42Ev();
extern void _ZN6S214C63v43Ev();
extern void _ZN6S214C63v44Ev();
extern void _ZN6S214C63v45Ev();
extern void _ZN6S214C63v46Ev();
extern void _ZN6S214C63v47Ev();
extern void _ZN6S214C63v48Ev();
extern void _ZN6S214C63v49Ev();
extern void _ZN6S214C63v50Ev();
extern void _ZN6S214C63v51Ev();
extern void _ZN6S214C63v52Ev();
extern void _ZN6S214C63v53Ev();
extern void _ZN6S214C63v54Ev();
extern void _ZN6S214C63v55Ev();
extern void _ZN6S214C63v56Ev();
extern void _ZN6S214C63v57Ev();
extern void _ZN6S214C63v58Ev();
extern void _ZN6S214C63v59Ev();
extern void _ZN6S214C63v60Ev();
extern void _ZN6S214C63v61Ev();
extern void _ZN6S214C63v62Ev();
extern void _ZN6S214C63v63Ev();
extern void _ZN6S214C63v64Ev();
extern void _ZN6S214C63v65Ev();
extern void _ZN6S214C63v66Ev();
extern void _ZN6S214C63v67Ev();
extern void _ZN6S214C53v68Ev();
extern void _ZN6S214C53v69Ev();
extern void _ZN6S214C53v70Ev();
extern void _ZN6S214C53v71Ev();
extern void _ZN6S214C53v72Ev();
extern void _ZN6S214C53v73Ev();
extern void _ZN6S214C53v74Ev();
extern void _ZN6S214C53v75Ev();
extern void _ZN6S214C53v76Ev();
extern void _ZN6S214C53v77Ev();
extern void _ZN6S214C53v78Ev();
extern void _ZN6S214C53v79Ev();
extern void _ZN6S214C53v80Ev();
extern void _ZN6S214C53v81Ev();
extern void _ZN6S214C53v82Ev();
extern void _ZN6S214C53v83Ev();
extern void _ZN6S214C53v84Ev();
extern void _ZN6S214C53v85Ev();
extern void _ZN6S214C53v86Ev();
extern void _ZN6S214C53v87Ev();
extern void _ZN6S214C53v88Ev();
extern void _ZN6S214C53v89Ev();
extern void _ZN6S214C43v90Ev();
extern void _ZN6S214C43v91Ev();
extern void _ZN6S214C43v92Ev();
extern void _ZN6S214C43v93Ev();
extern void _ZN6S214C43v94Ev();
extern void _ZN6S214C43v95Ev();
extern void _ZN6S214C43v96Ev();
extern void _ZN6S214C43v97Ev();
extern void _ZN6S214C43v98Ev();
extern void _ZN6S214C43v99Ev();
extern void _ZN6S214C44v100Ev();
extern void _ZN6S214C44v101Ev();
extern void _ZN6S214C44v102Ev();
extern void _ZN6S214C44v103Ev();
extern void _ZN6S214C44v104Ev();
extern void _ZN6S214C44v105Ev();
extern void _ZN6S214C44v106Ev();
extern void _ZN6S214C44v107Ev();
extern void _ZN6S214C44v108Ev();
extern void _ZN6S214C44v109Ev();
extern void _ZN6S214C34v110Ev();
extern void _ZN6S214C34v111Ev();
extern void _ZN6S214C34v112Ev();
extern void _ZN6S214C34v113Ev();
extern void _ZN6S214C24v114Ev();
extern void _ZN6S214C24v115Ev();
extern void _ZN6S214C12v1Ev();
extern void _ZN6S214C12v2Ev();
extern void _ZN6S214C12v3Ev();
static  VTBL_ENTRY vtc_S214C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S214C1[0]),
  (VTBL_ENTRY)&_ZN6S214C1D1Ev,
  (VTBL_ENTRY)&_ZN6S214C1D0Ev,
  (VTBL_ENTRY)&_ZN6S214C62v4Ev,
  (VTBL_ENTRY)&_ZN6S214C62v5Ev,
  (VTBL_ENTRY)&_ZN6S214C62v6Ev,
  (VTBL_ENTRY)&_ZN6S214C62v7Ev,
  (VTBL_ENTRY)&_ZN6S214C62v8Ev,
  (VTBL_ENTRY)&_ZN6S214C62v9Ev,
  (VTBL_ENTRY)&_ZN6S214C63v10Ev,
  (VTBL_ENTRY)&_ZN6S214C63v11Ev,
  (VTBL_ENTRY)&_ZN6S214C63v12Ev,
  (VTBL_ENTRY)&_ZN6S214C63v13Ev,
  (VTBL_ENTRY)&_ZN6S214C63v14Ev,
  (VTBL_ENTRY)&_ZN6S214C63v15Ev,
  (VTBL_ENTRY)&_ZN6S214C63v16Ev,
  (VTBL_ENTRY)&_ZN6S214C63v17Ev,
  (VTBL_ENTRY)&_ZN6S214C63v18Ev,
  (VTBL_ENTRY)&_ZN6S214C63v19Ev,
  (VTBL_ENTRY)&_ZN6S214C63v20Ev,
  (VTBL_ENTRY)&_ZN6S214C63v21Ev,
  (VTBL_ENTRY)&_ZN6S214C63v22Ev,
  (VTBL_ENTRY)&_ZN6S214C63v23Ev,
  (VTBL_ENTRY)&_ZN6S214C63v24Ev,
  (VTBL_ENTRY)&_ZN6S214C63v25Ev,
  (VTBL_ENTRY)&_ZN6S214C63v26Ev,
  (VTBL_ENTRY)&_ZN6S214C63v27Ev,
  (VTBL_ENTRY)&_ZN6S214C63v28Ev,
  (VTBL_ENTRY)&_ZN6S214C63v29Ev,
  (VTBL_ENTRY)&_ZN6S214C63v30Ev,
  (VTBL_ENTRY)&_ZN6S214C63v31Ev,
  (VTBL_ENTRY)&_ZN6S214C63v32Ev,
  (VTBL_ENTRY)&_ZN6S214C63v33Ev,
  (VTBL_ENTRY)&_ZN6S214C63v34Ev,
  (VTBL_ENTRY)&_ZN6S214C63v35Ev,
  (VTBL_ENTRY)&_ZN6S214C63v36Ev,
  (VTBL_ENTRY)&_ZN6S214C63v37Ev,
  (VTBL_ENTRY)&_ZN6S214C63v38Ev,
  (VTBL_ENTRY)&_ZN6S214C63v39Ev,
  (VTBL_ENTRY)&_ZN6S214C63v40Ev,
  (VTBL_ENTRY)&_ZN6S214C63v41Ev,
  (VTBL_ENTRY)&_ZN6S214C63v42Ev,
  (VTBL_ENTRY)&_ZN6S214C63v43Ev,
  (VTBL_ENTRY)&_ZN6S214C63v44Ev,
  (VTBL_ENTRY)&_ZN6S214C63v45Ev,
  (VTBL_ENTRY)&_ZN6S214C63v46Ev,
  (VTBL_ENTRY)&_ZN6S214C63v47Ev,
  (VTBL_ENTRY)&_ZN6S214C63v48Ev,
  (VTBL_ENTRY)&_ZN6S214C63v49Ev,
  (VTBL_ENTRY)&_ZN6S214C63v50Ev,
  (VTBL_ENTRY)&_ZN6S214C63v51Ev,
  (VTBL_ENTRY)&_ZN6S214C63v52Ev,
  (VTBL_ENTRY)&_ZN6S214C63v53Ev,
  (VTBL_ENTRY)&_ZN6S214C63v54Ev,
  (VTBL_ENTRY)&_ZN6S214C63v55Ev,
  (VTBL_ENTRY)&_ZN6S214C63v56Ev,
  (VTBL_ENTRY)&_ZN6S214C63v57Ev,
  (VTBL_ENTRY)&_ZN6S214C63v58Ev,
  (VTBL_ENTRY)&_ZN6S214C63v59Ev,
  (VTBL_ENTRY)&_ZN6S214C63v60Ev,
  (VTBL_ENTRY)&_ZN6S214C63v61Ev,
  (VTBL_ENTRY)&_ZN6S214C63v62Ev,
  (VTBL_ENTRY)&_ZN6S214C63v63Ev,
  (VTBL_ENTRY)&_ZN6S214C63v64Ev,
  (VTBL_ENTRY)&_ZN6S214C63v65Ev,
  (VTBL_ENTRY)&_ZN6S214C63v66Ev,
  (VTBL_ENTRY)&_ZN6S214C63v67Ev,
  (VTBL_ENTRY)&_ZN6S214C53v68Ev,
  (VTBL_ENTRY)&_ZN6S214C53v69Ev,
  (VTBL_ENTRY)&_ZN6S214C53v70Ev,
  (VTBL_ENTRY)&_ZN6S214C53v71Ev,
  (VTBL_ENTRY)&_ZN6S214C53v72Ev,
  (VTBL_ENTRY)&_ZN6S214C53v73Ev,
  (VTBL_ENTRY)&_ZN6S214C53v74Ev,
  (VTBL_ENTRY)&_ZN6S214C53v75Ev,
  (VTBL_ENTRY)&_ZN6S214C53v76Ev,
  (VTBL_ENTRY)&_ZN6S214C53v77Ev,
  (VTBL_ENTRY)&_ZN6S214C53v78Ev,
  (VTBL_ENTRY)&_ZN6S214C53v79Ev,
  (VTBL_ENTRY)&_ZN6S214C53v80Ev,
  (VTBL_ENTRY)&_ZN6S214C53v81Ev,
  (VTBL_ENTRY)&_ZN6S214C53v82Ev,
  (VTBL_ENTRY)&_ZN6S214C53v83Ev,
  (VTBL_ENTRY)&_ZN6S214C53v84Ev,
  (VTBL_ENTRY)&_ZN6S214C53v85Ev,
  (VTBL_ENTRY)&_ZN6S214C53v86Ev,
  (VTBL_ENTRY)&_ZN6S214C53v87Ev,
  (VTBL_ENTRY)&_ZN6S214C53v88Ev,
  (VTBL_ENTRY)&_ZN6S214C53v89Ev,
  (VTBL_ENTRY)&_ZN6S214C43v90Ev,
  (VTBL_ENTRY)&_ZN6S214C43v91Ev,
  (VTBL_ENTRY)&_ZN6S214C43v92Ev,
  (VTBL_ENTRY)&_ZN6S214C43v93Ev,
  (VTBL_ENTRY)&_ZN6S214C43v94Ev,
  (VTBL_ENTRY)&_ZN6S214C43v95Ev,
  (VTBL_ENTRY)&_ZN6S214C43v96Ev,
  (VTBL_ENTRY)&_ZN6S214C43v97Ev,
  (VTBL_ENTRY)&_ZN6S214C43v98Ev,
  (VTBL_ENTRY)&_ZN6S214C43v99Ev,
  (VTBL_ENTRY)&_ZN6S214C44v100Ev,
  (VTBL_ENTRY)&_ZN6S214C44v101Ev,
  (VTBL_ENTRY)&_ZN6S214C44v102Ev,
  (VTBL_ENTRY)&_ZN6S214C44v103Ev,
  (VTBL_ENTRY)&_ZN6S214C44v104Ev,
  (VTBL_ENTRY)&_ZN6S214C44v105Ev,
  (VTBL_ENTRY)&_ZN6S214C44v106Ev,
  (VTBL_ENTRY)&_ZN6S214C44v107Ev,
  (VTBL_ENTRY)&_ZN6S214C44v108Ev,
  (VTBL_ENTRY)&_ZN6S214C44v109Ev,
  (VTBL_ENTRY)&_ZN6S214C34v110Ev,
  (VTBL_ENTRY)&_ZN6S214C34v111Ev,
  (VTBL_ENTRY)&_ZN6S214C34v112Ev,
  (VTBL_ENTRY)&_ZN6S214C34v113Ev,
  (VTBL_ENTRY)&_ZN6S214C24v114Ev,
  (VTBL_ENTRY)&_ZN6S214C24v115Ev,
  (VTBL_ENTRY)&_ZN6S214C12v1Ev,
  (VTBL_ENTRY)&_ZN6S214C12v2Ev,
  (VTBL_ENTRY)&_ZN6S214C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S214C1[];
extern  VTBL_ENTRY _ZTV6S214C1[];
Class_Descriptor cd_S214C1 = {  "S214C1", // class name
  bases_S214C1, 5,
  &(vtc_S214C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,228), // object size
  NSPAIRA(_ZTI6S214C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S214C1),119, //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  S213C6  {
  int s213c6f0;
  __tsi64 s213c6f1;
  void *s213c6f2[4];
  int s213c6f3[2];
  void *s213c6f4;
  ::S1503C5_nt s213c6f5;
  void *s213c6f6[2];
  virtual  ~S213C6(); // _ZN6S213C6D1Ev
  virtual void  v4(); // _ZN6S213C62v4Ev
  virtual void  v5(); // _ZN6S213C62v5Ev
  virtual void  v6(); // _ZN6S213C62v6Ev
  virtual void  v7(); // _ZN6S213C62v7Ev
  virtual void  v8(); // _ZN6S213C62v8Ev
  virtual void  v9(); // _ZN6S213C62v9Ev
  virtual void  v10(); // _ZN6S213C63v10Ev
  virtual void  v11(); // _ZN6S213C63v11Ev
  virtual void  v12(); // _ZN6S213C63v12Ev
  virtual void  v13(); // _ZN6S213C63v13Ev
  virtual void  v14(); // _ZN6S213C63v14Ev
  virtual void  v15(); // _ZN6S213C63v15Ev
  virtual void  v16(); // _ZN6S213C63v16Ev
  virtual void  v17(); // _ZN6S213C63v17Ev
  virtual void  v18(); // _ZN6S213C63v18Ev
  virtual void  v19(); // _ZN6S213C63v19Ev
  virtual void  v20(); // _ZN6S213C63v20Ev
  virtual void  v21(); // _ZN6S213C63v21Ev
  virtual void  v22(); // _ZN6S213C63v22Ev
  virtual void  v23(); // _ZN6S213C63v23Ev
  virtual void  v24(); // _ZN6S213C63v24Ev
  virtual void  v25(); // _ZN6S213C63v25Ev
  virtual void  v26(); // _ZN6S213C63v26Ev
  virtual void  v27(); // _ZN6S213C63v27Ev
  virtual void  v28(); // _ZN6S213C63v28Ev
  virtual void  v29(); // _ZN6S213C63v29Ev
  virtual void  v30(); // _ZN6S213C63v30Ev
  virtual void  v31(); // _ZN6S213C63v31Ev
  virtual void  v32(); // _ZN6S213C63v32Ev
  virtual void  v33(); // _ZN6S213C63v33Ev
  virtual void  v34(); // _ZN6S213C63v34Ev
  virtual void  v35(); // _ZN6S213C63v35Ev
  virtual void  v36(); // _ZN6S213C63v36Ev
  virtual void  v37(); // _ZN6S213C63v37Ev
  virtual void  v38(); // _ZN6S213C63v38Ev
  virtual void  v39(); // _ZN6S213C63v39Ev
  virtual void  v40(); // _ZN6S213C63v40Ev
  virtual void  v41(); // _ZN6S213C63v41Ev
  virtual void  v42(); // _ZN6S213C63v42Ev
  virtual void  v43(); // _ZN6S213C63v43Ev
  virtual void  v44(); // _ZN6S213C63v44Ev
  virtual void  v45(); // _ZN6S213C63v45Ev
  virtual void  v46(); // _ZN6S213C63v46Ev
  virtual void  v47(); // _ZN6S213C63v47Ev
  virtual void  v48(); // _ZN6S213C63v48Ev
  virtual void  v49(); // _ZN6S213C63v49Ev
  virtual void  v50(); // _ZN6S213C63v50Ev
  virtual void  v51(); // _ZN6S213C63v51Ev
  virtual void  v52(); // _ZN6S213C63v52Ev
  virtual void  v53(); // _ZN6S213C63v53Ev
  virtual void  v54(); // _ZN6S213C63v54Ev
  virtual void  v55(); // _ZN6S213C63v55Ev
  virtual void  v56(); // _ZN6S213C63v56Ev
  virtual void  v57(); // _ZN6S213C63v57Ev
  virtual void  v58(); // _ZN6S213C63v58Ev
  virtual void  v59(); // _ZN6S213C63v59Ev
  virtual void  v60(); // _ZN6S213C63v60Ev
  virtual void  v61(); // _ZN6S213C63v61Ev
  virtual void  v62(); // _ZN6S213C63v62Ev
  virtual void  v63(); // _ZN6S213C63v63Ev
  virtual void  v64(); // _ZN6S213C63v64Ev
  virtual void  v65(); // _ZN6S213C63v65Ev
  virtual void  v66(); // _ZN6S213C63v66Ev
  virtual void  v67(); // _ZN6S213C63v67Ev
  S213C6(); // tgen
};
//SIG(-1 S213C6) 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]}


 S213C6 ::~S213C6(){ note_dtor("S213C6", this);}
void  S213C6 ::v4(){vfunc_called(this, "_ZN6S213C62v4Ev");}
void  S213C6 ::v5(){vfunc_called(this, "_ZN6S213C62v5Ev");}
void  S213C6 ::v6(){vfunc_called(this, "_ZN6S213C62v6Ev");}
void  S213C6 ::v7(){vfunc_called(this, "_ZN6S213C62v7Ev");}
void  S213C6 ::v8(){vfunc_called(this, "_ZN6S213C62v8Ev");}
void  S213C6 ::v9(){vfunc_called(this, "_ZN6S213C62v9Ev");}
void  S213C6 ::v10(){vfunc_called(this, "_ZN6S213C63v10Ev");}
void  S213C6 ::v11(){vfunc_called(this, "_ZN6S213C63v11Ev");}
void  S213C6 ::v12(){vfunc_called(this, "_ZN6S213C63v12Ev");}
void  S213C6 ::v13(){vfunc_called(this, "_ZN6S213C63v13Ev");}
void  S213C6 ::v14(){vfunc_called(this, "_ZN6S213C63v14Ev");}
void  S213C6 ::v15(){vfunc_called(this, "_ZN6S213C63v15Ev");}
void  S213C6 ::v16(){vfunc_called(this, "_ZN6S213C63v16Ev");}
void  S213C6 ::v17(){vfunc_called(this, "_ZN6S213C63v17Ev");}
void  S213C6 ::v18(){vfunc_called(this, "_ZN6S213C63v18Ev");}
void  S213C6 ::v19(){vfunc_called(this, "_ZN6S213C63v19Ev");}
void  S213C6 ::v20(){vfunc_called(this, "_ZN6S213C63v20Ev");}
void  S213C6 ::v21(){vfunc_called(this, "_ZN6S213C63v21Ev");}
void  S213C6 ::v22(){vfunc_called(this, "_ZN6S213C63v22Ev");}
void  S213C6 ::v23(){vfunc_called(this, "_ZN6S213C63v23Ev");}
void  S213C6 ::v24(){vfunc_called(this, "_ZN6S213C63v24Ev");}
void  S213C6 ::v25(){vfunc_called(this, "_ZN6S213C63v25Ev");}
void  S213C6 ::v26(){vfunc_called(this, "_ZN6S213C63v26Ev");}
void  S213C6 ::v27(){vfunc_called(this, "_ZN6S213C63v27Ev");}
void  S213C6 ::v28(){vfunc_called(this, "_ZN6S213C63v28Ev");}
void  S213C6 ::v29(){vfunc_called(this, "_ZN6S213C63v29Ev");}
void  S213C6 ::v30(){vfunc_called(this, "_ZN6S213C63v30Ev");}
void  S213C6 ::v31(){vfunc_called(this, "_ZN6S213C63v31Ev");}
void  S213C6 ::v32(){vfunc_called(this, "_ZN6S213C63v32Ev");}
void  S213C6 ::v33(){vfunc_called(this, "_ZN6S213C63v33Ev");}
void  S213C6 ::v34(){vfunc_called(this, "_ZN6S213C63v34Ev");}
void  S213C6 ::v35(){vfunc_called(this, "_ZN6S213C63v35Ev");}
void  S213C6 ::v36(){vfunc_called(this, "_ZN6S213C63v36Ev");}
void  S213C6 ::v37(){vfunc_called(this, "_ZN6S213C63v37Ev");}
void  S213C6 ::v38(){vfunc_called(this, "_ZN6S213C63v38Ev");}
void  S213C6 ::v39(){vfunc_called(this, "_ZN6S213C63v39Ev");}
void  S213C6 ::v40(){vfunc_called(this, "_ZN6S213C63v40Ev");}
void  S213C6 ::v41(){vfunc_called(this, "_ZN6S213C63v41Ev");}
void  S213C6 ::v42(){vfunc_called(this, "_ZN6S213C63v42Ev");}
void  S213C6 ::v43(){vfunc_called(this, "_ZN6S213C63v43Ev");}
void  S213C6 ::v44(){vfunc_called(this, "_ZN6S213C63v44Ev");}
void  S213C6 ::v45(){vfunc_called(this, "_ZN6S213C63v45Ev");}
void  S213C6 ::v46(){vfunc_called(this, "_ZN6S213C63v46Ev");}
void  S213C6 ::v47(){vfunc_called(this, "_ZN6S213C63v47Ev");}
void  S213C6 ::v48(){vfunc_called(this, "_ZN6S213C63v48Ev");}
void  S213C6 ::v49(){vfunc_called(this, "_ZN6S213C63v49Ev");}
void  S213C6 ::v50(){vfunc_called(this, "_ZN6S213C63v50Ev");}
void  S213C6 ::v51(){vfunc_called(this, "_ZN6S213C63v51Ev");}
void  S213C6 ::v52(){vfunc_called(this, "_ZN6S213C63v52Ev");}
void  S213C6 ::v53(){vfunc_called(this, "_ZN6S213C63v53Ev");}
void  S213C6 ::v54(){vfunc_called(this, "_ZN6S213C63v54Ev");}
void  S213C6 ::v55(){vfunc_called(this, "_ZN6S213C63v55Ev");}
void  S213C6 ::v56(){vfunc_called(this, "_ZN6S213C63v56Ev");}
void  S213C6 ::v57(){vfunc_called(this, "_ZN6S213C63v57Ev");}
void  S213C6 ::v58(){vfunc_called(this, "_ZN6S213C63v58Ev");}
void  S213C6 ::v59(){vfunc_called(this, "_ZN6S213C63v59Ev");}
void  S213C6 ::v60(){vfunc_called(this, "_ZN6S213C63v60Ev");}
void  S213C6 ::v61(){vfunc_called(this, "_ZN6S213C63v61Ev");}
void  S213C6 ::v62(){vfunc_called(this, "_ZN6S213C63v62Ev");}
void  S213C6 ::v63(){vfunc_called(this, "_ZN6S213C63v63Ev");}
void  S213C6 ::v64(){vfunc_called(this, "_ZN6S213C63v64Ev");}
void  S213C6 ::v65(){vfunc_called(this, "_ZN6S213C63v65Ev");}
void  S213C6 ::v66(){vfunc_called(this, "_ZN6S213C63v66Ev");}
void  S213C6 ::v67(){vfunc_called(this, "_ZN6S213C63v67Ev");}
S213C6 ::S213C6(){ note_ctor("S213C6", this);} // tgen

static void Test_S213C6()
{
  extern Class_Descriptor cd_S213C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S213C6, buf);
    S213C6 *dp, &lv = *(dp=new (buf) S213C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S213C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S213C6)");
    check_field_offset(lv, s213c6f0, ABISELECT(8,4), "S213C6.s213c6f0");
    check_field_offset(lv, s213c6f1, ABISELECT(16,8), "S213C6.s213c6f1");
    check_field_offset(lv, s213c6f2, ABISELECT(24,16), "S213C6.s213c6f2");
    check_field_offset(lv, s213c6f3, ABISELECT(56,32), "S213C6.s213c6f3");
    check_field_offset(lv, s213c6f4, ABISELECT(64,40), "S213C6.s213c6f4");
    check_field_offset(lv, s213c6f5, ABISELECT(72,44), "S213C6.s213c6f5");
    check_field_offset(lv, s213c6f6, ABISELECT(80,52), "S213C6.s213c6f6");
    test_class_info(&lv, &cd_S213C6);
    dp->~S213C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS213C6(Test_S213C6, "S213C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S213C6C1Ev();
extern void _ZN6S213C6D1Ev();
Name_Map name_map_S213C6[] = {
  NSPAIR(_ZN6S213C6C1Ev),
  NSPAIR(_ZN6S213C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S213C6[];
extern void _ZN6S213C6D1Ev();
extern void _ZN6S213C6D0Ev();
extern void _ZN6S213C62v4Ev();
extern void _ZN6S213C62v5Ev();
extern void _ZN6S213C62v6Ev();
extern void _ZN6S213C62v7Ev();
extern void _ZN6S213C62v8Ev();
extern void _ZN6S213C62v9Ev();
extern void _ZN6S213C63v10Ev();
extern void _ZN6S213C63v11Ev();
extern void _ZN6S213C63v12Ev();
extern void _ZN6S213C63v13Ev();
extern void _ZN6S213C63v14Ev();
extern void _ZN6S213C63v15Ev();
extern void _ZN6S213C63v16Ev();
extern void _ZN6S213C63v17Ev();
extern void _ZN6S213C63v18Ev();
extern void _ZN6S213C63v19Ev();
extern void _ZN6S213C63v20Ev();
extern void _ZN6S213C63v21Ev();
extern void _ZN6S213C63v22Ev();
extern void _ZN6S213C63v23Ev();
extern void _ZN6S213C63v24Ev();
extern void _ZN6S213C63v25Ev();
extern void _ZN6S213C63v26Ev();
extern void _ZN6S213C63v27Ev();
extern void _ZN6S213C63v28Ev();
extern void _ZN6S213C63v29Ev();
extern void _ZN6S213C63v30Ev();
extern void _ZN6S213C63v31Ev();
extern void _ZN6S213C63v32Ev();
extern void _ZN6S213C63v33Ev();
extern void _ZN6S213C63v34Ev();
extern void _ZN6S213C63v35Ev();
extern void _ZN6S213C63v36Ev();
extern void _ZN6S213C63v37Ev();
extern void _ZN6S213C63v38Ev();
extern void _ZN6S213C63v39Ev();
extern void _ZN6S213C63v40Ev();
extern void _ZN6S213C63v41Ev();
extern void _ZN6S213C63v42Ev();
extern void _ZN6S213C63v43Ev();
extern void _ZN6S213C63v44Ev();
extern void _ZN6S213C63v45Ev();
extern void _ZN6S213C63v46Ev();
extern void _ZN6S213C63v47Ev();
extern void _ZN6S213C63v48Ev();
extern void _ZN6S213C63v49Ev();
extern void _ZN6S213C63v50Ev();
extern void _ZN6S213C63v51Ev();
extern void _ZN6S213C63v52Ev();
extern void _ZN6S213C63v53Ev();
extern void _ZN6S213C63v54Ev();
extern void _ZN6S213C63v55Ev();
extern void _ZN6S213C63v56Ev();
extern void _ZN6S213C63v57Ev();
extern void _ZN6S213C63v58Ev();
extern void _ZN6S213C63v59Ev();
extern void _ZN6S213C63v60Ev();
extern void _ZN6S213C63v61Ev();
extern void _ZN6S213C63v62Ev();
extern void _ZN6S213C63v63Ev();
extern void _ZN6S213C63v64Ev();
extern void _ZN6S213C63v65Ev();
extern void _ZN6S213C63v66Ev();
extern void _ZN6S213C63v67Ev();
static  VTBL_ENTRY vtc_S213C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S213C6[0]),
  (VTBL_ENTRY)&_ZN6S213C6D1Ev,
  (VTBL_ENTRY)&_ZN6S213C6D0Ev,
  (VTBL_ENTRY)&_ZN6S213C62v4Ev,
  (VTBL_ENTRY)&_ZN6S213C62v5Ev,
  (VTBL_ENTRY)&_ZN6S213C62v6Ev,
  (VTBL_ENTRY)&_ZN6S213C62v7Ev,
  (VTBL_ENTRY)&_ZN6S213C62v8Ev,
  (VTBL_ENTRY)&_ZN6S213C62v9Ev,
  (VTBL_ENTRY)&_ZN6S213C63v10Ev,
  (VTBL_ENTRY)&_ZN6S213C63v11Ev,
  (VTBL_ENTRY)&_ZN6S213C63v12Ev,
  (VTBL_ENTRY)&_ZN6S213C63v13Ev,
  (VTBL_ENTRY)&_ZN6S213C63v14Ev,
  (VTBL_ENTRY)&_ZN6S213C63v15Ev,
  (VTBL_ENTRY)&_ZN6S213C63v16Ev,
  (VTBL_ENTRY)&_ZN6S213C63v17Ev,
  (VTBL_ENTRY)&_ZN6S213C63v18Ev,
  (VTBL_ENTRY)&_ZN6S213C63v19Ev,
  (VTBL_ENTRY)&_ZN6S213C63v20Ev,
  (VTBL_ENTRY)&_ZN6S213C63v21Ev,
  (VTBL_ENTRY)&_ZN6S213C63v22Ev,
  (VTBL_ENTRY)&_ZN6S213C63v23Ev,
  (VTBL_ENTRY)&_ZN6S213C63v24Ev,
  (VTBL_ENTRY)&_ZN6S213C63v25Ev,
  (VTBL_ENTRY)&_ZN6S213C63v26Ev,
  (VTBL_ENTRY)&_ZN6S213C63v27Ev,
  (VTBL_ENTRY)&_ZN6S213C63v28Ev,
  (VTBL_ENTRY)&_ZN6S213C63v29Ev,
  (VTBL_ENTRY)&_ZN6S213C63v30Ev,
  (VTBL_ENTRY)&_ZN6S213C63v31Ev,
  (VTBL_ENTRY)&_ZN6S213C63v32Ev,
  (VTBL_ENTRY)&_ZN6S213C63v33Ev,
  (VTBL_ENTRY)&_ZN6S213C63v34Ev,
  (VTBL_ENTRY)&_ZN6S213C63v35Ev,
  (VTBL_ENTRY)&_ZN6S213C63v36Ev,
  (VTBL_ENTRY)&_ZN6S213C63v37Ev,
  (VTBL_ENTRY)&_ZN6S213C63v38Ev,
  (VTBL_ENTRY)&_ZN6S213C63v39Ev,
  (VTBL_ENTRY)&_ZN6S213C63v40Ev,
  (VTBL_ENTRY)&_ZN6S213C63v41Ev,
  (VTBL_ENTRY)&_ZN6S213C63v42Ev,
  (VTBL_ENTRY)&_ZN6S213C63v43Ev,
  (VTBL_ENTRY)&_ZN6S213C63v44Ev,
  (VTBL_ENTRY)&_ZN6S213C63v45Ev,
  (VTBL_ENTRY)&_ZN6S213C63v46Ev,
  (VTBL_ENTRY)&_ZN6S213C63v47Ev,
  (VTBL_ENTRY)&_ZN6S213C63v48Ev,
  (VTBL_ENTRY)&_ZN6S213C63v49Ev,
  (VTBL_ENTRY)&_ZN6S213C63v50Ev,
  (VTBL_ENTRY)&_ZN6S213C63v51Ev,
  (VTBL_ENTRY)&_ZN6S213C63v52Ev,
  (VTBL_ENTRY)&_ZN6S213C63v53Ev,
  (VTBL_ENTRY)&_ZN6S213C63v54Ev,
  (VTBL_ENTRY)&_ZN6S213C63v55Ev,
  (VTBL_ENTRY)&_ZN6S213C63v56Ev,
  (VTBL_ENTRY)&_ZN6S213C63v57Ev,
  (VTBL_ENTRY)&_ZN6S213C63v58Ev,
  (VTBL_ENTRY)&_ZN6S213C63v59Ev,
  (VTBL_ENTRY)&_ZN6S213C63v60Ev,
  (VTBL_ENTRY)&_ZN6S213C63v61Ev,
  (VTBL_ENTRY)&_ZN6S213C63v62Ev,
  (VTBL_ENTRY)&_ZN6S213C63v63Ev,
  (VTBL_ENTRY)&_ZN6S213C63v64Ev,
  (VTBL_ENTRY)&_ZN6S213C63v65Ev,
  (VTBL_ENTRY)&_ZN6S213C63v66Ev,
  (VTBL_ENTRY)&_ZN6S213C63v67Ev,
};
extern VTBL_ENTRY _ZTI6S213C6[];
extern  VTBL_ENTRY _ZTV6S213C6[];
Class_Descriptor cd_S213C6 = {  "S213C6", // class name
  0,0,//no base classes
  &(vtc_S213C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S213C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S213C6),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  S213C5  : S213C6 {
  int s213c5f0[2];
  void *s213c5f1;
  int s213c5f2[2];
  ::S210C8_nt s213c5f3;
  ::S210C8_nt s213c5f4;
  ::S629C14 s213c5f5;
  ::S210C8_nt s213c5f6;
  unsigned int s213c5f7:1;
  unsigned int s213c5f8:1;
  unsigned int s213c5f9:1;
  unsigned int s213c5f10:1;
  unsigned int s213c5f11:1;
  int s213c5f12[2];
  virtual  ~S213C5(); // _ZN6S213C5D1Ev
  virtual void  v68(); // _ZN6S213C53v68Ev
  virtual void  v69(); // _ZN6S213C53v69Ev
  virtual void  v70(); // _ZN6S213C53v70Ev
  virtual void  v71(); // _ZN6S213C53v71Ev
  virtual void  v72(); // _ZN6S213C53v72Ev
  virtual void  v73(); // _ZN6S213C53v73Ev
  virtual void  v74(); // _ZN6S213C53v74Ev
  virtual void  v75(); // _ZN6S213C53v75Ev
  virtual void  v76(); // _ZN6S213C53v76Ev
  virtual void  v77(); // _ZN6S213C53v77Ev
  virtual void  v78(); // _ZN6S213C53v78Ev
  virtual void  v79(); // _ZN6S213C53v79Ev
  virtual void  v80(); // _ZN6S213C53v80Ev
  virtual void  v81(); // _ZN6S213C53v81Ev
  virtual void  v82(); // _ZN6S213C53v82Ev
  virtual void  v83(); // _ZN6S213C53v83Ev
  virtual void  v84(); // _ZN6S213C53v84Ev
  virtual void  v85(); // _ZN6S213C53v85Ev
  virtual void  v86(); // _ZN6S213C53v86Ev
  virtual void  v87(); // _ZN6S213C53v87Ev
  virtual void  v88(); // _ZN6S213C53v88Ev
  virtual void  v89(); // _ZN6S213C53v89Ev
  S213C5(); // tgen
};
//SIG(-1 S213C5) 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]}


 S213C5 ::~S213C5(){ note_dtor("S213C5", this);}
void  S213C5 ::v68(){vfunc_called(this, "_ZN6S213C53v68Ev");}
void  S213C5 ::v69(){vfunc_called(this, "_ZN6S213C53v69Ev");}
void  S213C5 ::v70(){vfunc_called(this, "_ZN6S213C53v70Ev");}
void  S213C5 ::v71(){vfunc_called(this, "_ZN6S213C53v71Ev");}
void  S213C5 ::v72(){vfunc_called(this, "_ZN6S213C53v72Ev");}
void  S213C5 ::v73(){vfunc_called(this, "_ZN6S213C53v73Ev");}
void  S213C5 ::v74(){vfunc_called(this, "_ZN6S213C53v74Ev");}
void  S213C5 ::v75(){vfunc_called(this, "_ZN6S213C53v75Ev");}
void  S213C5 ::v76(){vfunc_called(this, "_ZN6S213C53v76Ev");}
void  S213C5 ::v77(){vfunc_called(this, "_ZN6S213C53v77Ev");}
void  S213C5 ::v78(){vfunc_called(this, "_ZN6S213C53v78Ev");}
void  S213C5 ::v79(){vfunc_called(this, "_ZN6S213C53v79Ev");}
void  S213C5 ::v80(){vfunc_called(this, "_ZN6S213C53v80Ev");}
void  S213C5 ::v81(){vfunc_called(this, "_ZN6S213C53v81Ev");}
void  S213C5 ::v82(){vfunc_called(this, "_ZN6S213C53v82Ev");}
void  S213C5 ::v83(){vfunc_called(this, "_ZN6S213C53v83Ev");}
void  S213C5 ::v84(){vfunc_called(this, "_ZN6S213C53v84Ev");}
void  S213C5 ::v85(){vfunc_called(this, "_ZN6S213C53v85Ev");}
void  S213C5 ::v86(){vfunc_called(this, "_ZN6S213C53v86Ev");}
void  S213C5 ::v87(){vfunc_called(this, "_ZN6S213C53v87Ev");}
void  S213C5 ::v88(){vfunc_called(this, "_ZN6S213C53v88Ev");}
void  S213C5 ::v89(){vfunc_called(this, "_ZN6S213C53v89Ev");}
S213C5 ::S213C5(){ note_ctor("S213C5", this);} // tgen

static void Test_S213C5()
{
  extern Class_Descriptor cd_S213C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S213C5, buf);
    S213C5 *dp, &lv = *(dp=new (buf) S213C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S213C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S213C5)");
    check_base_class_offset(lv, (S213C6*), 0, "S213C5");
    check_field_offset(lv, s213c5f0, ABISELECT(96,60), "S213C5.s213c5f0");
    check_field_offset(lv, s213c5f1, ABISELECT(104,68), "S213C5.s213c5f1");
    check_field_offset(lv, s213c5f2, ABISELECT(112,72), "S213C5.s213c5f2");
    check_field_offset(lv, s213c5f3, ABISELECT(120,80), "S213C5.s213c5f3");
    check_field_offset(lv, s213c5f4, ABISELECT(136,92), "S213C5.s213c5f4");
    check_field_offset(lv, s213c5f5, ABISELECT(152,104), "S213C5.s213c5f5");
    check_field_offset(lv, s213c5f6, ABISELECT(160,108), "S213C5.s213c5f6");
    set_bf_and_test(lv, s213c5f7, ABISELECT(176,120), 0, 1, 1, "S213C5");
    set_bf_and_test(lv, s213c5f8, ABISELECT(176,120), 1, 1, 1, "S213C5");
    set_bf_and_test(lv, s213c5f9, ABISELECT(176,120), 2, 1, 1, "S213C5");
    set_bf_and_test(lv, s213c5f10, ABISELECT(176,120), 3, 1, 1, "S213C5");
    set_bf_and_test(lv, s213c5f11, ABISELECT(176,120), 4, 1, 1, "S213C5");
    check_field_offset(lv, s213c5f12, ABISELECT(180,124), "S213C5.s213c5f12");
    test_class_info(&lv, &cd_S213C5);
    dp->~S213C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS213C5(Test_S213C5, "S213C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S213C5C1Ev();
extern void _ZN6S213C5D1Ev();
Name_Map name_map_S213C5[] = {
  NSPAIR(_ZN6S213C5C1Ev),
  NSPAIR(_ZN6S213C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S213C6;
extern VTBL_ENTRY _ZTI6S213C6[];
extern  VTBL_ENTRY _ZTV6S213C6[];
static Base_Class bases_S213C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S213C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S213C5[];
extern void _ZN6S213C5D1Ev();
extern void _ZN6S213C5D0Ev();
extern void _ZN6S213C62v4Ev();
extern void _ZN6S213C62v5Ev();
extern void _ZN6S213C62v6Ev();
extern void _ZN6S213C62v7Ev();
extern void _ZN6S213C62v8Ev();
extern void _ZN6S213C62v9Ev();
extern void _ZN6S213C63v10Ev();
extern void _ZN6S213C63v11Ev();
extern void _ZN6S213C63v12Ev();
extern void _ZN6S213C63v13Ev();
extern void _ZN6S213C63v14Ev();
extern void _ZN6S213C63v15Ev();
extern void _ZN6S213C63v16Ev();
extern void _ZN6S213C63v17Ev();
extern void _ZN6S213C63v18Ev();
extern void _ZN6S213C63v19Ev();
extern void _ZN6S213C63v20Ev();
extern void _ZN6S213C63v21Ev();
extern void _ZN6S213C63v22Ev();
extern void _ZN6S213C63v23Ev();
extern void _ZN6S213C63v24Ev();
extern void _ZN6S213C63v25Ev();
extern void _ZN6S213C63v26Ev();
extern void _ZN6S213C63v27Ev();
extern void _ZN6S213C63v28Ev();
extern void _ZN6S213C63v29Ev();
extern void _ZN6S213C63v30Ev();
extern void _ZN6S213C63v31Ev();
extern void _ZN6S213C63v32Ev();
extern void _ZN6S213C63v33Ev();
extern void _ZN6S213C63v34Ev();
extern void _ZN6S213C63v35Ev();
extern void _ZN6S213C63v36Ev();
extern void _ZN6S213C63v37Ev();
extern void _ZN6S213C63v38Ev();
extern void _ZN6S213C63v39Ev();
extern void _ZN6S213C63v40Ev();
extern void _ZN6S213C63v41Ev();
extern void _ZN6S213C63v42Ev();
extern void _ZN6S213C63v43Ev();
extern void _ZN6S213C63v44Ev();
extern void _ZN6S213C63v45Ev();
extern void _ZN6S213C63v46Ev();
extern void _ZN6S213C63v47Ev();
extern void _ZN6S213C63v48Ev();
extern void _ZN6S213C63v49Ev();
extern void _ZN6S213C63v50Ev();
extern void _ZN6S213C63v51Ev();
extern void _ZN6S213C63v52Ev();
extern void _ZN6S213C63v53Ev();
extern void _ZN6S213C63v54Ev();
extern void _ZN6S213C63v55Ev();
extern void _ZN6S213C63v56Ev();
extern void _ZN6S213C63v57Ev();
extern void _ZN6S213C63v58Ev();
extern void _ZN6S213C63v59Ev();
extern void _ZN6S213C63v60Ev();
extern void _ZN6S213C63v61Ev();
extern void _ZN6S213C63v62Ev();
extern void _ZN6S213C63v63Ev();
extern void _ZN6S213C63v64Ev();
extern void _ZN6S213C63v65Ev();
extern void _ZN6S213C63v66Ev();
extern void _ZN6S213C63v67Ev();
extern void _ZN6S213C53v68Ev();
extern void _ZN6S213C53v69Ev();
extern void _ZN6S213C53v70Ev();
extern void _ZN6S213C53v71Ev();
extern void _ZN6S213C53v72Ev();
extern void _ZN6S213C53v73Ev();
extern void _ZN6S213C53v74Ev();
extern void _ZN6S213C53v75Ev();
extern void _ZN6S213C53v76Ev();
extern void _ZN6S213C53v77Ev();
extern void _ZN6S213C53v78Ev();
extern void _ZN6S213C53v79Ev();
extern void _ZN6S213C53v80Ev();
extern void _ZN6S213C53v81Ev();
extern void _ZN6S213C53v82Ev();
extern void _ZN6S213C53v83Ev();
extern void _ZN6S213C53v84Ev();
extern void _ZN6S213C53v85Ev();
extern void _ZN6S213C53v86Ev();
extern void _ZN6S213C53v87Ev();
extern void _ZN6S213C53v88Ev();
extern void _ZN6S213C53v89Ev();
static  VTBL_ENTRY vtc_S213C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S213C5[0]),
  (VTBL_ENTRY)&_ZN6S213C5D1Ev,
  (VTBL_ENTRY)&_ZN6S213C5D0Ev,
  (VTBL_ENTRY)&_ZN6S213C62v4Ev,
  (VTBL_ENTRY)&_ZN6S213C62v5Ev,
  (VTBL_ENTRY)&_ZN6S213C62v6Ev,
  (VTBL_ENTRY)&_ZN6S213C62v7Ev,
  (VTBL_ENTRY)&_ZN6S213C62v8Ev,
  (VTBL_ENTRY)&_ZN6S213C62v9Ev,
  (VTBL_ENTRY)&_ZN6S213C63v10Ev,
  (VTBL_ENTRY)&_ZN6S213C63v11Ev,
  (VTBL_ENTRY)&_ZN6S213C63v12Ev,
  (VTBL_ENTRY)&_ZN6S213C63v13Ev,
  (VTBL_ENTRY)&_ZN6S213C63v14Ev,
  (VTBL_ENTRY)&_ZN6S213C63v15Ev,
  (VTBL_ENTRY)&_ZN6S213C63v16Ev,
  (VTBL_ENTRY)&_ZN6S213C63v17Ev,
  (VTBL_ENTRY)&_ZN6S213C63v18Ev,
  (VTBL_ENTRY)&_ZN6S213C63v19Ev,
  (VTBL_ENTRY)&_ZN6S213C63v20Ev,
  (VTBL_ENTRY)&_ZN6S213C63v21Ev,
  (VTBL_ENTRY)&_ZN6S213C63v22Ev,
  (VTBL_ENTRY)&_ZN6S213C63v23Ev,
  (VTBL_ENTRY)&_ZN6S213C63v24Ev,
  (VTBL_ENTRY)&_ZN6S213C63v25Ev,
  (VTBL_ENTRY)&_ZN6S213C63v26Ev,
  (VTBL_ENTRY)&_ZN6S213C63v27Ev,
  (VTBL_ENTRY)&_ZN6S213C63v28Ev,
  (VTBL_ENTRY)&_ZN6S213C63v29Ev,
  (VTBL_ENTRY)&_ZN6S213C63v30Ev,
  (VTBL_ENTRY)&_ZN6S213C63v31Ev,
  (VTBL_ENTRY)&_ZN6S213C63v32Ev,
  (VTBL_ENTRY)&_ZN6S213C63v33Ev,
  (VTBL_ENTRY)&_ZN6S213C63v34Ev,
  (VTBL_ENTRY)&_ZN6S213C63v35Ev,
  (VTBL_ENTRY)&_ZN6S213C63v36Ev,
  (VTBL_ENTRY)&_ZN6S213C63v37Ev,
  (VTBL_ENTRY)&_ZN6S213C63v38Ev,
  (VTBL_ENTRY)&_ZN6S213C63v39Ev,
  (VTBL_ENTRY)&_ZN6S213C63v40Ev,
  (VTBL_ENTRY)&_ZN6S213C63v41Ev,
  (VTBL_ENTRY)&_ZN6S213C63v42Ev,
  (VTBL_ENTRY)&_ZN6S213C63v43Ev,
  (VTBL_ENTRY)&_ZN6S213C63v44Ev,
  (VTBL_ENTRY)&_ZN6S213C63v45Ev,
  (VTBL_ENTRY)&_ZN6S213C63v46Ev,
  (VTBL_ENTRY)&_ZN6S213C63v47Ev,
  (VTBL_ENTRY)&_ZN6S213C63v48Ev,
  (VTBL_ENTRY)&_ZN6S213C63v49Ev,
  (VTBL_ENTRY)&_ZN6S213C63v50Ev,
  (VTBL_ENTRY)&_ZN6S213C63v51Ev,
  (VTBL_ENTRY)&_ZN6S213C63v52Ev,
  (VTBL_ENTRY)&_ZN6S213C63v53Ev,
  (VTBL_ENTRY)&_ZN6S213C63v54Ev,
  (VTBL_ENTRY)&_ZN6S213C63v55Ev,
  (VTBL_ENTRY)&_ZN6S213C63v56Ev,
  (VTBL_ENTRY)&_ZN6S213C63v57Ev,
  (VTBL_ENTRY)&_ZN6S213C63v58Ev,
  (VTBL_ENTRY)&_ZN6S213C63v59Ev,
  (VTBL_ENTRY)&_ZN6S213C63v60Ev,
  (VTBL_ENTRY)&_ZN6S213C63v61Ev,
  (VTBL_ENTRY)&_ZN6S213C63v62Ev,
  (VTBL_ENTRY)&_ZN6S213C63v63Ev,
  (VTBL_ENTRY)&_ZN6S213C63v64Ev,
  (VTBL_ENTRY)&_ZN6S213C63v65Ev,
  (VTBL_ENTRY)&_ZN6S213C63v66Ev,
  (VTBL_ENTRY)&_ZN6S213C63v67Ev,
  (VTBL_ENTRY)&_ZN6S213C53v68Ev,
  (VTBL_ENTRY)&_ZN6S213C53v69Ev,
  (VTBL_ENTRY)&_ZN6S213C53v70Ev,
  (VTBL_ENTRY)&_ZN6S213C53v71Ev,
  (VTBL_ENTRY)&_ZN6S213C53v72Ev,
  (VTBL_ENTRY)&_ZN6S213C53v73Ev,
  (VTBL_ENTRY)&_ZN6S213C53v74Ev,
  (VTBL_ENTRY)&_ZN6S213C53v75Ev,
  (VTBL_ENTRY)&_ZN6S213C53v76Ev,
  (VTBL_ENTRY)&_ZN6S213C53v77Ev,
  (VTBL_ENTRY)&_ZN6S213C53v78Ev,
  (VTBL_ENTRY)&_ZN6S213C53v79Ev,
  (VTBL_ENTRY)&_ZN6S213C53v80Ev,
  (VTBL_ENTRY)&_ZN6S213C53v81Ev,
  (VTBL_ENTRY)&_ZN6S213C53v82Ev,
  (VTBL_ENTRY)&_ZN6S213C53v83Ev,
  (VTBL_ENTRY)&_ZN6S213C53v84Ev,
  (VTBL_ENTRY)&_ZN6S213C53v85Ev,
  (VTBL_ENTRY)&_ZN6S213C53v86Ev,
  (VTBL_ENTRY)&_ZN6S213C53v87Ev,
  (VTBL_ENTRY)&_ZN6S213C53v88Ev,
  (VTBL_ENTRY)&_ZN6S213C53v89Ev,
};
extern VTBL_ENTRY _ZTI6S213C5[];
extern  VTBL_ENTRY _ZTV6S213C5[];
Class_Descriptor cd_S213C5 = {  "S213C5", // class name
  bases_S213C5, 1,
  &(vtc_S213C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S213C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S213C5),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  S213C4  : S213C5 {
  unsigned int s213c4f0:1;
  unsigned int s213c4f1:1;
  unsigned int s213c4f2:1;
  ::S1503C28 s213c4f3;
  ::S1503C24 s213c4f4;
  ::S1503C18 s213c4f5;
  ::S1503C12 s213c4f6;
  int s213c4f7[3];
  virtual  ~S213C4(); // _ZN6S213C4D1Ev
  virtual void  v90(); // _ZN6S213C43v90Ev
  virtual void  v91(); // _ZN6S213C43v91Ev
  virtual void  v92(); // _ZN6S213C43v92Ev
  virtual void  v93(); // _ZN6S213C43v93Ev
  virtual void  v94(); // _ZN6S213C43v94Ev
  virtual void  v95(); // _ZN6S213C43v95Ev
  virtual void  v96(); // _ZN6S213C43v96Ev
  virtual void  v97(); // _ZN6S213C43v97Ev
  virtual void  v98(); // _ZN6S213C43v98Ev
  virtual void  v99(); // _ZN6S213C43v99Ev
  virtual void  v100(); // _ZN6S213C44v100Ev
  virtual void  v101(); // _ZN6S213C44v101Ev
  virtual void  v102(); // _ZN6S213C44v102Ev
  virtual void  v103(); // _ZN6S213C44v103Ev
  virtual void  v104(); // _ZN6S213C44v104Ev
  virtual void  v105(); // _ZN6S213C44v105Ev
  virtual void  v106(); // _ZN6S213C44v106Ev
  virtual void  v107(); // _ZN6S213C44v107Ev
  virtual void  v108(); // _ZN6S213C44v108Ev
  virtual void  v109(); // _ZN6S213C44v109Ev
  S213C4(); // tgen
};
//SIG(-1 S213C4) 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]}


 S213C4 ::~S213C4(){ note_dtor("S213C4", this);}
void  S213C4 ::v90(){vfunc_called(this, "_ZN6S213C43v90Ev");}
void  S213C4 ::v91(){vfunc_called(this, "_ZN6S213C43v91Ev");}
void  S213C4 ::v92(){vfunc_called(this, "_ZN6S213C43v92Ev");}
void  S213C4 ::v93(){vfunc_called(this, "_ZN6S213C43v93Ev");}
void  S213C4 ::v94(){vfunc_called(this, "_ZN6S213C43v94Ev");}
void  S213C4 ::v95(){vfunc_called(this, "_ZN6S213C43v95Ev");}
void  S213C4 ::v96(){vfunc_called(this, "_ZN6S213C43v96Ev");}
void  S213C4 ::v97(){vfunc_called(this, "_ZN6S213C43v97Ev");}
void  S213C4 ::v98(){vfunc_called(this, "_ZN6S213C43v98Ev");}
void  S213C4 ::v99(){vfunc_called(this, "_ZN6S213C43v99Ev");}
void  S213C4 ::v100(){vfunc_called(this, "_ZN6S213C44v100Ev");}
void  S213C4 ::v101(){vfunc_called(this, "_ZN6S213C44v101Ev");}
void  S213C4 ::v102(){vfunc_called(this, "_ZN6S213C44v102Ev");}
void  S213C4 ::v103(){vfunc_called(this, "_ZN6S213C44v103Ev");}
void  S213C4 ::v104(){vfunc_called(this, "_ZN6S213C44v104Ev");}
void  S213C4 ::v105(){vfunc_called(this, "_ZN6S213C44v105Ev");}
void  S213C4 ::v106(){vfunc_called(this, "_ZN6S213C44v106Ev");}
void  S213C4 ::v107(){vfunc_called(this, "_ZN6S213C44v107Ev");}
void  S213C4 ::v108(){vfunc_called(this, "_ZN6S213C44v108Ev");}
void  S213C4 ::v109(){vfunc_called(this, "_ZN6S213C44v109Ev");}
S213C4 ::S213C4(){ note_ctor("S213C4", this);} // tgen

static void Test_S213C4()
{
  extern Class_Descriptor cd_S213C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S213C4, buf);
    S213C4 *dp, &lv = *(dp=new (buf) S213C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S213C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S213C4)");
    check_base_class_offset(lv, (S213C6*)(S213C5*), 0, "S213C4");
    check_base_class_offset(lv, (S213C5*), 0, "S213C4");
    set_bf_and_test(lv, s213c4f0, ABISELECT(188,132), 0, 1, 1, "S213C4");
    set_bf_and_test(lv, s213c4f1, ABISELECT(188,132), 1, 1, 1, "S213C4");
    set_bf_and_test(lv, s213c4f2, ABISELECT(188,132), 2, 1, 1, "S213C4");
    check_field_offset(lv, s213c4f3, ABISELECT(192,136), "S213C4.s213c4f3");
    check_field_offset(lv, s213c4f4, ABISELECT(208,148), "S213C4.s213c4f4");
    check_field_offset(lv, s213c4f5, ABISELECT(224,160), "S213C4.s213c4f5");
    check_field_offset(lv, s213c4f6, ABISELECT(240,172), "S213C4.s213c4f6");
    check_field_offset(lv, s213c4f7, ABISELECT(256,184), "S213C4.s213c4f7");
    test_class_info(&lv, &cd_S213C4);
    dp->~S213C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS213C4(Test_S213C4, "S213C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S213C4C1Ev();
extern void _ZN6S213C4D1Ev();
Name_Map name_map_S213C4[] = {
  NSPAIR(_ZN6S213C4C1Ev),
  NSPAIR(_ZN6S213C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S213C6;
extern VTBL_ENTRY _ZTI6S213C6[];
extern  VTBL_ENTRY _ZTV6S213C6[];
extern Class_Descriptor cd_S213C5;
extern VTBL_ENTRY _ZTI6S213C5[];
extern  VTBL_ENTRY _ZTV6S213C5[];
static Base_Class bases_S213C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S213C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S213C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S213C4[];
extern void _ZN6S213C4D1Ev();
extern void _ZN6S213C4D0Ev();
extern void _ZN6S213C62v4Ev();
extern void _ZN6S213C62v5Ev();
extern void _ZN6S213C62v6Ev();
extern void _ZN6S213C62v7Ev();
extern void _ZN6S213C62v8Ev();
extern void _ZN6S213C62v9Ev();
extern void _ZN6S213C63v10Ev();
extern void _ZN6S213C63v11Ev();
extern void _ZN6S213C63v12Ev();
extern void _ZN6S213C63v13Ev();
extern void _ZN6S213C63v14Ev();
extern void _ZN6S213C63v15Ev();
extern void _ZN6S213C63v16Ev();
extern void _ZN6S213C63v17Ev();
extern void _ZN6S213C63v18Ev();
extern void _ZN6S213C63v19Ev();
extern void _ZN6S213C63v20Ev();
extern void _ZN6S213C63v21Ev();
extern void _ZN6S213C63v22Ev();
extern void _ZN6S213C63v23Ev();
extern void _ZN6S213C63v24Ev();
extern void _ZN6S213C63v25Ev();
extern void _ZN6S213C63v26Ev();
extern void _ZN6S213C63v27Ev();
extern void _ZN6S213C63v28Ev();
extern void _ZN6S213C63v29Ev();
extern void _ZN6S213C63v30Ev();
extern void _ZN6S213C63v31Ev();
extern void _ZN6S213C63v32Ev();
extern void _ZN6S213C63v33Ev();
extern void _ZN6S213C63v34Ev();
extern void _ZN6S213C63v35Ev();
extern void _ZN6S213C63v36Ev();
extern void _ZN6S213C63v37Ev();
extern void _ZN6S213C63v38Ev();
extern void _ZN6S213C63v39Ev();
extern void _ZN6S213C63v40Ev();
extern void _ZN6S213C63v41Ev();
extern void _ZN6S213C63v42Ev();
extern void _ZN6S213C63v43Ev();
extern void _ZN6S213C63v44Ev();
extern void _ZN6S213C63v45Ev();
extern void _ZN6S213C63v46Ev();
extern void _ZN6S213C63v47Ev();
extern void _ZN6S213C63v48Ev();
extern void _ZN6S213C63v49Ev();
extern void _ZN6S213C63v50Ev();
extern void _ZN6S213C63v51Ev();
extern void _ZN6S213C63v52Ev();
extern void _ZN6S213C63v53Ev();
extern void _ZN6S213C63v54Ev();
extern void _ZN6S213C63v55Ev();
extern void _ZN6S213C63v56Ev();
extern void _ZN6S213C63v57Ev();
extern void _ZN6S213C63v58Ev();
extern void _ZN6S213C63v59Ev();
extern void _ZN6S213C63v60Ev();
extern void _ZN6S213C63v61Ev();
extern void _ZN6S213C63v62Ev();
extern void _ZN6S213C63v63Ev();
extern void _ZN6S213C63v64Ev();
extern void _ZN6S213C63v65Ev();
extern void _ZN6S213C63v66Ev();
extern void _ZN6S213C63v67Ev();
extern void _ZN6S213C53v68Ev();
extern void _ZN6S213C53v69Ev();
extern void _ZN6S213C53v70Ev();
extern void _ZN6S213C53v71Ev();
extern void _ZN6S213C53v72Ev();
extern void _ZN6S213C53v73Ev();
extern void _ZN6S213C53v74Ev();
extern void _ZN6S213C53v75Ev();
extern void _ZN6S213C53v76Ev();
extern void _ZN6S213C53v77Ev();
extern void _ZN6S213C53v78Ev();
extern void _ZN6S213C53v79Ev();
extern void _ZN6S213C53v80Ev();
extern void _ZN6S213C53v81Ev();
extern void _ZN6S213C53v82Ev();
extern void _ZN6S213C53v83Ev();
extern void _ZN6S213C53v84Ev();
extern void _ZN6S213C53v85Ev();
extern void _ZN6S213C53v86Ev();
extern void _ZN6S213C53v87Ev();
extern void _ZN6S213C53v88Ev();
extern void _ZN6S213C53v89Ev();
extern void _ZN6S213C43v90Ev();
extern void _ZN6S213C43v91Ev();
extern void _ZN6S213C43v92Ev();
extern void _ZN6S213C43v93Ev();
extern void _ZN6S213C43v94Ev();
extern void _ZN6S213C43v95Ev();
extern void _ZN6S213C43v96Ev();
extern void _ZN6S213C43v97Ev();
extern void _ZN6S213C43v98Ev();
extern void _ZN6S213C43v99Ev();
extern void _ZN6S213C44v100Ev();
extern void _ZN6S213C44v101Ev();
extern void _ZN6S213C44v102Ev();
extern void _ZN6S213C44v103Ev();
extern void _ZN6S213C44v104Ev();
extern void _ZN6S213C44v105Ev();
extern void _ZN6S213C44v106Ev();
extern void _ZN6S213C44v107Ev();
extern void _ZN6S213C44v108Ev();
extern void _ZN6S213C44v109Ev();
static  VTBL_ENTRY vtc_S213C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S213C4[0]),
  (VTBL_ENTRY)&_ZN6S213C4D1Ev,
  (VTBL_ENTRY)&_ZN6S213C4D0Ev,
  (VTBL_ENTRY)&_ZN6S213C62v4Ev,
  (VTBL_ENTRY)&_ZN6S213C62v5Ev,
  (VTBL_ENTRY)&_ZN6S213C62v6Ev,
  (VTBL_ENTRY)&_ZN6S213C62v7Ev,
  (VTBL_ENTRY)&_ZN6S213C62v8Ev,
  (VTBL_ENTRY)&_ZN6S213C62v9Ev,
  (VTBL_ENTRY)&_ZN6S213C63v10Ev,
  (VTBL_ENTRY)&_ZN6S213C63v11Ev,
  (VTBL_ENTRY)&_ZN6S213C63v12Ev,
  (VTBL_ENTRY)&_ZN6S213C63v13Ev,
  (VTBL_ENTRY)&_ZN6S213C63v14Ev,
  (VTBL_ENTRY)&_ZN6S213C63v15Ev,
  (VTBL_ENTRY)&_ZN6S213C63v16Ev,
  (VTBL_ENTRY)&_ZN6S213C63v17Ev,
  (VTBL_ENTRY)&_ZN6S213C63v18Ev,
  (VTBL_ENTRY)&_ZN6S213C63v19Ev,
  (VTBL_ENTRY)&_ZN6S213C63v20Ev,
  (VTBL_ENTRY)&_ZN6S213C63v21Ev,
  (VTBL_ENTRY)&_ZN6S213C63v22Ev,
  (VTBL_ENTRY)&_ZN6S213C63v23Ev,
  (VTBL_ENTRY)&_ZN6S213C63v24Ev,
  (VTBL_ENTRY)&_ZN6S213C63v25Ev,
  (VTBL_ENTRY)&_ZN6S213C63v26Ev,
  (VTBL_ENTRY)&_ZN6S213C63v27Ev,
  (VTBL_ENTRY)&_ZN6S213C63v28Ev,
  (VTBL_ENTRY)&_ZN6S213C63v29Ev,
  (VTBL_ENTRY)&_ZN6S213C63v30Ev,
  (VTBL_ENTRY)&_ZN6S213C63v31Ev,
  (VTBL_ENTRY)&_ZN6S213C63v32Ev,
  (VTBL_ENTRY)&_ZN6S213C63v33Ev,
  (VTBL_ENTRY)&_ZN6S213C63v34Ev,
  (VTBL_ENTRY)&_ZN6S213C63v35Ev,
  (VTBL_ENTRY)&_ZN6S213C63v36Ev,
  (VTBL_ENTRY)&_ZN6S213C63v37Ev,
  (VTBL_ENTRY)&_ZN6S213C63v38Ev,
  (VTBL_ENTRY)&_ZN6S213C63v39Ev,
  (VTBL_ENTRY)&_ZN6S213C63v40Ev,
  (VTBL_ENTRY)&_ZN6S213C63v41Ev,
  (VTBL_ENTRY)&_ZN6S213C63v42Ev,
  (VTBL_ENTRY)&_ZN6S213C63v43Ev,
  (VTBL_ENTRY)&_ZN6S213C63v44Ev,
  (VTBL_ENTRY)&_ZN6S213C63v45Ev,
  (VTBL_ENTRY)&_ZN6S213C63v46Ev,
  (VTBL_ENTRY)&_ZN6S213C63v47Ev,
  (VTBL_ENTRY)&_ZN6S213C63v48Ev,
  (VTBL_ENTRY)&_ZN6S213C63v49Ev,
  (VTBL_ENTRY)&_ZN6S213C63v50Ev,
  (VTBL_ENTRY)&_ZN6S213C63v51Ev,
  (VTBL_ENTRY)&_ZN6S213C63v52Ev,
  (VTBL_ENTRY)&_ZN6S213C63v53Ev,
  (VTBL_ENTRY)&_ZN6S213C63v54Ev,
  (VTBL_ENTRY)&_ZN6S213C63v55Ev,
  (VTBL_ENTRY)&_ZN6S213C63v56Ev,
  (VTBL_ENTRY)&_ZN6S213C63v57Ev,
  (VTBL_ENTRY)&_ZN6S213C63v58Ev,
  (VTBL_ENTRY)&_ZN6S213C63v59Ev,
  (VTBL_ENTRY)&_ZN6S213C63v60Ev,
  (VTBL_ENTRY)&_ZN6S213C63v61Ev,
  (VTBL_ENTRY)&_ZN6S213C63v62Ev,
  (VTBL_ENTRY)&_ZN6S213C63v63Ev,
  (VTBL_ENTRY)&_ZN6S213C63v64Ev,
  (VTBL_ENTRY)&_ZN6S213C63v65Ev,
  (VTBL_ENTRY)&_ZN6S213C63v66Ev,
  (VTBL_ENTRY)&_ZN6S213C63v67Ev,
  (VTBL_ENTRY)&_ZN6S213C53v68Ev,
  (VTBL_ENTRY)&_ZN6S213C53v69Ev,
  (VTBL_ENTRY)&_ZN6S213C53v70Ev,
  (VTBL_ENTRY)&_ZN6S213C53v71Ev,
  (VTBL_ENTRY)&_ZN6S213C53v72Ev,
  (VTBL_ENTRY)&_ZN6S213C53v73Ev,
  (VTBL_ENTRY)&_ZN6S213C53v74Ev,
  (VTBL_ENTRY)&_ZN6S213C53v75Ev,
  (VTBL_ENTRY)&_ZN6S213C53v76Ev,
  (VTBL_ENTRY)&_ZN6S213C53v77Ev,
  (VTBL_ENTRY)&_ZN6S213C53v78Ev,
  (VTBL_ENTRY)&_ZN6S213C53v79Ev,
  (VTBL_ENTRY)&_ZN6S213C53v80Ev,
  (VTBL_ENTRY)&_ZN6S213C53v81Ev,
  (VTBL_ENTRY)&_ZN6S213C53v82Ev,
  (VTBL_ENTRY)&_ZN6S213C53v83Ev,
  (VTBL_ENTRY)&_ZN6S213C53v84Ev,
  (VTBL_ENTRY)&_ZN6S213C53v85Ev,
  (VTBL_ENTRY)&_ZN6S213C53v86Ev,
  (VTBL_ENTRY)&_ZN6S213C53v87Ev,
  (VTBL_ENTRY)&_ZN6S213C53v88Ev,
  (VTBL_ENTRY)&_ZN6S213C53v89Ev,
  (VTBL_ENTRY)&_ZN6S213C43v90Ev,
  (VTBL_ENTRY)&_ZN6S213C43v91Ev,
  (VTBL_ENTRY)&_ZN6S213C43v92Ev,
  (VTBL_ENTRY)&_ZN6S213C43v93Ev,
  (VTBL_ENTRY)&_ZN6S213C43v94Ev,
  (VTBL_ENTRY)&_ZN6S213C43v95Ev,
  (VTBL_ENTRY)&_ZN6S213C43v96Ev,
  (VTBL_ENTRY)&_ZN6S213C43v97Ev,
  (VTBL_ENTRY)&_ZN6S213C43v98Ev,
  (VTBL_ENTRY)&_ZN6S213C43v99Ev,
  (VTBL_ENTRY)&_ZN6S213C44v100Ev,
  (VTBL_ENTRY)&_ZN6S213C44v101Ev,
  (VTBL_ENTRY)&_ZN6S213C44v102Ev,
  (VTBL_ENTRY)&_ZN6S213C44v103Ev,
  (VTBL_ENTRY)&_ZN6S213C44v104Ev,
  (VTBL_ENTRY)&_ZN6S213C44v105Ev,
  (VTBL_ENTRY)&_ZN6S213C44v106Ev,
  (VTBL_ENTRY)&_ZN6S213C44v107Ev,
  (VTBL_ENTRY)&_ZN6S213C44v108Ev,
  (VTBL_ENTRY)&_ZN6S213C44v109Ev,
};
extern VTBL_ENTRY _ZTI6S213C4[];
extern  VTBL_ENTRY _ZTV6S213C4[];
Class_Descriptor cd_S213C4 = {  "S213C4", // class name
  bases_S213C4, 2,
  &(vtc_S213C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S213C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S213C4),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  S213C3  : S213C4 {
  ::S1503C5_nt s213c3f0;
  unsigned int s213c3f1:1;
  ::S1503C6_nt s213c3f2;
  virtual  ~S213C3(); // _ZN6S213C3D1Ev
  virtual void  v110(); // _ZN6S213C34v110Ev
  virtual void  v111(); // _ZN6S213C34v111Ev
  virtual void  v112(); // _ZN6S213C34v112Ev
  virtual void  v113(); // _ZN6S213C34v113Ev
  S213C3(); // tgen
};
//SIG(-1 S213C3) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S213C3 ::~S213C3(){ note_dtor("S213C3", this);}
void  S213C3 ::v110(){vfunc_called(this, "_ZN6S213C34v110Ev");}
void  S213C3 ::v111(){vfunc_called(this, "_ZN6S213C34v111Ev");}
void  S213C3 ::v112(){vfunc_called(this, "_ZN6S213C34v112Ev");}
void  S213C3 ::v113(){vfunc_called(this, "_ZN6S213C34v113Ev");}
S213C3 ::S213C3(){ note_ctor("S213C3", this);} // tgen

static void Test_S213C3()
{
  extern Class_Descriptor cd_S213C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S213C3, buf);
    S213C3 *dp, &lv = *(dp=new (buf) S213C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S213C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S213C3)");
    check_base_class_offset(lv, (S213C6*)(S213C5*)(S213C4*), 0, "S213C3");
    check_base_class_offset(lv, (S213C5*)(S213C4*), 0, "S213C3");
    check_base_class_offset(lv, (S213C4*), 0, "S213C3");
    check_field_offset(lv, s213c3f0, ABISELECT(268,196), "S213C3.s213c3f0");
    set_bf_and_test(lv, s213c3f1, ABISELECT(276,204), 0, 1, 1, "S213C3");
    check_field_offset(lv, s213c3f2, ABISELECT(280,208), "S213C3.s213c3f2");
    test_class_info(&lv, &cd_S213C3);
    dp->~S213C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS213C3(Test_S213C3, "S213C3", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S213C3C1Ev();
extern void _ZN6S213C3D1Ev();
Name_Map name_map_S213C3[] = {
  NSPAIR(_ZN6S213C3C1Ev),
  NSPAIR(_ZN6S213C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S213C6;
extern VTBL_ENTRY _ZTI6S213C6[];
extern  VTBL_ENTRY _ZTV6S213C6[];
extern Class_Descriptor cd_S213C5;
extern VTBL_ENTRY _ZTI6S213C5[];
extern  VTBL_ENTRY _ZTV6S213C5[];
extern Class_Descriptor cd_S213C4;
extern VTBL_ENTRY _ZTI6S213C4[];
extern  VTBL_ENTRY _ZTV6S213C4[];
static Base_Class bases_S213C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S213C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S213C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S213C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S213C3[];
extern void _ZN6S213C3D1Ev();
extern void _ZN6S213C3D0Ev();
extern void _ZN6S213C62v4Ev();
extern void _ZN6S213C62v5Ev();
extern void _ZN6S213C62v6Ev();
extern void _ZN6S213C62v7Ev();
extern void _ZN6S213C62v8Ev();
extern void _ZN6S213C62v9Ev();
extern void _ZN6S213C63v10Ev();
extern void _ZN6S213C63v11Ev();
extern void _ZN6S213C63v12Ev();
extern void _ZN6S213C63v13Ev();
extern void _ZN6S213C63v14Ev();
extern void _ZN6S213C63v15Ev();
extern void _ZN6S213C63v16Ev();
extern void _ZN6S213C63v17Ev();
extern void _ZN6S213C63v18Ev();
extern void _ZN6S213C63v19Ev();
extern void _ZN6S213C63v20Ev();
extern void _ZN6S213C63v21Ev();
extern void _ZN6S213C63v22Ev();
extern void _ZN6S213C63v23Ev();
extern void _ZN6S213C63v24Ev();
extern void _ZN6S213C63v25Ev();
extern void _ZN6S213C63v26Ev();
extern void _ZN6S213C63v27Ev();
extern void _ZN6S213C63v28Ev();
extern void _ZN6S213C63v29Ev();
extern void _ZN6S213C63v30Ev();
extern void _ZN6S213C63v31Ev();
extern void _ZN6S213C63v32Ev();
extern void _ZN6S213C63v33Ev();
extern void _ZN6S213C63v34Ev();
extern void _ZN6S213C63v35Ev();
extern void _ZN6S213C63v36Ev();
extern void _ZN6S213C63v37Ev();
extern void _ZN6S213C63v38Ev();
extern void _ZN6S213C63v39Ev();
extern void _ZN6S213C63v40Ev();
extern void _ZN6S213C63v41Ev();
extern void _ZN6S213C63v42Ev();
extern void _ZN6S213C63v43Ev();
extern void _ZN6S213C63v44Ev();
extern void _ZN6S213C63v45Ev();
extern void _ZN6S213C63v46Ev();
extern void _ZN6S213C63v47Ev();
extern void _ZN6S213C63v48Ev();
extern void _ZN6S213C63v49Ev();
extern void _ZN6S213C63v50Ev();
extern void _ZN6S213C63v51Ev();
extern void _ZN6S213C63v52Ev();
extern void _ZN6S213C63v53Ev();
extern void _ZN6S213C63v54Ev();
extern void _ZN6S213C63v55Ev();
extern void _ZN6S213C63v56Ev();
extern void _ZN6S213C63v57Ev();
extern void _ZN6S213C63v58Ev();
extern void _ZN6S213C63v59Ev();
extern void _ZN6S213C63v60Ev();
extern void _ZN6S213C63v61Ev();
extern void _ZN6S213C63v62Ev();
extern void _ZN6S213C63v63Ev();
extern void _ZN6S213C63v64Ev();
extern void _ZN6S213C63v65Ev();
extern void _ZN6S213C63v66Ev();
extern void _ZN6S213C63v67Ev();
extern void _ZN6S213C53v68Ev();
extern void _ZN6S213C53v69Ev();
extern void _ZN6S213C53v70Ev();
extern void _ZN6S213C53v71Ev();
extern void _ZN6S213C53v72Ev();
extern void _ZN6S213C53v73Ev();
extern void _ZN6S213C53v74Ev();
extern void _ZN6S213C53v75Ev();
extern void _ZN6S213C53v76Ev();
extern void _ZN6S213C53v77Ev();
extern void _ZN6S213C53v78Ev();
extern void _ZN6S213C53v79Ev();
extern void _ZN6S213C53v80Ev();
extern void _ZN6S213C53v81Ev();
extern void _ZN6S213C53v82Ev();
extern void _ZN6S213C53v83Ev();
extern void _ZN6S213C53v84Ev();
extern void _ZN6S213C53v85Ev();
extern void _ZN6S213C53v86Ev();
extern void _ZN6S213C53v87Ev();
extern void _ZN6S213C53v88Ev();
extern void _ZN6S213C53v89Ev();
extern void _ZN6S213C43v90Ev();
extern void _ZN6S213C43v91Ev();
extern void _ZN6S213C43v92Ev();
extern void _ZN6S213C43v93Ev();
extern void _ZN6S213C43v94Ev();
extern void _ZN6S213C43v95Ev();
extern void _ZN6S213C43v96Ev();
extern void _ZN6S213C43v97Ev();
extern void _ZN6S213C43v98Ev();
extern void _ZN6S213C43v99Ev();
extern void _ZN6S213C44v100Ev();
extern void _ZN6S213C44v101Ev();
extern void _ZN6S213C44v102Ev();
extern void _ZN6S213C44v103Ev();
extern void _ZN6S213C44v104Ev();
extern void _ZN6S213C44v105Ev();
extern void _ZN6S213C44v106Ev();
extern void _ZN6S213C44v107Ev();
extern void _ZN6S213C44v108Ev();
extern void _ZN6S213C44v109Ev();
extern void _ZN6S213C34v110Ev();
extern void _ZN6S213C34v111Ev();
extern void _ZN6S213C34v112Ev();
extern void _ZN6S213C34v113Ev();
static  VTBL_ENTRY vtc_S213C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S213C3[0]),
  (VTBL_ENTRY)&_ZN6S213C3D1Ev,
  (VTBL_ENTRY)&_ZN6S213C3D0Ev,
  (VTBL_ENTRY)&_ZN6S213C62v4Ev,
  (VTBL_ENTRY)&_ZN6S213C62v5Ev,
  (VTBL_ENTRY)&_ZN6S213C62v6Ev,
  (VTBL_ENTRY)&_ZN6S213C62v7Ev,
  (VTBL_ENTRY)&_ZN6S213C62v8Ev,
  (VTBL_ENTRY)&_ZN6S213C62v9Ev,
  (VTBL_ENTRY)&_ZN6S213C63v10Ev,
  (VTBL_ENTRY)&_ZN6S213C63v11Ev,
  (VTBL_ENTRY)&_ZN6S213C63v12Ev,
  (VTBL_ENTRY)&_ZN6S213C63v13Ev,
  (VTBL_ENTRY)&_ZN6S213C63v14Ev,
  (VTBL_ENTRY)&_ZN6S213C63v15Ev,
  (VTBL_ENTRY)&_ZN6S213C63v16Ev,
  (VTBL_ENTRY)&_ZN6S213C63v17Ev,
  (VTBL_ENTRY)&_ZN6S213C63v18Ev,
  (VTBL_ENTRY)&_ZN6S213C63v19Ev,
  (VTBL_ENTRY)&_ZN6S213C63v20Ev,
  (VTBL_ENTRY)&_ZN6S213C63v21Ev,
  (VTBL_ENTRY)&_ZN6S213C63v22Ev,
  (VTBL_ENTRY)&_ZN6S213C63v23Ev,
  (VTBL_ENTRY)&_ZN6S213C63v24Ev,
  (VTBL_ENTRY)&_ZN6S213C63v25Ev,
  (VTBL_ENTRY)&_ZN6S213C63v26Ev,
  (VTBL_ENTRY)&_ZN6S213C63v27Ev,
  (VTBL_ENTRY)&_ZN6S213C63v28Ev,
  (VTBL_ENTRY)&_ZN6S213C63v29Ev,
  (VTBL_ENTRY)&_ZN6S213C63v30Ev,
  (VTBL_ENTRY)&_ZN6S213C63v31Ev,
  (VTBL_ENTRY)&_ZN6S213C63v32Ev,
  (VTBL_ENTRY)&_ZN6S213C63v33Ev,
  (VTBL_ENTRY)&_ZN6S213C63v34Ev,
  (VTBL_ENTRY)&_ZN6S213C63v35Ev,
  (VTBL_ENTRY)&_ZN6S213C63v36Ev,
  (VTBL_ENTRY)&_ZN6S213C63v37Ev,
  (VTBL_ENTRY)&_ZN6S213C63v38Ev,
  (VTBL_ENTRY)&_ZN6S213C63v39Ev,
  (VTBL_ENTRY)&_ZN6S213C63v40Ev,
  (VTBL_ENTRY)&_ZN6S213C63v41Ev,
  (VTBL_ENTRY)&_ZN6S213C63v42Ev,
  (VTBL_ENTRY)&_ZN6S213C63v43Ev,
  (VTBL_ENTRY)&_ZN6S213C63v44Ev,
  (VTBL_ENTRY)&_ZN6S213C63v45Ev,
  (VTBL_ENTRY)&_ZN6S213C63v46Ev,
  (VTBL_ENTRY)&_ZN6S213C63v47Ev,
  (VTBL_ENTRY)&_ZN6S213C63v48Ev,
  (VTBL_ENTRY)&_ZN6S213C63v49Ev,
  (VTBL_ENTRY)&_ZN6S213C63v50Ev,
  (VTBL_ENTRY)&_ZN6S213C63v51Ev,
  (VTBL_ENTRY)&_ZN6S213C63v52Ev,
  (VTBL_ENTRY)&_ZN6S213C63v53Ev,
  (VTBL_ENTRY)&_ZN6S213C63v54Ev,
  (VTBL_ENTRY)&_ZN6S213C63v55Ev,
  (VTBL_ENTRY)&_ZN6S213C63v56Ev,
  (VTBL_ENTRY)&_ZN6S213C63v57Ev,
  (VTBL_ENTRY)&_ZN6S213C63v58Ev,
  (VTBL_ENTRY)&_ZN6S213C63v59Ev,
  (VTBL_ENTRY)&_ZN6S213C63v60Ev,
  (VTBL_ENTRY)&_ZN6S213C63v61Ev,
  (VTBL_ENTRY)&_ZN6S213C63v62Ev,
  (VTBL_ENTRY)&_ZN6S213C63v63Ev,
  (VTBL_ENTRY)&_ZN6S213C63v64Ev,
  (VTBL_ENTRY)&_ZN6S213C63v65Ev,
  (VTBL_ENTRY)&_ZN6S213C63v66Ev,
  (VTBL_ENTRY)&_ZN6S213C63v67Ev,
  (VTBL_ENTRY)&_ZN6S213C53v68Ev,
  (VTBL_ENTRY)&_ZN6S213C53v69Ev,
  (VTBL_ENTRY)&_ZN6S213C53v70Ev,
  (VTBL_ENTRY)&_ZN6S213C53v71Ev,
  (VTBL_ENTRY)&_ZN6S213C53v72Ev,
  (VTBL_ENTRY)&_ZN6S213C53v73Ev,
  (VTBL_ENTRY)&_ZN6S213C53v74Ev,
  (VTBL_ENTRY)&_ZN6S213C53v75Ev,
  (VTBL_ENTRY)&_ZN6S213C53v76Ev,
  (VTBL_ENTRY)&_ZN6S213C53v77Ev,
  (VTBL_ENTRY)&_ZN6S213C53v78Ev,
  (VTBL_ENTRY)&_ZN6S213C53v79Ev,
  (VTBL_ENTRY)&_ZN6S213C53v80Ev,
  (VTBL_ENTRY)&_ZN6S213C53v81Ev,
  (VTBL_ENTRY)&_ZN6S213C53v82Ev,
  (VTBL_ENTRY)&_ZN6S213C53v83Ev,
  (VTBL_ENTRY)&_ZN6S213C53v84Ev,
  (VTBL_ENTRY)&_ZN6S213C53v85Ev,
  (VTBL_ENTRY)&_ZN6S213C53v86Ev,
  (VTBL_ENTRY)&_ZN6S213C53v87Ev,
  (VTBL_ENTRY)&_ZN6S213C53v88Ev,
  (VTBL_ENTRY)&_ZN6S213C53v89Ev,
  (VTBL_ENTRY)&_ZN6S213C43v90Ev,
  (VTBL_ENTRY)&_ZN6S213C43v91Ev,
  (VTBL_ENTRY)&_ZN6S213C43v92Ev,
  (VTBL_ENTRY)&_ZN6S213C43v93Ev,
  (VTBL_ENTRY)&_ZN6S213C43v94Ev,
  (VTBL_ENTRY)&_ZN6S213C43v95Ev,
  (VTBL_ENTRY)&_ZN6S213C43v96Ev,
  (VTBL_ENTRY)&_ZN6S213C43v97Ev,
  (VTBL_ENTRY)&_ZN6S213C43v98Ev,
  (VTBL_ENTRY)&_ZN6S213C43v99Ev,
  (VTBL_ENTRY)&_ZN6S213C44v100Ev,
  (VTBL_ENTRY)&_ZN6S213C44v101Ev,
  (VTBL_ENTRY)&_ZN6S213C44v102Ev,
  (VTBL_ENTRY)&_ZN6S213C44v103Ev,
  (VTBL_ENTRY)&_ZN6S213C44v104Ev,
  (VTBL_ENTRY)&_ZN6S213C44v105Ev,
  (VTBL_ENTRY)&_ZN6S213C44v106Ev,
  (VTBL_ENTRY)&_ZN6S213C44v107Ev,
  (VTBL_ENTRY)&_ZN6S213C44v108Ev,
  (VTBL_ENTRY)&_ZN6S213C44v109Ev,
  (VTBL_ENTRY)&_ZN6S213C34v110Ev,
  (VTBL_ENTRY)&_ZN6S213C34v111Ev,
  (VTBL_ENTRY)&_ZN6S213C34v112Ev,
  (VTBL_ENTRY)&_ZN6S213C34v113Ev,
};
extern VTBL_ENTRY _ZTI6S213C3[];
extern  VTBL_ENTRY _ZTV6S213C3[];
Class_Descriptor cd_S213C3 = {  "S213C3", // class name
  bases_S213C3, 3,
  &(vtc_S213C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S213C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S213C3),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S213C2  : S213C3 {
  virtual  ~S213C2(); // _ZN6S213C2D1Ev
  virtual void  v114(); // _ZN6S213C24v114Ev
  virtual void  v115(); // _ZN6S213C24v115Ev
  S213C2(); // tgen
};
//SIG(-1 S213C2) 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 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2}


 S213C2 ::~S213C2(){ note_dtor("S213C2", this);}
void  S213C2 ::v114(){vfunc_called(this, "_ZN6S213C24v114Ev");}
void  S213C2 ::v115(){vfunc_called(this, "_ZN6S213C24v115Ev");}
S213C2 ::S213C2(){ note_ctor("S213C2", this);} // tgen

static void Test_S213C2()
{
  extern Class_Descriptor cd_S213C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S213C2, buf);
    S213C2 *dp, &lv = *(dp=new (buf) S213C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S213C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S213C2)");
    check_base_class_offset(lv, (S213C6*)(S213C5*)(S213C4*)(S213C3*), 0, "S213C2");
    check_base_class_offset(lv, (S213C5*)(S213C4*)(S213C3*), 0, "S213C2");
    check_base_class_offset(lv, (S213C4*)(S213C3*), 0, "S213C2");
    check_base_class_offset(lv, (S213C3*), 0, "S213C2");
    test_class_info(&lv, &cd_S213C2);
    dp->~S213C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS213C2(Test_S213C2, "S213C2", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S213C2C1Ev();
extern void _ZN6S213C2D1Ev();
Name_Map name_map_S213C2[] = {
  NSPAIR(_ZN6S213C2C1Ev),
  NSPAIR(_ZN6S213C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S213C6;
extern VTBL_ENTRY _ZTI6S213C6[];
extern  VTBL_ENTRY _ZTV6S213C6[];
extern Class_Descriptor cd_S213C5;
extern VTBL_ENTRY _ZTI6S213C5[];
extern  VTBL_ENTRY _ZTV6S213C5[];
extern Class_Descriptor cd_S213C4;
extern VTBL_ENTRY _ZTI6S213C4[];
extern  VTBL_ENTRY _ZTV6S213C4[];
extern Class_Descriptor cd_S213C3;
extern VTBL_ENTRY _ZTI6S213C3[];
extern  VTBL_ENTRY _ZTV6S213C3[];
static Base_Class bases_S213C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S213C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S213C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S213C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S213C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S213C2[];
extern void _ZN6S213C2D1Ev();
extern void _ZN6S213C2D0Ev();
extern void _ZN6S213C62v4Ev();
extern void _ZN6S213C62v5Ev();
extern void _ZN6S213C62v6Ev();
extern void _ZN6S213C62v7Ev();
extern void _ZN6S213C62v8Ev();
extern void _ZN6S213C62v9Ev();
extern void _ZN6S213C63v10Ev();
extern void _ZN6S213C63v11Ev();
extern void _ZN6S213C63v12Ev();
extern void _ZN6S213C63v13Ev();
extern void _ZN6S213C63v14Ev();
extern void _ZN6S213C63v15Ev();
extern void _ZN6S213C63v16Ev();
extern void _ZN6S213C63v17Ev();
extern void _ZN6S213C63v18Ev();
extern void _ZN6S213C63v19Ev();
extern void _ZN6S213C63v20Ev();
extern void _ZN6S213C63v21Ev();
extern void _ZN6S213C63v22Ev();
extern void _ZN6S213C63v23Ev();
extern void _ZN6S213C63v24Ev();
extern void _ZN6S213C63v25Ev();
extern void _ZN6S213C63v26Ev();
extern void _ZN6S213C63v27Ev();
extern void _ZN6S213C63v28Ev();
extern void _ZN6S213C63v29Ev();
extern void _ZN6S213C63v30Ev();
extern void _ZN6S213C63v31Ev();
extern void _ZN6S213C63v32Ev();
extern void _ZN6S213C63v33Ev();
extern void _ZN6S213C63v34Ev();
extern void _ZN6S213C63v35Ev();
extern void _ZN6S213C63v36Ev();
extern void _ZN6S213C63v37Ev();
extern void _ZN6S213C63v38Ev();
extern void _ZN6S213C63v39Ev();
extern void _ZN6S213C63v40Ev();
extern void _ZN6S213C63v41Ev();
extern void _ZN6S213C63v42Ev();
extern void _ZN6S213C63v43Ev();
extern void _ZN6S213C63v44Ev();
extern void _ZN6S213C63v45Ev();
extern void _ZN6S213C63v46Ev();
extern void _ZN6S213C63v47Ev();
extern void _ZN6S213C63v48Ev();
extern void _ZN6S213C63v49Ev();
extern void _ZN6S213C63v50Ev();
extern void _ZN6S213C63v51Ev();
extern void _ZN6S213C63v52Ev();
extern void _ZN6S213C63v53Ev();
extern void _ZN6S213C63v54Ev();
extern void _ZN6S213C63v55Ev();
extern void _ZN6S213C63v56Ev();
extern void _ZN6S213C63v57Ev();
extern void _ZN6S213C63v58Ev();
extern void _ZN6S213C63v59Ev();
extern void _ZN6S213C63v60Ev();
extern void _ZN6S213C63v61Ev();
extern void _ZN6S213C63v62Ev();
extern void _ZN6S213C63v63Ev();
extern void _ZN6S213C63v64Ev();
extern void _ZN6S213C63v65Ev();
extern void _ZN6S213C63v66Ev();
extern void _ZN6S213C63v67Ev();
extern void _ZN6S213C53v68Ev();
extern void _ZN6S213C53v69Ev();
extern void _ZN6S213C53v70Ev();
extern void _ZN6S213C53v71Ev();
extern void _ZN6S213C53v72Ev();
extern void _ZN6S213C53v73Ev();
extern void _ZN6S213C53v74Ev();
extern void _ZN6S213C53v75Ev();
extern void _ZN6S213C53v76Ev();
extern void _ZN6S213C53v77Ev();
extern void _ZN6S213C53v78Ev();
extern void _ZN6S213C53v79Ev();
extern void _ZN6S213C53v80Ev();
extern void _ZN6S213C53v81Ev();
extern void _ZN6S213C53v82Ev();
extern void _ZN6S213C53v83Ev();
extern void _ZN6S213C53v84Ev();
extern void _ZN6S213C53v85Ev();
extern void _ZN6S213C53v86Ev();
extern void _ZN6S213C53v87Ev();
extern void _ZN6S213C53v88Ev();
extern void _ZN6S213C53v89Ev();
extern void _ZN6S213C43v90Ev();
extern void _ZN6S213C43v91Ev();
extern void _ZN6S213C43v92Ev();
extern void _ZN6S213C43v93Ev();
extern void _ZN6S213C43v94Ev();
extern void _ZN6S213C43v95Ev();
extern void _ZN6S213C43v96Ev();
extern void _ZN6S213C43v97Ev();
extern void _ZN6S213C43v98Ev();
extern void _ZN6S213C43v99Ev();
extern void _ZN6S213C44v100Ev();
extern void _ZN6S213C44v101Ev();
extern void _ZN6S213C44v102Ev();
extern void _ZN6S213C44v103Ev();
extern void _ZN6S213C44v104Ev();
extern void _ZN6S213C44v105Ev();
extern void _ZN6S213C44v106Ev();
extern void _ZN6S213C44v107Ev();
extern void _ZN6S213C44v108Ev();
extern void _ZN6S213C44v109Ev();
extern void _ZN6S213C34v110Ev();
extern void _ZN6S213C34v111Ev();
extern void _ZN6S213C34v112Ev();
extern void _ZN6S213C34v113Ev();
extern void _ZN6S213C24v114Ev();
extern void _ZN6S213C24v115Ev();
static  VTBL_ENTRY vtc_S213C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S213C2[0]),
  (VTBL_ENTRY)&_ZN6S213C2D1Ev,
  (VTBL_ENTRY)&_ZN6S213C2D0Ev,
  (VTBL_ENTRY)&_ZN6S213C62v4Ev,
  (VTBL_ENTRY)&_ZN6S213C62v5Ev,
  (VTBL_ENTRY)&_ZN6S213C62v6Ev,
  (VTBL_ENTRY)&_ZN6S213C62v7Ev,
  (VTBL_ENTRY)&_ZN6S213C62v8Ev,
  (VTBL_ENTRY)&_ZN6S213C62v9Ev,
  (VTBL_ENTRY)&_ZN6S213C63v10Ev,
  (VTBL_ENTRY)&_ZN6S213C63v11Ev,
  (VTBL_ENTRY)&_ZN6S213C63v12Ev,
  (VTBL_ENTRY)&_ZN6S213C63v13Ev,
  (VTBL_ENTRY)&_ZN6S213C63v14Ev,
  (VTBL_ENTRY)&_ZN6S213C63v15Ev,
  (VTBL_ENTRY)&_ZN6S213C63v16Ev,
  (VTBL_ENTRY)&_ZN6S213C63v17Ev,
  (VTBL_ENTRY)&_ZN6S213C63v18Ev,
  (VTBL_ENTRY)&_ZN6S213C63v19Ev,
  (VTBL_ENTRY)&_ZN6S213C63v20Ev,
  (VTBL_ENTRY)&_ZN6S213C63v21Ev,
  (VTBL_ENTRY)&_ZN6S213C63v22Ev,
  (VTBL_ENTRY)&_ZN6S213C63v23Ev,
  (VTBL_ENTRY)&_ZN6S213C63v24Ev,
  (VTBL_ENTRY)&_ZN6S213C63v25Ev,
  (VTBL_ENTRY)&_ZN6S213C63v26Ev,
  (VTBL_ENTRY)&_ZN6S213C63v27Ev,
  (VTBL_ENTRY)&_ZN6S213C63v28Ev,
  (VTBL_ENTRY)&_ZN6S213C63v29Ev,
  (VTBL_ENTRY)&_ZN6S213C63v30Ev,
  (VTBL_ENTRY)&_ZN6S213C63v31Ev,
  (VTBL_ENTRY)&_ZN6S213C63v32Ev,
  (VTBL_ENTRY)&_ZN6S213C63v33Ev,
  (VTBL_ENTRY)&_ZN6S213C63v34Ev,
  (VTBL_ENTRY)&_ZN6S213C63v35Ev,
  (VTBL_ENTRY)&_ZN6S213C63v36Ev,
  (VTBL_ENTRY)&_ZN6S213C63v37Ev,
  (VTBL_ENTRY)&_ZN6S213C63v38Ev,
  (VTBL_ENTRY)&_ZN6S213C63v39Ev,
  (VTBL_ENTRY)&_ZN6S213C63v40Ev,
  (VTBL_ENTRY)&_ZN6S213C63v41Ev,
  (VTBL_ENTRY)&_ZN6S213C63v42Ev,
  (VTBL_ENTRY)&_ZN6S213C63v43Ev,
  (VTBL_ENTRY)&_ZN6S213C63v44Ev,
  (VTBL_ENTRY)&_ZN6S213C63v45Ev,
  (VTBL_ENTRY)&_ZN6S213C63v46Ev,
  (VTBL_ENTRY)&_ZN6S213C63v47Ev,
  (VTBL_ENTRY)&_ZN6S213C63v48Ev,
  (VTBL_ENTRY)&_ZN6S213C63v49Ev,
  (VTBL_ENTRY)&_ZN6S213C63v50Ev,
  (VTBL_ENTRY)&_ZN6S213C63v51Ev,
  (VTBL_ENTRY)&_ZN6S213C63v52Ev,
  (VTBL_ENTRY)&_ZN6S213C63v53Ev,
  (VTBL_ENTRY)&_ZN6S213C63v54Ev,
  (VTBL_ENTRY)&_ZN6S213C63v55Ev,
  (VTBL_ENTRY)&_ZN6S213C63v56Ev,
  (VTBL_ENTRY)&_ZN6S213C63v57Ev,
  (VTBL_ENTRY)&_ZN6S213C63v58Ev,
  (VTBL_ENTRY)&_ZN6S213C63v59Ev,
  (VTBL_ENTRY)&_ZN6S213C63v60Ev,
  (VTBL_ENTRY)&_ZN6S213C63v61Ev,
  (VTBL_ENTRY)&_ZN6S213C63v62Ev,
  (VTBL_ENTRY)&_ZN6S213C63v63Ev,
  (VTBL_ENTRY)&_ZN6S213C63v64Ev,
  (VTBL_ENTRY)&_ZN6S213C63v65Ev,
  (VTBL_ENTRY)&_ZN6S213C63v66Ev,
  (VTBL_ENTRY)&_ZN6S213C63v67Ev,
  (VTBL_ENTRY)&_ZN6S213C53v68Ev,
  (VTBL_ENTRY)&_ZN6S213C53v69Ev,
  (VTBL_ENTRY)&_ZN6S213C53v70Ev,
  (VTBL_ENTRY)&_ZN6S213C53v71Ev,
  (VTBL_ENTRY)&_ZN6S213C53v72Ev,
  (VTBL_ENTRY)&_ZN6S213C53v73Ev,
  (VTBL_ENTRY)&_ZN6S213C53v74Ev,
  (VTBL_ENTRY)&_ZN6S213C53v75Ev,
  (VTBL_ENTRY)&_ZN6S213C53v76Ev,
  (VTBL_ENTRY)&_ZN6S213C53v77Ev,
  (VTBL_ENTRY)&_ZN6S213C53v78Ev,
  (VTBL_ENTRY)&_ZN6S213C53v79Ev,
  (VTBL_ENTRY)&_ZN6S213C53v80Ev,
  (VTBL_ENTRY)&_ZN6S213C53v81Ev,
  (VTBL_ENTRY)&_ZN6S213C53v82Ev,
  (VTBL_ENTRY)&_ZN6S213C53v83Ev,
  (VTBL_ENTRY)&_ZN6S213C53v84Ev,
  (VTBL_ENTRY)&_ZN6S213C53v85Ev,
  (VTBL_ENTRY)&_ZN6S213C53v86Ev,
  (VTBL_ENTRY)&_ZN6S213C53v87Ev,
  (VTBL_ENTRY)&_ZN6S213C53v88Ev,
  (VTBL_ENTRY)&_ZN6S213C53v89Ev,
  (VTBL_ENTRY)&_ZN6S213C43v90Ev,
  (VTBL_ENTRY)&_ZN6S213C43v91Ev,
  (VTBL_ENTRY)&_ZN6S213C43v92Ev,
  (VTBL_ENTRY)&_ZN6S213C43v93Ev,
  (VTBL_ENTRY)&_ZN6S213C43v94Ev,
  (VTBL_ENTRY)&_ZN6S213C43v95Ev,
  (VTBL_ENTRY)&_ZN6S213C43v96Ev,
  (VTBL_ENTRY)&_ZN6S213C43v97Ev,
  (VTBL_ENTRY)&_ZN6S213C43v98Ev,
  (VTBL_ENTRY)&_ZN6S213C43v99Ev,
  (VTBL_ENTRY)&_ZN6S213C44v100Ev,
  (VTBL_ENTRY)&_ZN6S213C44v101Ev,
  (VTBL_ENTRY)&_ZN6S213C44v102Ev,
  (VTBL_ENTRY)&_ZN6S213C44v103Ev,
  (VTBL_ENTRY)&_ZN6S213C44v104Ev,
  (VTBL_ENTRY)&_ZN6S213C44v105Ev,
  (VTBL_ENTRY)&_ZN6S213C44v106Ev,
  (VTBL_ENTRY)&_ZN6S213C44v107Ev,
  (VTBL_ENTRY)&_ZN6S213C44v108Ev,
  (VTBL_ENTRY)&_ZN6S213C44v109Ev,
  (VTBL_ENTRY)&_ZN6S213C34v110Ev,
  (VTBL_ENTRY)&_ZN6S213C34v111Ev,
  (VTBL_ENTRY)&_ZN6S213C34v112Ev,
  (VTBL_ENTRY)&_ZN6S213C34v113Ev,
  (VTBL_ENTRY)&_ZN6S213C24v114Ev,
  (VTBL_ENTRY)&_ZN6S213C24v115Ev,
};
extern VTBL_ENTRY _ZTI6S213C2[];
extern  VTBL_ENTRY _ZTV6S213C2[];
Class_Descriptor cd_S213C2 = {  "S213C2", // class name
  bases_S213C2, 4,
  &(vtc_S213C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S213C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S213C2),116, //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  S213C1  : S213C2 {
  int s213c1f0[4];
  virtual  ~S213C1(); // _ZN6S213C1D1Ev
  virtual void  v1(); // _ZN6S213C12v1Ev
  virtual void  v2(); // _ZN6S213C12v2Ev
  virtual void  v3(); // _ZN6S213C12v3Ev
  S213C1(); // tgen
};
//SIG(1 S213C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v110 v111 v112 v113 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v114 v115} vd v1 v2 v3 Fi[4]}


 S213C1 ::~S213C1(){ note_dtor("S213C1", this);}
void  S213C1 ::v1(){vfunc_called(this, "_ZN6S213C12v1Ev");}
void  S213C1 ::v2(){vfunc_called(this, "_ZN6S213C12v2Ev");}
void  S213C1 ::v3(){vfunc_called(this, "_ZN6S213C12v3Ev");}
S213C1 ::S213C1(){ note_ctor("S213C1", this);} // tgen

static void Test_S213C1()
{
  extern Class_Descriptor cd_S213C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,60)];
    init_test(&cd_S213C1, buf);
    S213C1 *dp, &lv = *(dp=new (buf) S213C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,236), "sizeof(S213C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S213C1)");
    check_base_class_offset(lv, (S213C6*)(S213C5*)(S213C4*)(S213C3*)(S213C2*), 0, "S213C1");
    check_base_class_offset(lv, (S213C5*)(S213C4*)(S213C3*)(S213C2*), 0, "S213C1");
    check_base_class_offset(lv, (S213C4*)(S213C3*)(S213C2*), 0, "S213C1");
    check_base_class_offset(lv, (S213C3*)(S213C2*), 0, "S213C1");
    check_base_class_offset(lv, (S213C2*), 0, "S213C1");
    check_field_offset(lv, s213c1f0, ABISELECT(296,220), "S213C1.s213c1f0");
    test_class_info(&lv, &cd_S213C1);
    dp->~S213C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS213C1(Test_S213C1, "S213C1", ABISELECT(312,236));

#else // __cplusplus

extern void _ZN6S213C1C1Ev();
extern void _ZN6S213C1D1Ev();
Name_Map name_map_S213C1[] = {
  NSPAIR(_ZN6S213C1C1Ev),
  NSPAIR(_ZN6S213C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S213C6;
extern VTBL_ENTRY _ZTI6S213C6[];
extern  VTBL_ENTRY _ZTV6S213C6[];
extern Class_Descriptor cd_S213C5;
extern VTBL_ENTRY _ZTI6S213C5[];
extern  VTBL_ENTRY _ZTV6S213C5[];
extern Class_Descriptor cd_S213C4;
extern VTBL_ENTRY _ZTI6S213C4[];
extern  VTBL_ENTRY _ZTV6S213C4[];
extern Class_Descriptor cd_S213C3;
extern VTBL_ENTRY _ZTI6S213C3[];
extern  VTBL_ENTRY _ZTV6S213C3[];
extern Class_Descriptor cd_S213C2;
extern VTBL_ENTRY _ZTI6S213C2[];
extern  VTBL_ENTRY _ZTV6S213C2[];
static Base_Class bases_S213C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S213C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S213C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S213C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S213C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S213C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S213C1[];
extern void _ZN6S213C1D1Ev();
extern void _ZN6S213C1D0Ev();
extern void _ZN6S213C62v4Ev();
extern void _ZN6S213C62v5Ev();
extern void _ZN6S213C62v6Ev();
extern void _ZN6S213C62v7Ev();
extern void _ZN6S213C62v8Ev();
extern void _ZN6S213C62v9Ev();
extern void _ZN6S213C63v10Ev();
extern void _ZN6S213C63v11Ev();
extern void _ZN6S213C63v12Ev();
extern void _ZN6S213C63v13Ev();
extern void _ZN6S213C63v14Ev();
extern void _ZN6S213C63v15Ev();
extern void _ZN6S213C63v16Ev();
extern void _ZN6S213C63v17Ev();
extern void _ZN6S213C63v18Ev();
extern void _ZN6S213C63v19Ev();
extern void _ZN6S213C63v20Ev();
extern void _ZN6S213C63v21Ev();
extern void _ZN6S213C63v22Ev();
extern void _ZN6S213C63v23Ev();
extern void _ZN6S213C63v24Ev();
extern void _ZN6S213C63v25Ev();
extern void _ZN6S213C63v26Ev();
extern void _ZN6S213C63v27Ev();
extern void _ZN6S213C63v28Ev();
extern void _ZN6S213C63v29Ev();
extern void _ZN6S213C63v30Ev();
extern void _ZN6S213C63v31Ev();
extern void _ZN6S213C63v32Ev();
extern void _ZN6S213C63v33Ev();
extern void _ZN6S213C63v34Ev();
extern void _ZN6S213C63v35Ev();
extern void _ZN6S213C63v36Ev();
extern void _ZN6S213C63v37Ev();
extern void _ZN6S213C63v38Ev();
extern void _ZN6S213C63v39Ev();
extern void _ZN6S213C63v40Ev();
extern void _ZN6S213C63v41Ev();
extern void _ZN6S213C63v42Ev();
extern void _ZN6S213C63v43Ev();
extern void _ZN6S213C63v44Ev();
extern void _ZN6S213C63v45Ev();
extern void _ZN6S213C63v46Ev();
extern void _ZN6S213C63v47Ev();
extern void _ZN6S213C63v48Ev();
extern void _ZN6S213C63v49Ev();
extern void _ZN6S213C63v50Ev();
extern void _ZN6S213C63v51Ev();
extern void _ZN6S213C63v52Ev();
extern void _ZN6S213C63v53Ev();
extern void _ZN6S213C63v54Ev();
extern void _ZN6S213C63v55Ev();
extern void _ZN6S213C63v56Ev();
extern void _ZN6S213C63v57Ev();
extern void _ZN6S213C63v58Ev();
extern void _ZN6S213C63v59Ev();
extern void _ZN6S213C63v60Ev();
extern void _ZN6S213C63v61Ev();
extern void _ZN6S213C63v62Ev();
extern void _ZN6S213C63v63Ev();
extern void _ZN6S213C63v64Ev();
extern void _ZN6S213C63v65Ev();
extern void _ZN6S213C63v66Ev();
extern void _ZN6S213C63v67Ev();
extern void _ZN6S213C53v68Ev();
extern void _ZN6S213C53v69Ev();
extern void _ZN6S213C53v70Ev();
extern void _ZN6S213C53v71Ev();
extern void _ZN6S213C53v72Ev();
extern void _ZN6S213C53v73Ev();
extern void _ZN6S213C53v74Ev();
extern void _ZN6S213C53v75Ev();
extern void _ZN6S213C53v76Ev();
extern void _ZN6S213C53v77Ev();
extern void _ZN6S213C53v78Ev();
extern void _ZN6S213C53v79Ev();
extern void _ZN6S213C53v80Ev();
extern void _ZN6S213C53v81Ev();
extern void _ZN6S213C53v82Ev();
extern void _ZN6S213C53v83Ev();
extern void _ZN6S213C53v84Ev();
extern void _ZN6S213C53v85Ev();
extern void _ZN6S213C53v86Ev();
extern void _ZN6S213C53v87Ev();
extern void _ZN6S213C53v88Ev();
extern void _ZN6S213C53v89Ev();
extern void _ZN6S213C43v90Ev();
extern void _ZN6S213C43v91Ev();
extern void _ZN6S213C43v92Ev();
extern void _ZN6S213C43v93Ev();
extern void _ZN6S213C43v94Ev();
extern void _ZN6S213C43v95Ev();
extern void _ZN6S213C43v96Ev();
extern void _ZN6S213C43v97Ev();
extern void _ZN6S213C43v98Ev();
extern void _ZN6S213C43v99Ev();
extern void _ZN6S213C44v100Ev();
extern void _ZN6S213C44v101Ev();
extern void _ZN6S213C44v102Ev();
extern void _ZN6S213C44v103Ev();
extern void _ZN6S213C44v104Ev();
extern void _ZN6S213C44v105Ev();
extern void _ZN6S213C44v106Ev();
extern void _ZN6S213C44v107Ev();
extern void _ZN6S213C44v108Ev();
extern void _ZN6S213C44v109Ev();
extern void _ZN6S213C34v110Ev();
extern void _ZN6S213C34v111Ev();
extern void _ZN6S213C34v112Ev();
extern void _ZN6S213C34v113Ev();
extern void _ZN6S213C24v114Ev();
extern void _ZN6S213C24v115Ev();
extern void _ZN6S213C12v1Ev();
extern void _ZN6S213C12v2Ev();
extern void _ZN6S213C12v3Ev();
static  VTBL_ENTRY vtc_S213C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S213C1[0]),
  (VTBL_ENTRY)&_ZN6S213C1D1Ev,
  (VTBL_ENTRY)&_ZN6S213C1D0Ev,
  (VTBL_ENTRY)&_ZN6S213C62v4Ev,
  (VTBL_ENTRY)&_ZN6S213C62v5Ev,
  (VTBL_ENTRY)&_ZN6S213C62v6Ev,
  (VTBL_ENTRY)&_ZN6S213C62v7Ev,
  (VTBL_ENTRY)&_ZN6S213C62v8Ev,
  (VTBL_ENTRY)&_ZN6S213C62v9Ev,
  (VTBL_ENTRY)&_ZN6S213C63v10Ev,
  (VTBL_ENTRY)&_ZN6S213C63v11Ev,
  (VTBL_ENTRY)&_ZN6S213C63v12Ev,
  (VTBL_ENTRY)&_ZN6S213C63v13Ev,
  (VTBL_ENTRY)&_ZN6S213C63v14Ev,
  (VTBL_ENTRY)&_ZN6S213C63v15Ev,
  (VTBL_ENTRY)&_ZN6S213C63v16Ev,
  (VTBL_ENTRY)&_ZN6S213C63v17Ev,
  (VTBL_ENTRY)&_ZN6S213C63v18Ev,
  (VTBL_ENTRY)&_ZN6S213C63v19Ev,
  (VTBL_ENTRY)&_ZN6S213C63v20Ev,
  (VTBL_ENTRY)&_ZN6S213C63v21Ev,
  (VTBL_ENTRY)&_ZN6S213C63v22Ev,
  (VTBL_ENTRY)&_ZN6S213C63v23Ev,
  (VTBL_ENTRY)&_ZN6S213C63v24Ev,
  (VTBL_ENTRY)&_ZN6S213C63v25Ev,
  (VTBL_ENTRY)&_ZN6S213C63v26Ev,
  (VTBL_ENTRY)&_ZN6S213C63v27Ev,
  (VTBL_ENTRY)&_ZN6S213C63v28Ev,
  (VTBL_ENTRY)&_ZN6S213C63v29Ev,
  (VTBL_ENTRY)&_ZN6S213C63v30Ev,
  (VTBL_ENTRY)&_ZN6S213C63v31Ev,
  (VTBL_ENTRY)&_ZN6S213C63v32Ev,
  (VTBL_ENTRY)&_ZN6S213C63v33Ev,
  (VTBL_ENTRY)&_ZN6S213C63v34Ev,
  (VTBL_ENTRY)&_ZN6S213C63v35Ev,
  (VTBL_ENTRY)&_ZN6S213C63v36Ev,
  (VTBL_ENTRY)&_ZN6S213C63v37Ev,
  (VTBL_ENTRY)&_ZN6S213C63v38Ev,
  (VTBL_ENTRY)&_ZN6S213C63v39Ev,
  (VTBL_ENTRY)&_ZN6S213C63v40Ev,
  (VTBL_ENTRY)&_ZN6S213C63v41Ev,
  (VTBL_ENTRY)&_ZN6S213C63v42Ev,
  (VTBL_ENTRY)&_ZN6S213C63v43Ev,
  (VTBL_ENTRY)&_ZN6S213C63v44Ev,
  (VTBL_ENTRY)&_ZN6S213C63v45Ev,
  (VTBL_ENTRY)&_ZN6S213C63v46Ev,
  (VTBL_ENTRY)&_ZN6S213C63v47Ev,
  (VTBL_ENTRY)&_ZN6S213C63v48Ev,
  (VTBL_ENTRY)&_ZN6S213C63v49Ev,
  (VTBL_ENTRY)&_ZN6S213C63v50Ev,
  (VTBL_ENTRY)&_ZN6S213C63v51Ev,
  (VTBL_ENTRY)&_ZN6S213C63v52Ev,
  (VTBL_ENTRY)&_ZN6S213C63v53Ev,
  (VTBL_ENTRY)&_ZN6S213C63v54Ev,
  (VTBL_ENTRY)&_ZN6S213C63v55Ev,
  (VTBL_ENTRY)&_ZN6S213C63v56Ev,
  (VTBL_ENTRY)&_ZN6S213C63v57Ev,
  (VTBL_ENTRY)&_ZN6S213C63v58Ev,
  (VTBL_ENTRY)&_ZN6S213C63v59Ev,
  (VTBL_ENTRY)&_ZN6S213C63v60Ev,
  (VTBL_ENTRY)&_ZN6S213C63v61Ev,
  (VTBL_ENTRY)&_ZN6S213C63v62Ev,
  (VTBL_ENTRY)&_ZN6S213C63v63Ev,
  (VTBL_ENTRY)&_ZN6S213C63v64Ev,
  (VTBL_ENTRY)&_ZN6S213C63v65Ev,
  (VTBL_ENTRY)&_ZN6S213C63v66Ev,
  (VTBL_ENTRY)&_ZN6S213C63v67Ev,
  (VTBL_ENTRY)&_ZN6S213C53v68Ev,
  (VTBL_ENTRY)&_ZN6S213C53v69Ev,
  (VTBL_ENTRY)&_ZN6S213C53v70Ev,
  (VTBL_ENTRY)&_ZN6S213C53v71Ev,
  (VTBL_ENTRY)&_ZN6S213C53v72Ev,
  (VTBL_ENTRY)&_ZN6S213C53v73Ev,
  (VTBL_ENTRY)&_ZN6S213C53v74Ev,
  (VTBL_ENTRY)&_ZN6S213C53v75Ev,
  (VTBL_ENTRY)&_ZN6S213C53v76Ev,
  (VTBL_ENTRY)&_ZN6S213C53v77Ev,
  (VTBL_ENTRY)&_ZN6S213C53v78Ev,
  (VTBL_ENTRY)&_ZN6S213C53v79Ev,
  (VTBL_ENTRY)&_ZN6S213C53v80Ev,
  (VTBL_ENTRY)&_ZN6S213C53v81Ev,
  (VTBL_ENTRY)&_ZN6S213C53v82Ev,
  (VTBL_ENTRY)&_ZN6S213C53v83Ev,
  (VTBL_ENTRY)&_ZN6S213C53v84Ev,
  (VTBL_ENTRY)&_ZN6S213C53v85Ev,
  (VTBL_ENTRY)&_ZN6S213C53v86Ev,
  (VTBL_ENTRY)&_ZN6S213C53v87Ev,
  (VTBL_ENTRY)&_ZN6S213C53v88Ev,
  (VTBL_ENTRY)&_ZN6S213C53v89Ev,
  (VTBL_ENTRY)&_ZN6S213C43v90Ev,
  (VTBL_ENTRY)&_ZN6S213C43v91Ev,
  (VTBL_ENTRY)&_ZN6S213C43v92Ev,
  (VTBL_ENTRY)&_ZN6S213C43v93Ev,
  (VTBL_ENTRY)&_ZN6S213C43v94Ev,
  (VTBL_ENTRY)&_ZN6S213C43v95Ev,
  (VTBL_ENTRY)&_ZN6S213C43v96Ev,
  (VTBL_ENTRY)&_ZN6S213C43v97Ev,
  (VTBL_ENTRY)&_ZN6S213C43v98Ev,
  (VTBL_ENTRY)&_ZN6S213C43v99Ev,
  (VTBL_ENTRY)&_ZN6S213C44v100Ev,
  (VTBL_ENTRY)&_ZN6S213C44v101Ev,
  (VTBL_ENTRY)&_ZN6S213C44v102Ev,
  (VTBL_ENTRY)&_ZN6S213C44v103Ev,
  (VTBL_ENTRY)&_ZN6S213C44v104Ev,
  (VTBL_ENTRY)&_ZN6S213C44v105Ev,
  (VTBL_ENTRY)&_ZN6S213C44v106Ev,
  (VTBL_ENTRY)&_ZN6S213C44v107Ev,
  (VTBL_ENTRY)&_ZN6S213C44v108Ev,
  (VTBL_ENTRY)&_ZN6S213C44v109Ev,
  (VTBL_ENTRY)&_ZN6S213C34v110Ev,
  (VTBL_ENTRY)&_ZN6S213C34v111Ev,
  (VTBL_ENTRY)&_ZN6S213C34v112Ev,
  (VTBL_ENTRY)&_ZN6S213C34v113Ev,
  (VTBL_ENTRY)&_ZN6S213C24v114Ev,
  (VTBL_ENTRY)&_ZN6S213C24v115Ev,
  (VTBL_ENTRY)&_ZN6S213C12v1Ev,
  (VTBL_ENTRY)&_ZN6S213C12v2Ev,
  (VTBL_ENTRY)&_ZN6S213C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S213C1[];
extern  VTBL_ENTRY _ZTV6S213C1[];
Class_Descriptor cd_S213C1 = {  "S213C1", // class name
  bases_S213C1, 5,
  &(vtc_S213C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,236), // object size
  NSPAIRA(_ZTI6S213C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S213C1),119, //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  S211C6  {
  int s211c6f0;
  __tsi64 s211c6f1;
  void *s211c6f2[4];
  int s211c6f3[2];
  void *s211c6f4;
  ::S1503C5_nt s211c6f5;
  void *s211c6f6[2];
  virtual  ~S211C6(); // _ZN6S211C6D1Ev
  virtual void  v4(); // _ZN6S211C62v4Ev
  virtual void  v5(); // _ZN6S211C62v5Ev
  virtual void  v6(); // _ZN6S211C62v6Ev
  virtual void  v7(); // _ZN6S211C62v7Ev
  virtual void  v8(); // _ZN6S211C62v8Ev
  virtual void  v9(); // _ZN6S211C62v9Ev
  virtual void  v10(); // _ZN6S211C63v10Ev
  virtual void  v11(); // _ZN6S211C63v11Ev
  virtual void  v12(); // _ZN6S211C63v12Ev
  virtual void  v13(); // _ZN6S211C63v13Ev
  virtual void  v14(); // _ZN6S211C63v14Ev
  virtual void  v15(); // _ZN6S211C63v15Ev
  virtual void  v16(); // _ZN6S211C63v16Ev
  virtual void  v17(); // _ZN6S211C63v17Ev
  virtual void  v18(); // _ZN6S211C63v18Ev
  virtual void  v19(); // _ZN6S211C63v19Ev
  virtual void  v20(); // _ZN6S211C63v20Ev
  virtual void  v21(); // _ZN6S211C63v21Ev
  virtual void  v22(); // _ZN6S211C63v22Ev
  virtual void  v23(); // _ZN6S211C63v23Ev
  virtual void  v24(); // _ZN6S211C63v24Ev
  virtual void  v25(); // _ZN6S211C63v25Ev
  virtual void  v26(); // _ZN6S211C63v26Ev
  virtual void  v27(); // _ZN6S211C63v27Ev
  virtual void  v28(); // _ZN6S211C63v28Ev
  virtual void  v29(); // _ZN6S211C63v29Ev
  virtual void  v30(); // _ZN6S211C63v30Ev
  virtual void  v31(); // _ZN6S211C63v31Ev
  virtual void  v32(); // _ZN6S211C63v32Ev
  virtual void  v33(); // _ZN6S211C63v33Ev
  virtual void  v34(); // _ZN6S211C63v34Ev
  virtual void  v35(); // _ZN6S211C63v35Ev
  virtual void  v36(); // _ZN6S211C63v36Ev
  virtual void  v37(); // _ZN6S211C63v37Ev
  virtual void  v38(); // _ZN6S211C63v38Ev
  virtual void  v39(); // _ZN6S211C63v39Ev
  virtual void  v40(); // _ZN6S211C63v40Ev
  virtual void  v41(); // _ZN6S211C63v41Ev
  virtual void  v42(); // _ZN6S211C63v42Ev
  virtual void  v43(); // _ZN6S211C63v43Ev
  virtual void  v44(); // _ZN6S211C63v44Ev
  virtual void  v45(); // _ZN6S211C63v45Ev
  virtual void  v46(); // _ZN6S211C63v46Ev
  virtual void  v47(); // _ZN6S211C63v47Ev
  virtual void  v48(); // _ZN6S211C63v48Ev
  virtual void  v49(); // _ZN6S211C63v49Ev
  virtual void  v50(); // _ZN6S211C63v50Ev
  virtual void  v51(); // _ZN6S211C63v51Ev
  virtual void  v52(); // _ZN6S211C63v52Ev
  virtual void  v53(); // _ZN6S211C63v53Ev
  virtual void  v54(); // _ZN6S211C63v54Ev
  virtual void  v55(); // _ZN6S211C63v55Ev
  virtual void  v56(); // _ZN6S211C63v56Ev
  virtual void  v57(); // _ZN6S211C63v57Ev
  virtual void  v58(); // _ZN6S211C63v58Ev
  virtual void  v59(); // _ZN6S211C63v59Ev
  virtual void  v60(); // _ZN6S211C63v60Ev
  virtual void  v61(); // _ZN6S211C63v61Ev
  virtual void  v62(); // _ZN6S211C63v62Ev
  virtual void  v63(); // _ZN6S211C63v63Ev
  virtual void  v64(); // _ZN6S211C63v64Ev
  virtual void  v65(); // _ZN6S211C63v65Ev
  virtual void  v66(); // _ZN6S211C63v66Ev
  virtual void  v67(); // _ZN6S211C63v67Ev
  S211C6(); // tgen
};
//SIG(-1 S211C6) 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]}


 S211C6 ::~S211C6(){ note_dtor("S211C6", this);}
void  S211C6 ::v4(){vfunc_called(this, "_ZN6S211C62v4Ev");}
void  S211C6 ::v5(){vfunc_called(this, "_ZN6S211C62v5Ev");}
void  S211C6 ::v6(){vfunc_called(this, "_ZN6S211C62v6Ev");}
void  S211C6 ::v7(){vfunc_called(this, "_ZN6S211C62v7Ev");}
void  S211C6 ::v8(){vfunc_called(this, "_ZN6S211C62v8Ev");}
void  S211C6 ::v9(){vfunc_called(this, "_ZN6S211C62v9Ev");}
void  S211C6 ::v10(){vfunc_called(this, "_ZN6S211C63v10Ev");}
void  S211C6 ::v11(){vfunc_called(this, "_ZN6S211C63v11Ev");}
void  S211C6 ::v12(){vfunc_called(this, "_ZN6S211C63v12Ev");}
void  S211C6 ::v13(){vfunc_called(this, "_ZN6S211C63v13Ev");}
void  S211C6 ::v14(){vfunc_called(this, "_ZN6S211C63v14Ev");}
void  S211C6 ::v15(){vfunc_called(this, "_ZN6S211C63v15Ev");}
void  S211C6 ::v16(){vfunc_called(this, "_ZN6S211C63v16Ev");}
void  S211C6 ::v17(){vfunc_called(this, "_ZN6S211C63v17Ev");}
void  S211C6 ::v18(){vfunc_called(this, "_ZN6S211C63v18Ev");}
void  S211C6 ::v19(){vfunc_called(this, "_ZN6S211C63v19Ev");}
void  S211C6 ::v20(){vfunc_called(this, "_ZN6S211C63v20Ev");}
void  S211C6 ::v21(){vfunc_called(this, "_ZN6S211C63v21Ev");}
void  S211C6 ::v22(){vfunc_called(this, "_ZN6S211C63v22Ev");}
void  S211C6 ::v23(){vfunc_called(this, "_ZN6S211C63v23Ev");}
void  S211C6 ::v24(){vfunc_called(this, "_ZN6S211C63v24Ev");}
void  S211C6 ::v25(){vfunc_called(this, "_ZN6S211C63v25Ev");}
void  S211C6 ::v26(){vfunc_called(this, "_ZN6S211C63v26Ev");}
void  S211C6 ::v27(){vfunc_called(this, "_ZN6S211C63v27Ev");}
void  S211C6 ::v28(){vfunc_called(this, "_ZN6S211C63v28Ev");}
void  S211C6 ::v29(){vfunc_called(this, "_ZN6S211C63v29Ev");}
void  S211C6 ::v30(){vfunc_called(this, "_ZN6S211C63v30Ev");}
void  S211C6 ::v31(){vfunc_called(this, "_ZN6S211C63v31Ev");}
void  S211C6 ::v32(){vfunc_called(this, "_ZN6S211C63v32Ev");}
void  S211C6 ::v33(){vfunc_called(this, "_ZN6S211C63v33Ev");}
void  S211C6 ::v34(){vfunc_called(this, "_ZN6S211C63v34Ev");}
void  S211C6 ::v35(){vfunc_called(this, "_ZN6S211C63v35Ev");}
void  S211C6 ::v36(){vfunc_called(this, "_ZN6S211C63v36Ev");}
void  S211C6 ::v37(){vfunc_called(this, "_ZN6S211C63v37Ev");}
void  S211C6 ::v38(){vfunc_called(this, "_ZN6S211C63v38Ev");}
void  S211C6 ::v39(){vfunc_called(this, "_ZN6S211C63v39Ev");}
void  S211C6 ::v40(){vfunc_called(this, "_ZN6S211C63v40Ev");}
void  S211C6 ::v41(){vfunc_called(this, "_ZN6S211C63v41Ev");}
void  S211C6 ::v42(){vfunc_called(this, "_ZN6S211C63v42Ev");}
void  S211C6 ::v43(){vfunc_called(this, "_ZN6S211C63v43Ev");}
void  S211C6 ::v44(){vfunc_called(this, "_ZN6S211C63v44Ev");}
void  S211C6 ::v45(){vfunc_called(this, "_ZN6S211C63v45Ev");}
void  S211C6 ::v46(){vfunc_called(this, "_ZN6S211C63v46Ev");}
void  S211C6 ::v47(){vfunc_called(this, "_ZN6S211C63v47Ev");}
void  S211C6 ::v48(){vfunc_called(this, "_ZN6S211C63v48Ev");}
void  S211C6 ::v49(){vfunc_called(this, "_ZN6S211C63v49Ev");}
void  S211C6 ::v50(){vfunc_called(this, "_ZN6S211C63v50Ev");}
void  S211C6 ::v51(){vfunc_called(this, "_ZN6S211C63v51Ev");}
void  S211C6 ::v52(){vfunc_called(this, "_ZN6S211C63v52Ev");}
void  S211C6 ::v53(){vfunc_called(this, "_ZN6S211C63v53Ev");}
void  S211C6 ::v54(){vfunc_called(this, "_ZN6S211C63v54Ev");}
void  S211C6 ::v55(){vfunc_called(this, "_ZN6S211C63v55Ev");}
void  S211C6 ::v56(){vfunc_called(this, "_ZN6S211C63v56Ev");}
void  S211C6 ::v57(){vfunc_called(this, "_ZN6S211C63v57Ev");}
void  S211C6 ::v58(){vfunc_called(this, "_ZN6S211C63v58Ev");}
void  S211C6 ::v59(){vfunc_called(this, "_ZN6S211C63v59Ev");}
void  S211C6 ::v60(){vfunc_called(this, "_ZN6S211C63v60Ev");}
void  S211C6 ::v61(){vfunc_called(this, "_ZN6S211C63v61Ev");}
void  S211C6 ::v62(){vfunc_called(this, "_ZN6S211C63v62Ev");}
void  S211C6 ::v63(){vfunc_called(this, "_ZN6S211C63v63Ev");}
void  S211C6 ::v64(){vfunc_called(this, "_ZN6S211C63v64Ev");}
void  S211C6 ::v65(){vfunc_called(this, "_ZN6S211C63v65Ev");}
void  S211C6 ::v66(){vfunc_called(this, "_ZN6S211C63v66Ev");}
void  S211C6 ::v67(){vfunc_called(this, "_ZN6S211C63v67Ev");}
S211C6 ::S211C6(){ note_ctor("S211C6", this);} // tgen

static void Test_S211C6()
{
  extern Class_Descriptor cd_S211C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S211C6, buf);
    S211C6 *dp, &lv = *(dp=new (buf) S211C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S211C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S211C6)");
    check_field_offset(lv, s211c6f0, ABISELECT(8,4), "S211C6.s211c6f0");
    check_field_offset(lv, s211c6f1, ABISELECT(16,8), "S211C6.s211c6f1");
    check_field_offset(lv, s211c6f2, ABISELECT(24,16), "S211C6.s211c6f2");
    check_field_offset(lv, s211c6f3, ABISELECT(56,32), "S211C6.s211c6f3");
    check_field_offset(lv, s211c6f4, ABISELECT(64,40), "S211C6.s211c6f4");
    check_field_offset(lv, s211c6f5, ABISELECT(72,44), "S211C6.s211c6f5");
    check_field_offset(lv, s211c6f6, ABISELECT(80,52), "S211C6.s211c6f6");
    test_class_info(&lv, &cd_S211C6);
    dp->~S211C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS211C6(Test_S211C6, "S211C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S211C6C1Ev();
extern void _ZN6S211C6D1Ev();
Name_Map name_map_S211C6[] = {
  NSPAIR(_ZN6S211C6C1Ev),
  NSPAIR(_ZN6S211C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S211C6[];
extern void _ZN6S211C6D1Ev();
extern void _ZN6S211C6D0Ev();
extern void _ZN6S211C62v4Ev();
extern void _ZN6S211C62v5Ev();
extern void _ZN6S211C62v6Ev();
extern void _ZN6S211C62v7Ev();
extern void _ZN6S211C62v8Ev();
extern void _ZN6S211C62v9Ev();
extern void _ZN6S211C63v10Ev();
extern void _ZN6S211C63v11Ev();
extern void _ZN6S211C63v12Ev();
extern void _ZN6S211C63v13Ev();
extern void _ZN6S211C63v14Ev();
extern void _ZN6S211C63v15Ev();
extern void _ZN6S211C63v16Ev();
extern void _ZN6S211C63v17Ev();
extern void _ZN6S211C63v18Ev();
extern void _ZN6S211C63v19Ev();
extern void _ZN6S211C63v20Ev();
extern void _ZN6S211C63v21Ev();
extern void _ZN6S211C63v22Ev();
extern void _ZN6S211C63v23Ev();
extern void _ZN6S211C63v24Ev();
extern void _ZN6S211C63v25Ev();
extern void _ZN6S211C63v26Ev();
extern void _ZN6S211C63v27Ev();
extern void _ZN6S211C63v28Ev();
extern void _ZN6S211C63v29Ev();
extern void _ZN6S211C63v30Ev();
extern void _ZN6S211C63v31Ev();
extern void _ZN6S211C63v32Ev();
extern void _ZN6S211C63v33Ev();
extern void _ZN6S211C63v34Ev();
extern void _ZN6S211C63v35Ev();
extern void _ZN6S211C63v36Ev();
extern void _ZN6S211C63v37Ev();
extern void _ZN6S211C63v38Ev();
extern void _ZN6S211C63v39Ev();
extern void _ZN6S211C63v40Ev();
extern void _ZN6S211C63v41Ev();
extern void _ZN6S211C63v42Ev();
extern void _ZN6S211C63v43Ev();
extern void _ZN6S211C63v44Ev();
extern void _ZN6S211C63v45Ev();
extern void _ZN6S211C63v46Ev();
extern void _ZN6S211C63v47Ev();
extern void _ZN6S211C63v48Ev();
extern void _ZN6S211C63v49Ev();
extern void _ZN6S211C63v50Ev();
extern void _ZN6S211C63v51Ev();
extern void _ZN6S211C63v52Ev();
extern void _ZN6S211C63v53Ev();
extern void _ZN6S211C63v54Ev();
extern void _ZN6S211C63v55Ev();
extern void _ZN6S211C63v56Ev();
extern void _ZN6S211C63v57Ev();
extern void _ZN6S211C63v58Ev();
extern void _ZN6S211C63v59Ev();
extern void _ZN6S211C63v60Ev();
extern void _ZN6S211C63v61Ev();
extern void _ZN6S211C63v62Ev();
extern void _ZN6S211C63v63Ev();
extern void _ZN6S211C63v64Ev();
extern void _ZN6S211C63v65Ev();
extern void _ZN6S211C63v66Ev();
extern void _ZN6S211C63v67Ev();
static  VTBL_ENTRY vtc_S211C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S211C6[0]),
  (VTBL_ENTRY)&_ZN6S211C6D1Ev,
  (VTBL_ENTRY)&_ZN6S211C6D0Ev,
  (VTBL_ENTRY)&_ZN6S211C62v4Ev,
  (VTBL_ENTRY)&_ZN6S211C62v5Ev,
  (VTBL_ENTRY)&_ZN6S211C62v6Ev,
  (VTBL_ENTRY)&_ZN6S211C62v7Ev,
  (VTBL_ENTRY)&_ZN6S211C62v8Ev,
  (VTBL_ENTRY)&_ZN6S211C62v9Ev,
  (VTBL_ENTRY)&_ZN6S211C63v10Ev,
  (VTBL_ENTRY)&_ZN6S211C63v11Ev,
  (VTBL_ENTRY)&_ZN6S211C63v12Ev,
  (VTBL_ENTRY)&_ZN6S211C63v13Ev,
  (VTBL_ENTRY)&_ZN6S211C63v14Ev,
  (VTBL_ENTRY)&_ZN6S211C63v15Ev,
  (VTBL_ENTRY)&_ZN6S211C63v16Ev,
  (VTBL_ENTRY)&_ZN6S211C63v17Ev,
  (VTBL_ENTRY)&_ZN6S211C63v18Ev,
  (VTBL_ENTRY)&_ZN6S211C63v19Ev,
  (VTBL_ENTRY)&_ZN6S211C63v20Ev,
  (VTBL_ENTRY)&_ZN6S211C63v21Ev,
  (VTBL_ENTRY)&_ZN6S211C63v22Ev,
  (VTBL_ENTRY)&_ZN6S211C63v23Ev,
  (VTBL_ENTRY)&_ZN6S211C63v24Ev,
  (VTBL_ENTRY)&_ZN6S211C63v25Ev,
  (VTBL_ENTRY)&_ZN6S211C63v26Ev,
  (VTBL_ENTRY)&_ZN6S211C63v27Ev,
  (VTBL_ENTRY)&_ZN6S211C63v28Ev,
  (VTBL_ENTRY)&_ZN6S211C63v29Ev,
  (VTBL_ENTRY)&_ZN6S211C63v30Ev,
  (VTBL_ENTRY)&_ZN6S211C63v31Ev,
  (VTBL_ENTRY)&_ZN6S211C63v32Ev,
  (VTBL_ENTRY)&_ZN6S211C63v33Ev,
  (VTBL_ENTRY)&_ZN6S211C63v34Ev,
  (VTBL_ENTRY)&_ZN6S211C63v35Ev,
  (VTBL_ENTRY)&_ZN6S211C63v36Ev,
  (VTBL_ENTRY)&_ZN6S211C63v37Ev,
  (VTBL_ENTRY)&_ZN6S211C63v38Ev,
  (VTBL_ENTRY)&_ZN6S211C63v39Ev,
  (VTBL_ENTRY)&_ZN6S211C63v40Ev,
  (VTBL_ENTRY)&_ZN6S211C63v41Ev,
  (VTBL_ENTRY)&_ZN6S211C63v42Ev,
  (VTBL_ENTRY)&_ZN6S211C63v43Ev,
  (VTBL_ENTRY)&_ZN6S211C63v44Ev,
  (VTBL_ENTRY)&_ZN6S211C63v45Ev,
  (VTBL_ENTRY)&_ZN6S211C63v46Ev,
  (VTBL_ENTRY)&_ZN6S211C63v47Ev,
  (VTBL_ENTRY)&_ZN6S211C63v48Ev,
  (VTBL_ENTRY)&_ZN6S211C63v49Ev,
  (VTBL_ENTRY)&_ZN6S211C63v50Ev,
  (VTBL_ENTRY)&_ZN6S211C63v51Ev,
  (VTBL_ENTRY)&_ZN6S211C63v52Ev,
  (VTBL_ENTRY)&_ZN6S211C63v53Ev,
  (VTBL_ENTRY)&_ZN6S211C63v54Ev,
  (VTBL_ENTRY)&_ZN6S211C63v55Ev,
  (VTBL_ENTRY)&_ZN6S211C63v56Ev,
  (VTBL_ENTRY)&_ZN6S211C63v57Ev,
  (VTBL_ENTRY)&_ZN6S211C63v58Ev,
  (VTBL_ENTRY)&_ZN6S211C63v59Ev,
  (VTBL_ENTRY)&_ZN6S211C63v60Ev,
  (VTBL_ENTRY)&_ZN6S211C63v61Ev,
  (VTBL_ENTRY)&_ZN6S211C63v62Ev,
  (VTBL_ENTRY)&_ZN6S211C63v63Ev,
  (VTBL_ENTRY)&_ZN6S211C63v64Ev,
  (VTBL_ENTRY)&_ZN6S211C63v65Ev,
  (VTBL_ENTRY)&_ZN6S211C63v66Ev,
  (VTBL_ENTRY)&_ZN6S211C63v67Ev,
};
extern VTBL_ENTRY _ZTI6S211C6[];
extern  VTBL_ENTRY _ZTV6S211C6[];
Class_Descriptor cd_S211C6 = {  "S211C6", // class name
  0,0,//no base classes
  &(vtc_S211C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S211C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S211C6),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  S211C5  : S211C6 {
  int s211c5f0[2];
  void *s211c5f1;
  int s211c5f2[2];
  ::S210C8_nt s211c5f3;
  ::S210C8_nt s211c5f4;
  ::S629C14 s211c5f5;
  ::S210C8_nt s211c5f6;
  unsigned int s211c5f7:1;
  unsigned int s211c5f8:1;
  unsigned int s211c5f9:1;
  unsigned int s211c5f10:1;
  unsigned int s211c5f11:1;
  int s211c5f12[2];
  virtual  ~S211C5(); // _ZN6S211C5D1Ev
  virtual void  v68(); // _ZN6S211C53v68Ev
  virtual void  v69(); // _ZN6S211C53v69Ev
  virtual void  v70(); // _ZN6S211C53v70Ev
  virtual void  v71(); // _ZN6S211C53v71Ev
  virtual void  v72(); // _ZN6S211C53v72Ev
  virtual void  v73(); // _ZN6S211C53v73Ev
  virtual void  v74(); // _ZN6S211C53v74Ev
  virtual void  v75(); // _ZN6S211C53v75Ev
  virtual void  v76(); // _ZN6S211C53v76Ev
  virtual void  v77(); // _ZN6S211C53v77Ev
  virtual void  v78(); // _ZN6S211C53v78Ev
  virtual void  v79(); // _ZN6S211C53v79Ev
  virtual void  v80(); // _ZN6S211C53v80Ev
  virtual void  v81(); // _ZN6S211C53v81Ev
  virtual void  v82(); // _ZN6S211C53v82Ev
  virtual void  v83(); // _ZN6S211C53v83Ev
  virtual void  v84(); // _ZN6S211C53v84Ev
  virtual void  v85(); // _ZN6S211C53v85Ev
  virtual void  v86(); // _ZN6S211C53v86Ev
  virtual void  v87(); // _ZN6S211C53v87Ev
  virtual void  v88(); // _ZN6S211C53v88Ev
  virtual void  v89(); // _ZN6S211C53v89Ev
  S211C5(); // tgen
};
//SIG(-1 S211C5) 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]}


 S211C5 ::~S211C5(){ note_dtor("S211C5", this);}
void  S211C5 ::v68(){vfunc_called(this, "_ZN6S211C53v68Ev");}
void  S211C5 ::v69(){vfunc_called(this, "_ZN6S211C53v69Ev");}
void  S211C5 ::v70(){vfunc_called(this, "_ZN6S211C53v70Ev");}
void  S211C5 ::v71(){vfunc_called(this, "_ZN6S211C53v71Ev");}
void  S211C5 ::v72(){vfunc_called(this, "_ZN6S211C53v72Ev");}
void  S211C5 ::v73(){vfunc_called(this, "_ZN6S211C53v73Ev");}
void  S211C5 ::v74(){vfunc_called(this, "_ZN6S211C53v74Ev");}
void  S211C5 ::v75(){vfunc_called(this, "_ZN6S211C53v75Ev");}
void  S211C5 ::v76(){vfunc_called(this, "_ZN6S211C53v76Ev");}
void  S211C5 ::v77(){vfunc_called(this, "_ZN6S211C53v77Ev");}
void  S211C5 ::v78(){vfunc_called(this, "_ZN6S211C53v78Ev");}
void  S211C5 ::v79(){vfunc_called(this, "_ZN6S211C53v79Ev");}
void  S211C5 ::v80(){vfunc_called(this, "_ZN6S211C53v80Ev");}
void  S211C5 ::v81(){vfunc_called(this, "_ZN6S211C53v81Ev");}
void  S211C5 ::v82(){vfunc_called(this, "_ZN6S211C53v82Ev");}
void  S211C5 ::v83(){vfunc_called(this, "_ZN6S211C53v83Ev");}
void  S211C5 ::v84(){vfunc_called(this, "_ZN6S211C53v84Ev");}
void  S211C5 ::v85(){vfunc_called(this, "_ZN6S211C53v85Ev");}
void  S211C5 ::v86(){vfunc_called(this, "_ZN6S211C53v86Ev");}
void  S211C5 ::v87(){vfunc_called(this, "_ZN6S211C53v87Ev");}
void  S211C5 ::v88(){vfunc_called(this, "_ZN6S211C53v88Ev");}
void  S211C5 ::v89(){vfunc_called(this, "_ZN6S211C53v89Ev");}
S211C5 ::S211C5(){ note_ctor("S211C5", this);} // tgen

static void Test_S211C5()
{
  extern Class_Descriptor cd_S211C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S211C5, buf);
    S211C5 *dp, &lv = *(dp=new (buf) S211C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S211C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S211C5)");
    check_base_class_offset(lv, (S211C6*), 0, "S211C5");
    check_field_offset(lv, s211c5f0, ABISELECT(96,60), "S211C5.s211c5f0");
    check_field_offset(lv, s211c5f1, ABISELECT(104,68), "S211C5.s211c5f1");
    check_field_offset(lv, s211c5f2, ABISELECT(112,72), "S211C5.s211c5f2");
    check_field_offset(lv, s211c5f3, ABISELECT(120,80), "S211C5.s211c5f3");
    check_field_offset(lv, s211c5f4, ABISELECT(136,92), "S211C5.s211c5f4");
    check_field_offset(lv, s211c5f5, ABISELECT(152,104), "S211C5.s211c5f5");
    check_field_offset(lv, s211c5f6, ABISELECT(160,108), "S211C5.s211c5f6");
    set_bf_and_test(lv, s211c5f7, ABISELECT(176,120), 0, 1, 1, "S211C5");
    set_bf_and_test(lv, s211c5f8, ABISELECT(176,120), 1, 1, 1, "S211C5");
    set_bf_and_test(lv, s211c5f9, ABISELECT(176,120), 2, 1, 1, "S211C5");
    set_bf_and_test(lv, s211c5f10, ABISELECT(176,120), 3, 1, 1, "S211C5");
    set_bf_and_test(lv, s211c5f11, ABISELECT(176,120), 4, 1, 1, "S211C5");
    check_field_offset(lv, s211c5f12, ABISELECT(180,124), "S211C5.s211c5f12");
    test_class_info(&lv, &cd_S211C5);
    dp->~S211C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS211C5(Test_S211C5, "S211C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S211C5C1Ev();
extern void _ZN6S211C5D1Ev();
Name_Map name_map_S211C5[] = {
  NSPAIR(_ZN6S211C5C1Ev),
  NSPAIR(_ZN6S211C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S211C6;
extern VTBL_ENTRY _ZTI6S211C6[];
extern  VTBL_ENTRY _ZTV6S211C6[];
static Base_Class bases_S211C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S211C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S211C5[];
extern void _ZN6S211C5D1Ev();
extern void _ZN6S211C5D0Ev();
extern void _ZN6S211C62v4Ev();
extern void _ZN6S211C62v5Ev();
extern void _ZN6S211C62v6Ev();
extern void _ZN6S211C62v7Ev();
extern void _ZN6S211C62v8Ev();
extern void _ZN6S211C62v9Ev();
extern void _ZN6S211C63v10Ev();
extern void _ZN6S211C63v11Ev();
extern void _ZN6S211C63v12Ev();
extern void _ZN6S211C63v13Ev();
extern void _ZN6S211C63v14Ev();
extern void _ZN6S211C63v15Ev();
extern void _ZN6S211C63v16Ev();
extern void _ZN6S211C63v17Ev();
extern void _ZN6S211C63v18Ev();
extern void _ZN6S211C63v19Ev();
extern void _ZN6S211C63v20Ev();
extern void _ZN6S211C63v21Ev();
extern void _ZN6S211C63v22Ev();
extern void _ZN6S211C63v23Ev();
extern void _ZN6S211C63v24Ev();
extern void _ZN6S211C63v25Ev();
extern void _ZN6S211C63v26Ev();
extern void _ZN6S211C63v27Ev();
extern void _ZN6S211C63v28Ev();
extern void _ZN6S211C63v29Ev();
extern void _ZN6S211C63v30Ev();
extern void _ZN6S211C63v31Ev();
extern void _ZN6S211C63v32Ev();
extern void _ZN6S211C63v33Ev();
extern void _ZN6S211C63v34Ev();
extern void _ZN6S211C63v35Ev();
extern void _ZN6S211C63v36Ev();
extern void _ZN6S211C63v37Ev();
extern void _ZN6S211C63v38Ev();
extern void _ZN6S211C63v39Ev();
extern void _ZN6S211C63v40Ev();
extern void _ZN6S211C63v41Ev();
extern void _ZN6S211C63v42Ev();
extern void _ZN6S211C63v43Ev();
extern void _ZN6S211C63v44Ev();
extern void _ZN6S211C63v45Ev();
extern void _ZN6S211C63v46Ev();
extern void _ZN6S211C63v47Ev();
extern void _ZN6S211C63v48Ev();
extern void _ZN6S211C63v49Ev();
extern void _ZN6S211C63v50Ev();
extern void _ZN6S211C63v51Ev();
extern void _ZN6S211C63v52Ev();
extern void _ZN6S211C63v53Ev();
extern void _ZN6S211C63v54Ev();
extern void _ZN6S211C63v55Ev();
extern void _ZN6S211C63v56Ev();
extern void _ZN6S211C63v57Ev();
extern void _ZN6S211C63v58Ev();
extern void _ZN6S211C63v59Ev();
extern void _ZN6S211C63v60Ev();
extern void _ZN6S211C63v61Ev();
extern void _ZN6S211C63v62Ev();
extern void _ZN6S211C63v63Ev();
extern void _ZN6S211C63v64Ev();
extern void _ZN6S211C63v65Ev();
extern void _ZN6S211C63v66Ev();
extern void _ZN6S211C63v67Ev();
extern void _ZN6S211C53v68Ev();
extern void _ZN6S211C53v69Ev();
extern void _ZN6S211C53v70Ev();
extern void _ZN6S211C53v71Ev();
extern void _ZN6S211C53v72Ev();
extern void _ZN6S211C53v73Ev();
extern void _ZN6S211C53v74Ev();
extern void _ZN6S211C53v75Ev();
extern void _ZN6S211C53v76Ev();
extern void _ZN6S211C53v77Ev();
extern void _ZN6S211C53v78Ev();
extern void _ZN6S211C53v79Ev();
extern void _ZN6S211C53v80Ev();
extern void _ZN6S211C53v81Ev();
extern void _ZN6S211C53v82Ev();
extern void _ZN6S211C53v83Ev();
extern void _ZN6S211C53v84Ev();
extern void _ZN6S211C53v85Ev();
extern void _ZN6S211C53v86Ev();
extern void _ZN6S211C53v87Ev();
extern void _ZN6S211C53v88Ev();
extern void _ZN6S211C53v89Ev();
static  VTBL_ENTRY vtc_S211C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S211C5[0]),
  (VTBL_ENTRY)&_ZN6S211C5D1Ev,
  (VTBL_ENTRY)&_ZN6S211C5D0Ev,
  (VTBL_ENTRY)&_ZN6S211C62v4Ev,
  (VTBL_ENTRY)&_ZN6S211C62v5Ev,
  (VTBL_ENTRY)&_ZN6S211C62v6Ev,
  (VTBL_ENTRY)&_ZN6S211C62v7Ev,
  (VTBL_ENTRY)&_ZN6S211C62v8Ev,
  (VTBL_ENTRY)&_ZN6S211C62v9Ev,
  (VTBL_ENTRY)&_ZN6S211C63v10Ev,
  (VTBL_ENTRY)&_ZN6S211C63v11Ev,
  (VTBL_ENTRY)&_ZN6S211C63v12Ev,
  (VTBL_ENTRY)&_ZN6S211C63v13Ev,
  (VTBL_ENTRY)&_ZN6S211C63v14Ev,
  (VTBL_ENTRY)&_ZN6S211C63v15Ev,
  (VTBL_ENTRY)&_ZN6S211C63v16Ev,
  (VTBL_ENTRY)&_ZN6S211C63v17Ev,
  (VTBL_ENTRY)&_ZN6S211C63v18Ev,
  (VTBL_ENTRY)&_ZN6S211C63v19Ev,
  (VTBL_ENTRY)&_ZN6S211C63v20Ev,
  (VTBL_ENTRY)&_ZN6S211C63v21Ev,
  (VTBL_ENTRY)&_ZN6S211C63v22Ev,
  (VTBL_ENTRY)&_ZN6S211C63v23Ev,
  (VTBL_ENTRY)&_ZN6S211C63v24Ev,
  (VTBL_ENTRY)&_ZN6S211C63v25Ev,
  (VTBL_ENTRY)&_ZN6S211C63v26Ev,
  (VTBL_ENTRY)&_ZN6S211C63v27Ev,
  (VTBL_ENTRY)&_ZN6S211C63v28Ev,
  (VTBL_ENTRY)&_ZN6S211C63v29Ev,
  (VTBL_ENTRY)&_ZN6S211C63v30Ev,
  (VTBL_ENTRY)&_ZN6S211C63v31Ev,
  (VTBL_ENTRY)&_ZN6S211C63v32Ev,
  (VTBL_ENTRY)&_ZN6S211C63v33Ev,
  (VTBL_ENTRY)&_ZN6S211C63v34Ev,
  (VTBL_ENTRY)&_ZN6S211C63v35Ev,
  (VTBL_ENTRY)&_ZN6S211C63v36Ev,
  (VTBL_ENTRY)&_ZN6S211C63v37Ev,
  (VTBL_ENTRY)&_ZN6S211C63v38Ev,
  (VTBL_ENTRY)&_ZN6S211C63v39Ev,
  (VTBL_ENTRY)&_ZN6S211C63v40Ev,
  (VTBL_ENTRY)&_ZN6S211C63v41Ev,
  (VTBL_ENTRY)&_ZN6S211C63v42Ev,
  (VTBL_ENTRY)&_ZN6S211C63v43Ev,
  (VTBL_ENTRY)&_ZN6S211C63v44Ev,
  (VTBL_ENTRY)&_ZN6S211C63v45Ev,
  (VTBL_ENTRY)&_ZN6S211C63v46Ev,
  (VTBL_ENTRY)&_ZN6S211C63v47Ev,
  (VTBL_ENTRY)&_ZN6S211C63v48Ev,
  (VTBL_ENTRY)&_ZN6S211C63v49Ev,
  (VTBL_ENTRY)&_ZN6S211C63v50Ev,
  (VTBL_ENTRY)&_ZN6S211C63v51Ev,
  (VTBL_ENTRY)&_ZN6S211C63v52Ev,
  (VTBL_ENTRY)&_ZN6S211C63v53Ev,
  (VTBL_ENTRY)&_ZN6S211C63v54Ev,
  (VTBL_ENTRY)&_ZN6S211C63v55Ev,
  (VTBL_ENTRY)&_ZN6S211C63v56Ev,
  (VTBL_ENTRY)&_ZN6S211C63v57Ev,
  (VTBL_ENTRY)&_ZN6S211C63v58Ev,
  (VTBL_ENTRY)&_ZN6S211C63v59Ev,
  (VTBL_ENTRY)&_ZN6S211C63v60Ev,
  (VTBL_ENTRY)&_ZN6S211C63v61Ev,
  (VTBL_ENTRY)&_ZN6S211C63v62Ev,
  (VTBL_ENTRY)&_ZN6S211C63v63Ev,
  (VTBL_ENTRY)&_ZN6S211C63v64Ev,
  (VTBL_ENTRY)&_ZN6S211C63v65Ev,
  (VTBL_ENTRY)&_ZN6S211C63v66Ev,
  (VTBL_ENTRY)&_ZN6S211C63v67Ev,
  (VTBL_ENTRY)&_ZN6S211C53v68Ev,
  (VTBL_ENTRY)&_ZN6S211C53v69Ev,
  (VTBL_ENTRY)&_ZN6S211C53v70Ev,
  (VTBL_ENTRY)&_ZN6S211C53v71Ev,
  (VTBL_ENTRY)&_ZN6S211C53v72Ev,
  (VTBL_ENTRY)&_ZN6S211C53v73Ev,
  (VTBL_ENTRY)&_ZN6S211C53v74Ev,
  (VTBL_ENTRY)&_ZN6S211C53v75Ev,
  (VTBL_ENTRY)&_ZN6S211C53v76Ev,
  (VTBL_ENTRY)&_ZN6S211C53v77Ev,
  (VTBL_ENTRY)&_ZN6S211C53v78Ev,
  (VTBL_ENTRY)&_ZN6S211C53v79Ev,
  (VTBL_ENTRY)&_ZN6S211C53v80Ev,
  (VTBL_ENTRY)&_ZN6S211C53v81Ev,
  (VTBL_ENTRY)&_ZN6S211C53v82Ev,
  (VTBL_ENTRY)&_ZN6S211C53v83Ev,
  (VTBL_ENTRY)&_ZN6S211C53v84Ev,
  (VTBL_ENTRY)&_ZN6S211C53v85Ev,
  (VTBL_ENTRY)&_ZN6S211C53v86Ev,
  (VTBL_ENTRY)&_ZN6S211C53v87Ev,
  (VTBL_ENTRY)&_ZN6S211C53v88Ev,
  (VTBL_ENTRY)&_ZN6S211C53v89Ev,
};
extern VTBL_ENTRY _ZTI6S211C5[];
extern  VTBL_ENTRY _ZTV6S211C5[];
Class_Descriptor cd_S211C5 = {  "S211C5", // class name
  bases_S211C5, 1,
  &(vtc_S211C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S211C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S211C5),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  S211C4  : S211C5 {
  unsigned int s211c4f0:1;
  unsigned int s211c4f1:1;
  unsigned int s211c4f2:1;
  ::S1503C28 s211c4f3;
  ::S1503C24 s211c4f4;
  ::S1503C18 s211c4f5;
  ::S1503C12 s211c4f6;
  int s211c4f7[3];
  virtual  ~S211C4(); // _ZN6S211C4D1Ev
  virtual void  v90(); // _ZN6S211C43v90Ev
  virtual void  v91(); // _ZN6S211C43v91Ev
  virtual void  v92(); // _ZN6S211C43v92Ev
  virtual void  v93(); // _ZN6S211C43v93Ev
  virtual void  v94(); // _ZN6S211C43v94Ev
  virtual void  v95(); // _ZN6S211C43v95Ev
  virtual void  v96(); // _ZN6S211C43v96Ev
  virtual void  v97(); // _ZN6S211C43v97Ev
  virtual void  v98(); // _ZN6S211C43v98Ev
  virtual void  v99(); // _ZN6S211C43v99Ev
  virtual void  v100(); // _ZN6S211C44v100Ev
  virtual void  v101(); // _ZN6S211C44v101Ev
  virtual void  v102(); // _ZN6S211C44v102Ev
  virtual void  v103(); // _ZN6S211C44v103Ev
  virtual void  v104(); // _ZN6S211C44v104Ev
  virtual void  v105(); // _ZN6S211C44v105Ev
  virtual void  v106(); // _ZN6S211C44v106Ev
  virtual void  v107(); // _ZN6S211C44v107Ev
  virtual void  v108(); // _ZN6S211C44v108Ev
  virtual void  v109(); // _ZN6S211C44v109Ev
  S211C4(); // tgen
};
//SIG(-1 S211C4) 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]}


 S211C4 ::~S211C4(){ note_dtor("S211C4", this);}
void  S211C4 ::v90(){vfunc_called(this, "_ZN6S211C43v90Ev");}
void  S211C4 ::v91(){vfunc_called(this, "_ZN6S211C43v91Ev");}
void  S211C4 ::v92(){vfunc_called(this, "_ZN6S211C43v92Ev");}
void  S211C4 ::v93(){vfunc_called(this, "_ZN6S211C43v93Ev");}
void  S211C4 ::v94(){vfunc_called(this, "_ZN6S211C43v94Ev");}
void  S211C4 ::v95(){vfunc_called(this, "_ZN6S211C43v95Ev");}
void  S211C4 ::v96(){vfunc_called(this, "_ZN6S211C43v96Ev");}
void  S211C4 ::v97(){vfunc_called(this, "_ZN6S211C43v97Ev");}
void  S211C4 ::v98(){vfunc_called(this, "_ZN6S211C43v98Ev");}
void  S211C4 ::v99(){vfunc_called(this, "_ZN6S211C43v99Ev");}
void  S211C4 ::v100(){vfunc_called(this, "_ZN6S211C44v100Ev");}
void  S211C4 ::v101(){vfunc_called(this, "_ZN6S211C44v101Ev");}
void  S211C4 ::v102(){vfunc_called(this, "_ZN6S211C44v102Ev");}
void  S211C4 ::v103(){vfunc_called(this, "_ZN6S211C44v103Ev");}
void  S211C4 ::v104(){vfunc_called(this, "_ZN6S211C44v104Ev");}
void  S211C4 ::v105(){vfunc_called(this, "_ZN6S211C44v105Ev");}
void  S211C4 ::v106(){vfunc_called(this, "_ZN6S211C44v106Ev");}
void  S211C4 ::v107(){vfunc_called(this, "_ZN6S211C44v107Ev");}
void  S211C4 ::v108(){vfunc_called(this, "_ZN6S211C44v108Ev");}
void  S211C4 ::v109(){vfunc_called(this, "_ZN6S211C44v109Ev");}
S211C4 ::S211C4(){ note_ctor("S211C4", this);} // tgen

static void Test_S211C4()
{
  extern Class_Descriptor cd_S211C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S211C4, buf);
    S211C4 *dp, &lv = *(dp=new (buf) S211C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S211C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S211C4)");
    check_base_class_offset(lv, (S211C6*)(S211C5*), 0, "S211C4");
    check_base_class_offset(lv, (S211C5*), 0, "S211C4");
    set_bf_and_test(lv, s211c4f0, ABISELECT(188,132), 0, 1, 1, "S211C4");
    set_bf_and_test(lv, s211c4f1, ABISELECT(188,132), 1, 1, 1, "S211C4");
    set_bf_and_test(lv, s211c4f2, ABISELECT(188,132), 2, 1, 1, "S211C4");
    check_field_offset(lv, s211c4f3, ABISELECT(192,136), "S211C4.s211c4f3");
    check_field_offset(lv, s211c4f4, ABISELECT(208,148), "S211C4.s211c4f4");
    check_field_offset(lv, s211c4f5, ABISELECT(224,160), "S211C4.s211c4f5");
    check_field_offset(lv, s211c4f6, ABISELECT(240,172), "S211C4.s211c4f6");
    check_field_offset(lv, s211c4f7, ABISELECT(256,184), "S211C4.s211c4f7");
    test_class_info(&lv, &cd_S211C4);
    dp->~S211C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS211C4(Test_S211C4, "S211C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S211C4C1Ev();
extern void _ZN6S211C4D1Ev();
Name_Map name_map_S211C4[] = {
  NSPAIR(_ZN6S211C4C1Ev),
  NSPAIR(_ZN6S211C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S211C6;
extern VTBL_ENTRY _ZTI6S211C6[];
extern  VTBL_ENTRY _ZTV6S211C6[];
extern Class_Descriptor cd_S211C5;
extern VTBL_ENTRY _ZTI6S211C5[];
extern  VTBL_ENTRY _ZTV6S211C5[];
static Base_Class bases_S211C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S211C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S211C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S211C4[];
extern void _ZN6S211C4D1Ev();
extern void _ZN6S211C4D0Ev();
extern void _ZN6S211C62v4Ev();
extern void _ZN6S211C62v5Ev();
extern void _ZN6S211C62v6Ev();
extern void _ZN6S211C62v7Ev();
extern void _ZN6S211C62v8Ev();
extern void _ZN6S211C62v9Ev();
extern void _ZN6S211C63v10Ev();
extern void _ZN6S211C63v11Ev();
extern void _ZN6S211C63v12Ev();
extern void _ZN6S211C63v13Ev();
extern void _ZN6S211C63v14Ev();
extern void _ZN6S211C63v15Ev();
extern void _ZN6S211C63v16Ev();
extern void _ZN6S211C63v17Ev();
extern void _ZN6S211C63v18Ev();
extern void _ZN6S211C63v19Ev();
extern void _ZN6S211C63v20Ev();
extern void _ZN6S211C63v21Ev();
extern void _ZN6S211C63v22Ev();
extern void _ZN6S211C63v23Ev();
extern void _ZN6S211C63v24Ev();
extern void _ZN6S211C63v25Ev();
extern void _ZN6S211C63v26Ev();
extern void _ZN6S211C63v27Ev();
extern void _ZN6S211C63v28Ev();
extern void _ZN6S211C63v29Ev();
extern void _ZN6S211C63v30Ev();
extern void _ZN6S211C63v31Ev();
extern void _ZN6S211C63v32Ev();
extern void _ZN6S211C63v33Ev();
extern void _ZN6S211C63v34Ev();
extern void _ZN6S211C63v35Ev();
extern void _ZN6S211C63v36Ev();
extern void _ZN6S211C63v37Ev();
extern void _ZN6S211C63v38Ev();
extern void _ZN6S211C63v39Ev();
extern void _ZN6S211C63v40Ev();
extern void _ZN6S211C63v41Ev();
extern void _ZN6S211C63v42Ev();
extern void _ZN6S211C63v43Ev();
extern void _ZN6S211C63v44Ev();
extern void _ZN6S211C63v45Ev();
extern void _ZN6S211C63v46Ev();
extern void _ZN6S211C63v47Ev();
extern void _ZN6S211C63v48Ev();
extern void _ZN6S211C63v49Ev();
extern void _ZN6S211C63v50Ev();
extern void _ZN6S211C63v51Ev();
extern void _ZN6S211C63v52Ev();
extern void _ZN6S211C63v53Ev();
extern void _ZN6S211C63v54Ev();
extern void _ZN6S211C63v55Ev();
extern void _ZN6S211C63v56Ev();
extern void _ZN6S211C63v57Ev();
extern void _ZN6S211C63v58Ev();
extern void _ZN6S211C63v59Ev();
extern void _ZN6S211C63v60Ev();
extern void _ZN6S211C63v61Ev();
extern void _ZN6S211C63v62Ev();
extern void _ZN6S211C63v63Ev();
extern void _ZN6S211C63v64Ev();
extern void _ZN6S211C63v65Ev();
extern void _ZN6S211C63v66Ev();
extern void _ZN6S211C63v67Ev();
extern void _ZN6S211C53v68Ev();
extern void _ZN6S211C53v69Ev();
extern void _ZN6S211C53v70Ev();
extern void _ZN6S211C53v71Ev();
extern void _ZN6S211C53v72Ev();
extern void _ZN6S211C53v73Ev();
extern void _ZN6S211C53v74Ev();
extern void _ZN6S211C53v75Ev();
extern void _ZN6S211C53v76Ev();
extern void _ZN6S211C53v77Ev();
extern void _ZN6S211C53v78Ev();
extern void _ZN6S211C53v79Ev();
extern void _ZN6S211C53v80Ev();
extern void _ZN6S211C53v81Ev();
extern void _ZN6S211C53v82Ev();
extern void _ZN6S211C53v83Ev();
extern void _ZN6S211C53v84Ev();
extern void _ZN6S211C53v85Ev();
extern void _ZN6S211C53v86Ev();
extern void _ZN6S211C53v87Ev();
extern void _ZN6S211C53v88Ev();
extern void _ZN6S211C53v89Ev();
extern void _ZN6S211C43v90Ev();
extern void _ZN6S211C43v91Ev();
extern void _ZN6S211C43v92Ev();
extern void _ZN6S211C43v93Ev();
extern void _ZN6S211C43v94Ev();
extern void _ZN6S211C43v95Ev();
extern void _ZN6S211C43v96Ev();
extern void _ZN6S211C43v97Ev();
extern void _ZN6S211C43v98Ev();
extern void _ZN6S211C43v99Ev();
extern void _ZN6S211C44v100Ev();
extern void _ZN6S211C44v101Ev();
extern void _ZN6S211C44v102Ev();
extern void _ZN6S211C44v103Ev();
extern void _ZN6S211C44v104Ev();
extern void _ZN6S211C44v105Ev();
extern void _ZN6S211C44v106Ev();
extern void _ZN6S211C44v107Ev();
extern void _ZN6S211C44v108Ev();
extern void _ZN6S211C44v109Ev();
static  VTBL_ENTRY vtc_S211C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S211C4[0]),
  (VTBL_ENTRY)&_ZN6S211C4D1Ev,
  (VTBL_ENTRY)&_ZN6S211C4D0Ev,
  (VTBL_ENTRY)&_ZN6S211C62v4Ev,
  (VTBL_ENTRY)&_ZN6S211C62v5Ev,
  (VTBL_ENTRY)&_ZN6S211C62v6Ev,
  (VTBL_ENTRY)&_ZN6S211C62v7Ev,
  (VTBL_ENTRY)&_ZN6S211C62v8Ev,
  (VTBL_ENTRY)&_ZN6S211C62v9Ev,
  (VTBL_ENTRY)&_ZN6S211C63v10Ev,
  (VTBL_ENTRY)&_ZN6S211C63v11Ev,
  (VTBL_ENTRY)&_ZN6S211C63v12Ev,
  (VTBL_ENTRY)&_ZN6S211C63v13Ev,
  (VTBL_ENTRY)&_ZN6S211C63v14Ev,
  (VTBL_ENTRY)&_ZN6S211C63v15Ev,
  (VTBL_ENTRY)&_ZN6S211C63v16Ev,
  (VTBL_ENTRY)&_ZN6S211C63v17Ev,
  (VTBL_ENTRY)&_ZN6S211C63v18Ev,
  (VTBL_ENTRY)&_ZN6S211C63v19Ev,
  (VTBL_ENTRY)&_ZN6S211C63v20Ev,
  (VTBL_ENTRY)&_ZN6S211C63v21Ev,
  (VTBL_ENTRY)&_ZN6S211C63v22Ev,
  (VTBL_ENTRY)&_ZN6S211C63v23Ev,
  (VTBL_ENTRY)&_ZN6S211C63v24Ev,
  (VTBL_ENTRY)&_ZN6S211C63v25Ev,
  (VTBL_ENTRY)&_ZN6S211C63v26Ev,
  (VTBL_ENTRY)&_ZN6S211C63v27Ev,
  (VTBL_ENTRY)&_ZN6S211C63v28Ev,
  (VTBL_ENTRY)&_ZN6S211C63v29Ev,
  (VTBL_ENTRY)&_ZN6S211C63v30Ev,
  (VTBL_ENTRY)&_ZN6S211C63v31Ev,
  (VTBL_ENTRY)&_ZN6S211C63v32Ev,
  (VTBL_ENTRY)&_ZN6S211C63v33Ev,
  (VTBL_ENTRY)&_ZN6S211C63v34Ev,
  (VTBL_ENTRY)&_ZN6S211C63v35Ev,
  (VTBL_ENTRY)&_ZN6S211C63v36Ev,
  (VTBL_ENTRY)&_ZN6S211C63v37Ev,
  (VTBL_ENTRY)&_ZN6S211C63v38Ev,
  (VTBL_ENTRY)&_ZN6S211C63v39Ev,
  (VTBL_ENTRY)&_ZN6S211C63v40Ev,
  (VTBL_ENTRY)&_ZN6S211C63v41Ev,
  (VTBL_ENTRY)&_ZN6S211C63v42Ev,
  (VTBL_ENTRY)&_ZN6S211C63v43Ev,
  (VTBL_ENTRY)&_ZN6S211C63v44Ev,
  (VTBL_ENTRY)&_ZN6S211C63v45Ev,
  (VTBL_ENTRY)&_ZN6S211C63v46Ev,
  (VTBL_ENTRY)&_ZN6S211C63v47Ev,
  (VTBL_ENTRY)&_ZN6S211C63v48Ev,
  (VTBL_ENTRY)&_ZN6S211C63v49Ev,
  (VTBL_ENTRY)&_ZN6S211C63v50Ev,
  (VTBL_ENTRY)&_ZN6S211C63v51Ev,
  (VTBL_ENTRY)&_ZN6S211C63v52Ev,
  (VTBL_ENTRY)&_ZN6S211C63v53Ev,
  (VTBL_ENTRY)&_ZN6S211C63v54Ev,
  (VTBL_ENTRY)&_ZN6S211C63v55Ev,
  (VTBL_ENTRY)&_ZN6S211C63v56Ev,
  (VTBL_ENTRY)&_ZN6S211C63v57Ev,
  (VTBL_ENTRY)&_ZN6S211C63v58Ev,
  (VTBL_ENTRY)&_ZN6S211C63v59Ev,
  (VTBL_ENTRY)&_ZN6S211C63v60Ev,
  (VTBL_ENTRY)&_ZN6S211C63v61Ev,
  (VTBL_ENTRY)&_ZN6S211C63v62Ev,
  (VTBL_ENTRY)&_ZN6S211C63v63Ev,
  (VTBL_ENTRY)&_ZN6S211C63v64Ev,
  (VTBL_ENTRY)&_ZN6S211C63v65Ev,
  (VTBL_ENTRY)&_ZN6S211C63v66Ev,
  (VTBL_ENTRY)&_ZN6S211C63v67Ev,
  (VTBL_ENTRY)&_ZN6S211C53v68Ev,
  (VTBL_ENTRY)&_ZN6S211C53v69Ev,
  (VTBL_ENTRY)&_ZN6S211C53v70Ev,
  (VTBL_ENTRY)&_ZN6S211C53v71Ev,
  (VTBL_ENTRY)&_ZN6S211C53v72Ev,
  (VTBL_ENTRY)&_ZN6S211C53v73Ev,
  (VTBL_ENTRY)&_ZN6S211C53v74Ev,
  (VTBL_ENTRY)&_ZN6S211C53v75Ev,
  (VTBL_ENTRY)&_ZN6S211C53v76Ev,
  (VTBL_ENTRY)&_ZN6S211C53v77Ev,
  (VTBL_ENTRY)&_ZN6S211C53v78Ev,
  (VTBL_ENTRY)&_ZN6S211C53v79Ev,
  (VTBL_ENTRY)&_ZN6S211C53v80Ev,
  (VTBL_ENTRY)&_ZN6S211C53v81Ev,
  (VTBL_ENTRY)&_ZN6S211C53v82Ev,
  (VTBL_ENTRY)&_ZN6S211C53v83Ev,
  (VTBL_ENTRY)&_ZN6S211C53v84Ev,
  (VTBL_ENTRY)&_ZN6S211C53v85Ev,
  (VTBL_ENTRY)&_ZN6S211C53v86Ev,
  (VTBL_ENTRY)&_ZN6S211C53v87Ev,
  (VTBL_ENTRY)&_ZN6S211C53v88Ev,
  (VTBL_ENTRY)&_ZN6S211C53v89Ev,
  (VTBL_ENTRY)&_ZN6S211C43v90Ev,
  (VTBL_ENTRY)&_ZN6S211C43v91Ev,
  (VTBL_ENTRY)&_ZN6S211C43v92Ev,
  (VTBL_ENTRY)&_ZN6S211C43v93Ev,
  (VTBL_ENTRY)&_ZN6S211C43v94Ev,
  (VTBL_ENTRY)&_ZN6S211C43v95Ev,
  (VTBL_ENTRY)&_ZN6S211C43v96Ev,
  (VTBL_ENTRY)&_ZN6S211C43v97Ev,
  (VTBL_ENTRY)&_ZN6S211C43v98Ev,
  (VTBL_ENTRY)&_ZN6S211C43v99Ev,
  (VTBL_ENTRY)&_ZN6S211C44v100Ev,
  (VTBL_ENTRY)&_ZN6S211C44v101Ev,
  (VTBL_ENTRY)&_ZN6S211C44v102Ev,
  (VTBL_ENTRY)&_ZN6S211C44v103Ev,
  (VTBL_ENTRY)&_ZN6S211C44v104Ev,
  (VTBL_ENTRY)&_ZN6S211C44v105Ev,
  (VTBL_ENTRY)&_ZN6S211C44v106Ev,
  (VTBL_ENTRY)&_ZN6S211C44v107Ev,
  (VTBL_ENTRY)&_ZN6S211C44v108Ev,
  (VTBL_ENTRY)&_ZN6S211C44v109Ev,
};
extern VTBL_ENTRY _ZTI6S211C4[];
extern  VTBL_ENTRY _ZTV6S211C4[];
Class_Descriptor cd_S211C4 = {  "S211C4", // class name
  bases_S211C4, 2,
  &(vtc_S211C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S211C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S211C4),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  S211C3  : S211C4 {
  ::S1503C5_nt s211c3f0;
  unsigned int s211c3f1:1;
  ::S1503C6_nt s211c3f2;
  virtual  ~S211C3(); // _ZN6S211C3D1Ev
  virtual void  v110(); // _ZN6S211C34v110Ev
  virtual void  v111(); // _ZN6S211C34v111Ev
  virtual void  v112(); // _ZN6S211C34v112Ev
  virtual void  v113(); // _ZN6S211C34v113Ev
  S211C3(); // tgen
};
//SIG(-1 S211C3) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S211C3 ::~S211C3(){ note_dtor("S211C3", this);}
void  S211C3 ::v110(){vfunc_called(this, "_ZN6S211C34v110Ev");}
void  S211C3 ::v111(){vfunc_called(this, "_ZN6S211C34v111Ev");}
void  S211C3 ::v112(){vfunc_called(this, "_ZN6S211C34v112Ev");}
void  S211C3 ::v113(){vfunc_called(this, "_ZN6S211C34v113Ev");}
S211C3 ::S211C3(){ note_ctor("S211C3", this);} // tgen

static void Test_S211C3()
{
  extern Class_Descriptor cd_S211C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S211C3, buf);
    S211C3 *dp, &lv = *(dp=new (buf) S211C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S211C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S211C3)");
    check_base_class_offset(lv, (S211C6*)(S211C5*)(S211C4*), 0, "S211C3");
    check_base_class_offset(lv, (S211C5*)(S211C4*), 0, "S211C3");
    check_base_class_offset(lv, (S211C4*), 0, "S211C3");
    check_field_offset(lv, s211c3f0, ABISELECT(268,196), "S211C3.s211c3f0");
    set_bf_and_test(lv, s211c3f1, ABISELECT(276,204), 0, 1, 1, "S211C3");
    check_field_offset(lv, s211c3f2, ABISELECT(280,208), "S211C3.s211c3f2");
    test_class_info(&lv, &cd_S211C3);
    dp->~S211C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS211C3(Test_S211C3, "S211C3", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S211C3C1Ev();
extern void _ZN6S211C3D1Ev();
Name_Map name_map_S211C3[] = {
  NSPAIR(_ZN6S211C3C1Ev),
  NSPAIR(_ZN6S211C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S211C6;
extern VTBL_ENTRY _ZTI6S211C6[];
extern  VTBL_ENTRY _ZTV6S211C6[];
extern Class_Descriptor cd_S211C5;
extern VTBL_ENTRY _ZTI6S211C5[];
extern  VTBL_ENTRY _ZTV6S211C5[];
extern Class_Descriptor cd_S211C4;
extern VTBL_ENTRY _ZTI6S211C4[];
extern  VTBL_ENTRY _ZTV6S211C4[];
static Base_Class bases_S211C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S211C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S211C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S211C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S211C3[];
extern void _ZN6S211C3D1Ev();
extern void _ZN6S211C3D0Ev();
extern void _ZN6S211C62v4Ev();
extern void _ZN6S211C62v5Ev();
extern void _ZN6S211C62v6Ev();
extern void _ZN6S211C62v7Ev();
extern void _ZN6S211C62v8Ev();
extern void _ZN6S211C62v9Ev();
extern void _ZN6S211C63v10Ev();
extern void _ZN6S211C63v11Ev();
extern void _ZN6S211C63v12Ev();
extern void _ZN6S211C63v13Ev();
extern void _ZN6S211C63v14Ev();
extern void _ZN6S211C63v15Ev();
extern void _ZN6S211C63v16Ev();
extern void _ZN6S211C63v17Ev();
extern void _ZN6S211C63v18Ev();
extern void _ZN6S211C63v19Ev();
extern void _ZN6S211C63v20Ev();
extern void _ZN6S211C63v21Ev();
extern void _ZN6S211C63v22Ev();
extern void _ZN6S211C63v23Ev();
extern void _ZN6S211C63v24Ev();
extern void _ZN6S211C63v25Ev();
extern void _ZN6S211C63v26Ev();
extern void _ZN6S211C63v27Ev();
extern void _ZN6S211C63v28Ev();
extern void _ZN6S211C63v29Ev();
extern void _ZN6S211C63v30Ev();
extern void _ZN6S211C63v31Ev();
extern void _ZN6S211C63v32Ev();
extern void _ZN6S211C63v33Ev();
extern void _ZN6S211C63v34Ev();
extern void _ZN6S211C63v35Ev();
extern void _ZN6S211C63v36Ev();
extern void _ZN6S211C63v37Ev();
extern void _ZN6S211C63v38Ev();
extern void _ZN6S211C63v39Ev();
extern void _ZN6S211C63v40Ev();
extern void _ZN6S211C63v41Ev();
extern void _ZN6S211C63v42Ev();
extern void _ZN6S211C63v43Ev();
extern void _ZN6S211C63v44Ev();
extern void _ZN6S211C63v45Ev();
extern void _ZN6S211C63v46Ev();
extern void _ZN6S211C63v47Ev();
extern void _ZN6S211C63v48Ev();
extern void _ZN6S211C63v49Ev();
extern void _ZN6S211C63v50Ev();
extern void _ZN6S211C63v51Ev();
extern void _ZN6S211C63v52Ev();
extern void _ZN6S211C63v53Ev();
extern void _ZN6S211C63v54Ev();
extern void _ZN6S211C63v55Ev();
extern void _ZN6S211C63v56Ev();
extern void _ZN6S211C63v57Ev();
extern void _ZN6S211C63v58Ev();
extern void _ZN6S211C63v59Ev();
extern void _ZN6S211C63v60Ev();
extern void _ZN6S211C63v61Ev();
extern void _ZN6S211C63v62Ev();
extern void _ZN6S211C63v63Ev();
extern void _ZN6S211C63v64Ev();
extern void _ZN6S211C63v65Ev();
extern void _ZN6S211C63v66Ev();
extern void _ZN6S211C63v67Ev();
extern void _ZN6S211C53v68Ev();
extern void _ZN6S211C53v69Ev();
extern void _ZN6S211C53v70Ev();
extern void _ZN6S211C53v71Ev();
extern void _ZN6S211C53v72Ev();
extern void _ZN6S211C53v73Ev();
extern void _ZN6S211C53v74Ev();
extern void _ZN6S211C53v75Ev();
extern void _ZN6S211C53v76Ev();
extern void _ZN6S211C53v77Ev();
extern void _ZN6S211C53v78Ev();
extern void _ZN6S211C53v79Ev();
extern void _ZN6S211C53v80Ev();
extern void _ZN6S211C53v81Ev();
extern void _ZN6S211C53v82Ev();
extern void _ZN6S211C53v83Ev();
extern void _ZN6S211C53v84Ev();
extern void _ZN6S211C53v85Ev();
extern void _ZN6S211C53v86Ev();
extern void _ZN6S211C53v87Ev();
extern void _ZN6S211C53v88Ev();
extern void _ZN6S211C53v89Ev();
extern void _ZN6S211C43v90Ev();
extern void _ZN6S211C43v91Ev();
extern void _ZN6S211C43v92Ev();
extern void _ZN6S211C43v93Ev();
extern void _ZN6S211C43v94Ev();
extern void _ZN6S211C43v95Ev();
extern void _ZN6S211C43v96Ev();
extern void _ZN6S211C43v97Ev();
extern void _ZN6S211C43v98Ev();
extern void _ZN6S211C43v99Ev();
extern void _ZN6S211C44v100Ev();
extern void _ZN6S211C44v101Ev();
extern void _ZN6S211C44v102Ev();
extern void _ZN6S211C44v103Ev();
extern void _ZN6S211C44v104Ev();
extern void _ZN6S211C44v105Ev();
extern void _ZN6S211C44v106Ev();
extern void _ZN6S211C44v107Ev();
extern void _ZN6S211C44v108Ev();
extern void _ZN6S211C44v109Ev();
extern void _ZN6S211C34v110Ev();
extern void _ZN6S211C34v111Ev();
extern void _ZN6S211C34v112Ev();
extern void _ZN6S211C34v113Ev();
static  VTBL_ENTRY vtc_S211C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S211C3[0]),
  (VTBL_ENTRY)&_ZN6S211C3D1Ev,
  (VTBL_ENTRY)&_ZN6S211C3D0Ev,
  (VTBL_ENTRY)&_ZN6S211C62v4Ev,
  (VTBL_ENTRY)&_ZN6S211C62v5Ev,
  (VTBL_ENTRY)&_ZN6S211C62v6Ev,
  (VTBL_ENTRY)&_ZN6S211C62v7Ev,
  (VTBL_ENTRY)&_ZN6S211C62v8Ev,
  (VTBL_ENTRY)&_ZN6S211C62v9Ev,
  (VTBL_ENTRY)&_ZN6S211C63v10Ev,
  (VTBL_ENTRY)&_ZN6S211C63v11Ev,
  (VTBL_ENTRY)&_ZN6S211C63v12Ev,
  (VTBL_ENTRY)&_ZN6S211C63v13Ev,
  (VTBL_ENTRY)&_ZN6S211C63v14Ev,
  (VTBL_ENTRY)&_ZN6S211C63v15Ev,
  (VTBL_ENTRY)&_ZN6S211C63v16Ev,
  (VTBL_ENTRY)&_ZN6S211C63v17Ev,
  (VTBL_ENTRY)&_ZN6S211C63v18Ev,
  (VTBL_ENTRY)&_ZN6S211C63v19Ev,
  (VTBL_ENTRY)&_ZN6S211C63v20Ev,
  (VTBL_ENTRY)&_ZN6S211C63v21Ev,
  (VTBL_ENTRY)&_ZN6S211C63v22Ev,
  (VTBL_ENTRY)&_ZN6S211C63v23Ev,
  (VTBL_ENTRY)&_ZN6S211C63v24Ev,
  (VTBL_ENTRY)&_ZN6S211C63v25Ev,
  (VTBL_ENTRY)&_ZN6S211C63v26Ev,
  (VTBL_ENTRY)&_ZN6S211C63v27Ev,
  (VTBL_ENTRY)&_ZN6S211C63v28Ev,
  (VTBL_ENTRY)&_ZN6S211C63v29Ev,
  (VTBL_ENTRY)&_ZN6S211C63v30Ev,
  (VTBL_ENTRY)&_ZN6S211C63v31Ev,
  (VTBL_ENTRY)&_ZN6S211C63v32Ev,
  (VTBL_ENTRY)&_ZN6S211C63v33Ev,
  (VTBL_ENTRY)&_ZN6S211C63v34Ev,
  (VTBL_ENTRY)&_ZN6S211C63v35Ev,
  (VTBL_ENTRY)&_ZN6S211C63v36Ev,
  (VTBL_ENTRY)&_ZN6S211C63v37Ev,
  (VTBL_ENTRY)&_ZN6S211C63v38Ev,
  (VTBL_ENTRY)&_ZN6S211C63v39Ev,
  (VTBL_ENTRY)&_ZN6S211C63v40Ev,
  (VTBL_ENTRY)&_ZN6S211C63v41Ev,
  (VTBL_ENTRY)&_ZN6S211C63v42Ev,
  (VTBL_ENTRY)&_ZN6S211C63v43Ev,
  (VTBL_ENTRY)&_ZN6S211C63v44Ev,
  (VTBL_ENTRY)&_ZN6S211C63v45Ev,
  (VTBL_ENTRY)&_ZN6S211C63v46Ev,
  (VTBL_ENTRY)&_ZN6S211C63v47Ev,
  (VTBL_ENTRY)&_ZN6S211C63v48Ev,
  (VTBL_ENTRY)&_ZN6S211C63v49Ev,
  (VTBL_ENTRY)&_ZN6S211C63v50Ev,
  (VTBL_ENTRY)&_ZN6S211C63v51Ev,
  (VTBL_ENTRY)&_ZN6S211C63v52Ev,
  (VTBL_ENTRY)&_ZN6S211C63v53Ev,
  (VTBL_ENTRY)&_ZN6S211C63v54Ev,
  (VTBL_ENTRY)&_ZN6S211C63v55Ev,
  (VTBL_ENTRY)&_ZN6S211C63v56Ev,
  (VTBL_ENTRY)&_ZN6S211C63v57Ev,
  (VTBL_ENTRY)&_ZN6S211C63v58Ev,
  (VTBL_ENTRY)&_ZN6S211C63v59Ev,
  (VTBL_ENTRY)&_ZN6S211C63v60Ev,
  (VTBL_ENTRY)&_ZN6S211C63v61Ev,
  (VTBL_ENTRY)&_ZN6S211C63v62Ev,
  (VTBL_ENTRY)&_ZN6S211C63v63Ev,
  (VTBL_ENTRY)&_ZN6S211C63v64Ev,
  (VTBL_ENTRY)&_ZN6S211C63v65Ev,
  (VTBL_ENTRY)&_ZN6S211C63v66Ev,
  (VTBL_ENTRY)&_ZN6S211C63v67Ev,
  (VTBL_ENTRY)&_ZN6S211C53v68Ev,
  (VTBL_ENTRY)&_ZN6S211C53v69Ev,
  (VTBL_ENTRY)&_ZN6S211C53v70Ev,
  (VTBL_ENTRY)&_ZN6S211C53v71Ev,
  (VTBL_ENTRY)&_ZN6S211C53v72Ev,
  (VTBL_ENTRY)&_ZN6S211C53v73Ev,
  (VTBL_ENTRY)&_ZN6S211C53v74Ev,
  (VTBL_ENTRY)&_ZN6S211C53v75Ev,
  (VTBL_ENTRY)&_ZN6S211C53v76Ev,
  (VTBL_ENTRY)&_ZN6S211C53v77Ev,
  (VTBL_ENTRY)&_ZN6S211C53v78Ev,
  (VTBL_ENTRY)&_ZN6S211C53v79Ev,
  (VTBL_ENTRY)&_ZN6S211C53v80Ev,
  (VTBL_ENTRY)&_ZN6S211C53v81Ev,
  (VTBL_ENTRY)&_ZN6S211C53v82Ev,
  (VTBL_ENTRY)&_ZN6S211C53v83Ev,
  (VTBL_ENTRY)&_ZN6S211C53v84Ev,
  (VTBL_ENTRY)&_ZN6S211C53v85Ev,
  (VTBL_ENTRY)&_ZN6S211C53v86Ev,
  (VTBL_ENTRY)&_ZN6S211C53v87Ev,
  (VTBL_ENTRY)&_ZN6S211C53v88Ev,
  (VTBL_ENTRY)&_ZN6S211C53v89Ev,
  (VTBL_ENTRY)&_ZN6S211C43v90Ev,
  (VTBL_ENTRY)&_ZN6S211C43v91Ev,
  (VTBL_ENTRY)&_ZN6S211C43v92Ev,
  (VTBL_ENTRY)&_ZN6S211C43v93Ev,
  (VTBL_ENTRY)&_ZN6S211C43v94Ev,
  (VTBL_ENTRY)&_ZN6S211C43v95Ev,
  (VTBL_ENTRY)&_ZN6S211C43v96Ev,
  (VTBL_ENTRY)&_ZN6S211C43v97Ev,
  (VTBL_ENTRY)&_ZN6S211C43v98Ev,
  (VTBL_ENTRY)&_ZN6S211C43v99Ev,
  (VTBL_ENTRY)&_ZN6S211C44v100Ev,
  (VTBL_ENTRY)&_ZN6S211C44v101Ev,
  (VTBL_ENTRY)&_ZN6S211C44v102Ev,
  (VTBL_ENTRY)&_ZN6S211C44v103Ev,
  (VTBL_ENTRY)&_ZN6S211C44v104Ev,
  (VTBL_ENTRY)&_ZN6S211C44v105Ev,
  (VTBL_ENTRY)&_ZN6S211C44v106Ev,
  (VTBL_ENTRY)&_ZN6S211C44v107Ev,
  (VTBL_ENTRY)&_ZN6S211C44v108Ev,
  (VTBL_ENTRY)&_ZN6S211C44v109Ev,
  (VTBL_ENTRY)&_ZN6S211C34v110Ev,
  (VTBL_ENTRY)&_ZN6S211C34v111Ev,
  (VTBL_ENTRY)&_ZN6S211C34v112Ev,
  (VTBL_ENTRY)&_ZN6S211C34v113Ev,
};
extern VTBL_ENTRY _ZTI6S211C3[];
extern  VTBL_ENTRY _ZTV6S211C3[];
Class_Descriptor cd_S211C3 = {  "S211C3", // class name
  bases_S211C3, 3,
  &(vtc_S211C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S211C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S211C3),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S211C2  : S211C3 {
  virtual  ~S211C2(); // _ZN6S211C2D1Ev
  virtual void  v114(); // _ZN6S211C24v114Ev
  virtual void  v115(); // _ZN6S211C24v115Ev
  S211C2(); // tgen
};
//SIG(-1 S211C2) 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 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2}


 S211C2 ::~S211C2(){ note_dtor("S211C2", this);}
void  S211C2 ::v114(){vfunc_called(this, "_ZN6S211C24v114Ev");}
void  S211C2 ::v115(){vfunc_called(this, "_ZN6S211C24v115Ev");}
S211C2 ::S211C2(){ note_ctor("S211C2", this);} // tgen

static void Test_S211C2()
{
  extern Class_Descriptor cd_S211C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S211C2, buf);
    S211C2 *dp, &lv = *(dp=new (buf) S211C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S211C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S211C2)");
    check_base_class_offset(lv, (S211C6*)(S211C5*)(S211C4*)(S211C3*), 0, "S211C2");
    check_base_class_offset(lv, (S211C5*)(S211C4*)(S211C3*), 0, "S211C2");
    check_base_class_offset(lv, (S211C4*)(S211C3*), 0, "S211C2");
    check_base_class_offset(lv, (S211C3*), 0, "S211C2");
    test_class_info(&lv, &cd_S211C2);
    dp->~S211C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS211C2(Test_S211C2, "S211C2", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S211C2C1Ev();
extern void _ZN6S211C2D1Ev();
Name_Map name_map_S211C2[] = {
  NSPAIR(_ZN6S211C2C1Ev),
  NSPAIR(_ZN6S211C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S211C6;
extern VTBL_ENTRY _ZTI6S211C6[];
extern  VTBL_ENTRY _ZTV6S211C6[];
extern Class_Descriptor cd_S211C5;
extern VTBL_ENTRY _ZTI6S211C5[];
extern  VTBL_ENTRY _ZTV6S211C5[];
extern Class_Descriptor cd_S211C4;
extern VTBL_ENTRY _ZTI6S211C4[];
extern  VTBL_ENTRY _ZTV6S211C4[];
extern Class_Descriptor cd_S211C3;
extern VTBL_ENTRY _ZTI6S211C3[];
extern  VTBL_ENTRY _ZTV6S211C3[];
static Base_Class bases_S211C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S211C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S211C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S211C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S211C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S211C2[];
extern void _ZN6S211C2D1Ev();
extern void _ZN6S211C2D0Ev();
extern void _ZN6S211C62v4Ev();
extern void _ZN6S211C62v5Ev();
extern void _ZN6S211C62v6Ev();
extern void _ZN6S211C62v7Ev();
extern void _ZN6S211C62v8Ev();
extern void _ZN6S211C62v9Ev();
extern void _ZN6S211C63v10Ev();
extern void _ZN6S211C63v11Ev();
extern void _ZN6S211C63v12Ev();
extern void _ZN6S211C63v13Ev();
extern void _ZN6S211C63v14Ev();
extern void _ZN6S211C63v15Ev();
extern void _ZN6S211C63v16Ev();
extern void _ZN6S211C63v17Ev();
extern void _ZN6S211C63v18Ev();
extern void _ZN6S211C63v19Ev();
extern void _ZN6S211C63v20Ev();
extern void _ZN6S211C63v21Ev();
extern void _ZN6S211C63v22Ev();
extern void _ZN6S211C63v23Ev();
extern void _ZN6S211C63v24Ev();
extern void _ZN6S211C63v25Ev();
extern void _ZN6S211C63v26Ev();
extern void _ZN6S211C63v27Ev();
extern void _ZN6S211C63v28Ev();
extern void _ZN6S211C63v29Ev();
extern void _ZN6S211C63v30Ev();
extern void _ZN6S211C63v31Ev();
extern void _ZN6S211C63v32Ev();
extern void _ZN6S211C63v33Ev();
extern void _ZN6S211C63v34Ev();
extern void _ZN6S211C63v35Ev();
extern void _ZN6S211C63v36Ev();
extern void _ZN6S211C63v37Ev();
extern void _ZN6S211C63v38Ev();
extern void _ZN6S211C63v39Ev();
extern void _ZN6S211C63v40Ev();
extern void _ZN6S211C63v41Ev();
extern void _ZN6S211C63v42Ev();
extern void _ZN6S211C63v43Ev();
extern void _ZN6S211C63v44Ev();
extern void _ZN6S211C63v45Ev();
extern void _ZN6S211C63v46Ev();
extern void _ZN6S211C63v47Ev();
extern void _ZN6S211C63v48Ev();
extern void _ZN6S211C63v49Ev();
extern void _ZN6S211C63v50Ev();
extern void _ZN6S211C63v51Ev();
extern void _ZN6S211C63v52Ev();
extern void _ZN6S211C63v53Ev();
extern void _ZN6S211C63v54Ev();
extern void _ZN6S211C63v55Ev();
extern void _ZN6S211C63v56Ev();
extern void _ZN6S211C63v57Ev();
extern void _ZN6S211C63v58Ev();
extern void _ZN6S211C63v59Ev();
extern void _ZN6S211C63v60Ev();
extern void _ZN6S211C63v61Ev();
extern void _ZN6S211C63v62Ev();
extern void _ZN6S211C63v63Ev();
extern void _ZN6S211C63v64Ev();
extern void _ZN6S211C63v65Ev();
extern void _ZN6S211C63v66Ev();
extern void _ZN6S211C63v67Ev();
extern void _ZN6S211C53v68Ev();
extern void _ZN6S211C53v69Ev();
extern void _ZN6S211C53v70Ev();
extern void _ZN6S211C53v71Ev();
extern void _ZN6S211C53v72Ev();
extern void _ZN6S211C53v73Ev();
extern void _ZN6S211C53v74Ev();
extern void _ZN6S211C53v75Ev();
extern void _ZN6S211C53v76Ev();
extern void _ZN6S211C53v77Ev();
extern void _ZN6S211C53v78Ev();
extern void _ZN6S211C53v79Ev();
extern void _ZN6S211C53v80Ev();
extern void _ZN6S211C53v81Ev();
extern void _ZN6S211C53v82Ev();
extern void _ZN6S211C53v83Ev();
extern void _ZN6S211C53v84Ev();
extern void _ZN6S211C53v85Ev();
extern void _ZN6S211C53v86Ev();
extern void _ZN6S211C53v87Ev();
extern void _ZN6S211C53v88Ev();
extern void _ZN6S211C53v89Ev();
extern void _ZN6S211C43v90Ev();
extern void _ZN6S211C43v91Ev();
extern void _ZN6S211C43v92Ev();
extern void _ZN6S211C43v93Ev();
extern void _ZN6S211C43v94Ev();
extern void _ZN6S211C43v95Ev();
extern void _ZN6S211C43v96Ev();
extern void _ZN6S211C43v97Ev();
extern void _ZN6S211C43v98Ev();
extern void _ZN6S211C43v99Ev();
extern void _ZN6S211C44v100Ev();
extern void _ZN6S211C44v101Ev();
extern void _ZN6S211C44v102Ev();
extern void _ZN6S211C44v103Ev();
extern void _ZN6S211C44v104Ev();
extern void _ZN6S211C44v105Ev();
extern void _ZN6S211C44v106Ev();
extern void _ZN6S211C44v107Ev();
extern void _ZN6S211C44v108Ev();
extern void _ZN6S211C44v109Ev();
extern void _ZN6S211C34v110Ev();
extern void _ZN6S211C34v111Ev();
extern void _ZN6S211C34v112Ev();
extern void _ZN6S211C34v113Ev();
extern void _ZN6S211C24v114Ev();
extern void _ZN6S211C24v115Ev();
static  VTBL_ENTRY vtc_S211C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S211C2[0]),
  (VTBL_ENTRY)&_ZN6S211C2D1Ev,
  (VTBL_ENTRY)&_ZN6S211C2D0Ev,
  (VTBL_ENTRY)&_ZN6S211C62v4Ev,
  (VTBL_ENTRY)&_ZN6S211C62v5Ev,
  (VTBL_ENTRY)&_ZN6S211C62v6Ev,
  (VTBL_ENTRY)&_ZN6S211C62v7Ev,
  (VTBL_ENTRY)&_ZN6S211C62v8Ev,
  (VTBL_ENTRY)&_ZN6S211C62v9Ev,
  (VTBL_ENTRY)&_ZN6S211C63v10Ev,
  (VTBL_ENTRY)&_ZN6S211C63v11Ev,
  (VTBL_ENTRY)&_ZN6S211C63v12Ev,
  (VTBL_ENTRY)&_ZN6S211C63v13Ev,
  (VTBL_ENTRY)&_ZN6S211C63v14Ev,
  (VTBL_ENTRY)&_ZN6S211C63v15Ev,
  (VTBL_ENTRY)&_ZN6S211C63v16Ev,
  (VTBL_ENTRY)&_ZN6S211C63v17Ev,
  (VTBL_ENTRY)&_ZN6S211C63v18Ev,
  (VTBL_ENTRY)&_ZN6S211C63v19Ev,
  (VTBL_ENTRY)&_ZN6S211C63v20Ev,
  (VTBL_ENTRY)&_ZN6S211C63v21Ev,
  (VTBL_ENTRY)&_ZN6S211C63v22Ev,
  (VTBL_ENTRY)&_ZN6S211C63v23Ev,
  (VTBL_ENTRY)&_ZN6S211C63v24Ev,
  (VTBL_ENTRY)&_ZN6S211C63v25Ev,
  (VTBL_ENTRY)&_ZN6S211C63v26Ev,
  (VTBL_ENTRY)&_ZN6S211C63v27Ev,
  (VTBL_ENTRY)&_ZN6S211C63v28Ev,
  (VTBL_ENTRY)&_ZN6S211C63v29Ev,
  (VTBL_ENTRY)&_ZN6S211C63v30Ev,
  (VTBL_ENTRY)&_ZN6S211C63v31Ev,
  (VTBL_ENTRY)&_ZN6S211C63v32Ev,
  (VTBL_ENTRY)&_ZN6S211C63v33Ev,
  (VTBL_ENTRY)&_ZN6S211C63v34Ev,
  (VTBL_ENTRY)&_ZN6S211C63v35Ev,
  (VTBL_ENTRY)&_ZN6S211C63v36Ev,
  (VTBL_ENTRY)&_ZN6S211C63v37Ev,
  (VTBL_ENTRY)&_ZN6S211C63v38Ev,
  (VTBL_ENTRY)&_ZN6S211C63v39Ev,
  (VTBL_ENTRY)&_ZN6S211C63v40Ev,
  (VTBL_ENTRY)&_ZN6S211C63v41Ev,
  (VTBL_ENTRY)&_ZN6S211C63v42Ev,
  (VTBL_ENTRY)&_ZN6S211C63v43Ev,
  (VTBL_ENTRY)&_ZN6S211C63v44Ev,
  (VTBL_ENTRY)&_ZN6S211C63v45Ev,
  (VTBL_ENTRY)&_ZN6S211C63v46Ev,
  (VTBL_ENTRY)&_ZN6S211C63v47Ev,
  (VTBL_ENTRY)&_ZN6S211C63v48Ev,
  (VTBL_ENTRY)&_ZN6S211C63v49Ev,
  (VTBL_ENTRY)&_ZN6S211C63v50Ev,
  (VTBL_ENTRY)&_ZN6S211C63v51Ev,
  (VTBL_ENTRY)&_ZN6S211C63v52Ev,
  (VTBL_ENTRY)&_ZN6S211C63v53Ev,
  (VTBL_ENTRY)&_ZN6S211C63v54Ev,
  (VTBL_ENTRY)&_ZN6S211C63v55Ev,
  (VTBL_ENTRY)&_ZN6S211C63v56Ev,
  (VTBL_ENTRY)&_ZN6S211C63v57Ev,
  (VTBL_ENTRY)&_ZN6S211C63v58Ev,
  (VTBL_ENTRY)&_ZN6S211C63v59Ev,
  (VTBL_ENTRY)&_ZN6S211C63v60Ev,
  (VTBL_ENTRY)&_ZN6S211C63v61Ev,
  (VTBL_ENTRY)&_ZN6S211C63v62Ev,
  (VTBL_ENTRY)&_ZN6S211C63v63Ev,
  (VTBL_ENTRY)&_ZN6S211C63v64Ev,
  (VTBL_ENTRY)&_ZN6S211C63v65Ev,
  (VTBL_ENTRY)&_ZN6S211C63v66Ev,
  (VTBL_ENTRY)&_ZN6S211C63v67Ev,
  (VTBL_ENTRY)&_ZN6S211C53v68Ev,
  (VTBL_ENTRY)&_ZN6S211C53v69Ev,
  (VTBL_ENTRY)&_ZN6S211C53v70Ev,
  (VTBL_ENTRY)&_ZN6S211C53v71Ev,
  (VTBL_ENTRY)&_ZN6S211C53v72Ev,
  (VTBL_ENTRY)&_ZN6S211C53v73Ev,
  (VTBL_ENTRY)&_ZN6S211C53v74Ev,
  (VTBL_ENTRY)&_ZN6S211C53v75Ev,
  (VTBL_ENTRY)&_ZN6S211C53v76Ev,
  (VTBL_ENTRY)&_ZN6S211C53v77Ev,
  (VTBL_ENTRY)&_ZN6S211C53v78Ev,
  (VTBL_ENTRY)&_ZN6S211C53v79Ev,
  (VTBL_ENTRY)&_ZN6S211C53v80Ev,
  (VTBL_ENTRY)&_ZN6S211C53v81Ev,
  (VTBL_ENTRY)&_ZN6S211C53v82Ev,
  (VTBL_ENTRY)&_ZN6S211C53v83Ev,
  (VTBL_ENTRY)&_ZN6S211C53v84Ev,
  (VTBL_ENTRY)&_ZN6S211C53v85Ev,
  (VTBL_ENTRY)&_ZN6S211C53v86Ev,
  (VTBL_ENTRY)&_ZN6S211C53v87Ev,
  (VTBL_ENTRY)&_ZN6S211C53v88Ev,
  (VTBL_ENTRY)&_ZN6S211C53v89Ev,
  (VTBL_ENTRY)&_ZN6S211C43v90Ev,
  (VTBL_ENTRY)&_ZN6S211C43v91Ev,
  (VTBL_ENTRY)&_ZN6S211C43v92Ev,
  (VTBL_ENTRY)&_ZN6S211C43v93Ev,
  (VTBL_ENTRY)&_ZN6S211C43v94Ev,
  (VTBL_ENTRY)&_ZN6S211C43v95Ev,
  (VTBL_ENTRY)&_ZN6S211C43v96Ev,
  (VTBL_ENTRY)&_ZN6S211C43v97Ev,
  (VTBL_ENTRY)&_ZN6S211C43v98Ev,
  (VTBL_ENTRY)&_ZN6S211C43v99Ev,
  (VTBL_ENTRY)&_ZN6S211C44v100Ev,
  (VTBL_ENTRY)&_ZN6S211C44v101Ev,
  (VTBL_ENTRY)&_ZN6S211C44v102Ev,
  (VTBL_ENTRY)&_ZN6S211C44v103Ev,
  (VTBL_ENTRY)&_ZN6S211C44v104Ev,
  (VTBL_ENTRY)&_ZN6S211C44v105Ev,
  (VTBL_ENTRY)&_ZN6S211C44v106Ev,
  (VTBL_ENTRY)&_ZN6S211C44v107Ev,
  (VTBL_ENTRY)&_ZN6S211C44v108Ev,
  (VTBL_ENTRY)&_ZN6S211C44v109Ev,
  (VTBL_ENTRY)&_ZN6S211C34v110Ev,
  (VTBL_ENTRY)&_ZN6S211C34v111Ev,
  (VTBL_ENTRY)&_ZN6S211C34v112Ev,
  (VTBL_ENTRY)&_ZN6S211C34v113Ev,
  (VTBL_ENTRY)&_ZN6S211C24v114Ev,
  (VTBL_ENTRY)&_ZN6S211C24v115Ev,
};
extern VTBL_ENTRY _ZTI6S211C2[];
extern  VTBL_ENTRY _ZTV6S211C2[];
Class_Descriptor cd_S211C2 = {  "S211C2", // class name
  bases_S211C2, 4,
  &(vtc_S211C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S211C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S211C2),116, //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  S211C1  : S211C2 {
  unsigned int s211c1f0:1;
  virtual  ~S211C1(); // _ZN6S211C1D1Ev
  virtual void  v1(); // _ZN6S211C12v1Ev
  virtual void  v2(); // _ZN6S211C12v2Ev
  virtual void  v3(); // _ZN6S211C12v3Ev
  S211C1(); // tgen
};
//SIG(1 S211C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v110 v111 v112 v113 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v114 v115} vd v1 v2 v3 Fi:1}


 S211C1 ::~S211C1(){ note_dtor("S211C1", this);}
void  S211C1 ::v1(){vfunc_called(this, "_ZN6S211C12v1Ev");}
void  S211C1 ::v2(){vfunc_called(this, "_ZN6S211C12v2Ev");}
void  S211C1 ::v3(){vfunc_called(this, "_ZN6S211C12v3Ev");}
S211C1 ::S211C1(){ note_ctor("S211C1", this);} // tgen

static void Test_S211C1()
{
  extern Class_Descriptor cd_S211C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,57)];
    init_test(&cd_S211C1, buf);
    S211C1 *dp, &lv = *(dp=new (buf) S211C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,224), "sizeof(S211C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S211C1)");
    check_base_class_offset(lv, (S211C6*)(S211C5*)(S211C4*)(S211C3*)(S211C2*), 0, "S211C1");
    check_base_class_offset(lv, (S211C5*)(S211C4*)(S211C3*)(S211C2*), 0, "S211C1");
    check_base_class_offset(lv, (S211C4*)(S211C3*)(S211C2*), 0, "S211C1");
    check_base_class_offset(lv, (S211C3*)(S211C2*), 0, "S211C1");
    check_base_class_offset(lv, (S211C2*), 0, "S211C1");
    set_bf_and_test(lv, s211c1f0, ABISELECT(296,220), 0, 1, 1, "S211C1");
    test_class_info(&lv, &cd_S211C1);
    dp->~S211C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS211C1(Test_S211C1, "S211C1", ABISELECT(304,224));

#else // __cplusplus

extern void _ZN6S211C1C1Ev();
extern void _ZN6S211C1D1Ev();
Name_Map name_map_S211C1[] = {
  NSPAIR(_ZN6S211C1C1Ev),
  NSPAIR(_ZN6S211C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S211C6;
extern VTBL_ENTRY _ZTI6S211C6[];
extern  VTBL_ENTRY _ZTV6S211C6[];
extern Class_Descriptor cd_S211C5;
extern VTBL_ENTRY _ZTI6S211C5[];
extern  VTBL_ENTRY _ZTV6S211C5[];
extern Class_Descriptor cd_S211C4;
extern VTBL_ENTRY _ZTI6S211C4[];
extern  VTBL_ENTRY _ZTV6S211C4[];
extern Class_Descriptor cd_S211C3;
extern VTBL_ENTRY _ZTI6S211C3[];
extern  VTBL_ENTRY _ZTV6S211C3[];
extern Class_Descriptor cd_S211C2;
extern VTBL_ENTRY _ZTI6S211C2[];
extern  VTBL_ENTRY _ZTV6S211C2[];
static Base_Class bases_S211C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S211C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S211C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S211C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S211C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S211C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S211C1[];
extern void _ZN6S211C1D1Ev();
extern void _ZN6S211C1D0Ev();
extern void _ZN6S211C62v4Ev();
extern void _ZN6S211C62v5Ev();
extern void _ZN6S211C62v6Ev();
extern void _ZN6S211C62v7Ev();
extern void _ZN6S211C62v8Ev();
extern void _ZN6S211C62v9Ev();
extern void _ZN6S211C63v10Ev();
extern void _ZN6S211C63v11Ev();
extern void _ZN6S211C63v12Ev();
extern void _ZN6S211C63v13Ev();
extern void _ZN6S211C63v14Ev();
extern void _ZN6S211C63v15Ev();
extern void _ZN6S211C63v16Ev();
extern void _ZN6S211C63v17Ev();
extern void _ZN6S211C63v18Ev();
extern void _ZN6S211C63v19Ev();
extern void _ZN6S211C63v20Ev();
extern void _ZN6S211C63v21Ev();
extern void _ZN6S211C63v22Ev();
extern void _ZN6S211C63v23Ev();
extern void _ZN6S211C63v24Ev();
extern void _ZN6S211C63v25Ev();
extern void _ZN6S211C63v26Ev();
extern void _ZN6S211C63v27Ev();
extern void _ZN6S211C63v28Ev();
extern void _ZN6S211C63v29Ev();
extern void _ZN6S211C63v30Ev();
extern void _ZN6S211C63v31Ev();
extern void _ZN6S211C63v32Ev();
extern void _ZN6S211C63v33Ev();
extern void _ZN6S211C63v34Ev();
extern void _ZN6S211C63v35Ev();
extern void _ZN6S211C63v36Ev();
extern void _ZN6S211C63v37Ev();
extern void _ZN6S211C63v38Ev();
extern void _ZN6S211C63v39Ev();
extern void _ZN6S211C63v40Ev();
extern void _ZN6S211C63v41Ev();
extern void _ZN6S211C63v42Ev();
extern void _ZN6S211C63v43Ev();
extern void _ZN6S211C63v44Ev();
extern void _ZN6S211C63v45Ev();
extern void _ZN6S211C63v46Ev();
extern void _ZN6S211C63v47Ev();
extern void _ZN6S211C63v48Ev();
extern void _ZN6S211C63v49Ev();
extern void _ZN6S211C63v50Ev();
extern void _ZN6S211C63v51Ev();
extern void _ZN6S211C63v52Ev();
extern void _ZN6S211C63v53Ev();
extern void _ZN6S211C63v54Ev();
extern void _ZN6S211C63v55Ev();
extern void _ZN6S211C63v56Ev();
extern void _ZN6S211C63v57Ev();
extern void _ZN6S211C63v58Ev();
extern void _ZN6S211C63v59Ev();
extern void _ZN6S211C63v60Ev();
extern void _ZN6S211C63v61Ev();
extern void _ZN6S211C63v62Ev();
extern void _ZN6S211C63v63Ev();
extern void _ZN6S211C63v64Ev();
extern void _ZN6S211C63v65Ev();
extern void _ZN6S211C63v66Ev();
extern void _ZN6S211C63v67Ev();
extern void _ZN6S211C53v68Ev();
extern void _ZN6S211C53v69Ev();
extern void _ZN6S211C53v70Ev();
extern void _ZN6S211C53v71Ev();
extern void _ZN6S211C53v72Ev();
extern void _ZN6S211C53v73Ev();
extern void _ZN6S211C53v74Ev();
extern void _ZN6S211C53v75Ev();
extern void _ZN6S211C53v76Ev();
extern void _ZN6S211C53v77Ev();
extern void _ZN6S211C53v78Ev();
extern void _ZN6S211C53v79Ev();
extern void _ZN6S211C53v80Ev();
extern void _ZN6S211C53v81Ev();
extern void _ZN6S211C53v82Ev();
extern void _ZN6S211C53v83Ev();
extern void _ZN6S211C53v84Ev();
extern void _ZN6S211C53v85Ev();
extern void _ZN6S211C53v86Ev();
extern void _ZN6S211C53v87Ev();
extern void _ZN6S211C53v88Ev();
extern void _ZN6S211C53v89Ev();
extern void _ZN6S211C43v90Ev();
extern void _ZN6S211C43v91Ev();
extern void _ZN6S211C43v92Ev();
extern void _ZN6S211C43v93Ev();
extern void _ZN6S211C43v94Ev();
extern void _ZN6S211C43v95Ev();
extern void _ZN6S211C43v96Ev();
extern void _ZN6S211C43v97Ev();
extern void _ZN6S211C43v98Ev();
extern void _ZN6S211C43v99Ev();
extern void _ZN6S211C44v100Ev();
extern void _ZN6S211C44v101Ev();
extern void _ZN6S211C44v102Ev();
extern void _ZN6S211C44v103Ev();
extern void _ZN6S211C44v104Ev();
extern void _ZN6S211C44v105Ev();
extern void _ZN6S211C44v106Ev();
extern void _ZN6S211C44v107Ev();
extern void _ZN6S211C44v108Ev();
extern void _ZN6S211C44v109Ev();
extern void _ZN6S211C34v110Ev();
extern void _ZN6S211C34v111Ev();
extern void _ZN6S211C34v112Ev();
extern void _ZN6S211C34v113Ev();
extern void _ZN6S211C24v114Ev();
extern void _ZN6S211C24v115Ev();
extern void _ZN6S211C12v1Ev();
extern void _ZN6S211C12v2Ev();
extern void _ZN6S211C12v3Ev();
static  VTBL_ENTRY vtc_S211C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S211C1[0]),
  (VTBL_ENTRY)&_ZN6S211C1D1Ev,
  (VTBL_ENTRY)&_ZN6S211C1D0Ev,
  (VTBL_ENTRY)&_ZN6S211C62v4Ev,
  (VTBL_ENTRY)&_ZN6S211C62v5Ev,
  (VTBL_ENTRY)&_ZN6S211C62v6Ev,
  (VTBL_ENTRY)&_ZN6S211C62v7Ev,
  (VTBL_ENTRY)&_ZN6S211C62v8Ev,
  (VTBL_ENTRY)&_ZN6S211C62v9Ev,
  (VTBL_ENTRY)&_ZN6S211C63v10Ev,
  (VTBL_ENTRY)&_ZN6S211C63v11Ev,
  (VTBL_ENTRY)&_ZN6S211C63v12Ev,
  (VTBL_ENTRY)&_ZN6S211C63v13Ev,
  (VTBL_ENTRY)&_ZN6S211C63v14Ev,
  (VTBL_ENTRY)&_ZN6S211C63v15Ev,
  (VTBL_ENTRY)&_ZN6S211C63v16Ev,
  (VTBL_ENTRY)&_ZN6S211C63v17Ev,
  (VTBL_ENTRY)&_ZN6S211C63v18Ev,
  (VTBL_ENTRY)&_ZN6S211C63v19Ev,
  (VTBL_ENTRY)&_ZN6S211C63v20Ev,
  (VTBL_ENTRY)&_ZN6S211C63v21Ev,
  (VTBL_ENTRY)&_ZN6S211C63v22Ev,
  (VTBL_ENTRY)&_ZN6S211C63v23Ev,
  (VTBL_ENTRY)&_ZN6S211C63v24Ev,
  (VTBL_ENTRY)&_ZN6S211C63v25Ev,
  (VTBL_ENTRY)&_ZN6S211C63v26Ev,
  (VTBL_ENTRY)&_ZN6S211C63v27Ev,
  (VTBL_ENTRY)&_ZN6S211C63v28Ev,
  (VTBL_ENTRY)&_ZN6S211C63v29Ev,
  (VTBL_ENTRY)&_ZN6S211C63v30Ev,
  (VTBL_ENTRY)&_ZN6S211C63v31Ev,
  (VTBL_ENTRY)&_ZN6S211C63v32Ev,
  (VTBL_ENTRY)&_ZN6S211C63v33Ev,
  (VTBL_ENTRY)&_ZN6S211C63v34Ev,
  (VTBL_ENTRY)&_ZN6S211C63v35Ev,
  (VTBL_ENTRY)&_ZN6S211C63v36Ev,
  (VTBL_ENTRY)&_ZN6S211C63v37Ev,
  (VTBL_ENTRY)&_ZN6S211C63v38Ev,
  (VTBL_ENTRY)&_ZN6S211C63v39Ev,
  (VTBL_ENTRY)&_ZN6S211C63v40Ev,
  (VTBL_ENTRY)&_ZN6S211C63v41Ev,
  (VTBL_ENTRY)&_ZN6S211C63v42Ev,
  (VTBL_ENTRY)&_ZN6S211C63v43Ev,
  (VTBL_ENTRY)&_ZN6S211C63v44Ev,
  (VTBL_ENTRY)&_ZN6S211C63v45Ev,
  (VTBL_ENTRY)&_ZN6S211C63v46Ev,
  (VTBL_ENTRY)&_ZN6S211C63v47Ev,
  (VTBL_ENTRY)&_ZN6S211C63v48Ev,
  (VTBL_ENTRY)&_ZN6S211C63v49Ev,
  (VTBL_ENTRY)&_ZN6S211C63v50Ev,
  (VTBL_ENTRY)&_ZN6S211C63v51Ev,
  (VTBL_ENTRY)&_ZN6S211C63v52Ev,
  (VTBL_ENTRY)&_ZN6S211C63v53Ev,
  (VTBL_ENTRY)&_ZN6S211C63v54Ev,
  (VTBL_ENTRY)&_ZN6S211C63v55Ev,
  (VTBL_ENTRY)&_ZN6S211C63v56Ev,
  (VTBL_ENTRY)&_ZN6S211C63v57Ev,
  (VTBL_ENTRY)&_ZN6S211C63v58Ev,
  (VTBL_ENTRY)&_ZN6S211C63v59Ev,
  (VTBL_ENTRY)&_ZN6S211C63v60Ev,
  (VTBL_ENTRY)&_ZN6S211C63v61Ev,
  (VTBL_ENTRY)&_ZN6S211C63v62Ev,
  (VTBL_ENTRY)&_ZN6S211C63v63Ev,
  (VTBL_ENTRY)&_ZN6S211C63v64Ev,
  (VTBL_ENTRY)&_ZN6S211C63v65Ev,
  (VTBL_ENTRY)&_ZN6S211C63v66Ev,
  (VTBL_ENTRY)&_ZN6S211C63v67Ev,
  (VTBL_ENTRY)&_ZN6S211C53v68Ev,
  (VTBL_ENTRY)&_ZN6S211C53v69Ev,
  (VTBL_ENTRY)&_ZN6S211C53v70Ev,
  (VTBL_ENTRY)&_ZN6S211C53v71Ev,
  (VTBL_ENTRY)&_ZN6S211C53v72Ev,
  (VTBL_ENTRY)&_ZN6S211C53v73Ev,
  (VTBL_ENTRY)&_ZN6S211C53v74Ev,
  (VTBL_ENTRY)&_ZN6S211C53v75Ev,
  (VTBL_ENTRY)&_ZN6S211C53v76Ev,
  (VTBL_ENTRY)&_ZN6S211C53v77Ev,
  (VTBL_ENTRY)&_ZN6S211C53v78Ev,
  (VTBL_ENTRY)&_ZN6S211C53v79Ev,
  (VTBL_ENTRY)&_ZN6S211C53v80Ev,
  (VTBL_ENTRY)&_ZN6S211C53v81Ev,
  (VTBL_ENTRY)&_ZN6S211C53v82Ev,
  (VTBL_ENTRY)&_ZN6S211C53v83Ev,
  (VTBL_ENTRY)&_ZN6S211C53v84Ev,
  (VTBL_ENTRY)&_ZN6S211C53v85Ev,
  (VTBL_ENTRY)&_ZN6S211C53v86Ev,
  (VTBL_ENTRY)&_ZN6S211C53v87Ev,
  (VTBL_ENTRY)&_ZN6S211C53v88Ev,
  (VTBL_ENTRY)&_ZN6S211C53v89Ev,
  (VTBL_ENTRY)&_ZN6S211C43v90Ev,
  (VTBL_ENTRY)&_ZN6S211C43v91Ev,
  (VTBL_ENTRY)&_ZN6S211C43v92Ev,
  (VTBL_ENTRY)&_ZN6S211C43v93Ev,
  (VTBL_ENTRY)&_ZN6S211C43v94Ev,
  (VTBL_ENTRY)&_ZN6S211C43v95Ev,
  (VTBL_ENTRY)&_ZN6S211C43v96Ev,
  (VTBL_ENTRY)&_ZN6S211C43v97Ev,
  (VTBL_ENTRY)&_ZN6S211C43v98Ev,
  (VTBL_ENTRY)&_ZN6S211C43v99Ev,
  (VTBL_ENTRY)&_ZN6S211C44v100Ev,
  (VTBL_ENTRY)&_ZN6S211C44v101Ev,
  (VTBL_ENTRY)&_ZN6S211C44v102Ev,
  (VTBL_ENTRY)&_ZN6S211C44v103Ev,
  (VTBL_ENTRY)&_ZN6S211C44v104Ev,
  (VTBL_ENTRY)&_ZN6S211C44v105Ev,
  (VTBL_ENTRY)&_ZN6S211C44v106Ev,
  (VTBL_ENTRY)&_ZN6S211C44v107Ev,
  (VTBL_ENTRY)&_ZN6S211C44v108Ev,
  (VTBL_ENTRY)&_ZN6S211C44v109Ev,
  (VTBL_ENTRY)&_ZN6S211C34v110Ev,
  (VTBL_ENTRY)&_ZN6S211C34v111Ev,
  (VTBL_ENTRY)&_ZN6S211C34v112Ev,
  (VTBL_ENTRY)&_ZN6S211C34v113Ev,
  (VTBL_ENTRY)&_ZN6S211C24v114Ev,
  (VTBL_ENTRY)&_ZN6S211C24v115Ev,
  (VTBL_ENTRY)&_ZN6S211C12v1Ev,
  (VTBL_ENTRY)&_ZN6S211C12v2Ev,
  (VTBL_ENTRY)&_ZN6S211C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S211C1[];
extern  VTBL_ENTRY _ZTV6S211C1[];
Class_Descriptor cd_S211C1 = {  "S211C1", // class name
  bases_S211C1, 5,
  &(vtc_S211C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,224), // object size
  NSPAIRA(_ZTI6S211C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S211C1),119, //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  S20680C4  : virtual S20677C3 {
  long double s20680c4f0;
  int s20680c4f1;
  ::S20677C3 s20680c4f2;
  ::S20677C3 s20680c4f3;
  ~S20680C4(); // tgen
  S20680C4(); // tgen
};
//SIG(-1 S20680C4) C1{ VBC2{ m Fp FL[4] Fs} FD Fi FC2 FC2}


S20680C4 ::~S20680C4(){ note_dtor("S20680C4", this);} // tgen
S20680C4 ::S20680C4(){ note_ctor("S20680C4", this);} // tgen

static void Test_S20680C4()
{
  extern Class_Descriptor cd_S20680C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,36)];
    init_test(&cd_S20680C4, buf);
    S20680C4 *dp, &lv = *(dp=new (buf) S20680C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S20680C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20680C4)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(136,100), "S20680C4");
    check_field_offset(lv, s20680c4f0, ABISELECT(16,4), "S20680C4.s20680c4f0");
    check_field_offset(lv, s20680c4f1, ABISELECT(32,16), "S20680C4.s20680c4f1");
    check_field_offset(lv, s20680c4f2, ABISELECT(40,20), "S20680C4.s20680c4f2");
    check_field_offset(lv, s20680c4f3, ABISELECT(88,60), "S20680C4.s20680c4f3");
    test_class_info(&lv, &cd_S20680C4);
    dp->~S20680C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20680C4(Test_S20680C4, "S20680C4", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN8S20680C4C1Ev();
extern void _ZN8S20680C4D1Ev();
Name_Map name_map_S20680C4[] = {
  NSPAIR(_ZN8S20680C4C1Ev),
  NSPAIR(_ZN8S20680C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20680C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(136,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20680C4[];
static  VTBL_ENTRY vtc_S20680C4[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
extern VTBL_ENTRY _ZTV8S20680C4[];
static  VTT_ENTRY vtt_S20680C4[] = {
  {&(_ZTV8S20680C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
Class_Descriptor cd_S20680C4 = {  "S20680C4", // class name
  bases_S20680C4, 1,
  &(vtc_S20680C4[0]), // expected_vtbl_contents
  &(vtt_S20680C4[0]), // expected_vtt_contents
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI8S20680C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20680C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20680C4),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  S20680C2  : virtual S20677C3 , virtual S20680C4 {
  int s20680c2f0;
  ::S20680C4 s20680c2f1;
  __tsi64 s20680c2f2;
  int s20680c2f3;
  void *s20680c2f4;
  virtual void  v3(); // _ZN8S20680C22v3Ev
  virtual void  v4(); // _ZN8S20680C22v4Ev
  ~S20680C2(); // tgen
  S20680C2(); // tgen
};
//SIG(-1 S20680C2) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 FD Fi FC2 FC2} v1 v2 Fi FC3 FL Fi Fp}


void  S20680C2 ::v3(){vfunc_called(this, "_ZN8S20680C22v3Ev");}
void  S20680C2 ::v4(){vfunc_called(this, "_ZN8S20680C22v4Ev");}
S20680C2 ::~S20680C2(){ note_dtor("S20680C2", this);} // tgen
S20680C2 ::S20680C2(){ note_ctor("S20680C2", this);} // tgen

static void Test_S20680C2()
{
  extern Class_Descriptor cd_S20680C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,77)];
    init_test(&cd_S20680C2, buf);
    S20680C2 *dp, &lv = *(dp=new (buf) S20680C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,304), "sizeof(S20680C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20680C2)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(232,164), "S20680C2");
    check_base_class_offset(lv, (S20677C3*)(S20680C4*), ABISELECT(232,164), "S20680C2");
    check_base_class_offset(lv, (S20680C4*), ABISELECT(288,204), "S20680C2");
    check_field_offset(lv, s20680c2f0, ABISELECT(8,4), "S20680C2.s20680c2f0");
    check_field_offset(lv, s20680c2f1, ABISELECT(16,8), "S20680C2.s20680c2f1");
    check_field_offset(lv, s20680c2f2, ABISELECT(208,148), "S20680C2.s20680c2f2");
    check_field_offset(lv, s20680c2f3, ABISELECT(216,156), "S20680C2.s20680c2f3");
    check_field_offset(lv, s20680c2f4, ABISELECT(224,160), "S20680C2.s20680c2f4");
    test_class_info(&lv, &cd_S20680C2);
    dp->~S20680C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20680C2(Test_S20680C2, "S20680C2", ABISELECT(432,304));

#else // __cplusplus

extern void _ZN8S20680C2C1Ev();
extern void _ZN8S20680C2D1Ev();
Name_Map name_map_S20680C2[] = {
  NSPAIR(_ZN8S20680C2C1Ev),
  NSPAIR(_ZN8S20680C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
static Base_Class bases_S20680C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(232,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_S20680C4,    ABISELECT(288,204), //bcp->offset
    6, //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 _ZTI8S20680C2[];
extern void _ZN8S20680C22v3Ev();
extern void _ZN8S20680C22v4Ev();
static  VTBL_ENTRY vtc_S20680C2[] = {
  ABISELECT(288,204),
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C2[0]),
  (VTBL_ENTRY)&_ZN8S20680C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20680C22v4Ev,
  ABISELECT(-56,-40),
  ABISELECT(-288,-204),
  (VTBL_ENTRY)&(_ZTI8S20680C2[0]),
};
extern VTBL_ENTRY _ZTV8S20680C2[];
static  VTBL_ENTRY _tg__ZTV8S20680C4__8S20680C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
static  VTT_ENTRY vtt_S20680C2[] = {
  {&(_ZTV8S20680C2[4]),  4,9},
  {&(_ZTV8S20680C2[9]),  9,9},
  {&(_tg__ZTV8S20680C4__8S20680C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20680C2[];
extern  VTBL_ENTRY _ZTV8S20680C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C2[];
Class_Descriptor cd_S20680C2 = {  "S20680C2", // class name
  bases_S20680C2, 2,
  &(vtc_S20680C2[0]), // expected_vtbl_contents
  &(vtt_S20680C2[0]), // expected_vtt_contents
  ABISELECT(432,304), // object size
  NSPAIRA(_ZTI8S20680C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20680C2),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20680C2),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  S20680C6  : virtual S20677C3 , S20680C4 {
  short s20680c6f0;
  __tsi64 s20680c6f1;
  char s20680c6f2;
  int s20680c6f3[2];
  ::S20680C4 s20680c6f4;
  void *s20680c6f5;
  __tsi64 s20680c6f6;
  int s20680c6f7;
  __tsi64 s20680c6f8;
  int s20680c6f9;
  virtual void  v5(); // _ZN8S20680C62v5Ev
  virtual void  v6(); // _ZN8S20680C62v6Ev
  virtual void  v7(); // _ZN8S20680C62v7Ev
  ~S20680C6(); // tgen
  S20680C6(); // tgen
};
//SIG(-1 S20680C6) C1{ VBC2{ m Fp FL[4] Fs} BC3{ VBC2 FD Fi FC2 FC2} v1 v2 v3 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi}


void  S20680C6 ::v5(){vfunc_called(this, "_ZN8S20680C62v5Ev");}
void  S20680C6 ::v6(){vfunc_called(this, "_ZN8S20680C62v6Ev");}
void  S20680C6 ::v7(){vfunc_called(this, "_ZN8S20680C62v7Ev");}
S20680C6 ::~S20680C6(){ note_dtor("S20680C6", this);} // tgen
S20680C6 ::S20680C6(){ note_ctor("S20680C6", this);} // tgen

static void Test_S20680C6()
{
  extern Class_Descriptor cd_S20680C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,84)];
    init_test(&cd_S20680C6, buf);
    S20680C6 *dp, &lv = *(dp=new (buf) S20680C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,332), "sizeof(S20680C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20680C6)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(408,292), "S20680C6");
    check_base_class_offset(lv, (S20677C3*)(S20680C4*), ABISELECT(408,292), "S20680C6");
    check_base_class_offset(lv, (S20680C4*), 0, "S20680C6");
    check_field_offset(lv, s20680c6f0, ABISELECT(136,100), "S20680C6.s20680c6f0");
    check_field_offset(lv, s20680c6f1, ABISELECT(144,104), "S20680C6.s20680c6f1");
    check_field_offset(lv, s20680c6f2, ABISELECT(152,112), "S20680C6.s20680c6f2");
    check_field_offset(lv, s20680c6f3, ABISELECT(156,116), "S20680C6.s20680c6f3");
    check_field_offset(lv, s20680c6f4, ABISELECT(176,124), "S20680C6.s20680c6f4");
    check_field_offset(lv, s20680c6f5, ABISELECT(368,264), "S20680C6.s20680c6f5");
    check_field_offset(lv, s20680c6f6, ABISELECT(376,268), "S20680C6.s20680c6f6");
    check_field_offset(lv, s20680c6f7, ABISELECT(384,276), "S20680C6.s20680c6f7");
    check_field_offset(lv, s20680c6f8, ABISELECT(392,280), "S20680C6.s20680c6f8");
    check_field_offset(lv, s20680c6f9, ABISELECT(400,288), "S20680C6.s20680c6f9");
    test_class_info(&lv, &cd_S20680C6);
    dp->~S20680C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20680C6(Test_S20680C6, "S20680C6", ABISELECT(464,332));

#else // __cplusplus

extern void _ZN8S20680C6C1Ev();
extern void _ZN8S20680C6D1Ev();
Name_Map name_map_S20680C6[] = {
  NSPAIR(_ZN8S20680C6C1Ev),
  NSPAIR(_ZN8S20680C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
static Base_Class bases_S20680C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(408,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20680C4,    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 _ZTI8S20680C6[];
extern void _ZN8S20680C62v5Ev();
extern void _ZN8S20680C62v6Ev();
extern void _ZN8S20680C62v7Ev();
static  VTBL_ENTRY vtc_S20680C6[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C6[0]),
  (VTBL_ENTRY)&_ZN8S20680C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20680C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20680C62v7Ev,
};
extern VTBL_ENTRY _ZTV8S20680C6[];
static  VTBL_ENTRY _tg__ZTV8S20680C4__8S20680C6[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
static  VTT_ENTRY vtt_S20680C6[] = {
  {&(_ZTV8S20680C6[3]),  3,6},
  {&(_tg__ZTV8S20680C4__8S20680C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20680C6[];
extern  VTBL_ENTRY _ZTV8S20680C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C6[];
Class_Descriptor cd_S20680C6 = {  "S20680C6", // class name
  bases_S20680C6, 2,
  &(vtc_S20680C6[0]), // expected_vtbl_contents
  &(vtt_S20680C6[0]), // expected_vtt_contents
  ABISELECT(464,332), // object size
  NSPAIRA(_ZTI8S20680C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20680C6),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20680C6),2, //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  S20680C7  {
  ::S20677C6_nt s20680c7f0;
  ::S20680C4 s20680c7f1;
  ::S20677C6_nt s20680c7f2;
  __tsi64 s20680c7f3;
  ::S20677C6_nt s20680c7f4;
  void *s20680c7f5;
  ::S20677C6_nt s20680c7f6;
  void *s20680c7f7[2];
  ::S20677C6_nt s20680c7f8;
  virtual void  v8(); // _ZN8S20680C72v8Ev
  ~S20680C7(); // tgen
  S20680C7(); // tgen
};
//SIG(-1 S20680C7) C1{ v1 FC2{} FC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} FC2 FL FC2 Fp FC2 Fp[2] FC2}


void  S20680C7 ::v8(){vfunc_called(this, "_ZN8S20680C72v8Ev");}
S20680C7 ::~S20680C7(){ note_dtor("S20680C7", this);} // tgen
S20680C7 ::S20680C7(){ note_ctor("S20680C7", this);} // tgen

static void Test_S20680C7()
{
  extern Class_Descriptor cd_S20680C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,47)];
    init_test(&cd_S20680C7, buf);
    S20680C7 *dp, &lv = *(dp=new (buf) S20680C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,184), "sizeof(S20680C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20680C7)");
    check_field_offset(lv, s20680c7f0, ABISELECT(8,4), "S20680C7.s20680c7f0");
    check_field_offset(lv, s20680c7f1, ABISELECT(16,8), "S20680C7.s20680c7f1");
    check_field_offset(lv, s20680c7f2, ABISELECT(208,148), "S20680C7.s20680c7f2");
    check_field_offset(lv, s20680c7f3, ABISELECT(216,152), "S20680C7.s20680c7f3");
    check_field_offset(lv, s20680c7f4, ABISELECT(224,160), "S20680C7.s20680c7f4");
    check_field_offset(lv, s20680c7f5, ABISELECT(232,164), "S20680C7.s20680c7f5");
    check_field_offset(lv, s20680c7f6, ABISELECT(240,168), "S20680C7.s20680c7f6");
    check_field_offset(lv, s20680c7f7, ABISELECT(248,172), "S20680C7.s20680c7f7");
    check_field_offset(lv, s20680c7f8, ABISELECT(264,180), "S20680C7.s20680c7f8");
    test_class_info(&lv, &cd_S20680C7);
    dp->~S20680C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20680C7(Test_S20680C7, "S20680C7", ABISELECT(272,184));

#else // __cplusplus

extern void _ZN8S20680C7C1Ev();
extern void _ZN8S20680C7D1Ev();
Name_Map name_map_S20680C7[] = {
  NSPAIR(_ZN8S20680C7C1Ev),
  NSPAIR(_ZN8S20680C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20680C7[];
extern void _ZN8S20680C72v8Ev();
static  VTBL_ENTRY vtc_S20680C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C7[0]),
  (VTBL_ENTRY)&_ZN8S20680C72v8Ev,
};
extern VTBL_ENTRY _ZTI8S20680C7[];
extern  VTBL_ENTRY _ZTV8S20680C7[];
Class_Descriptor cd_S20680C7 = {  "S20680C7", // class name
  0,0,//no base classes
  &(vtc_S20680C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,184), // object size
  NSPAIRA(_ZTI8S20680C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20680C7),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  S20680C9  : S20680C4 {
  __tsi64 s20680c9f0;
  char s20680c9f1[7];
  void *s20680c9f2;
  int s20680c9f3;
  ::S20677C6_nt s20680c9f4;
  ::S20677C6_nt s20680c9f5;
  char s20680c9f6[10];
  virtual void  v9(); // _ZN8S20680C92v9Ev
  ~S20680C9(); // tgen
  S20680C9(); // tgen
};
//SIG(-1 S20680C9) C1{ BC2{ VBC3{ m Fp FL[4] Fs} FD Fi FC3 FC3} v1 FL Fc[7] Fp Fi FC4{} FC4 Fc[10]}


void  S20680C9 ::v9(){vfunc_called(this, "_ZN8S20680C92v9Ev");}
S20680C9 ::~S20680C9(){ note_dtor("S20680C9", this);} // tgen
S20680C9 ::S20680C9(){ note_ctor("S20680C9", this);} // tgen

static void Test_S20680C9()
{
  extern Class_Descriptor cd_S20680C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,45)];
    init_test(&cd_S20680C9, buf);
    S20680C9 *dp, &lv = *(dp=new (buf) S20680C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,176), "sizeof(S20680C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20680C9)");
    check_base_class_offset(lv, (S20677C3*)(S20680C4*), ABISELECT(176,136), "S20680C9");
    check_base_class_offset(lv, (S20680C4*), 0, "S20680C9");
    check_field_offset(lv, s20680c9f0, ABISELECT(136,100), "S20680C9.s20680c9f0");
    check_field_offset(lv, s20680c9f1, ABISELECT(144,108), "S20680C9.s20680c9f1");
    check_field_offset(lv, s20680c9f2, ABISELECT(152,116), "S20680C9.s20680c9f2");
    check_field_offset(lv, s20680c9f3, ABISELECT(160,120), "S20680C9.s20680c9f3");
    check_field_offset(lv, s20680c9f4, ABISELECT(164,124), "S20680C9.s20680c9f4");
    check_field_offset(lv, s20680c9f5, ABISELECT(165,125), "S20680C9.s20680c9f5");
    check_field_offset(lv, s20680c9f6, ABISELECT(166,126), "S20680C9.s20680c9f6");
    test_class_info(&lv, &cd_S20680C9);
    dp->~S20680C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20680C9(Test_S20680C9, "S20680C9", ABISELECT(224,176));

#else // __cplusplus

extern void _ZN8S20680C9C1Ev();
extern void _ZN8S20680C9D1Ev();
Name_Map name_map_S20680C9[] = {
  NSPAIR(_ZN8S20680C9C1Ev),
  NSPAIR(_ZN8S20680C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
static Base_Class bases_S20680C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    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
    1, //immediately_derived
  0, 1},
  {&cd_S20680C4,    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 _ZTI8S20680C9[];
extern void _ZN8S20680C92v9Ev();
static  VTBL_ENTRY vtc_S20680C9[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C9[0]),
  (VTBL_ENTRY)&_ZN8S20680C92v9Ev,
};
extern VTBL_ENTRY _ZTV8S20680C9[];
static  VTBL_ENTRY _tg__ZTV8S20680C4__8S20680C9[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
static  VTT_ENTRY vtt_S20680C9[] = {
  {&(_ZTV8S20680C9[3]),  3,4},
  {&(_tg__ZTV8S20680C4__8S20680C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20680C9[];
extern  VTBL_ENTRY _ZTV8S20680C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C9[];
Class_Descriptor cd_S20680C9 = {  "S20680C9", // class name
  bases_S20680C9, 2,
  &(vtc_S20680C9[0]), // expected_vtbl_contents
  &(vtt_S20680C9[0]), // expected_vtt_contents
  ABISELECT(224,176), // object size
  NSPAIRA(_ZTI8S20680C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20680C9),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20680C9),2, //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  S20680C5  : S20680C6 , virtual S20680C2 , S20680C4 , virtual S20680C7 , virtual S20680C9 {
  long s20680c5f0;
  __tsi64 s20680c5f1;
  long double s20680c5f2;
  ::S20677C6_nt s20680c5f3;
  virtual void  v10(); // _ZN8S20680C53v10Ev
  ~S20680C5(); // tgen
  S20680C5(); // tgen
};
//SIG(-1 S20680C5) C1{ BC2{ VBC3{ m Fp FL[4] Fs} BC4{ VBC3 FD Fi FC3 FC3} v2 v3 v4 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC5{ VBC3 VBC4 v5 v6 Fi FC4 FL Fi Fp} BC4 VBC6{ v7 FC7{} FC4 FC7 FL FC7 Fp FC7 Fp[2] FC7} VBC8{ BC4 v8 FL Fc[7] Fp Fi FC7 FC7 Fc[10]} v1 Fl FL FD FC7}


void  S20680C5 ::v10(){vfunc_called(this, "_ZN8S20680C53v10Ev");}
S20680C5 ::~S20680C5(){ note_dtor("S20680C5", this);} // tgen
S20680C5 ::S20680C5(){ note_ctor("S20680C5", this);} // tgen

static void Test_S20680C5()
{
  extern Class_Descriptor cd_S20680C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(94,262)];
    init_test(&cd_S20680C5, buf);
    S20680C5 *dp, &lv = *(dp=new (buf) S20680C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1488,1044), "sizeof(S20680C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20680C5)");
    check_base_class_offset(lv, (S20677C3*)(S20680C6*), ABISELECT(600,420), "S20680C5");
    check_base_class_offset(lv, (S20677C3*)(S20680C4*)(S20680C6*), ABISELECT(600,420), "S20680C5");
    check_base_class_offset(lv, (S20677C3*)(S20680C2*), ABISELECT(600,420), "S20680C5");
    /*is_ambiguous_... S20680C5::S20680C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20680C4*), ABISELECT(600,420), "S20680C5");
    /*is_ambiguous_... S20680C5::S20680C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20680C4*), ABISELECT(600,420), "S20680C5");
    check_base_class_offset(lv, (S20677C3*)(S20680C4*)(S20680C9*), ABISELECT(600,420), "S20680C5");
    check_base_class_offset(lv, (S20680C4*)(S20680C6*), 0, "S20680C5");
    check_base_class_offset(lv, (S20680C6*), 0, "S20680C5");
    check_base_class_offset(lv, (S20680C4*)(S20680C2*), ABISELECT(896,624), "S20680C5");
    check_base_class_offset(lv, (S20680C2*), ABISELECT(656,460), "S20680C5");
    /*is_ambiguous_... S20680C5::S20680C4 */ AMB_check_base_class_offset(lv, (S20680C4*), ABISELECT(416,292), "S20680C5");
    check_base_class_offset(lv, (S20680C7*), ABISELECT(1040,724), "S20680C5");
    check_base_class_offset(lv, (S20680C4*)(S20680C9*), ABISELECT(1312,908), "S20680C5");
    check_base_class_offset(lv, (S20680C9*), ABISELECT(1312,908), "S20680C5");
    check_field_offset(lv, s20680c5f0, ABISELECT(552,392), "S20680C5.s20680c5f0");
    check_field_offset(lv, s20680c5f1, ABISELECT(560,396), "S20680C5.s20680c5f1");
    check_field_offset(lv, s20680c5f2, ABISELECT(576,404), "S20680C5.s20680c5f2");
    check_field_offset(lv, s20680c5f3, ABISELECT(592,416), "S20680C5.s20680c5f3");
    test_class_info(&lv, &cd_S20680C5);
    dp->~S20680C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20680C5(Test_S20680C5, "S20680C5", ABISELECT(1488,1044));

#else // __cplusplus

extern void _ZN8S20680C5C1Ev();
extern void _ZN8S20680C5D1Ev();
Name_Map name_map_S20680C5[] = {
  NSPAIR(_ZN8S20680C5C1Ev),
  NSPAIR(_ZN8S20680C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
extern Class_Descriptor cd_S20680C6;
extern VTBL_ENTRY _ZTI8S20680C6[];
extern  VTBL_ENTRY _ZTV8S20680C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C6[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
extern Class_Descriptor cd_S20680C2;
extern VTBL_ENTRY _ZTI8S20680C2[];
extern  VTBL_ENTRY _ZTV8S20680C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C2[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
extern Class_Descriptor cd_S20680C7;
extern VTBL_ENTRY _ZTI8S20680C7[];
extern  VTBL_ENTRY _ZTV8S20680C7[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
extern Class_Descriptor cd_S20680C9;
extern VTBL_ENTRY _ZTI8S20680C9[];
extern  VTBL_ENTRY _ZTV8S20680C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C9[];
static Base_Class bases_S20680C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(600,420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20680C4,    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
    2, //immediately_derived
  0, 0},
  {&cd_S20680C6,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20680C4,    ABISELECT(896,624), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20680C2,    ABISELECT(656,460), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20680C4,    ABISELECT(416,292), //bcp->offset
    11, //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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20680C7,    ABISELECT(1040,724), //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20680C4,    ABISELECT(1312,908), //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
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20680C9,    ABISELECT(1312,908), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20680C5[];
extern void _ZN8S20680C62v5Ev();
extern void _ZN8S20680C62v6Ev();
extern void _ZN8S20680C62v7Ev();
extern void _ZN8S20680C53v10Ev();
extern void _ZN8S20680C22v3Ev();
extern void _ZN8S20680C22v4Ev();
extern void _ZN8S20680C72v8Ev();
extern void _ZN8S20680C92v9Ev();
static  VTBL_ENTRY vtc_S20680C5[] = {
  ABISELECT(1312,908),
  ABISELECT(1040,724),
  ABISELECT(896,624),
  ABISELECT(656,460),
  ABISELECT(600,420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C5[0]),
  (VTBL_ENTRY)&_ZN8S20680C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20680C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20680C62v7Ev,
  (VTBL_ENTRY)&_ZN8S20680C53v10Ev,
  ABISELECT(184,128),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI8S20680C5[0]),
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-56,-40),
  ABISELECT(-656,-460),
  (VTBL_ENTRY)&(_ZTI8S20680C5[0]),
  (VTBL_ENTRY)&_ZN8S20680C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20680C22v4Ev,
  ABISELECT(-296,-204),
  ABISELECT(-896,-624),
  (VTBL_ENTRY)&(_ZTI8S20680C5[0]),
  0,
  ABISELECT(-1040,-724),
  (VTBL_ENTRY)&(_ZTI8S20680C5[0]),
  (VTBL_ENTRY)&_ZN8S20680C72v8Ev,
  0,
  ABISELECT(-712,-488),
  ABISELECT(-1312,-908),
  (VTBL_ENTRY)&(_ZTI8S20680C5[0]),
  (VTBL_ENTRY)&_ZN8S20680C92v9Ev,
};
extern VTBL_ENTRY _ZTV8S20680C5[];
extern void _ZN8S20680C62v5Ev();
extern void _ZN8S20680C62v6Ev();
extern void _ZN8S20680C62v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20680C6__8S20680C5[] = {
  ABISELECT(600,420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C6[0]),
  (VTBL_ENTRY)&_ZN8S20680C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20680C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20680C62v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20680C48S20680C6__8S20680C5[] = {
  ABISELECT(600,420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20680C4__A__8S20680C5[] = {
  ABISELECT(184,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
extern void _ZN8S20680C22v3Ev();
extern void _ZN8S20680C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20680C2__8S20680C5[] = {
  ABISELECT(240,164),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C2[0]),
  (VTBL_ENTRY)&_ZN8S20680C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20680C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20680C4__8S20680C2__8S20680C5[] = {
  ABISELECT(-296,-204),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI8S20680C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20680C4__A1__8S20680C5[] = {
  ABISELECT(-296,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
extern void _ZN8S20680C92v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20680C9__8S20680C5[] = {
  ABISELECT(-712,-488),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C9[0]),
  (VTBL_ENTRY)&_ZN8S20680C92v9Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20680C48S20680C9__A3__8S20680C5[] = {
  ABISELECT(-712,-488),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
static  VTT_ENTRY vtt_S20680C5[] = {
  {&(_ZTV8S20680C5[7]),  7,34},
  {&(_tg__ZTV8S20680C6__8S20680C5[3]),  3,6},
  {&(_tg__ZTV8S20680C48S20680C6__8S20680C5[3]),  3,3},
  {&(_tg__ZTV8S20680C4__A__8S20680C5[3]),  3,3},
  {&(_ZTV8S20680C5[20]),  20,34},
  {&(_ZTV8S20680C5[25]),  25,34},
  {&(_ZTV8S20680C5[14]),  14,34},
  {&(_ZTV8S20680C5[28]),  28,34},
  {&(_ZTV8S20680C5[33]),  33,34},
  {&(_tg__ZTV8S20680C2__8S20680C5[4]),  4,6},
  {&(_tg__ZTV8S20680C4__8S20680C2__8S20680C5[3]),  3,3},
  {&(_tg__ZTV8S20680C4__A1__8S20680C5[3]),  3,3},
  {&(_tg__ZTV8S20680C9__8S20680C5[3]),  3,4},
  {&(_tg__ZTV8S20680C48S20680C9__A3__8S20680C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20680C5[];
extern  VTBL_ENTRY _ZTV8S20680C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C5[];
Class_Descriptor cd_S20680C5 = {  "S20680C5", // class name
  bases_S20680C5, 9,
  &(vtc_S20680C5[0]), // expected_vtbl_contents
  &(vtt_S20680C5[0]), // expected_vtt_contents
  ABISELECT(1488,1044), // object size
  NSPAIRA(_ZTI8S20680C5),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20680C5),34, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20680C5),14, //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  S20680C11  : S20677C3 {
  ::S20677C3 s20680c11f0;
  int s20680c11f1;
  long double s20680c11f2;
  int s20680c11f3;
  __tsi64 s20680c11f4;
  long s20680c11f5;
};
//SIG(-1 S20680C11) C1{ BC2{ m Fp FL[4] Fs} FC2 Fi FD Fi FL Fl}



static void Test_S20680C11()
{
  extern Class_Descriptor cd_S20680C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S20680C11, buf);
    S20680C11 &lv = *(new (buf) S20680C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20680C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20680C11)");
    check_base_class_offset(lv, (S20677C3*), 0, "S20680C11");
    check_field_offset(lv, s20680c11f0, ABISELECT(48,40), "S20680C11.s20680c11f0");
    check_field_offset(lv, s20680c11f1, ABISELECT(96,80), "S20680C11.s20680c11f1");
    check_field_offset(lv, s20680c11f2, ABISELECT(112,84), "S20680C11.s20680c11f2");
    check_field_offset(lv, s20680c11f3, ABISELECT(128,96), "S20680C11.s20680c11f3");
    check_field_offset(lv, s20680c11f4, ABISELECT(136,100), "S20680C11.s20680c11f4");
    check_field_offset(lv, s20680c11f5, ABISELECT(144,108), "S20680C11.s20680c11f5");
    test_class_info(&lv, &cd_S20680C11);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20680C11(Test_S20680C11, "S20680C11", ABISELECT(160,112));

#else // __cplusplus

extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20680C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20680C11[];
Class_Descriptor cd_S20680C11 = {  "S20680C11", // class name
  bases_S20680C11, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI9S20680C11),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  S20680C10  : virtual S20680C7 , S20680C4 , S20680C11 {
  void *s20680c10f0;
  ::S20680C11 s20680c10f1;
  void *s20680c10f2;
  int s20680c10f3[2];
  long double s20680c10f4;
  int s20680c10f5[2];
  virtual void  v11(); // _ZN9S20680C103v11Ev
  ~S20680C10(); // tgen
  S20680C10(); // tgen
};
//SIG(-1 S20680C10) C1{ VBC2{ v2 FC3{} FC4{ VBC5{ m Fp FL[4] Fs} FD Fi FC5 FC5} FC3 FL FC3 Fp FC3 Fp[2] FC3} BC4 BC6{ BC5 FC5 Fi FD Fi FL Fl} v1 Fp FC6 Fp Fi[2] FD Fi[2]}


void  S20680C10 ::v11(){vfunc_called(this, "_ZN9S20680C103v11Ev");}
S20680C10 ::~S20680C10(){ note_dtor("S20680C10", this);} // tgen
S20680C10 ::S20680C10(){ note_ctor("S20680C10", this);} // tgen

static void Test_S20680C10()
{
  extern Class_Descriptor cd_S20680C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(53,147)];
    init_test(&cd_S20680C10, buf);
    S20680C10 *dp, &lv = *(dp=new (buf) S20680C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(832,584), "sizeof(S20680C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20680C10)");
    check_base_class_offset(lv, (S20680C7*), ABISELECT(512,360), "S20680C10");
    check_base_class_offset(lv, (S20677C3*)(S20680C4*), ABISELECT(784,544), "S20680C10");
    check_base_class_offset(lv, (S20680C4*), 0, "S20680C10");
    check_base_class_offset(lv, (S20677C3*)(S20680C11*), ABISELECT(144,100), "S20680C10");
    check_base_class_offset(lv, (S20680C11*), ABISELECT(144,100), "S20680C10");
    check_field_offset(lv, s20680c10f0, ABISELECT(296,212), "S20680C10.s20680c10f0");
    check_field_offset(lv, s20680c10f1, ABISELECT(304,216), "S20680C10.s20680c10f1");
    check_field_offset(lv, s20680c10f2, ABISELECT(464,328), "S20680C10.s20680c10f2");
    check_field_offset(lv, s20680c10f3, ABISELECT(472,332), "S20680C10.s20680c10f3");
    check_field_offset(lv, s20680c10f4, ABISELECT(480,340), "S20680C10.s20680c10f4");
    check_field_offset(lv, s20680c10f5, ABISELECT(496,352), "S20680C10.s20680c10f5");
    test_class_info(&lv, &cd_S20680C10);
    dp->~S20680C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20680C10(Test_S20680C10, "S20680C10", ABISELECT(832,584));

#else // __cplusplus

extern void _ZN9S20680C10C1Ev();
extern void _ZN9S20680C10D1Ev();
Name_Map name_map_S20680C10[] = {
  NSPAIR(_ZN9S20680C10C1Ev),
  NSPAIR(_ZN9S20680C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20680C7;
extern VTBL_ENTRY _ZTI8S20680C7[];
extern  VTBL_ENTRY _ZTV8S20680C7[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20680C11;
extern VTBL_ENTRY _ZTI9S20680C11[];
static Base_Class bases_S20680C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20680C7,    ABISELECT(512,360), //bcp->offset
    5, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C3,    ABISELECT(784,544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20680C4,    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_S20677C3,    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
    4, //immediately_derived
  0, 0},
  {&cd_S20680C11,    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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20680C10[];
extern void _ZN9S20680C103v11Ev();
extern void _ZN8S20680C72v8Ev();
static  VTBL_ENTRY vtc_S20680C10[] = {
  ABISELECT(512,360),
  ABISELECT(784,544),
  0,
  (VTBL_ENTRY)&(_ZTI9S20680C10[0]),
  (VTBL_ENTRY)&_ZN9S20680C103v11Ev,
  0,
  ABISELECT(-512,-360),
  (VTBL_ENTRY)&(_ZTI9S20680C10[0]),
  (VTBL_ENTRY)&_ZN8S20680C72v8Ev,
};
extern VTBL_ENTRY _ZTV9S20680C10[];
static  VTBL_ENTRY _tg__ZTV8S20680C4__9S20680C10[] = {
  ABISELECT(784,544),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
static  VTT_ENTRY vtt_S20680C10[] = {
  {&(_ZTV9S20680C10[4]),  4,9},
  {&(_tg__ZTV8S20680C4__9S20680C10[3]),  3,3},
  {&(_ZTV9S20680C10[8]),  8,9},
};
extern VTBL_ENTRY _ZTI9S20680C10[];
extern  VTBL_ENTRY _ZTV9S20680C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20680C10[];
Class_Descriptor cd_S20680C10 = {  "S20680C10", // class name
  bases_S20680C10, 5,
  &(vtc_S20680C10[0]), // expected_vtbl_contents
  &(vtt_S20680C10[0]), // expected_vtt_contents
  ABISELECT(832,584), // object size
  NSPAIRA(_ZTI9S20680C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20680C10),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20680C10),3, //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  S20680C1  : virtual S20680C2 , virtual S20680C5 , S20680C10 {
  long s20680c1f0;
  ::S20677C6_nt s20680c1f1;
  void *s20680c1f2;
  __tsi64 s20680c1f3;
  long double s20680c1f4;
  int s20680c1f5;
  __tsi64 s20680c1f6;
  ::S20678C14 s20680c1f7;
  void *s20680c1f8[9];
  virtual void  v1(); // _ZN8S20680C12v1Ev
  virtual void  v2(); // _ZN8S20680C12v2Ev
  ~S20680C1(); // tgen
  S20680C1(); // tgen
};
//SIG(1 S20680C1) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} VBC4{ VBC3 FD Fi FC3 FC3} v3 v4 Fi FC4 FL Fi Fp} VBC5{ BC6{ VBC3 BC4 v5 v6 v7 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC2 BC4 VBC7{ v8 FC8{} FC4 FC8 FL FC8 Fp FC8 Fp[2] FC8} VBC9{ BC4 v9 FL Fc[7] Fp Fi FC8 FC8 Fc[10]} v10 Fl FL FD FC8} BC10{ VBC7 BC4 BC11{ BC3 FC3 Fi FD Fi FL Fl} v11 Fp FC11 Fp Fi[2] FD Fi[2]} v1 v2 Fl FC8 Fp FL FD Fi FL FC12{ BC13{ BC14{ VBC3 BC15{ VBC3 FD Fi FC3 FC3} v12 v13 v14 Fs FL Fc Fi[2] FC15 Fp FL Fi FL Fi} VBC16{ VBC3 VBC15 v15 v16 Fi FC15 FL Fi Fp} BC15 VBC17{ v17 FC8 FC15 FC8 FL FC8 Fp FC8 Fp[2] FC8} VBC18{ BC15 v18 FL Fc[7] Fp Fi FC8 FC8 Fc[10]} v19 Fl FL FD FC8} BC19{ VBC17 v20 FC13 FC8 FL Fi[2]} BC20{ VBC15 BC21{ VBC14 VBC22{ VBC3 VBC14 v21 v22 v23 FL FC8 Fp Fc[2] FC3 Fl FC8} VBC16 v24 v25 FC8 FC8 Fi FC15 FC8 FC8 FC17 FC22 Fp FC8} BC16 Fi Fc:2 FC8 Fi} Fp FL Fi Fp Fi[3] Fc FL Fp FD} Fp[9]}


void  S20680C1 ::v1(){vfunc_called(this, "_ZN8S20680C12v1Ev");}
void  S20680C1 ::v2(){vfunc_called(this, "_ZN8S20680C12v2Ev");}
S20680C1 ::~S20680C1(){ note_dtor("S20680C1", this);} // tgen
S20680C1 ::S20680C1(){ note_ctor("S20680C1", this);} // tgen

static void Test_S20680C1()
{
  extern Class_Descriptor cd_S20680C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(445,1238)];
    init_test(&cd_S20680C1, buf);
    S20680C1 *dp, &lv = *(dp=new (buf) S20680C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7104,4948), "sizeof(S20680C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20680C1)");
    check_base_class_offset(lv, (S20677C3*)(S20680C2*), ABISELECT(5848,4068), "S20680C1");
    /*is_ambiguous_... S20680C1::S20680C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20680C4*), ABISELECT(5848,4068), "S20680C1");
    check_base_class_offset(lv, (S20677C3*)(S20680C6*)(S20680C5*), ABISELECT(5848,4068), "S20680C1");
    check_base_class_offset(lv, (S20677C3*)(S20680C4*)(S20680C6*)(S20680C5*), ABISELECT(5848,4068), "S20680C1");
    /*is_ambiguous_... S20680C5::S20680C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20680C4*)(S20680C5*), ABISELECT(5848,4068), "S20680C1");
    check_base_class_offset(lv, (S20677C3*)(S20680C4*)(S20680C9*), ABISELECT(5848,4068), "S20680C1");
    check_base_class_offset(lv, (S20677C3*)(S20680C4*)(S20680C10*), ABISELECT(5848,4068), "S20680C1");
    check_base_class_offset(lv, (S20680C4*)(S20680C2*), ABISELECT(5904,4108), "S20680C1");
    check_base_class_offset(lv, (S20680C2*), ABISELECT(5616,3904), "S20680C1");
    check_base_class_offset(lv, (S20680C2*)(S20680C5*), ABISELECT(5616,3904), "S20680C1");
    check_base_class_offset(lv, (S20680C4*)(S20680C6*)(S20680C5*), ABISELECT(6048,4208), "S20680C1");
    check_base_class_offset(lv, (S20680C6*)(S20680C5*), ABISELECT(6048,4208), "S20680C1");
    /*is_ambiguous_... S20680C5::S20680C4 */ AMB_check_base_class_offset(lv, (S20680C4*)(S20680C5*), ABISELECT(6464,4500), "S20680C1");
    check_base_class_offset(lv, (S20680C7*)(S20680C5*), ABISELECT(6656,4628), "S20680C1");
    check_base_class_offset(lv, (S20680C7*)(S20680C10*), ABISELECT(6656,4628), "S20680C1");
    check_base_class_offset(lv, (S20680C4*)(S20680C9*), ABISELECT(6928,4812), "S20680C1");
    check_base_class_offset(lv, (S20680C9*)(S20680C5*), ABISELECT(6928,4812), "S20680C1");
    check_base_class_offset(lv, (S20680C5*), ABISELECT(6048,4208), "S20680C1");
    check_base_class_offset(lv, (S20680C4*)(S20680C10*), 0, "S20680C1");
    check_base_class_offset(lv, (S20677C3*)(S20680C11*)(S20680C10*), ABISELECT(144,100), "S20680C1");
    check_base_class_offset(lv, (S20680C11*)(S20680C10*), ABISELECT(144,100), "S20680C1");
    check_base_class_offset(lv, (S20680C10*), 0, "S20680C1");
    check_field_offset(lv, s20680c1f0, ABISELECT(504,360), "S20680C1.s20680c1f0");
    check_field_offset(lv, s20680c1f1, ABISELECT(512,364), "S20680C1.s20680c1f1");
    check_field_offset(lv, s20680c1f2, ABISELECT(520,368), "S20680C1.s20680c1f2");
    check_field_offset(lv, s20680c1f3, ABISELECT(528,372), "S20680C1.s20680c1f3");
    check_field_offset(lv, s20680c1f4, ABISELECT(544,380), "S20680C1.s20680c1f4");
    check_field_offset(lv, s20680c1f5, ABISELECT(560,392), "S20680C1.s20680c1f5");
    check_field_offset(lv, s20680c1f6, ABISELECT(568,396), "S20680C1.s20680c1f6");
    check_field_offset(lv, s20680c1f7, ABISELECT(576,404), "S20680C1.s20680c1f7");
    check_field_offset(lv, s20680c1f8, ABISELECT(5536,3868), "S20680C1.s20680c1f8");
    test_class_info(&lv, &cd_S20680C1);
    dp->~S20680C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20680C1(Test_S20680C1, "S20680C1", ABISELECT(7104,4948));

#else // __cplusplus

extern void _ZN8S20680C1C1Ev();
extern void _ZN8S20680C1D1Ev();
Name_Map name_map_S20680C1[] = {
  NSPAIR(_ZN8S20680C1C1Ev),
  NSPAIR(_ZN8S20680C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
extern Class_Descriptor cd_S20680C2;
extern VTBL_ENTRY _ZTI8S20680C2[];
extern  VTBL_ENTRY _ZTV8S20680C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C2[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
extern Class_Descriptor cd_S20680C6;
extern VTBL_ENTRY _ZTI8S20680C6[];
extern  VTBL_ENTRY _ZTV8S20680C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C6[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
extern Class_Descriptor cd_S20680C7;
extern VTBL_ENTRY _ZTI8S20680C7[];
extern  VTBL_ENTRY _ZTV8S20680C7[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
extern Class_Descriptor cd_S20680C9;
extern VTBL_ENTRY _ZTI8S20680C9[];
extern  VTBL_ENTRY _ZTV8S20680C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C9[];
extern Class_Descriptor cd_S20680C5;
extern VTBL_ENTRY _ZTI8S20680C5[];
extern  VTBL_ENTRY _ZTV8S20680C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C5[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20680C11;
extern VTBL_ENTRY _ZTI9S20680C11[];
extern Class_Descriptor cd_S20680C10;
extern VTBL_ENTRY _ZTI9S20680C10[];
extern  VTBL_ENTRY _ZTV9S20680C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20680C10[];
static Base_Class bases_S20680C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(5848,4068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20680C4,    ABISELECT(5904,4108), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20680C2,    ABISELECT(5616,3904), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20680C4,    ABISELECT(6048,4208), //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
    4, //immediately_derived
  0, 0},
  {&cd_S20680C6,    ABISELECT(6048,4208), //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
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20680C4,    ABISELECT(6464,4500), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20680C7,    ABISELECT(6656,4628), //bcp->offset
    40, //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
    9, //immediately_derived
  0, 1},
  {&cd_S20680C4,    ABISELECT(6928,4812), //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
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20680C9,    ABISELECT(6928,4812), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20680C5,    ABISELECT(6048,4208), //bcp->offset
    22, //bcp->virtual_function_table_offset
    11, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20680C4,    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
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20677C3,    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
    12, //immediately_derived
  0, 0},
  {&cd_S20680C11,    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
    13, //immediately_derived
  0, 0},
  {&cd_S20680C10,    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
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20680C1[];
extern void _ZN9S20680C103v11Ev();
extern void _ZN8S20680C12v1Ev();
extern void _ZN8S20680C12v2Ev();
extern void _ZN8S20680C22v3Ev();
extern void _ZN8S20680C22v4Ev();
extern void _ZN8S20680C62v5Ev();
extern void _ZN8S20680C62v6Ev();
extern void _ZN8S20680C62v7Ev();
extern void _ZN8S20680C53v10Ev();
extern void _ZN8S20680C72v8Ev();
extern void _ZN8S20680C92v9Ev();
static  VTBL_ENTRY vtc_S20680C1[] = {
  ABISELECT(6928,4812),
  ABISELECT(6048,4208),
  ABISELECT(5904,4108),
  ABISELECT(5616,3904),
  ABISELECT(6656,4628),
  ABISELECT(5848,4068),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C1[0]),
  (VTBL_ENTRY)&_ZN9S20680C103v11Ev,
  (VTBL_ENTRY)&_ZN8S20680C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20680C12v2Ev,
  0,
  0,
  ABISELECT(288,204),
  ABISELECT(232,164),
  ABISELECT(-5616,-3904),
  (VTBL_ENTRY)&(_ZTI8S20680C1[0]),
  (VTBL_ENTRY)&_ZN8S20680C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20680C22v4Ev,
  ABISELECT(-56,-40),
  ABISELECT(-5904,-4108),
  (VTBL_ENTRY)&(_ZTI8S20680C1[0]),
  0,
  0,
  0,
  0,
  ABISELECT(880,604),
  ABISELECT(608,420),
  ABISELECT(-144,-100),
  ABISELECT(-432,-304),
  ABISELECT(-200,-140),
  ABISELECT(-6048,-4208),
  (VTBL_ENTRY)&(_ZTI8S20680C1[0]),
  (VTBL_ENTRY)&_ZN8S20680C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20680C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20680C62v7Ev,
  (VTBL_ENTRY)&_ZN8S20680C53v10Ev,
  ABISELECT(-616,-432),
  ABISELECT(-6464,-4500),
  (VTBL_ENTRY)&(_ZTI8S20680C1[0]),
  0,
  ABISELECT(-6656,-4628),
  (VTBL_ENTRY)&(_ZTI8S20680C1[0]),
  (VTBL_ENTRY)&_ZN8S20680C72v8Ev,
  0,
  ABISELECT(-1080,-744),
  ABISELECT(-6928,-4812),
  (VTBL_ENTRY)&(_ZTI8S20680C1[0]),
  (VTBL_ENTRY)&_ZN8S20680C92v9Ev,
};
extern VTBL_ENTRY _ZTV8S20680C1[];
extern void _ZN9S20680C103v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20680C10__8S20680C1[] = {
  ABISELECT(6656,4628),
  ABISELECT(5848,4068),
  0,
  (VTBL_ENTRY)&(_ZTI9S20680C10[0]),
  (VTBL_ENTRY)&_ZN9S20680C103v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20680C49S20680C10__A4__8S20680C1[] = {
  ABISELECT(5848,4068),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
extern void _ZN8S20680C72v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20680C7__9S20680C10__8S20680C1[] = {
  0,
  ABISELECT(-6656,-4628),
  (VTBL_ENTRY)&(_ZTI9S20680C10[0]),
  (VTBL_ENTRY)&_ZN8S20680C72v8Ev,
};
extern void _ZN8S20680C22v3Ev();
extern void _ZN8S20680C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20680C2__8S20680C1[] = {
  ABISELECT(288,204),
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C2[0]),
  (VTBL_ENTRY)&_ZN8S20680C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20680C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20680C4__8S20680C2__8S20680C1[] = {
  ABISELECT(-56,-40),
  ABISELECT(-288,-204),
  (VTBL_ENTRY)&(_ZTI8S20680C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20680C4__8S20680C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
extern void _ZN8S20680C62v5Ev();
extern void _ZN8S20680C62v6Ev();
extern void _ZN8S20680C62v7Ev();
extern void _ZN8S20680C53v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20680C5__8S20680C1[] = {
  ABISELECT(880,604),
  ABISELECT(608,420),
  ABISELECT(-144,-100),
  ABISELECT(-432,-304),
  ABISELECT(-200,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C5[0]),
  (VTBL_ENTRY)&_ZN8S20680C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20680C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20680C62v7Ev,
  (VTBL_ENTRY)&_ZN8S20680C53v10Ev,
};
extern void _ZN8S20680C62v5Ev();
extern void _ZN8S20680C62v6Ev();
extern void _ZN8S20680C62v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20680C68S20680C5__8S20680C1[] = {
  ABISELECT(-200,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C6[0]),
  (VTBL_ENTRY)&_ZN8S20680C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20680C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20680C62v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20680C48S20680C68S20680C5__A1__8S20680C1[] = {
  ABISELECT(-200,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20680C48S20680C5__A2__8S20680C1[] = {
  ABISELECT(-616,-432),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
extern void _ZN8S20680C22v3Ev();
extern void _ZN8S20680C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20680C2__8S20680C5__8S20680C1[] = {
  0,
  0,
  ABISELECT(288,204),
  ABISELECT(232,164),
  ABISELECT(432,304),
  (VTBL_ENTRY)&(_ZTI8S20680C5[0]),
  (VTBL_ENTRY)&_ZN8S20680C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20680C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20680C4__A1__8S20680C5__8S20680C1[] = {
  ABISELECT(-56,-40),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI8S20680C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20680C4__A__8S20680C5__8S20680C1[] = {
  ABISELECT(-616,-432),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI8S20680C5[0]),
};
extern void _ZN8S20680C72v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20680C7__8S20680C5__8S20680C1[] = {
  0,
  ABISELECT(-608,-420),
  (VTBL_ENTRY)&(_ZTI8S20680C5[0]),
  (VTBL_ENTRY)&_ZN8S20680C72v8Ev,
};
extern void _ZN8S20680C92v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20680C9__8S20680C5__8S20680C1[] = {
  0,
  ABISELECT(-1080,-744),
  ABISELECT(-880,-604),
  (VTBL_ENTRY)&(_ZTI8S20680C5[0]),
  (VTBL_ENTRY)&_ZN8S20680C92v9Ev,
};
extern void _ZN8S20680C92v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20680C9__8S20680C1[] = {
  ABISELECT(-1080,-744),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C9[0]),
  (VTBL_ENTRY)&_ZN8S20680C92v9Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20680C48S20680C9__A3__8S20680C1[] = {
  ABISELECT(-1080,-744),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
static  VTT_ENTRY vtt_S20680C1[] = {
  {&(_ZTV8S20680C1[8]),  8,49},
  {&(_tg__ZTV9S20680C10__8S20680C1[4]),  4,5},
  {&(_tg__ZTV8S20680C49S20680C10__A4__8S20680C1[3]),  3,3},
  {&(_tg__ZTV8S20680C7__9S20680C10__8S20680C1[3]),  3,4},
  {&(_ZTV8S20680C1[17]),  17,49},
  {&(_ZTV8S20680C1[22]),  22,49},
  {&(_ZTV8S20680C1[33]),  33,49},
  {&(_ZTV8S20680C1[40]),  40,49},
  {&(_ZTV8S20680C1[43]),  43,49},
  {&(_ZTV8S20680C1[48]),  48,49},
  {&(_tg__ZTV8S20680C2__8S20680C1[4]),  4,6},
  {&(_tg__ZTV8S20680C4__8S20680C2__8S20680C1[3]),  3,3},
  {&(_tg__ZTV8S20680C4__8S20680C1[3]),  3,3},
  {&(_tg__ZTV8S20680C5__8S20680C1[7]),  7,11},
  {&(_tg__ZTV8S20680C68S20680C5__8S20680C1[3]),  3,6},
  {&(_tg__ZTV8S20680C48S20680C68S20680C5__A1__8S20680C1[3]),  3,3},
  {&(_tg__ZTV8S20680C48S20680C5__A2__8S20680C1[3]),  3,3},
  {&(_tg__ZTV8S20680C2__8S20680C5__8S20680C1[6]),  6,8},
  {&(_tg__ZTV8S20680C4__A1__8S20680C5__8S20680C1[3]),  3,3},
  {&(_tg__ZTV8S20680C4__A__8S20680C5__8S20680C1[3]),  3,3},
  {&(_tg__ZTV8S20680C7__8S20680C5__8S20680C1[3]),  3,4},
  {&(_tg__ZTV8S20680C9__8S20680C5__8S20680C1[4]),  4,5},
  {&(_tg__ZTV8S20680C9__8S20680C1[3]),  3,4},
  {&(_tg__ZTV8S20680C48S20680C9__A3__8S20680C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20680C1[];
extern  VTBL_ENTRY _ZTV8S20680C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C1[];
Class_Descriptor cd_S20680C1 = {  "S20680C1", // class name
  bases_S20680C1, 14,
  &(vtc_S20680C1[0]), // expected_vtbl_contents
  &(vtt_S20680C1[0]), // expected_vtt_contents
  ABISELECT(7104,4948), // object size
  NSPAIRA(_ZTI8S20680C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20680C1),49, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20680C1),24, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20679C4  : virtual S20677C3 {
  long double s20679c4f0;
  int s20679c4f1;
  ::S20677C3 s20679c4f2;
  ::S20677C3 s20679c4f3;
  ~S20679C4(); // tgen
  S20679C4(); // tgen
};
//SIG(-1 S20679C4) C1{ VBC2{ m Fp FL[4] Fs} FD Fi FC2 FC2}


S20679C4 ::~S20679C4(){ note_dtor("S20679C4", this);} // tgen
S20679C4 ::S20679C4(){ note_ctor("S20679C4", this);} // tgen

static void Test_S20679C4()
{
  extern Class_Descriptor cd_S20679C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,36)];
    init_test(&cd_S20679C4, buf);
    S20679C4 *dp, &lv = *(dp=new (buf) S20679C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S20679C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20679C4)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(136,100), "S20679C4");
    check_field_offset(lv, s20679c4f0, ABISELECT(16,4), "S20679C4.s20679c4f0");
    check_field_offset(lv, s20679c4f1, ABISELECT(32,16), "S20679C4.s20679c4f1");
    check_field_offset(lv, s20679c4f2, ABISELECT(40,20), "S20679C4.s20679c4f2");
    check_field_offset(lv, s20679c4f3, ABISELECT(88,60), "S20679C4.s20679c4f3");
    test_class_info(&lv, &cd_S20679C4);
    dp->~S20679C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20679C4(Test_S20679C4, "S20679C4", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN8S20679C4C1Ev();
extern void _ZN8S20679C4D1Ev();
Name_Map name_map_S20679C4[] = {
  NSPAIR(_ZN8S20679C4C1Ev),
  NSPAIR(_ZN8S20679C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20679C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(136,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20679C4[];
static  VTBL_ENTRY vtc_S20679C4[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
extern VTBL_ENTRY _ZTV8S20679C4[];
static  VTT_ENTRY vtt_S20679C4[] = {
  {&(_ZTV8S20679C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
Class_Descriptor cd_S20679C4 = {  "S20679C4", // class name
  bases_S20679C4, 1,
  &(vtc_S20679C4[0]), // expected_vtbl_contents
  &(vtt_S20679C4[0]), // expected_vtt_contents
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI8S20679C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20679C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20679C4),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  S20679C2  : virtual S20677C3 , virtual S20679C4 {
  int s20679c2f0;
  ::S20679C4 s20679c2f1;
  __tsi64 s20679c2f2;
  int s20679c2f3;
  void *s20679c2f4;
  virtual void  v3(); // _ZN8S20679C22v3Ev
  virtual void  v4(); // _ZN8S20679C22v4Ev
  ~S20679C2(); // tgen
  S20679C2(); // tgen
};
//SIG(-1 S20679C2) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 FD Fi FC2 FC2} v1 v2 Fi FC3 FL Fi Fp}


void  S20679C2 ::v3(){vfunc_called(this, "_ZN8S20679C22v3Ev");}
void  S20679C2 ::v4(){vfunc_called(this, "_ZN8S20679C22v4Ev");}
S20679C2 ::~S20679C2(){ note_dtor("S20679C2", this);} // tgen
S20679C2 ::S20679C2(){ note_ctor("S20679C2", this);} // tgen

static void Test_S20679C2()
{
  extern Class_Descriptor cd_S20679C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,77)];
    init_test(&cd_S20679C2, buf);
    S20679C2 *dp, &lv = *(dp=new (buf) S20679C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,304), "sizeof(S20679C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20679C2)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(232,164), "S20679C2");
    check_base_class_offset(lv, (S20677C3*)(S20679C4*), ABISELECT(232,164), "S20679C2");
    check_base_class_offset(lv, (S20679C4*), ABISELECT(288,204), "S20679C2");
    check_field_offset(lv, s20679c2f0, ABISELECT(8,4), "S20679C2.s20679c2f0");
    check_field_offset(lv, s20679c2f1, ABISELECT(16,8), "S20679C2.s20679c2f1");
    check_field_offset(lv, s20679c2f2, ABISELECT(208,148), "S20679C2.s20679c2f2");
    check_field_offset(lv, s20679c2f3, ABISELECT(216,156), "S20679C2.s20679c2f3");
    check_field_offset(lv, s20679c2f4, ABISELECT(224,160), "S20679C2.s20679c2f4");
    test_class_info(&lv, &cd_S20679C2);
    dp->~S20679C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20679C2(Test_S20679C2, "S20679C2", ABISELECT(432,304));

#else // __cplusplus

extern void _ZN8S20679C2C1Ev();
extern void _ZN8S20679C2D1Ev();
Name_Map name_map_S20679C2[] = {
  NSPAIR(_ZN8S20679C2C1Ev),
  NSPAIR(_ZN8S20679C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
static Base_Class bases_S20679C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(232,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_S20679C4,    ABISELECT(288,204), //bcp->offset
    6, //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 _ZTI8S20679C2[];
extern void _ZN8S20679C22v3Ev();
extern void _ZN8S20679C22v4Ev();
static  VTBL_ENTRY vtc_S20679C2[] = {
  ABISELECT(288,204),
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C2[0]),
  (VTBL_ENTRY)&_ZN8S20679C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20679C22v4Ev,
  ABISELECT(-56,-40),
  ABISELECT(-288,-204),
  (VTBL_ENTRY)&(_ZTI8S20679C2[0]),
};
extern VTBL_ENTRY _ZTV8S20679C2[];
static  VTBL_ENTRY _tg__ZTV8S20679C4__8S20679C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
static  VTT_ENTRY vtt_S20679C2[] = {
  {&(_ZTV8S20679C2[4]),  4,9},
  {&(_ZTV8S20679C2[9]),  9,9},
  {&(_tg__ZTV8S20679C4__8S20679C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20679C2[];
extern  VTBL_ENTRY _ZTV8S20679C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C2[];
Class_Descriptor cd_S20679C2 = {  "S20679C2", // class name
  bases_S20679C2, 2,
  &(vtc_S20679C2[0]), // expected_vtbl_contents
  &(vtt_S20679C2[0]), // expected_vtt_contents
  ABISELECT(432,304), // object size
  NSPAIRA(_ZTI8S20679C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20679C2),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20679C2),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  S20679C6  : virtual S20677C3 , S20679C4 {
  short s20679c6f0;
  __tsi64 s20679c6f1;
  char s20679c6f2;
  int s20679c6f3[2];
  ::S20679C4 s20679c6f4;
  void *s20679c6f5;
  __tsi64 s20679c6f6;
  int s20679c6f7;
  __tsi64 s20679c6f8;
  int s20679c6f9;
  virtual void  v5(); // _ZN8S20679C62v5Ev
  virtual void  v6(); // _ZN8S20679C62v6Ev
  virtual void  v7(); // _ZN8S20679C62v7Ev
  ~S20679C6(); // tgen
  S20679C6(); // tgen
};
//SIG(-1 S20679C6) C1{ VBC2{ m Fp FL[4] Fs} BC3{ VBC2 FD Fi FC2 FC2} v1 v2 v3 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi}


void  S20679C6 ::v5(){vfunc_called(this, "_ZN8S20679C62v5Ev");}
void  S20679C6 ::v6(){vfunc_called(this, "_ZN8S20679C62v6Ev");}
void  S20679C6 ::v7(){vfunc_called(this, "_ZN8S20679C62v7Ev");}
S20679C6 ::~S20679C6(){ note_dtor("S20679C6", this);} // tgen
S20679C6 ::S20679C6(){ note_ctor("S20679C6", this);} // tgen

static void Test_S20679C6()
{
  extern Class_Descriptor cd_S20679C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,84)];
    init_test(&cd_S20679C6, buf);
    S20679C6 *dp, &lv = *(dp=new (buf) S20679C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,332), "sizeof(S20679C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20679C6)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(408,292), "S20679C6");
    check_base_class_offset(lv, (S20677C3*)(S20679C4*), ABISELECT(408,292), "S20679C6");
    check_base_class_offset(lv, (S20679C4*), 0, "S20679C6");
    check_field_offset(lv, s20679c6f0, ABISELECT(136,100), "S20679C6.s20679c6f0");
    check_field_offset(lv, s20679c6f1, ABISELECT(144,104), "S20679C6.s20679c6f1");
    check_field_offset(lv, s20679c6f2, ABISELECT(152,112), "S20679C6.s20679c6f2");
    check_field_offset(lv, s20679c6f3, ABISELECT(156,116), "S20679C6.s20679c6f3");
    check_field_offset(lv, s20679c6f4, ABISELECT(176,124), "S20679C6.s20679c6f4");
    check_field_offset(lv, s20679c6f5, ABISELECT(368,264), "S20679C6.s20679c6f5");
    check_field_offset(lv, s20679c6f6, ABISELECT(376,268), "S20679C6.s20679c6f6");
    check_field_offset(lv, s20679c6f7, ABISELECT(384,276), "S20679C6.s20679c6f7");
    check_field_offset(lv, s20679c6f8, ABISELECT(392,280), "S20679C6.s20679c6f8");
    check_field_offset(lv, s20679c6f9, ABISELECT(400,288), "S20679C6.s20679c6f9");
    test_class_info(&lv, &cd_S20679C6);
    dp->~S20679C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20679C6(Test_S20679C6, "S20679C6", ABISELECT(464,332));

#else // __cplusplus

extern void _ZN8S20679C6C1Ev();
extern void _ZN8S20679C6D1Ev();
Name_Map name_map_S20679C6[] = {
  NSPAIR(_ZN8S20679C6C1Ev),
  NSPAIR(_ZN8S20679C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
static Base_Class bases_S20679C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(408,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20679C4,    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 _ZTI8S20679C6[];
extern void _ZN8S20679C62v5Ev();
extern void _ZN8S20679C62v6Ev();
extern void _ZN8S20679C62v7Ev();
static  VTBL_ENTRY vtc_S20679C6[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C6[0]),
  (VTBL_ENTRY)&_ZN8S20679C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20679C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20679C62v7Ev,
};
extern VTBL_ENTRY _ZTV8S20679C6[];
static  VTBL_ENTRY _tg__ZTV8S20679C4__8S20679C6[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
static  VTT_ENTRY vtt_S20679C6[] = {
  {&(_ZTV8S20679C6[3]),  3,6},
  {&(_tg__ZTV8S20679C4__8S20679C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20679C6[];
extern  VTBL_ENTRY _ZTV8S20679C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C6[];
Class_Descriptor cd_S20679C6 = {  "S20679C6", // class name
  bases_S20679C6, 2,
  &(vtc_S20679C6[0]), // expected_vtbl_contents
  &(vtt_S20679C6[0]), // expected_vtt_contents
  ABISELECT(464,332), // object size
  NSPAIRA(_ZTI8S20679C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20679C6),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20679C6),2, //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  S20679C7  {
  ::S20677C6_nt s20679c7f0;
  ::S20679C4 s20679c7f1;
  ::S20677C6_nt s20679c7f2;
  __tsi64 s20679c7f3;
  ::S20677C6_nt s20679c7f4;
  void *s20679c7f5;
  ::S20677C6_nt s20679c7f6;
  void *s20679c7f7[2];
  ::S20677C6_nt s20679c7f8;
  virtual void  v8(); // _ZN8S20679C72v8Ev
  ~S20679C7(); // tgen
  S20679C7(); // tgen
};
//SIG(-1 S20679C7) C1{ v1 FC2{} FC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} FC2 FL FC2 Fp FC2 Fp[2] FC2}


void  S20679C7 ::v8(){vfunc_called(this, "_ZN8S20679C72v8Ev");}
S20679C7 ::~S20679C7(){ note_dtor("S20679C7", this);} // tgen
S20679C7 ::S20679C7(){ note_ctor("S20679C7", this);} // tgen

static void Test_S20679C7()
{
  extern Class_Descriptor cd_S20679C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,47)];
    init_test(&cd_S20679C7, buf);
    S20679C7 *dp, &lv = *(dp=new (buf) S20679C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,184), "sizeof(S20679C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20679C7)");
    check_field_offset(lv, s20679c7f0, ABISELECT(8,4), "S20679C7.s20679c7f0");
    check_field_offset(lv, s20679c7f1, ABISELECT(16,8), "S20679C7.s20679c7f1");
    check_field_offset(lv, s20679c7f2, ABISELECT(208,148), "S20679C7.s20679c7f2");
    check_field_offset(lv, s20679c7f3, ABISELECT(216,152), "S20679C7.s20679c7f3");
    check_field_offset(lv, s20679c7f4, ABISELECT(224,160), "S20679C7.s20679c7f4");
    check_field_offset(lv, s20679c7f5, ABISELECT(232,164), "S20679C7.s20679c7f5");
    check_field_offset(lv, s20679c7f6, ABISELECT(240,168), "S20679C7.s20679c7f6");
    check_field_offset(lv, s20679c7f7, ABISELECT(248,172), "S20679C7.s20679c7f7");
    check_field_offset(lv, s20679c7f8, ABISELECT(264,180), "S20679C7.s20679c7f8");
    test_class_info(&lv, &cd_S20679C7);
    dp->~S20679C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20679C7(Test_S20679C7, "S20679C7", ABISELECT(272,184));

#else // __cplusplus

extern void _ZN8S20679C7C1Ev();
extern void _ZN8S20679C7D1Ev();
Name_Map name_map_S20679C7[] = {
  NSPAIR(_ZN8S20679C7C1Ev),
  NSPAIR(_ZN8S20679C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20679C7[];
extern void _ZN8S20679C72v8Ev();
static  VTBL_ENTRY vtc_S20679C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C7[0]),
  (VTBL_ENTRY)&_ZN8S20679C72v8Ev,
};
extern VTBL_ENTRY _ZTI8S20679C7[];
extern  VTBL_ENTRY _ZTV8S20679C7[];
Class_Descriptor cd_S20679C7 = {  "S20679C7", // class name
  0,0,//no base classes
  &(vtc_S20679C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,184), // object size
  NSPAIRA(_ZTI8S20679C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20679C7),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  S20679C9  : S20679C4 {
  __tsi64 s20679c9f0;
  char s20679c9f1[7];
  void *s20679c9f2;
  int s20679c9f3;
  ::S20677C6_nt s20679c9f4;
  ::S20677C6_nt s20679c9f5;
  char s20679c9f6[10];
  virtual void  v9(); // _ZN8S20679C92v9Ev
  ~S20679C9(); // tgen
  S20679C9(); // tgen
};
//SIG(-1 S20679C9) C1{ BC2{ VBC3{ m Fp FL[4] Fs} FD Fi FC3 FC3} v1 FL Fc[7] Fp Fi FC4{} FC4 Fc[10]}


void  S20679C9 ::v9(){vfunc_called(this, "_ZN8S20679C92v9Ev");}
S20679C9 ::~S20679C9(){ note_dtor("S20679C9", this);} // tgen
S20679C9 ::S20679C9(){ note_ctor("S20679C9", this);} // tgen

static void Test_S20679C9()
{
  extern Class_Descriptor cd_S20679C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,45)];
    init_test(&cd_S20679C9, buf);
    S20679C9 *dp, &lv = *(dp=new (buf) S20679C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,176), "sizeof(S20679C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20679C9)");
    check_base_class_offset(lv, (S20677C3*)(S20679C4*), ABISELECT(176,136), "S20679C9");
    check_base_class_offset(lv, (S20679C4*), 0, "S20679C9");
    check_field_offset(lv, s20679c9f0, ABISELECT(136,100), "S20679C9.s20679c9f0");
    check_field_offset(lv, s20679c9f1, ABISELECT(144,108), "S20679C9.s20679c9f1");
    check_field_offset(lv, s20679c9f2, ABISELECT(152,116), "S20679C9.s20679c9f2");
    check_field_offset(lv, s20679c9f3, ABISELECT(160,120), "S20679C9.s20679c9f3");
    check_field_offset(lv, s20679c9f4, ABISELECT(164,124), "S20679C9.s20679c9f4");
    check_field_offset(lv, s20679c9f5, ABISELECT(165,125), "S20679C9.s20679c9f5");
    check_field_offset(lv, s20679c9f6, ABISELECT(166,126), "S20679C9.s20679c9f6");
    test_class_info(&lv, &cd_S20679C9);
    dp->~S20679C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20679C9(Test_S20679C9, "S20679C9", ABISELECT(224,176));

#else // __cplusplus

extern void _ZN8S20679C9C1Ev();
extern void _ZN8S20679C9D1Ev();
Name_Map name_map_S20679C9[] = {
  NSPAIR(_ZN8S20679C9C1Ev),
  NSPAIR(_ZN8S20679C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
static Base_Class bases_S20679C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    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
    1, //immediately_derived
  0, 1},
  {&cd_S20679C4,    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 _ZTI8S20679C9[];
extern void _ZN8S20679C92v9Ev();
static  VTBL_ENTRY vtc_S20679C9[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C9[0]),
  (VTBL_ENTRY)&_ZN8S20679C92v9Ev,
};
extern VTBL_ENTRY _ZTV8S20679C9[];
static  VTBL_ENTRY _tg__ZTV8S20679C4__8S20679C9[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
static  VTT_ENTRY vtt_S20679C9[] = {
  {&(_ZTV8S20679C9[3]),  3,4},
  {&(_tg__ZTV8S20679C4__8S20679C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20679C9[];
extern  VTBL_ENTRY _ZTV8S20679C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C9[];
Class_Descriptor cd_S20679C9 = {  "S20679C9", // class name
  bases_S20679C9, 2,
  &(vtc_S20679C9[0]), // expected_vtbl_contents
  &(vtt_S20679C9[0]), // expected_vtt_contents
  ABISELECT(224,176), // object size
  NSPAIRA(_ZTI8S20679C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20679C9),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20679C9),2, //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  S20679C5  : S20679C6 , virtual S20679C2 , S20679C4 , virtual S20679C7 , virtual S20679C9 {
  long s20679c5f0;
  __tsi64 s20679c5f1;
  long double s20679c5f2;
  ::S20677C6_nt s20679c5f3;
  virtual void  v10(); // _ZN8S20679C53v10Ev
  ~S20679C5(); // tgen
  S20679C5(); // tgen
};
//SIG(-1 S20679C5) C1{ BC2{ VBC3{ m Fp FL[4] Fs} BC4{ VBC3 FD Fi FC3 FC3} v2 v3 v4 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC5{ VBC3 VBC4 v5 v6 Fi FC4 FL Fi Fp} BC4 VBC6{ v7 FC7{} FC4 FC7 FL FC7 Fp FC7 Fp[2] FC7} VBC8{ BC4 v8 FL Fc[7] Fp Fi FC7 FC7 Fc[10]} v1 Fl FL FD FC7}


void  S20679C5 ::v10(){vfunc_called(this, "_ZN8S20679C53v10Ev");}
S20679C5 ::~S20679C5(){ note_dtor("S20679C5", this);} // tgen
S20679C5 ::S20679C5(){ note_ctor("S20679C5", this);} // tgen

static void Test_S20679C5()
{
  extern Class_Descriptor cd_S20679C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(94,262)];
    init_test(&cd_S20679C5, buf);
    S20679C5 *dp, &lv = *(dp=new (buf) S20679C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1488,1044), "sizeof(S20679C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20679C5)");
    check_base_class_offset(lv, (S20677C3*)(S20679C6*), ABISELECT(600,420), "S20679C5");
    check_base_class_offset(lv, (S20677C3*)(S20679C4*)(S20679C6*), ABISELECT(600,420), "S20679C5");
    check_base_class_offset(lv, (S20677C3*)(S20679C2*), ABISELECT(600,420), "S20679C5");
    /*is_ambiguous_... S20679C5::S20679C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20679C4*), ABISELECT(600,420), "S20679C5");
    /*is_ambiguous_... S20679C5::S20679C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20679C4*), ABISELECT(600,420), "S20679C5");
    check_base_class_offset(lv, (S20677C3*)(S20679C4*)(S20679C9*), ABISELECT(600,420), "S20679C5");
    check_base_class_offset(lv, (S20679C4*)(S20679C6*), 0, "S20679C5");
    check_base_class_offset(lv, (S20679C6*), 0, "S20679C5");
    check_base_class_offset(lv, (S20679C4*)(S20679C2*), ABISELECT(896,624), "S20679C5");
    check_base_class_offset(lv, (S20679C2*), ABISELECT(656,460), "S20679C5");
    /*is_ambiguous_... S20679C5::S20679C4 */ AMB_check_base_class_offset(lv, (S20679C4*), ABISELECT(416,292), "S20679C5");
    check_base_class_offset(lv, (S20679C7*), ABISELECT(1040,724), "S20679C5");
    check_base_class_offset(lv, (S20679C4*)(S20679C9*), ABISELECT(1312,908), "S20679C5");
    check_base_class_offset(lv, (S20679C9*), ABISELECT(1312,908), "S20679C5");
    check_field_offset(lv, s20679c5f0, ABISELECT(552,392), "S20679C5.s20679c5f0");
    check_field_offset(lv, s20679c5f1, ABISELECT(560,396), "S20679C5.s20679c5f1");
    check_field_offset(lv, s20679c5f2, ABISELECT(576,404), "S20679C5.s20679c5f2");
    check_field_offset(lv, s20679c5f3, ABISELECT(592,416), "S20679C5.s20679c5f3");
    test_class_info(&lv, &cd_S20679C5);
    dp->~S20679C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20679C5(Test_S20679C5, "S20679C5", ABISELECT(1488,1044));

#else // __cplusplus

extern void _ZN8S20679C5C1Ev();
extern void _ZN8S20679C5D1Ev();
Name_Map name_map_S20679C5[] = {
  NSPAIR(_ZN8S20679C5C1Ev),
  NSPAIR(_ZN8S20679C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
extern Class_Descriptor cd_S20679C6;
extern VTBL_ENTRY _ZTI8S20679C6[];
extern  VTBL_ENTRY _ZTV8S20679C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C6[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
extern Class_Descriptor cd_S20679C2;
extern VTBL_ENTRY _ZTI8S20679C2[];
extern  VTBL_ENTRY _ZTV8S20679C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C2[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
extern Class_Descriptor cd_S20679C7;
extern VTBL_ENTRY _ZTI8S20679C7[];
extern  VTBL_ENTRY _ZTV8S20679C7[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
extern Class_Descriptor cd_S20679C9;
extern VTBL_ENTRY _ZTI8S20679C9[];
extern  VTBL_ENTRY _ZTV8S20679C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C9[];
static Base_Class bases_S20679C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(600,420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20679C4,    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
    2, //immediately_derived
  0, 0},
  {&cd_S20679C6,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20679C4,    ABISELECT(896,624), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20679C2,    ABISELECT(656,460), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20679C4,    ABISELECT(416,292), //bcp->offset
    11, //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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20679C7,    ABISELECT(1040,724), //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20679C4,    ABISELECT(1312,908), //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
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20679C9,    ABISELECT(1312,908), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20679C5[];
extern void _ZN8S20679C62v5Ev();
extern void _ZN8S20679C62v6Ev();
extern void _ZN8S20679C62v7Ev();
extern void _ZN8S20679C53v10Ev();
extern void _ZN8S20679C22v3Ev();
extern void _ZN8S20679C22v4Ev();
extern void _ZN8S20679C72v8Ev();
extern void _ZN8S20679C92v9Ev();
static  VTBL_ENTRY vtc_S20679C5[] = {
  ABISELECT(1312,908),
  ABISELECT(1040,724),
  ABISELECT(896,624),
  ABISELECT(656,460),
  ABISELECT(600,420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C5[0]),
  (VTBL_ENTRY)&_ZN8S20679C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20679C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20679C62v7Ev,
  (VTBL_ENTRY)&_ZN8S20679C53v10Ev,
  ABISELECT(184,128),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI8S20679C5[0]),
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-56,-40),
  ABISELECT(-656,-460),
  (VTBL_ENTRY)&(_ZTI8S20679C5[0]),
  (VTBL_ENTRY)&_ZN8S20679C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20679C22v4Ev,
  ABISELECT(-296,-204),
  ABISELECT(-896,-624),
  (VTBL_ENTRY)&(_ZTI8S20679C5[0]),
  0,
  ABISELECT(-1040,-724),
  (VTBL_ENTRY)&(_ZTI8S20679C5[0]),
  (VTBL_ENTRY)&_ZN8S20679C72v8Ev,
  0,
  ABISELECT(-712,-488),
  ABISELECT(-1312,-908),
  (VTBL_ENTRY)&(_ZTI8S20679C5[0]),
  (VTBL_ENTRY)&_ZN8S20679C92v9Ev,
};
extern VTBL_ENTRY _ZTV8S20679C5[];
extern void _ZN8S20679C62v5Ev();
extern void _ZN8S20679C62v6Ev();
extern void _ZN8S20679C62v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20679C6__8S20679C5[] = {
  ABISELECT(600,420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C6[0]),
  (VTBL_ENTRY)&_ZN8S20679C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20679C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20679C62v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20679C48S20679C6__8S20679C5[] = {
  ABISELECT(600,420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20679C4__A__8S20679C5[] = {
  ABISELECT(184,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
extern void _ZN8S20679C22v3Ev();
extern void _ZN8S20679C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20679C2__8S20679C5[] = {
  ABISELECT(240,164),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C2[0]),
  (VTBL_ENTRY)&_ZN8S20679C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20679C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20679C4__8S20679C2__8S20679C5[] = {
  ABISELECT(-296,-204),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI8S20679C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20679C4__A1__8S20679C5[] = {
  ABISELECT(-296,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
extern void _ZN8S20679C92v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20679C9__8S20679C5[] = {
  ABISELECT(-712,-488),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C9[0]),
  (VTBL_ENTRY)&_ZN8S20679C92v9Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20679C48S20679C9__A3__8S20679C5[] = {
  ABISELECT(-712,-488),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
static  VTT_ENTRY vtt_S20679C5[] = {
  {&(_ZTV8S20679C5[7]),  7,34},
  {&(_tg__ZTV8S20679C6__8S20679C5[3]),  3,6},
  {&(_tg__ZTV8S20679C48S20679C6__8S20679C5[3]),  3,3},
  {&(_tg__ZTV8S20679C4__A__8S20679C5[3]),  3,3},
  {&(_ZTV8S20679C5[20]),  20,34},
  {&(_ZTV8S20679C5[25]),  25,34},
  {&(_ZTV8S20679C5[14]),  14,34},
  {&(_ZTV8S20679C5[28]),  28,34},
  {&(_ZTV8S20679C5[33]),  33,34},
  {&(_tg__ZTV8S20679C2__8S20679C5[4]),  4,6},
  {&(_tg__ZTV8S20679C4__8S20679C2__8S20679C5[3]),  3,3},
  {&(_tg__ZTV8S20679C4__A1__8S20679C5[3]),  3,3},
  {&(_tg__ZTV8S20679C9__8S20679C5[3]),  3,4},
  {&(_tg__ZTV8S20679C48S20679C9__A3__8S20679C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20679C5[];
extern  VTBL_ENTRY _ZTV8S20679C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C5[];
Class_Descriptor cd_S20679C5 = {  "S20679C5", // class name
  bases_S20679C5, 9,
  &(vtc_S20679C5[0]), // expected_vtbl_contents
  &(vtt_S20679C5[0]), // expected_vtt_contents
  ABISELECT(1488,1044), // object size
  NSPAIRA(_ZTI8S20679C5),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20679C5),34, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20679C5),14, //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  S20679C11  : S20677C3 {
  ::S20677C3 s20679c11f0;
  int s20679c11f1;
  long double s20679c11f2;
  int s20679c11f3;
  __tsi64 s20679c11f4;
  long s20679c11f5;
};
//SIG(-1 S20679C11) C1{ BC2{ m Fp FL[4] Fs} FC2 Fi FD Fi FL Fl}



static void Test_S20679C11()
{
  extern Class_Descriptor cd_S20679C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S20679C11, buf);
    S20679C11 &lv = *(new (buf) S20679C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20679C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20679C11)");
    check_base_class_offset(lv, (S20677C3*), 0, "S20679C11");
    check_field_offset(lv, s20679c11f0, ABISELECT(48,40), "S20679C11.s20679c11f0");
    check_field_offset(lv, s20679c11f1, ABISELECT(96,80), "S20679C11.s20679c11f1");
    check_field_offset(lv, s20679c11f2, ABISELECT(112,84), "S20679C11.s20679c11f2");
    check_field_offset(lv, s20679c11f3, ABISELECT(128,96), "S20679C11.s20679c11f3");
    check_field_offset(lv, s20679c11f4, ABISELECT(136,100), "S20679C11.s20679c11f4");
    check_field_offset(lv, s20679c11f5, ABISELECT(144,108), "S20679C11.s20679c11f5");
    test_class_info(&lv, &cd_S20679C11);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20679C11(Test_S20679C11, "S20679C11", ABISELECT(160,112));

#else // __cplusplus

extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20679C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20679C11[];
Class_Descriptor cd_S20679C11 = {  "S20679C11", // class name
  bases_S20679C11, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI9S20679C11),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  S20679C10  : virtual S20679C7 , S20679C4 , S20679C11 {
  void *s20679c10f0;
  ::S20679C11 s20679c10f1;
  void *s20679c10f2;
  int s20679c10f3[2];
  long double s20679c10f4;
  int s20679c10f5[2];
  virtual void  v11(); // _ZN9S20679C103v11Ev
  ~S20679C10(); // tgen
  S20679C10(); // tgen
};
//SIG(-1 S20679C10) C1{ VBC2{ v2 FC3{} FC4{ VBC5{ m Fp FL[4] Fs} FD Fi FC5 FC5} FC3 FL FC3 Fp FC3 Fp[2] FC3} BC4 BC6{ BC5 FC5 Fi FD Fi FL Fl} v1 Fp FC6 Fp Fi[2] FD Fi[2]}


void  S20679C10 ::v11(){vfunc_called(this, "_ZN9S20679C103v11Ev");}
S20679C10 ::~S20679C10(){ note_dtor("S20679C10", this);} // tgen
S20679C10 ::S20679C10(){ note_ctor("S20679C10", this);} // tgen

static void Test_S20679C10()
{
  extern Class_Descriptor cd_S20679C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(53,147)];
    init_test(&cd_S20679C10, buf);
    S20679C10 *dp, &lv = *(dp=new (buf) S20679C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(832,584), "sizeof(S20679C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20679C10)");
    check_base_class_offset(lv, (S20679C7*), ABISELECT(512,360), "S20679C10");
    check_base_class_offset(lv, (S20677C3*)(S20679C4*), ABISELECT(784,544), "S20679C10");
    check_base_class_offset(lv, (S20679C4*), 0, "S20679C10");
    check_base_class_offset(lv, (S20677C3*)(S20679C11*), ABISELECT(144,100), "S20679C10");
    check_base_class_offset(lv, (S20679C11*), ABISELECT(144,100), "S20679C10");
    check_field_offset(lv, s20679c10f0, ABISELECT(296,212), "S20679C10.s20679c10f0");
    check_field_offset(lv, s20679c10f1, ABISELECT(304,216), "S20679C10.s20679c10f1");
    check_field_offset(lv, s20679c10f2, ABISELECT(464,328), "S20679C10.s20679c10f2");
    check_field_offset(lv, s20679c10f3, ABISELECT(472,332), "S20679C10.s20679c10f3");
    check_field_offset(lv, s20679c10f4, ABISELECT(480,340), "S20679C10.s20679c10f4");
    check_field_offset(lv, s20679c10f5, ABISELECT(496,352), "S20679C10.s20679c10f5");
    test_class_info(&lv, &cd_S20679C10);
    dp->~S20679C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20679C10(Test_S20679C10, "S20679C10", ABISELECT(832,584));

#else // __cplusplus

extern void _ZN9S20679C10C1Ev();
extern void _ZN9S20679C10D1Ev();
Name_Map name_map_S20679C10[] = {
  NSPAIR(_ZN9S20679C10C1Ev),
  NSPAIR(_ZN9S20679C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20679C7;
extern VTBL_ENTRY _ZTI8S20679C7[];
extern  VTBL_ENTRY _ZTV8S20679C7[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20679C11;
extern VTBL_ENTRY _ZTI9S20679C11[];
static Base_Class bases_S20679C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20679C7,    ABISELECT(512,360), //bcp->offset
    5, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C3,    ABISELECT(784,544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20679C4,    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_S20677C3,    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
    4, //immediately_derived
  0, 0},
  {&cd_S20679C11,    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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20679C10[];
extern void _ZN9S20679C103v11Ev();
extern void _ZN8S20679C72v8Ev();
static  VTBL_ENTRY vtc_S20679C10[] = {
  ABISELECT(512,360),
  ABISELECT(784,544),
  0,
  (VTBL_ENTRY)&(_ZTI9S20679C10[0]),
  (VTBL_ENTRY)&_ZN9S20679C103v11Ev,
  0,
  ABISELECT(-512,-360),
  (VTBL_ENTRY)&(_ZTI9S20679C10[0]),
  (VTBL_ENTRY)&_ZN8S20679C72v8Ev,
};
extern VTBL_ENTRY _ZTV9S20679C10[];
static  VTBL_ENTRY _tg__ZTV8S20679C4__9S20679C10[] = {
  ABISELECT(784,544),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
static  VTT_ENTRY vtt_S20679C10[] = {
  {&(_ZTV9S20679C10[4]),  4,9},
  {&(_tg__ZTV8S20679C4__9S20679C10[3]),  3,3},
  {&(_ZTV9S20679C10[8]),  8,9},
};
extern VTBL_ENTRY _ZTI9S20679C10[];
extern  VTBL_ENTRY _ZTV9S20679C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20679C10[];
Class_Descriptor cd_S20679C10 = {  "S20679C10", // class name
  bases_S20679C10, 5,
  &(vtc_S20679C10[0]), // expected_vtbl_contents
  &(vtt_S20679C10[0]), // expected_vtt_contents
  ABISELECT(832,584), // object size
  NSPAIRA(_ZTI9S20679C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20679C10),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20679C10),3, //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  S20679C1  : virtual S20679C2 , virtual S20679C5 , S20679C10 {
  long s20679c1f0;
  ::S20677C6_nt s20679c1f1;
  void *s20679c1f2;
  long s20679c1f3;
  long double s20679c1f4;
  int s20679c1f5;
  __tsi64 s20679c1f6;
  ::S20677C14 s20679c1f7;
  void *s20679c1f8[9];
  virtual void  v1(); // _ZN8S20679C12v1Ev
  virtual void  v2(); // _ZN8S20679C12v2Ev
  ~S20679C1(); // tgen
  S20679C1(); // tgen
};
//SIG(1 S20679C1) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} VBC4{ VBC3 FD Fi FC3 FC3} v3 v4 Fi FC4 FL Fi Fp} VBC5{ BC6{ VBC3 BC4 v5 v6 v7 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC2 BC4 VBC7{ v8 FC8{} FC4 FC8 FL FC8 Fp FC8 Fp[2] FC8} VBC9{ BC4 v9 FL Fc[7] Fp Fi FC8 FC8 Fc[10]} v10 Fl FL FD FC8} BC10{ VBC7 BC4 BC11{ BC3 FC3 Fi FD Fi FL Fl} v11 Fp FC11 Fp Fi[2] FD Fi[2]} v1 v2 Fl FC8 Fp Fl FD Fi FL FC12{ BC13{ BC14{ VBC3 BC15{ VBC3 FD Fi FC3 FC3} v12 v13 v14 Fs FL Fc Fi[2] FC15 Fp FL Fi FL Fi} VBC16{ VBC3 VBC15 v15 v16 Fi FC15 FL Fi Fp} BC15 VBC17{ v17 FC8 FC15 FC8 FL FC8 Fp FC8 Fp[2] FC8} VBC18{ BC15 v18 FL Fc[7] Fp Fi FC8 FC8 Fc[10]} v19 Fl FL FD FC8} BC19{ VBC17 v20 FC13 FC8 Fl Fi[2]} BC20{ VBC15 BC21{ VBC14 VBC22{ VBC3 VBC14 v21 v22 v23 FL FC8 Fp Fc[2] FC3 Fl FC8} VBC16 v24 v25 FC8 FC8 Fi FC15 FC8 FC8 FC17 FC22 Fp FC8} BC16 Fi Fc:2 FC8 Fi} Fp FL Fi Fp Fi[3] Fc FL Fp FD} Fp[9]}


void  S20679C1 ::v1(){vfunc_called(this, "_ZN8S20679C12v1Ev");}
void  S20679C1 ::v2(){vfunc_called(this, "_ZN8S20679C12v2Ev");}
S20679C1 ::~S20679C1(){ note_dtor("S20679C1", this);} // tgen
S20679C1 ::S20679C1(){ note_ctor("S20679C1", this);} // tgen

static void Test_S20679C1()
{
  extern Class_Descriptor cd_S20679C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(445,1236)];
    init_test(&cd_S20679C1, buf);
    S20679C1 *dp, &lv = *(dp=new (buf) S20679C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7104,4940), "sizeof(S20679C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20679C1)");
    check_base_class_offset(lv, (S20677C3*)(S20679C2*), ABISELECT(5848,4060), "S20679C1");
    /*is_ambiguous_... S20679C1::S20679C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20679C4*), ABISELECT(5848,4060), "S20679C1");
    check_base_class_offset(lv, (S20677C3*)(S20679C6*)(S20679C5*), ABISELECT(5848,4060), "S20679C1");
    check_base_class_offset(lv, (S20677C3*)(S20679C4*)(S20679C6*)(S20679C5*), ABISELECT(5848,4060), "S20679C1");
    /*is_ambiguous_... S20679C5::S20679C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20679C4*)(S20679C5*), ABISELECT(5848,4060), "S20679C1");
    check_base_class_offset(lv, (S20677C3*)(S20679C4*)(S20679C9*), ABISELECT(5848,4060), "S20679C1");
    check_base_class_offset(lv, (S20677C3*)(S20679C4*)(S20679C10*), ABISELECT(5848,4060), "S20679C1");
    check_base_class_offset(lv, (S20679C4*)(S20679C2*), ABISELECT(5904,4100), "S20679C1");
    check_base_class_offset(lv, (S20679C2*), ABISELECT(5616,3896), "S20679C1");
    check_base_class_offset(lv, (S20679C2*)(S20679C5*), ABISELECT(5616,3896), "S20679C1");
    check_base_class_offset(lv, (S20679C4*)(S20679C6*)(S20679C5*), ABISELECT(6048,4200), "S20679C1");
    check_base_class_offset(lv, (S20679C6*)(S20679C5*), ABISELECT(6048,4200), "S20679C1");
    /*is_ambiguous_... S20679C5::S20679C4 */ AMB_check_base_class_offset(lv, (S20679C4*)(S20679C5*), ABISELECT(6464,4492), "S20679C1");
    check_base_class_offset(lv, (S20679C7*)(S20679C5*), ABISELECT(6656,4620), "S20679C1");
    check_base_class_offset(lv, (S20679C7*)(S20679C10*), ABISELECT(6656,4620), "S20679C1");
    check_base_class_offset(lv, (S20679C4*)(S20679C9*), ABISELECT(6928,4804), "S20679C1");
    check_base_class_offset(lv, (S20679C9*)(S20679C5*), ABISELECT(6928,4804), "S20679C1");
    check_base_class_offset(lv, (S20679C5*), ABISELECT(6048,4200), "S20679C1");
    check_base_class_offset(lv, (S20679C4*)(S20679C10*), 0, "S20679C1");
    check_base_class_offset(lv, (S20677C3*)(S20679C11*)(S20679C10*), ABISELECT(144,100), "S20679C1");
    check_base_class_offset(lv, (S20679C11*)(S20679C10*), ABISELECT(144,100), "S20679C1");
    check_base_class_offset(lv, (S20679C10*), 0, "S20679C1");
    check_field_offset(lv, s20679c1f0, ABISELECT(504,360), "S20679C1.s20679c1f0");
    check_field_offset(lv, s20679c1f1, ABISELECT(512,364), "S20679C1.s20679c1f1");
    check_field_offset(lv, s20679c1f2, ABISELECT(520,368), "S20679C1.s20679c1f2");
    check_field_offset(lv, s20679c1f3, ABISELECT(528,372), "S20679C1.s20679c1f3");
    check_field_offset(lv, s20679c1f4, ABISELECT(544,376), "S20679C1.s20679c1f4");
    check_field_offset(lv, s20679c1f5, ABISELECT(560,388), "S20679C1.s20679c1f5");
    check_field_offset(lv, s20679c1f6, ABISELECT(568,392), "S20679C1.s20679c1f6");
    check_field_offset(lv, s20679c1f7, ABISELECT(576,400), "S20679C1.s20679c1f7");
    check_field_offset(lv, s20679c1f8, ABISELECT(5536,3860), "S20679C1.s20679c1f8");
    test_class_info(&lv, &cd_S20679C1);
    dp->~S20679C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20679C1(Test_S20679C1, "S20679C1", ABISELECT(7104,4940));

#else // __cplusplus

extern void _ZN8S20679C1C1Ev();
extern void _ZN8S20679C1D1Ev();
Name_Map name_map_S20679C1[] = {
  NSPAIR(_ZN8S20679C1C1Ev),
  NSPAIR(_ZN8S20679C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
extern Class_Descriptor cd_S20679C2;
extern VTBL_ENTRY _ZTI8S20679C2[];
extern  VTBL_ENTRY _ZTV8S20679C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C2[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
extern Class_Descriptor cd_S20679C6;
extern VTBL_ENTRY _ZTI8S20679C6[];
extern  VTBL_ENTRY _ZTV8S20679C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C6[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
extern Class_Descriptor cd_S20679C7;
extern VTBL_ENTRY _ZTI8S20679C7[];
extern  VTBL_ENTRY _ZTV8S20679C7[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
extern Class_Descriptor cd_S20679C9;
extern VTBL_ENTRY _ZTI8S20679C9[];
extern  VTBL_ENTRY _ZTV8S20679C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C9[];
extern Class_Descriptor cd_S20679C5;
extern VTBL_ENTRY _ZTI8S20679C5[];
extern  VTBL_ENTRY _ZTV8S20679C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C5[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20679C11;
extern VTBL_ENTRY _ZTI9S20679C11[];
extern Class_Descriptor cd_S20679C10;
extern VTBL_ENTRY _ZTI9S20679C10[];
extern  VTBL_ENTRY _ZTV9S20679C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20679C10[];
static Base_Class bases_S20679C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(5848,4060), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20679C4,    ABISELECT(5904,4100), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20679C2,    ABISELECT(5616,3896), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20679C4,    ABISELECT(6048,4200), //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
    4, //immediately_derived
  0, 0},
  {&cd_S20679C6,    ABISELECT(6048,4200), //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
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20679C4,    ABISELECT(6464,4492), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20679C7,    ABISELECT(6656,4620), //bcp->offset
    40, //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
    9, //immediately_derived
  0, 1},
  {&cd_S20679C4,    ABISELECT(6928,4804), //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
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20679C9,    ABISELECT(6928,4804), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20679C5,    ABISELECT(6048,4200), //bcp->offset
    22, //bcp->virtual_function_table_offset
    11, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20679C4,    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
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20677C3,    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
    12, //immediately_derived
  0, 0},
  {&cd_S20679C11,    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
    13, //immediately_derived
  0, 0},
  {&cd_S20679C10,    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
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20679C1[];
extern void _ZN9S20679C103v11Ev();
extern void _ZN8S20679C12v1Ev();
extern void _ZN8S20679C12v2Ev();
extern void _ZN8S20679C22v3Ev();
extern void _ZN8S20679C22v4Ev();
extern void _ZN8S20679C62v5Ev();
extern void _ZN8S20679C62v6Ev();
extern void _ZN8S20679C62v7Ev();
extern void _ZN8S20679C53v10Ev();
extern void _ZN8S20679C72v8Ev();
extern void _ZN8S20679C92v9Ev();
static  VTBL_ENTRY vtc_S20679C1[] = {
  ABISELECT(6928,4804),
  ABISELECT(6048,4200),
  ABISELECT(5904,4100),
  ABISELECT(5616,3896),
  ABISELECT(6656,4620),
  ABISELECT(5848,4060),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C1[0]),
  (VTBL_ENTRY)&_ZN9S20679C103v11Ev,
  (VTBL_ENTRY)&_ZN8S20679C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20679C12v2Ev,
  0,
  0,
  ABISELECT(288,204),
  ABISELECT(232,164),
  ABISELECT(-5616,-3896),
  (VTBL_ENTRY)&(_ZTI8S20679C1[0]),
  (VTBL_ENTRY)&_ZN8S20679C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20679C22v4Ev,
  ABISELECT(-56,-40),
  ABISELECT(-5904,-4100),
  (VTBL_ENTRY)&(_ZTI8S20679C1[0]),
  0,
  0,
  0,
  0,
  ABISELECT(880,604),
  ABISELECT(608,420),
  ABISELECT(-144,-100),
  ABISELECT(-432,-304),
  ABISELECT(-200,-140),
  ABISELECT(-6048,-4200),
  (VTBL_ENTRY)&(_ZTI8S20679C1[0]),
  (VTBL_ENTRY)&_ZN8S20679C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20679C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20679C62v7Ev,
  (VTBL_ENTRY)&_ZN8S20679C53v10Ev,
  ABISELECT(-616,-432),
  ABISELECT(-6464,-4492),
  (VTBL_ENTRY)&(_ZTI8S20679C1[0]),
  0,
  ABISELECT(-6656,-4620),
  (VTBL_ENTRY)&(_ZTI8S20679C1[0]),
  (VTBL_ENTRY)&_ZN8S20679C72v8Ev,
  0,
  ABISELECT(-1080,-744),
  ABISELECT(-6928,-4804),
  (VTBL_ENTRY)&(_ZTI8S20679C1[0]),
  (VTBL_ENTRY)&_ZN8S20679C92v9Ev,
};
extern VTBL_ENTRY _ZTV8S20679C1[];
extern void _ZN9S20679C103v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20679C10__8S20679C1[] = {
  ABISELECT(6656,4620),
  ABISELECT(5848,4060),
  0,
  (VTBL_ENTRY)&(_ZTI9S20679C10[0]),
  (VTBL_ENTRY)&_ZN9S20679C103v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20679C49S20679C10__A4__8S20679C1[] = {
  ABISELECT(5848,4060),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
extern void _ZN8S20679C72v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20679C7__9S20679C10__8S20679C1[] = {
  0,
  ABISELECT(-6656,-4620),
  (VTBL_ENTRY)&(_ZTI9S20679C10[0]),
  (VTBL_ENTRY)&_ZN8S20679C72v8Ev,
};
extern void _ZN8S20679C22v3Ev();
extern void _ZN8S20679C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20679C2__8S20679C1[] = {
  ABISELECT(288,204),
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C2[0]),
  (VTBL_ENTRY)&_ZN8S20679C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20679C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20679C4__8S20679C2__8S20679C1[] = {
  ABISELECT(-56,-40),
  ABISELECT(-288,-204),
  (VTBL_ENTRY)&(_ZTI8S20679C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20679C4__8S20679C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
extern void _ZN8S20679C62v5Ev();
extern void _ZN8S20679C62v6Ev();
extern void _ZN8S20679C62v7Ev();
extern void _ZN8S20679C53v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20679C5__8S20679C1[] = {
  ABISELECT(880,604),
  ABISELECT(608,420),
  ABISELECT(-144,-100),
  ABISELECT(-432,-304),
  ABISELECT(-200,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C5[0]),
  (VTBL_ENTRY)&_ZN8S20679C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20679C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20679C62v7Ev,
  (VTBL_ENTRY)&_ZN8S20679C53v10Ev,
};
extern void _ZN8S20679C62v5Ev();
extern void _ZN8S20679C62v6Ev();
extern void _ZN8S20679C62v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20679C68S20679C5__8S20679C1[] = {
  ABISELECT(-200,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C6[0]),
  (VTBL_ENTRY)&_ZN8S20679C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20679C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20679C62v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20679C48S20679C68S20679C5__A1__8S20679C1[] = {
  ABISELECT(-200,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20679C48S20679C5__A2__8S20679C1[] = {
  ABISELECT(-616,-432),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
extern void _ZN8S20679C22v3Ev();
extern void _ZN8S20679C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20679C2__8S20679C5__8S20679C1[] = {
  0,
  0,
  ABISELECT(288,204),
  ABISELECT(232,164),
  ABISELECT(432,304),
  (VTBL_ENTRY)&(_ZTI8S20679C5[0]),
  (VTBL_ENTRY)&_ZN8S20679C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20679C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20679C4__A1__8S20679C5__8S20679C1[] = {
  ABISELECT(-56,-40),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI8S20679C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20679C4__A__8S20679C5__8S20679C1[] = {
  ABISELECT(-616,-432),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI8S20679C5[0]),
};
extern void _ZN8S20679C72v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20679C7__8S20679C5__8S20679C1[] = {
  0,
  ABISELECT(-608,-420),
  (VTBL_ENTRY)&(_ZTI8S20679C5[0]),
  (VTBL_ENTRY)&_ZN8S20679C72v8Ev,
};
extern void _ZN8S20679C92v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20679C9__8S20679C5__8S20679C1[] = {
  0,
  ABISELECT(-1080,-744),
  ABISELECT(-880,-604),
  (VTBL_ENTRY)&(_ZTI8S20679C5[0]),
  (VTBL_ENTRY)&_ZN8S20679C92v9Ev,
};
extern void _ZN8S20679C92v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20679C9__8S20679C1[] = {
  ABISELECT(-1080,-744),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C9[0]),
  (VTBL_ENTRY)&_ZN8S20679C92v9Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20679C48S20679C9__A3__8S20679C1[] = {
  ABISELECT(-1080,-744),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
static  VTT_ENTRY vtt_S20679C1[] = {
  {&(_ZTV8S20679C1[8]),  8,49},
  {&(_tg__ZTV9S20679C10__8S20679C1[4]),  4,5},
  {&(_tg__ZTV8S20679C49S20679C10__A4__8S20679C1[3]),  3,3},
  {&(_tg__ZTV8S20679C7__9S20679C10__8S20679C1[3]),  3,4},
  {&(_ZTV8S20679C1[17]),  17,49},
  {&(_ZTV8S20679C1[22]),  22,49},
  {&(_ZTV8S20679C1[33]),  33,49},
  {&(_ZTV8S20679C1[40]),  40,49},
  {&(_ZTV8S20679C1[43]),  43,49},
  {&(_ZTV8S20679C1[48]),  48,49},
  {&(_tg__ZTV8S20679C2__8S20679C1[4]),  4,6},
  {&(_tg__ZTV8S20679C4__8S20679C2__8S20679C1[3]),  3,3},
  {&(_tg__ZTV8S20679C4__8S20679C1[3]),  3,3},
  {&(_tg__ZTV8S20679C5__8S20679C1[7]),  7,11},
  {&(_tg__ZTV8S20679C68S20679C5__8S20679C1[3]),  3,6},
  {&(_tg__ZTV8S20679C48S20679C68S20679C5__A1__8S20679C1[3]),  3,3},
  {&(_tg__ZTV8S20679C48S20679C5__A2__8S20679C1[3]),  3,3},
  {&(_tg__ZTV8S20679C2__8S20679C5__8S20679C1[6]),  6,8},
  {&(_tg__ZTV8S20679C4__A1__8S20679C5__8S20679C1[3]),  3,3},
  {&(_tg__ZTV8S20679C4__A__8S20679C5__8S20679C1[3]),  3,3},
  {&(_tg__ZTV8S20679C7__8S20679C5__8S20679C1[3]),  3,4},
  {&(_tg__ZTV8S20679C9__8S20679C5__8S20679C1[4]),  4,5},
  {&(_tg__ZTV8S20679C9__8S20679C1[3]),  3,4},
  {&(_tg__ZTV8S20679C48S20679C9__A3__8S20679C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20679C1[];
extern  VTBL_ENTRY _ZTV8S20679C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C1[];
Class_Descriptor cd_S20679C1 = {  "S20679C1", // class name
  bases_S20679C1, 14,
  &(vtc_S20679C1[0]), // expected_vtbl_contents
  &(vtt_S20679C1[0]), // expected_vtt_contents
  ABISELECT(7104,4940), // object size
  NSPAIRA(_ZTI8S20679C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20679C1),49, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20679C1),24, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20675C5  : virtual S20677C3 {
  long double s20675c5f0;
  int s20675c5f1;
  ::S20677C3 s20675c5f2;
  ::S20677C3 s20675c5f3;
  ~S20675C5(); // tgen
  S20675C5(); // tgen
};
//SIG(-1 S20675C5) C1{ VBC2{ m Fp FL[4] Fs} FD Fi FC2 FC2}


S20675C5 ::~S20675C5(){ note_dtor("S20675C5", this);} // tgen
S20675C5 ::S20675C5(){ note_ctor("S20675C5", this);} // tgen

static void Test_S20675C5()
{
  extern Class_Descriptor cd_S20675C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,36)];
    init_test(&cd_S20675C5, buf);
    S20675C5 *dp, &lv = *(dp=new (buf) S20675C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S20675C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20675C5)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(136,100), "S20675C5");
    check_field_offset(lv, s20675c5f0, ABISELECT(16,4), "S20675C5.s20675c5f0");
    check_field_offset(lv, s20675c5f1, ABISELECT(32,16), "S20675C5.s20675c5f1");
    check_field_offset(lv, s20675c5f2, ABISELECT(40,20), "S20675C5.s20675c5f2");
    check_field_offset(lv, s20675c5f3, ABISELECT(88,60), "S20675C5.s20675c5f3");
    test_class_info(&lv, &cd_S20675C5);
    dp->~S20675C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20675C5(Test_S20675C5, "S20675C5", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN8S20675C5C1Ev();
extern void _ZN8S20675C5D1Ev();
Name_Map name_map_S20675C5[] = {
  NSPAIR(_ZN8S20675C5C1Ev),
  NSPAIR(_ZN8S20675C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20675C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(136,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20675C5[];
static  VTBL_ENTRY vtc_S20675C5[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
extern VTBL_ENTRY _ZTV8S20675C5[];
static  VTT_ENTRY vtt_S20675C5[] = {
  {&(_ZTV8S20675C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
Class_Descriptor cd_S20675C5 = {  "S20675C5", // class name
  bases_S20675C5, 1,
  &(vtc_S20675C5[0]), // expected_vtbl_contents
  &(vtt_S20675C5[0]), // expected_vtt_contents
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI8S20675C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20675C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20675C5),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  S20675C4  : virtual S20677C3 , S20675C5 {
  short s20675c4f0;
  __tsi64 s20675c4f1;
  char s20675c4f2;
  int s20675c4f3[2];
  ::S20675C5 s20675c4f4;
  void *s20675c4f5;
  __tsi64 s20675c4f6;
  int s20675c4f7;
  __tsi64 s20675c4f8;
  int s20675c4f9;
  virtual void  v2(); // _ZN8S20675C42v2Ev
  virtual void  v3(); // _ZN8S20675C42v3Ev
  virtual void  v4(); // _ZN8S20675C42v4Ev
  ~S20675C4(); // tgen
  S20675C4(); // tgen
};
//SIG(-1 S20675C4) C1{ VBC2{ m Fp FL[4] Fs} BC3{ VBC2 FD Fi FC2 FC2} v1 v2 v3 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi}


void  S20675C4 ::v2(){vfunc_called(this, "_ZN8S20675C42v2Ev");}
void  S20675C4 ::v3(){vfunc_called(this, "_ZN8S20675C42v3Ev");}
void  S20675C4 ::v4(){vfunc_called(this, "_ZN8S20675C42v4Ev");}
S20675C4 ::~S20675C4(){ note_dtor("S20675C4", this);} // tgen
S20675C4 ::S20675C4(){ note_ctor("S20675C4", this);} // tgen

static void Test_S20675C4()
{
  extern Class_Descriptor cd_S20675C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,84)];
    init_test(&cd_S20675C4, buf);
    S20675C4 *dp, &lv = *(dp=new (buf) S20675C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,332), "sizeof(S20675C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20675C4)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(408,292), "S20675C4");
    check_base_class_offset(lv, (S20677C3*)(S20675C5*), ABISELECT(408,292), "S20675C4");
    check_base_class_offset(lv, (S20675C5*), 0, "S20675C4");
    check_field_offset(lv, s20675c4f0, ABISELECT(136,100), "S20675C4.s20675c4f0");
    check_field_offset(lv, s20675c4f1, ABISELECT(144,104), "S20675C4.s20675c4f1");
    check_field_offset(lv, s20675c4f2, ABISELECT(152,112), "S20675C4.s20675c4f2");
    check_field_offset(lv, s20675c4f3, ABISELECT(156,116), "S20675C4.s20675c4f3");
    check_field_offset(lv, s20675c4f4, ABISELECT(176,124), "S20675C4.s20675c4f4");
    check_field_offset(lv, s20675c4f5, ABISELECT(368,264), "S20675C4.s20675c4f5");
    check_field_offset(lv, s20675c4f6, ABISELECT(376,268), "S20675C4.s20675c4f6");
    check_field_offset(lv, s20675c4f7, ABISELECT(384,276), "S20675C4.s20675c4f7");
    check_field_offset(lv, s20675c4f8, ABISELECT(392,280), "S20675C4.s20675c4f8");
    check_field_offset(lv, s20675c4f9, ABISELECT(400,288), "S20675C4.s20675c4f9");
    test_class_info(&lv, &cd_S20675C4);
    dp->~S20675C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20675C4(Test_S20675C4, "S20675C4", ABISELECT(464,332));

#else // __cplusplus

extern void _ZN8S20675C4C1Ev();
extern void _ZN8S20675C4D1Ev();
Name_Map name_map_S20675C4[] = {
  NSPAIR(_ZN8S20675C4C1Ev),
  NSPAIR(_ZN8S20675C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
static Base_Class bases_S20675C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(408,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20675C5,    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 _ZTI8S20675C4[];
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY vtc_S20675C4[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C4[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S20675C4[];
static  VTBL_ENTRY _tg__ZTV8S20675C5__8S20675C4[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
static  VTT_ENTRY vtt_S20675C4[] = {
  {&(_ZTV8S20675C4[3]),  3,6},
  {&(_tg__ZTV8S20675C5__8S20675C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20675C4[];
extern  VTBL_ENTRY _ZTV8S20675C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C4[];
Class_Descriptor cd_S20675C4 = {  "S20675C4", // class name
  bases_S20675C4, 2,
  &(vtc_S20675C4[0]), // expected_vtbl_contents
  &(vtt_S20675C4[0]), // expected_vtt_contents
  ABISELECT(464,332), // object size
  NSPAIRA(_ZTI8S20675C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20675C4),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20675C4),2, //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  S20675C2  : virtual S20677C3 , virtual S20675C4 {
  __tsi64 s20675c2f0;
  ::S20677C6_nt s20675c2f1;
  void *s20675c2f2;
  char s20675c2f3[2];
  ::S20677C3 s20675c2f4;
  long s20675c2f5;
  ::S20677C6_nt s20675c2f6;
  virtual void  v5(); // _ZN8S20675C22v5Ev
  virtual void  v6(); // _ZN8S20675C22v6Ev
  virtual void  v7(); // _ZN8S20675C22v7Ev
  ~S20675C2(); // tgen
  S20675C2(); // tgen
};
//SIG(-1 S20675C2) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 BC4{ VBC2 FD Fi FC2 FC2} v4 v5 v6 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} v1 v2 v3 FL FC5{} Fp Fc[2] FC2 Fl FC5}


void  S20675C2 ::v5(){vfunc_called(this, "_ZN8S20675C22v5Ev");}
void  S20675C2 ::v6(){vfunc_called(this, "_ZN8S20675C22v6Ev");}
void  S20675C2 ::v7(){vfunc_called(this, "_ZN8S20675C22v7Ev");}
S20675C2 ::~S20675C2(){ note_dtor("S20675C2", this);} // tgen
S20675C2 ::S20675C2(){ note_ctor("S20675C2", this);} // tgen

static void Test_S20675C2()
{
  extern Class_Descriptor cd_S20675C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,102)];
    init_test(&cd_S20675C2, buf);
    S20675C2 *dp, &lv = *(dp=new (buf) S20675C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,404), "sizeof(S20675C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20675C2)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(104,72), "S20675C2");
    check_base_class_offset(lv, (S20677C3*)(S20675C4*), ABISELECT(104,72), "S20675C2");
    check_base_class_offset(lv, (S20677C3*)(S20675C5*)(S20675C4*), ABISELECT(104,72), "S20675C2");
    check_base_class_offset(lv, (S20675C5*)(S20675C4*), ABISELECT(160,112), "S20675C2");
    check_base_class_offset(lv, (S20675C4*), ABISELECT(160,112), "S20675C2");
    check_field_offset(lv, s20675c2f0, ABISELECT(8,4), "S20675C2.s20675c2f0");
    check_field_offset(lv, s20675c2f1, ABISELECT(16,12), "S20675C2.s20675c2f1");
    check_field_offset(lv, s20675c2f2, ABISELECT(24,16), "S20675C2.s20675c2f2");
    check_field_offset(lv, s20675c2f3, ABISELECT(32,20), "S20675C2.s20675c2f3");
    check_field_offset(lv, s20675c2f4, ABISELECT(40,24), "S20675C2.s20675c2f4");
    check_field_offset(lv, s20675c2f5, ABISELECT(88,64), "S20675C2.s20675c2f5");
    check_field_offset(lv, s20675c2f6, ABISELECT(96,68), "S20675C2.s20675c2f6");
    test_class_info(&lv, &cd_S20675C2);
    dp->~S20675C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20675C2(Test_S20675C2, "S20675C2", ABISELECT(576,404));

#else // __cplusplus

extern void _ZN8S20675C2C1Ev();
extern void _ZN8S20675C2D1Ev();
Name_Map name_map_S20675C2[] = {
  NSPAIR(_ZN8S20675C2C1Ev),
  NSPAIR(_ZN8S20675C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
extern Class_Descriptor cd_S20675C4;
extern VTBL_ENTRY _ZTI8S20675C4[];
extern  VTBL_ENTRY _ZTV8S20675C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C4[];
static Base_Class bases_S20675C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(104,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20675C5,    ABISELECT(160,112), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20675C4,    ABISELECT(160,112), //bcp->offset
    7, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20675C2[];
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY vtc_S20675C2[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C2[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20675C2[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S20675C2[];
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__8S20675C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C4[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C58S20675C4__8S20675C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
static  VTT_ENTRY vtt_S20675C2[] = {
  {&(_ZTV8S20675C2[4]),  4,16},
  {&(_ZTV8S20675C2[13]),  13,16},
  {&(_tg__ZTV8S20675C4__8S20675C2[3]),  3,6},
  {&(_tg__ZTV8S20675C58S20675C4__8S20675C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20675C2[];
extern  VTBL_ENTRY _ZTV8S20675C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C2[];
Class_Descriptor cd_S20675C2 = {  "S20675C2", // class name
  bases_S20675C2, 3,
  &(vtc_S20675C2[0]), // expected_vtbl_contents
  &(vtt_S20675C2[0]), // expected_vtt_contents
  ABISELECT(576,404), // object size
  NSPAIRA(_ZTI8S20675C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20675C2),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20675C2),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  S20675C8  : S20677C3 {
  ::S20677C3 s20675c8f0;
  int s20675c8f1;
  long double s20675c8f2;
  int s20675c8f3;
  __tsi64 s20675c8f4;
  long s20675c8f5;
};
//SIG(-1 S20675C8) C1{ BC2{ m Fp FL[4] Fs} FC2 Fi FD Fi FL Fl}



static void Test_S20675C8()
{
  extern Class_Descriptor cd_S20675C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S20675C8, buf);
    S20675C8 &lv = *(new (buf) S20675C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20675C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20675C8)");
    check_base_class_offset(lv, (S20677C3*), 0, "S20675C8");
    check_field_offset(lv, s20675c8f0, ABISELECT(48,40), "S20675C8.s20675c8f0");
    check_field_offset(lv, s20675c8f1, ABISELECT(96,80), "S20675C8.s20675c8f1");
    check_field_offset(lv, s20675c8f2, ABISELECT(112,84), "S20675C8.s20675c8f2");
    check_field_offset(lv, s20675c8f3, ABISELECT(128,96), "S20675C8.s20675c8f3");
    check_field_offset(lv, s20675c8f4, ABISELECT(136,100), "S20675C8.s20675c8f4");
    check_field_offset(lv, s20675c8f5, ABISELECT(144,108), "S20675C8.s20675c8f5");
    test_class_info(&lv, &cd_S20675C8);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20675C8(Test_S20675C8, "S20675C8", ABISELECT(160,112));

#else // __cplusplus

extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20675C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20675C8[];
Class_Descriptor cd_S20675C8 = {  "S20675C8", // class name
  bases_S20675C8, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI8S20675C8),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  S20675C9  : S20675C5 {
  __tsi64 s20675c9f0;
  char s20675c9f1[7];
  void *s20675c9f2;
  int s20675c9f3;
  ::S20677C6_nt s20675c9f4;
  ::S20677C6_nt s20675c9f5;
  char s20675c9f6[10];
  virtual void  v8(); // _ZN8S20675C92v8Ev
  ~S20675C9(); // tgen
  S20675C9(); // tgen
};
//SIG(-1 S20675C9) C1{ BC2{ VBC3{ m Fp FL[4] Fs} FD Fi FC3 FC3} v1 FL Fc[7] Fp Fi FC4{} FC4 Fc[10]}


void  S20675C9 ::v8(){vfunc_called(this, "_ZN8S20675C92v8Ev");}
S20675C9 ::~S20675C9(){ note_dtor("S20675C9", this);} // tgen
S20675C9 ::S20675C9(){ note_ctor("S20675C9", this);} // tgen

static void Test_S20675C9()
{
  extern Class_Descriptor cd_S20675C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,45)];
    init_test(&cd_S20675C9, buf);
    S20675C9 *dp, &lv = *(dp=new (buf) S20675C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,176), "sizeof(S20675C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20675C9)");
    check_base_class_offset(lv, (S20677C3*)(S20675C5*), ABISELECT(176,136), "S20675C9");
    check_base_class_offset(lv, (S20675C5*), 0, "S20675C9");
    check_field_offset(lv, s20675c9f0, ABISELECT(136,100), "S20675C9.s20675c9f0");
    check_field_offset(lv, s20675c9f1, ABISELECT(144,108), "S20675C9.s20675c9f1");
    check_field_offset(lv, s20675c9f2, ABISELECT(152,116), "S20675C9.s20675c9f2");
    check_field_offset(lv, s20675c9f3, ABISELECT(160,120), "S20675C9.s20675c9f3");
    check_field_offset(lv, s20675c9f4, ABISELECT(164,124), "S20675C9.s20675c9f4");
    check_field_offset(lv, s20675c9f5, ABISELECT(165,125), "S20675C9.s20675c9f5");
    check_field_offset(lv, s20675c9f6, ABISELECT(166,126), "S20675C9.s20675c9f6");
    test_class_info(&lv, &cd_S20675C9);
    dp->~S20675C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20675C9(Test_S20675C9, "S20675C9", ABISELECT(224,176));

#else // __cplusplus

extern void _ZN8S20675C9C1Ev();
extern void _ZN8S20675C9D1Ev();
Name_Map name_map_S20675C9[] = {
  NSPAIR(_ZN8S20675C9C1Ev),
  NSPAIR(_ZN8S20675C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
static Base_Class bases_S20675C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    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
    1, //immediately_derived
  0, 1},
  {&cd_S20675C5,    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 _ZTI8S20675C9[];
extern void _ZN8S20675C92v8Ev();
static  VTBL_ENTRY vtc_S20675C9[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C9[0]),
  (VTBL_ENTRY)&_ZN8S20675C92v8Ev,
};
extern VTBL_ENTRY _ZTV8S20675C9[];
static  VTBL_ENTRY _tg__ZTV8S20675C5__8S20675C9[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
static  VTT_ENTRY vtt_S20675C9[] = {
  {&(_ZTV8S20675C9[3]),  3,4},
  {&(_tg__ZTV8S20675C5__8S20675C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20675C9[];
extern  VTBL_ENTRY _ZTV8S20675C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C9[];
Class_Descriptor cd_S20675C9 = {  "S20675C9", // class name
  bases_S20675C9, 2,
  &(vtc_S20675C9[0]), // expected_vtbl_contents
  &(vtt_S20675C9[0]), // expected_vtt_contents
  ABISELECT(224,176), // object size
  NSPAIRA(_ZTI8S20675C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20675C9),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20675C9),2, //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  S20675C12  : virtual S20677C3 , virtual S20675C5 {
  int s20675c12f0;
  ::S20675C5 s20675c12f1;
  __tsi64 s20675c12f2;
  int s20675c12f3;
  void *s20675c12f4;
  virtual void  v9(); // _ZN9S20675C122v9Ev
  virtual void  v10(); // _ZN9S20675C123v10Ev
  ~S20675C12(); // tgen
  S20675C12(); // tgen
};
//SIG(-1 S20675C12) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 FD Fi FC2 FC2} v1 v2 Fi FC3 FL Fi Fp}


void  S20675C12 ::v9(){vfunc_called(this, "_ZN9S20675C122v9Ev");}
void  S20675C12 ::v10(){vfunc_called(this, "_ZN9S20675C123v10Ev");}
S20675C12 ::~S20675C12(){ note_dtor("S20675C12", this);} // tgen
S20675C12 ::S20675C12(){ note_ctor("S20675C12", this);} // tgen

static void Test_S20675C12()
{
  extern Class_Descriptor cd_S20675C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,77)];
    init_test(&cd_S20675C12, buf);
    S20675C12 *dp, &lv = *(dp=new (buf) S20675C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,304), "sizeof(S20675C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20675C12)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(232,164), "S20675C12");
    check_base_class_offset(lv, (S20677C3*)(S20675C5*), ABISELECT(232,164), "S20675C12");
    check_base_class_offset(lv, (S20675C5*), ABISELECT(288,204), "S20675C12");
    check_field_offset(lv, s20675c12f0, ABISELECT(8,4), "S20675C12.s20675c12f0");
    check_field_offset(lv, s20675c12f1, ABISELECT(16,8), "S20675C12.s20675c12f1");
    check_field_offset(lv, s20675c12f2, ABISELECT(208,148), "S20675C12.s20675c12f2");
    check_field_offset(lv, s20675c12f3, ABISELECT(216,156), "S20675C12.s20675c12f3");
    check_field_offset(lv, s20675c12f4, ABISELECT(224,160), "S20675C12.s20675c12f4");
    test_class_info(&lv, &cd_S20675C12);
    dp->~S20675C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20675C12(Test_S20675C12, "S20675C12", ABISELECT(432,304));

#else // __cplusplus

extern void _ZN9S20675C12C1Ev();
extern void _ZN9S20675C12D1Ev();
Name_Map name_map_S20675C12[] = {
  NSPAIR(_ZN9S20675C12C1Ev),
  NSPAIR(_ZN9S20675C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
static Base_Class bases_S20675C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(232,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_S20675C5,    ABISELECT(288,204), //bcp->offset
    6, //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 _ZTI9S20675C12[];
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY vtc_S20675C12[] = {
  ABISELECT(288,204),
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
  ABISELECT(-56,-40),
  ABISELECT(-288,-204),
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
};
extern VTBL_ENTRY _ZTV9S20675C12[];
static  VTBL_ENTRY _tg__ZTV8S20675C5__9S20675C12[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
static  VTT_ENTRY vtt_S20675C12[] = {
  {&(_ZTV9S20675C12[4]),  4,9},
  {&(_ZTV9S20675C12[9]),  9,9},
  {&(_tg__ZTV8S20675C5__9S20675C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20675C12[];
extern  VTBL_ENTRY _ZTV9S20675C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C12[];
Class_Descriptor cd_S20675C12 = {  "S20675C12", // class name
  bases_S20675C12, 2,
  &(vtc_S20675C12[0]), // expected_vtbl_contents
  &(vtt_S20675C12[0]), // expected_vtt_contents
  ABISELECT(432,304), // object size
  NSPAIRA(_ZTI9S20675C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20675C12),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20675C12),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  S20675C13  {
  ::S20677C6_nt s20675c13f0;
  ::S20675C5 s20675c13f1;
  ::S20677C6_nt s20675c13f2;
  __tsi64 s20675c13f3;
  ::S20677C6_nt s20675c13f4;
  void *s20675c13f5;
  ::S20677C6_nt s20675c13f6;
  void *s20675c13f7[2];
  ::S20677C6_nt s20675c13f8;
  virtual void  v13(); // _ZN9S20675C133v13Ev
  ~S20675C13(); // tgen
  S20675C13(); // tgen
};
//SIG(-1 S20675C13) C1{ v1 FC2{} FC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} FC2 FL FC2 Fp FC2 Fp[2] FC2}


void  S20675C13 ::v13(){vfunc_called(this, "_ZN9S20675C133v13Ev");}
S20675C13 ::~S20675C13(){ note_dtor("S20675C13", this);} // tgen
S20675C13 ::S20675C13(){ note_ctor("S20675C13", this);} // tgen

static void Test_S20675C13()
{
  extern Class_Descriptor cd_S20675C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,47)];
    init_test(&cd_S20675C13, buf);
    S20675C13 *dp, &lv = *(dp=new (buf) S20675C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,184), "sizeof(S20675C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20675C13)");
    check_field_offset(lv, s20675c13f0, ABISELECT(8,4), "S20675C13.s20675c13f0");
    check_field_offset(lv, s20675c13f1, ABISELECT(16,8), "S20675C13.s20675c13f1");
    check_field_offset(lv, s20675c13f2, ABISELECT(208,148), "S20675C13.s20675c13f2");
    check_field_offset(lv, s20675c13f3, ABISELECT(216,152), "S20675C13.s20675c13f3");
    check_field_offset(lv, s20675c13f4, ABISELECT(224,160), "S20675C13.s20675c13f4");
    check_field_offset(lv, s20675c13f5, ABISELECT(232,164), "S20675C13.s20675c13f5");
    check_field_offset(lv, s20675c13f6, ABISELECT(240,168), "S20675C13.s20675c13f6");
    check_field_offset(lv, s20675c13f7, ABISELECT(248,172), "S20675C13.s20675c13f7");
    check_field_offset(lv, s20675c13f8, ABISELECT(264,180), "S20675C13.s20675c13f8");
    test_class_info(&lv, &cd_S20675C13);
    dp->~S20675C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20675C13(Test_S20675C13, "S20675C13", ABISELECT(272,184));

#else // __cplusplus

extern void _ZN9S20675C13C1Ev();
extern void _ZN9S20675C13D1Ev();
Name_Map name_map_S20675C13[] = {
  NSPAIR(_ZN9S20675C13C1Ev),
  NSPAIR(_ZN9S20675C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20675C13[];
extern void _ZN9S20675C133v13Ev();
static  VTBL_ENTRY vtc_S20675C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C13[0]),
  (VTBL_ENTRY)&_ZN9S20675C133v13Ev,
};
extern VTBL_ENTRY _ZTI9S20675C13[];
extern  VTBL_ENTRY _ZTV9S20675C13[];
Class_Descriptor cd_S20675C13 = {  "S20675C13", // class name
  0,0,//no base classes
  &(vtc_S20675C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,184), // object size
  NSPAIRA(_ZTI9S20675C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20675C13),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  S20675C11  : virtual S20675C4 , virtual S20675C2 , virtual S20675C12 {
  ::S20677C6_nt s20675c11f0;
  ::S20677C6_nt s20675c11f1;
  int s20675c11f2;
  ::S20675C5 s20675c11f3;
  ::S20677C6_nt s20675c11f4;
  ::S20677C6_nt s20675c11f5;
  ::S20675C13 s20675c11f6;
  ::S20675C2 s20675c11f7;
  void *s20675c11f8;
  ::S20677C6_nt s20675c11f9;
  virtual void  v11(); // _ZN9S20675C113v11Ev
  virtual void  v12(); // _ZN9S20675C113v12Ev
  ~S20675C11(); // tgen
  S20675C11(); // tgen
};
//SIG(-1 S20675C11) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} BC4{ VBC3 FD Fi FC3 FC3} v3 v4 v5 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC5{ VBC3 VBC2 v6 v7 v8 FL FC6{} Fp Fc[2] FC3 Fl FC6} VBC7{ VBC3 VBC4 v9 v10 Fi FC4 FL Fi Fp} v1 v2 FC6 FC6 Fi FC4 FC6 FC6 FC8{ v11 FC6 FC4 FC6 FL FC6 Fp FC6 Fp[2] FC6} FC5 Fp FC6}


void  S20675C11 ::v11(){vfunc_called(this, "_ZN9S20675C113v11Ev");}
void  S20675C11 ::v12(){vfunc_called(this, "_ZN9S20675C113v12Ev");}
S20675C11 ::~S20675C11(){ note_dtor("S20675C11", this);} // tgen
S20675C11 ::S20675C11(){ note_ctor("S20675C11", this);} // tgen

static void Test_S20675C11()
{
  extern Class_Descriptor cd_S20675C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(128,356)];
    init_test(&cd_S20675C11, buf);
    S20675C11 *dp, &lv = *(dp=new (buf) S20675C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2032,1420), "sizeof(S20675C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20675C11)");
    check_base_class_offset(lv, (S20677C3*)(S20675C4*), ABISELECT(1496,1044), "S20675C11");
    check_base_class_offset(lv, (S20677C3*)(S20675C5*)(S20675C4*), ABISELECT(1496,1044), "S20675C11");
    check_base_class_offset(lv, (S20677C3*)(S20675C2*), ABISELECT(1496,1044), "S20675C11");
    check_base_class_offset(lv, (S20677C3*)(S20675C12*), ABISELECT(1496,1044), "S20675C11");
    /*is_ambiguous_... S20675C11::S20675C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20675C5*), ABISELECT(1496,1044), "S20675C11");
    check_base_class_offset(lv, (S20675C5*)(S20675C4*), ABISELECT(1088,752), "S20675C11");
    check_base_class_offset(lv, (S20675C4*), ABISELECT(1088,752), "S20675C11");
    check_base_class_offset(lv, (S20675C4*)(S20675C2*), ABISELECT(1088,752), "S20675C11");
    check_base_class_offset(lv, (S20675C2*), ABISELECT(1544,1084), "S20675C11");
    check_base_class_offset(lv, (S20675C5*)(S20675C12*), ABISELECT(1888,1320), "S20675C11");
    check_base_class_offset(lv, (S20675C12*), ABISELECT(1648,1156), "S20675C11");
    check_field_offset(lv, s20675c11f0, ABISELECT(8,4), "S20675C11.s20675c11f0");
    check_field_offset(lv, s20675c11f1, ABISELECT(9,5), "S20675C11.s20675c11f1");
    check_field_offset(lv, s20675c11f2, ABISELECT(12,8), "S20675C11.s20675c11f2");
    check_field_offset(lv, s20675c11f3, ABISELECT(16,12), "S20675C11.s20675c11f3");
    check_field_offset(lv, s20675c11f4, ABISELECT(208,152), "S20675C11.s20675c11f4");
    check_field_offset(lv, s20675c11f5, ABISELECT(209,153), "S20675C11.s20675c11f5");
    check_field_offset(lv, s20675c11f6, ABISELECT(224,156), "S20675C11.s20675c11f6");
    check_field_offset(lv, s20675c11f7, ABISELECT(496,340), "S20675C11.s20675c11f7");
    check_field_offset(lv, s20675c11f8, ABISELECT(1072,744), "S20675C11.s20675c11f8");
    check_field_offset(lv, s20675c11f9, ABISELECT(1080,748), "S20675C11.s20675c11f9");
    test_class_info(&lv, &cd_S20675C11);
    dp->~S20675C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20675C11(Test_S20675C11, "S20675C11", ABISELECT(2032,1420));

#else // __cplusplus

extern void _ZN9S20675C11C1Ev();
extern void _ZN9S20675C11D1Ev();
Name_Map name_map_S20675C11[] = {
  NSPAIR(_ZN9S20675C11C1Ev),
  NSPAIR(_ZN9S20675C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
extern Class_Descriptor cd_S20675C4;
extern VTBL_ENTRY _ZTI8S20675C4[];
extern  VTBL_ENTRY _ZTV8S20675C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C4[];
extern Class_Descriptor cd_S20675C2;
extern VTBL_ENTRY _ZTI8S20675C2[];
extern  VTBL_ENTRY _ZTV8S20675C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C2[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
extern Class_Descriptor cd_S20675C12;
extern VTBL_ENTRY _ZTI9S20675C12[];
extern  VTBL_ENTRY _ZTV9S20675C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C12[];
static Base_Class bases_S20675C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1496,1044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20675C5,    ABISELECT(1088,752), //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_S20675C4,    ABISELECT(1088,752), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20675C2,    ABISELECT(1544,1084), //bcp->offset
    18, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20675C5,    ABISELECT(1888,1320), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20675C12,    ABISELECT(1648,1156), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20675C11[];
extern void _ZN9S20675C113v11Ev();
extern void _ZN9S20675C113v12Ev();
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY vtc_S20675C11[] = {
  ABISELECT(1888,1320),
  ABISELECT(1648,1156),
  ABISELECT(1544,1084),
  ABISELECT(1496,1044),
  ABISELECT(1088,752),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN9S20675C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20675C113v12Ev,
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-1544,-1084),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-1648,-1156),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
  ABISELECT(-392,-276),
  ABISELECT(-1888,-1320),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
};
extern VTBL_ENTRY _ZTV9S20675C11[];
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__9S20675C11[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C4[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C58S20675C4__9S20675C11[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C2__9S20675C11[] = {
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C2[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__8S20675C2__9S20675C11[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(456,332),
  (VTBL_ENTRY)&(_ZTI8S20675C2[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__9S20675C11[] = {
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__9S20675C12__9S20675C11[] = {
  ABISELECT(-392,-276),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__A1__9S20675C11[] = {
  ABISELECT(-392,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
static  VTT_ENTRY vtt_S20675C11[] = {
  {&(_ZTV9S20675C11[7]),  7,39},
  {&(_ZTV9S20675C11[15]),  15,39},
  {&(_ZTV9S20675C11[25]),  25,39},
  {&(_ZTV9S20675C11[34]),  34,39},
  {&(_ZTV9S20675C11[39]),  39,39},
  {&(_tg__ZTV8S20675C4__9S20675C11[3]),  3,6},
  {&(_tg__ZTV8S20675C58S20675C4__9S20675C11[3]),  3,3},
  {&(_tg__ZTV8S20675C2__9S20675C11[4]),  4,7},
  {&(_tg__ZTV8S20675C4__8S20675C2__9S20675C11[6]),  6,9},
  {&(_tg__ZTV9S20675C12__9S20675C11[4]),  4,6},
  {&(_tg__ZTV8S20675C5__9S20675C12__9S20675C11[3]),  3,3},
  {&(_tg__ZTV8S20675C5__A1__9S20675C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20675C11[];
extern  VTBL_ENTRY _ZTV9S20675C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C11[];
Class_Descriptor cd_S20675C11 = {  "S20675C11", // class name
  bases_S20675C11, 6,
  &(vtc_S20675C11[0]), // expected_vtbl_contents
  &(vtt_S20675C11[0]), // expected_vtt_contents
  ABISELECT(2032,1420), // object size
  NSPAIRA(_ZTI9S20675C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20675C11),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20675C11),12, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20675C10  : virtual S20675C5 , S20675C11 , S20675C12 {
  int s20675c10f0;
  char s20675c10f1:2;
  ::S20677C6_nt s20675c10f2;
  int s20675c10f3;
  ~S20675C10(); // tgen
  S20675C10(); // tgen
};
//SIG(-1 S20675C10) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} FD Fi FC3 FC3} BC4{ VBC5{ VBC3 BC2 v1 v2 v3 Fs FL Fc Fi[2] FC2 Fp FL Fi FL Fi} VBC6{ VBC3 VBC5 v4 v5 v6 FL FC7{} Fp Fc[2] FC3 Fl FC7} VBC8{ VBC3 VBC2 v7 v8 Fi FC2 FL Fi Fp} v9 v10 FC7 FC7 Fi FC2 FC7 FC7 FC9{ v11 FC7 FC2 FC7 FL FC7 Fp FC7 Fp[2] FC7} FC6 Fp FC7} BC8 Fi Fc:2 FC7 Fi}


S20675C10 ::~S20675C10(){ note_dtor("S20675C10", this);} // tgen
S20675C10 ::S20675C10(){ note_ctor("S20675C10", this);} // tgen

static void Test_S20675C10()
{
  extern Class_Descriptor cd_S20675C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(144,400)];
    init_test(&cd_S20675C10, buf);
    S20675C10 *dp, &lv = *(dp=new (buf) S20675C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2288,1596), "sizeof(S20675C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20675C10)");
    /*is_ambiguous_... S20675C10::S20675C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20675C5*), ABISELECT(1480,1028), "S20675C10");
    check_base_class_offset(lv, (S20677C3*)(S20675C4*), ABISELECT(1480,1028), "S20675C10");
    check_base_class_offset(lv, (S20677C3*)(S20675C5*)(S20675C4*), ABISELECT(1480,1028), "S20675C10");
    check_base_class_offset(lv, (S20677C3*)(S20675C2*), ABISELECT(1480,1028), "S20675C10");
    /*is_ambiguous_... S20675C10::S20675C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20675C12*), ABISELECT(1480,1028), "S20675C10");
    /*is_ambiguous_... S20675C10::S20675C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20675C12*), ABISELECT(1480,1028), "S20675C10");
    /*is_ambiguous_... S20675C10::S20675C5 */ AMB_check_base_class_offset(lv, (S20675C5*), ABISELECT(1344,928), "S20675C10");
    /*is_ambiguous_... S20675C10::S20675C12 */ AMB_check_base_class_offset(lv, (S20675C5*)(S20675C12*), ABISELECT(1344,928), "S20675C10");
    /*is_ambiguous_... S20675C10::S20675C12 */ AMB_check_base_class_offset(lv, (S20675C5*)(S20675C12*), ABISELECT(1344,928), "S20675C10");
    check_base_class_offset(lv, (S20675C5*)(S20675C4*), ABISELECT(1536,1068), "S20675C10");
    check_base_class_offset(lv, (S20675C4*)(S20675C11*), ABISELECT(1536,1068), "S20675C10");
    check_base_class_offset(lv, (S20675C4*)(S20675C2*), ABISELECT(1536,1068), "S20675C10");
    check_base_class_offset(lv, (S20675C2*)(S20675C11*), ABISELECT(1944,1360), "S20675C10");
    check_base_class_offset(lv, (S20675C12*)(S20675C11*), ABISELECT(2048,1432), "S20675C10");
    check_base_class_offset(lv, (S20675C11*), 0, "S20675C10");
    /*is_ambiguous_... S20675C10::S20675C12 */ AMB_check_base_class_offset(lv, (S20675C12*), ABISELECT(1088,752), "S20675C10");
    check_field_offset(lv, s20675c10f0, ABISELECT(1320,916), "S20675C10.s20675c10f0");
    set_bf_and_test(lv, s20675c10f1, ABISELECT(1324,920), 0, 2, 1, "S20675C10");
    set_bf_and_test(lv, s20675c10f1, ABISELECT(1324,920), 0, 2, hide_sll(1LL<<1), "S20675C10");
    check_field_offset(lv, s20675c10f2, ABISELECT(1325,921), "S20675C10.s20675c10f2");
    check_field_offset(lv, s20675c10f3, ABISELECT(1328,924), "S20675C10.s20675c10f3");
    test_class_info(&lv, &cd_S20675C10);
    dp->~S20675C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20675C10(Test_S20675C10, "S20675C10", ABISELECT(2288,1596));

#else // __cplusplus

extern void _ZN9S20675C10C1Ev();
extern void _ZN9S20675C10D1Ev();
Name_Map name_map_S20675C10[] = {
  NSPAIR(_ZN9S20675C10C1Ev),
  NSPAIR(_ZN9S20675C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
extern Class_Descriptor cd_S20675C4;
extern VTBL_ENTRY _ZTI8S20675C4[];
extern  VTBL_ENTRY _ZTV8S20675C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C4[];
extern Class_Descriptor cd_S20675C2;
extern VTBL_ENTRY _ZTI8S20675C2[];
extern  VTBL_ENTRY _ZTV8S20675C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C2[];
extern Class_Descriptor cd_S20675C12;
extern VTBL_ENTRY _ZTI9S20675C12[];
extern  VTBL_ENTRY _ZTV9S20675C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C12[];
extern Class_Descriptor cd_S20675C11;
extern VTBL_ENTRY _ZTI9S20675C11[];
extern  VTBL_ENTRY _ZTV9S20675C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C11[];
extern Class_Descriptor cd_S20675C12;
extern VTBL_ENTRY _ZTI9S20675C12[];
extern  VTBL_ENTRY _ZTV9S20675C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C12[];
static Base_Class bases_S20675C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1480,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
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20675C5,    ABISELECT(1344,928), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20675C5,    ABISELECT(1536,1068), //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
    3, //immediately_derived
  0, 0},
  {&cd_S20675C4,    ABISELECT(1536,1068), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20675C2,    ABISELECT(1944,1360), //bcp->offset
    27, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20675C12,    ABISELECT(2048,1432), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20675C11,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20675C12,    ABISELECT(1088,752), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20675C10[];
extern void _ZN9S20675C113v11Ev();
extern void _ZN9S20675C113v12Ev();
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY vtc_S20675C10[] = {
  ABISELECT(1344,928),
  ABISELECT(2048,1432),
  ABISELECT(1944,1360),
  ABISELECT(1480,1028),
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN9S20675C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20675C113v12Ev,
  ABISELECT(256,176),
  ABISELECT(392,276),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
  ABISELECT(136,100),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-1944,-1360),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2048,-1432),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
extern VTBL_ENTRY _ZTV9S20675C10[];
extern void _ZN9S20675C113v11Ev();
extern void _ZN9S20675C113v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C11__9S20675C10[] = {
  ABISELECT(1344,928),
  ABISELECT(2048,1432),
  ABISELECT(1944,1360),
  ABISELECT(1480,1028),
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN9S20675C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20675C113v12Ev,
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__9S20675C11__9S20675C10[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C2__9S20675C11__9S20675C10[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-1944,-1360),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__9S20675C11__9S20675C10[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2048,-1432),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__A1__9S20675C11__9S20675C10[] = {
  ABISELECT(136,100),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__A__9S20675C10[] = {
  ABISELECT(256,176),
  ABISELECT(392,276),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__9S20675C12__A__9S20675C10[] = {
  ABISELECT(136,100),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__9S20675C10[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__9S20675C10[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C4[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C58S20675C4__A1__9S20675C10[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C2__9S20675C10[] = {
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C2[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__8S20675C2__9S20675C10[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI8S20675C2[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__9S20675C10[] = {
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__9S20675C12__9S20675C10[] = {
  ABISELECT(136,100),
  ABISELECT(704,504),
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
};
static  VTT_ENTRY vtt_S20675C10[] = {
  {&(_ZTV9S20675C10[7]),  7,45},
  {&(_tg__ZTV9S20675C11__9S20675C10[7]),  7,9},
  {&(_tg__ZTV8S20675C4__9S20675C11__9S20675C10[6]),  6,9},
  {&(_tg__ZTV8S20675C2__9S20675C11__9S20675C10[7]),  7,10},
  {&(_tg__ZTV9S20675C12__9S20675C11__9S20675C10[6]),  6,8},
  {&(_tg__ZTV8S20675C5__A1__9S20675C11__9S20675C10[3]),  3,3},
  {&(_tg__ZTV9S20675C12__A__9S20675C10[4]),  4,6},
  {&(_tg__ZTV8S20675C5__9S20675C12__A__9S20675C10[3]),  3,3},
  {&(_ZTV9S20675C10[18]),  18,45},
  {&(_ZTV9S20675C10[24]),  24,45},
  {&(_ZTV9S20675C10[34]),  34,45},
  {&(_ZTV9S20675C10[43]),  43,45},
  {&(_ZTV9S20675C10[13]),  13,45},
  {&(_tg__ZTV8S20675C5__9S20675C10[3]),  3,3},
  {&(_tg__ZTV8S20675C4__9S20675C10[3]),  3,6},
  {&(_tg__ZTV8S20675C58S20675C4__A1__9S20675C10[3]),  3,3},
  {&(_tg__ZTV8S20675C2__9S20675C10[4]),  4,7},
  {&(_tg__ZTV8S20675C4__8S20675C2__9S20675C10[6]),  6,9},
  {&(_tg__ZTV9S20675C12__9S20675C10[4]),  4,6},
  {&(_tg__ZTV8S20675C5__9S20675C12__9S20675C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20675C10[];
extern  VTBL_ENTRY _ZTV9S20675C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C10[];
Class_Descriptor cd_S20675C10 = {  "S20675C10", // class name
  bases_S20675C10, 8,
  &(vtc_S20675C10[0]), // expected_vtbl_contents
  &(vtt_S20675C10[0]), // expected_vtt_contents
  ABISELECT(2288,1596), // object size
  NSPAIRA(_ZTI9S20675C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20675C10),45, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20675C10),20, //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  S20675C7  : S20675C8 , S20677C3 , virtual S20675C9 , virtual S20675C10 {
  long s20675c7f0;
  virtual  ~S20675C7(); // _ZN8S20675C7D2Ev
  S20675C7(); // tgen
};
//SIG(-1 S20675C7) C1{ BC2{ BC3{ m Fp FL[4] Fs} FC3 Fi FD Fi FL Fl} BC3 VBC4{ BC5{ VBC3 FD Fi FC3 FC3} v1 FL Fc[7] Fp Fi FC6{} FC6 Fc[10]} VBC7{ VBC5 BC8{ VBC9{ VBC3 BC5 v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} VBC10{ VBC3 VBC9 v5 v6 v7 FL FC6 Fp Fc[2] FC3 Fl FC6} VBC11{ VBC3 VBC5 v8 v9 Fi FC5 FL Fi Fp} v10 v11 FC6 FC6 Fi FC5 FC6 FC6 FC12{ v12 FC6 FC5 FC6 FL FC6 Fp FC6 Fp[2] FC6} FC10 Fp FC6} BC11 Fi Fc:2 FC6 Fi} vd Fl}


 S20675C7 ::~S20675C7(){ note_dtor("S20675C7", this);}
S20675C7 ::S20675C7(){ note_ctor("S20675C7", this);} // tgen

static void Test_S20675C7()
{
  extern Class_Descriptor cd_S20675C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(169,474)];
    init_test(&cd_S20675C7, buf);
    S20675C7 *dp, &lv = *(dp=new (buf) S20675C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2688,1892), "sizeof(S20675C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20675C7)");
    check_base_class_offset(lv, (S20677C3*)(S20675C8*), ABISELECT(16,4), "S20675C7");
    check_base_class_offset(lv, (S20675C8*), ABISELECT(16,4), "S20675C7");
    /*is_ambiguous_... S20675C7::S20677C3 */ AMB_check_base_class_offset(lv, (S20677C3*), ABISELECT(168,116), "S20675C7");
    check_base_class_offset(lv, (S20677C3*)(S20675C5*)(S20675C9*), ABISELECT(400,296), "S20675C7");
    /*is_ambiguous_... S20675C7::S20675C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20675C5*), ABISELECT(400,296), "S20675C7");
    check_base_class_offset(lv, (S20677C3*)(S20675C4*), ABISELECT(400,296), "S20675C7");
    check_base_class_offset(lv, (S20677C3*)(S20675C5*)(S20675C4*), ABISELECT(400,296), "S20675C7");
    check_base_class_offset(lv, (S20677C3*)(S20675C2*), ABISELECT(400,296), "S20675C7");
    /*is_ambiguous_... S20675C7::S20675C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20675C12*), ABISELECT(400,296), "S20675C7");
    /*is_ambiguous_... S20675C10::S20675C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20675C12*)(S20675C10*), ABISELECT(400,296), "S20675C7");
    check_base_class_offset(lv, (S20675C5*)(S20675C9*), ABISELECT(224,160), "S20675C7");
    check_base_class_offset(lv, (S20675C9*), ABISELECT(224,160), "S20675C7");
    /*is_ambiguous_... S20675C10::S20675C5 */ AMB_check_base_class_offset(lv, (S20675C5*)(S20675C10*), ABISELECT(1792,1264), "S20675C7");
    /*is_ambiguous_... S20675C7::S20675C12 */ AMB_check_base_class_offset(lv, (S20675C5*)(S20675C12*), ABISELECT(1792,1264), "S20675C7");
    /*is_ambiguous_... S20675C10::S20675C12 */ AMB_check_base_class_offset(lv, (S20675C5*)(S20675C12*)(S20675C10*), ABISELECT(1792,1264), "S20675C7");
    check_base_class_offset(lv, (S20675C5*)(S20675C4*), ABISELECT(1936,1364), "S20675C7");
    check_base_class_offset(lv, (S20675C4*)(S20675C11*)(S20675C10*), ABISELECT(1936,1364), "S20675C7");
    check_base_class_offset(lv, (S20675C4*)(S20675C2*), ABISELECT(1936,1364), "S20675C7");
    check_base_class_offset(lv, (S20675C2*)(S20675C11*)(S20675C10*), ABISELECT(2344,1656), "S20675C7");
    check_base_class_offset(lv, (S20675C12*)(S20675C11*)(S20675C10*), ABISELECT(2448,1728), "S20675C7");
    check_base_class_offset(lv, (S20675C11*)(S20675C10*), ABISELECT(448,336), "S20675C7");
    /*is_ambiguous_... S20675C10::S20675C12 */ AMB_check_base_class_offset(lv, (S20675C12*)(S20675C10*), ABISELECT(1536,1088), "S20675C7");
    check_base_class_offset(lv, (S20675C10*), ABISELECT(448,336), "S20675C7");
    check_field_offset(lv, s20675c7f0, ABISELECT(216,156), "S20675C7.s20675c7f0");
    test_class_info(&lv, &cd_S20675C7);
    dp->~S20675C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20675C7(Test_S20675C7, "S20675C7", ABISELECT(2688,1892));

#else // __cplusplus

extern void _ZN8S20675C7C1Ev();
extern void _ZN8S20675C7D2Ev();
Name_Map name_map_S20675C7[] = {
  NSPAIR(_ZN8S20675C7C1Ev),
  NSPAIR(_ZN8S20675C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20675C8;
extern VTBL_ENTRY _ZTI8S20675C8[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
extern Class_Descriptor cd_S20675C9;
extern VTBL_ENTRY _ZTI8S20675C9[];
extern  VTBL_ENTRY _ZTV8S20675C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C9[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
extern Class_Descriptor cd_S20675C4;
extern VTBL_ENTRY _ZTI8S20675C4[];
extern  VTBL_ENTRY _ZTV8S20675C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C4[];
extern Class_Descriptor cd_S20675C2;
extern VTBL_ENTRY _ZTI8S20675C2[];
extern  VTBL_ENTRY _ZTV8S20675C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C2[];
extern Class_Descriptor cd_S20675C12;
extern VTBL_ENTRY _ZTI9S20675C12[];
extern  VTBL_ENTRY _ZTV9S20675C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C12[];
extern Class_Descriptor cd_S20675C11;
extern VTBL_ENTRY _ZTI9S20675C11[];
extern  VTBL_ENTRY _ZTV9S20675C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C11[];
extern Class_Descriptor cd_S20675C12;
extern VTBL_ENTRY _ZTI9S20675C12[];
extern  VTBL_ENTRY _ZTV9S20675C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C12[];
extern Class_Descriptor cd_S20675C10;
extern VTBL_ENTRY _ZTI9S20675C10[];
extern  VTBL_ENTRY _ZTV9S20675C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C10[];
static Base_Class bases_S20675C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    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
  0, 0},
  {&cd_S20675C8,    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_S20677C3,    ABISELECT(168,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_S20677C3,    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
    4, //immediately_derived
  0, 1},
  {&cd_S20675C5,    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
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20675C9,    ABISELECT(224,160), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20675C5,    ABISELECT(1792,1264), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20675C5,    ABISELECT(1936,1364), //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
    8, //immediately_derived
  0, 0},
  {&cd_S20675C4,    ABISELECT(1936,1364), //bcp->offset
    38, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20675C2,    ABISELECT(2344,1656), //bcp->offset
    47, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20675C12,    ABISELECT(2448,1728), //bcp->offset
    57, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20675C11,    ABISELECT(448,336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20675C12,    ABISELECT(1536,1088), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20675C10,    ABISELECT(448,336), //bcp->offset
    16, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20675C7[];
extern void _ZN8S20675C7D1Ev();
extern void _ZN8S20675C7D0Ev();
extern void _ZN8S20675C92v8Ev();
extern void _ZN9S20675C113v11Ev();
extern void _ZN9S20675C113v12Ev();
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY vtc_S20675C7[] = {
  ABISELECT(2448,1728),
  ABISELECT(2344,1656),
  ABISELECT(1936,1364),
  ABISELECT(1792,1264),
  ABISELECT(448,336),
  ABISELECT(400,296),
  ABISELECT(224,160),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN8S20675C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20675C7D0Ev,
  0,
  ABISELECT(176,136),
  ABISELECT(-224,-160),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN8S20675C92v8Ev,
  ABISELECT(1088,752),
  ABISELECT(1088,752),
  0,
  0,
  ABISELECT(1344,928),
  ABISELECT(2000,1392),
  ABISELECT(1896,1320),
  ABISELECT(-48,-40),
  ABISELECT(1488,1028),
  ABISELECT(-448,-336),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN9S20675C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20675C113v12Ev,
  ABISELECT(256,176),
  ABISELECT(-1136,-792),
  ABISELECT(-1536,-1088),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
  ABISELECT(-1392,-968),
  ABISELECT(-1792,-1264),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  0,
  0,
  0,
  ABISELECT(-1536,-1068),
  ABISELECT(-1936,-1364),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-1944,-1360),
  ABISELECT(-2344,-1656),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
  0,
  0,
  ABISELECT(-656,-464),
  ABISELECT(-2048,-1432),
  ABISELECT(-2448,-1728),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
extern VTBL_ENTRY _ZTV8S20675C7[];
extern void _ZN8S20675C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C9__8S20675C7[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C9[0]),
  (VTBL_ENTRY)&_ZN8S20675C92v8Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C58S20675C9__8S20675C7[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
extern void _ZN9S20675C113v11Ev();
extern void _ZN9S20675C113v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C10__8S20675C7[] = {
  ABISELECT(1344,928),
  ABISELECT(2000,1392),
  ABISELECT(1896,1320),
  ABISELECT(-48,-40),
  ABISELECT(1488,1028),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN9S20675C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20675C113v12Ev,
};
extern void _ZN9S20675C113v11Ev();
extern void _ZN9S20675C113v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C119S20675C10__8S20675C7[] = {
  ABISELECT(1344,928),
  ABISELECT(2000,1392),
  ABISELECT(1896,1320),
  ABISELECT(-48,-40),
  ABISELECT(1488,1028),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN9S20675C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20675C113v12Ev,
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__9S20675C119S20675C10__8S20675C7[] = {
  0,
  0,
  0,
  ABISELECT(-1536,-1068),
  ABISELECT(-1488,-1028),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C2__9S20675C119S20675C10__8S20675C7[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-1944,-1360),
  ABISELECT(-1896,-1320),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__9S20675C119S20675C10__8S20675C7[] = {
  0,
  0,
  ABISELECT(-656,-464),
  ABISELECT(-2048,-1432),
  ABISELECT(-2000,-1392),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__A1__9S20675C119S20675C10__8S20675C7[] = {
  ABISELECT(-1392,-968),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C129S20675C10__A1__8S20675C7[] = {
  ABISELECT(256,176),
  ABISELECT(-1136,-792),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__9S20675C129S20675C10__A1__8S20675C7[] = {
  ABISELECT(-1392,-968),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__9S20675C10__8S20675C7[] = {
  ABISELECT(-1392,-968),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__9S20675C10__8S20675C7[] = {
  0,
  0,
  0,
  ABISELECT(-1536,-1068),
  ABISELECT(-1488,-1028),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C2__9S20675C10__8S20675C7[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-1944,-1360),
  ABISELECT(-1896,-1320),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__9S20675C10__8S20675C7[] = {
  0,
  0,
  ABISELECT(-656,-464),
  ABISELECT(-2048,-1432),
  ABISELECT(-2000,-1392),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__A__9S20675C10__8S20675C7[] = {
  ABISELECT(256,176),
  ABISELECT(-1136,-792),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__A1__8S20675C7[] = {
  ABISELECT(-1392,-968),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__8S20675C7[] = {
  ABISELECT(-1536,-1068),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C4[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C58S20675C4__A2__8S20675C7[] = {
  ABISELECT(-1536,-1068),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C2__8S20675C7[] = {
  ABISELECT(-408,-292),
  ABISELECT(-1944,-1360),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C2[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__8S20675C2__8S20675C7[] = {
  0,
  0,
  0,
  ABISELECT(-1536,-1068),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI8S20675C2[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__8S20675C7[] = {
  ABISELECT(-656,-464),
  ABISELECT(-2048,-1432),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__9S20675C12__8S20675C7[] = {
  ABISELECT(-1392,-968),
  ABISELECT(656,464),
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
};
static  VTT_ENTRY vtt_S20675C7[] = {
  {&(_ZTV8S20675C7[9]),  9,65},
  {&(_ZTV8S20675C7[15]),  15,65},
  {&(_ZTV8S20675C7[27]),  27,65},
  {&(_ZTV8S20675C7[38]),  38,65},
  {&(_ZTV8S20675C7[44]),  44,65},
  {&(_ZTV8S20675C7[54]),  54,65},
  {&(_ZTV8S20675C7[63]),  63,65},
  {&(_ZTV8S20675C7[33]),  33,65},
  {&(_tg__ZTV8S20675C9__8S20675C7[3]),  3,4},
  {&(_tg__ZTV8S20675C58S20675C9__8S20675C7[3]),  3,3},
  {&(_tg__ZTV9S20675C10__8S20675C7[7]),  7,9},
  {&(_tg__ZTV9S20675C119S20675C10__8S20675C7[7]),  7,9},
  {&(_tg__ZTV8S20675C4__9S20675C119S20675C10__8S20675C7[6]),  6,9},
  {&(_tg__ZTV8S20675C2__9S20675C119S20675C10__8S20675C7[7]),  7,10},
  {&(_tg__ZTV9S20675C12__9S20675C119S20675C10__8S20675C7[6]),  6,8},
  {&(_tg__ZTV8S20675C5__A1__9S20675C119S20675C10__8S20675C7[3]),  3,3},
  {&(_tg__ZTV9S20675C129S20675C10__A1__8S20675C7[4]),  4,6},
  {&(_tg__ZTV8S20675C5__9S20675C129S20675C10__A1__8S20675C7[3]),  3,3},
  {&(_tg__ZTV8S20675C5__9S20675C10__8S20675C7[3]),  3,3},
  {&(_tg__ZTV8S20675C4__9S20675C10__8S20675C7[6]),  6,9},
  {&(_tg__ZTV8S20675C2__9S20675C10__8S20675C7[7]),  7,10},
  {&(_tg__ZTV9S20675C12__9S20675C10__8S20675C7[6]),  6,8},
  {&(_tg__ZTV9S20675C12__A__9S20675C10__8S20675C7[4]),  4,6},
  {&(_tg__ZTV8S20675C5__A1__8S20675C7[3]),  3,3},
  {&(_tg__ZTV8S20675C4__8S20675C7[3]),  3,6},
  {&(_tg__ZTV8S20675C58S20675C4__A2__8S20675C7[3]),  3,3},
  {&(_tg__ZTV8S20675C2__8S20675C7[4]),  4,7},
  {&(_tg__ZTV8S20675C4__8S20675C2__8S20675C7[6]),  6,9},
  {&(_tg__ZTV9S20675C12__8S20675C7[4]),  4,6},
  {&(_tg__ZTV8S20675C5__9S20675C12__8S20675C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20675C7[];
extern  VTBL_ENTRY _ZTV8S20675C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C7[];
Class_Descriptor cd_S20675C7 = {  "S20675C7", // class name
  bases_S20675C7, 14,
  &(vtc_S20675C7[0]), // expected_vtbl_contents
  &(vtt_S20675C7[0]), // expected_vtt_contents
  ABISELECT(2688,1892), // object size
  NSPAIRA(_ZTI8S20675C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20675C7),65, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20675C7),30, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20675C14  : virtual S20675C13 {
  ::S20680C5 s20675c14f0;
  ::S20677C6_nt s20675c14f1;
  long s20675c14f2;
  int s20675c14f3[2];
  virtual void  v14(); // _ZN9S20675C143v14Ev
  ~S20675C14(); // tgen
  S20675C14(); // tgen
};
//SIG(-1 S20675C14) C1{ VBC2{ v2 FC3{} FC4{ VBC5{ m Fp FL[4] Fs} FD Fi FC5 FC5} FC3 FL FC3 Fp FC3 Fp[2] FC3} v1 FC6{ BC7{ VBC5 BC8{ VBC5 FD Fi FC5 FC5} v4 v5 v6 Fs FL Fc Fi[2] FC8 Fp FL Fi FL Fi} VBC9{ VBC5 VBC8 v7 v8 Fi FC8 FL Fi Fp} BC8 VBC10{ v9 FC3 FC8 FC3 FL FC3 Fp FC3 Fp[2] FC3} VBC11{ BC8 v10 FL Fc[7] Fp Fi FC3 FC3 Fc[10]} v3 Fl FL FD FC3} FC3 Fl Fi[2]}


void  S20675C14 ::v14(){vfunc_called(this, "_ZN9S20675C143v14Ev");}
S20675C14 ::~S20675C14(){ note_dtor("S20675C14", this);} // tgen
S20675C14 ::S20675C14(){ note_ctor("S20675C14", this);} // tgen

static void Test_S20675C14()
{
  extern Class_Descriptor cd_S20675C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(114,313)];
    init_test(&cd_S20675C14, buf);
    S20675C14 *dp, &lv = *(dp=new (buf) S20675C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1808,1248), "sizeof(S20675C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20675C14)");
    check_base_class_offset(lv, (S20675C13*), ABISELECT(1536,1064), "S20675C14");
    check_field_offset(lv, s20675c14f0, ABISELECT(16,4), "S20675C14.s20675c14f0");
    check_field_offset(lv, s20675c14f1, ABISELECT(1504,1048), "S20675C14.s20675c14f1");
    check_field_offset(lv, s20675c14f2, ABISELECT(1512,1052), "S20675C14.s20675c14f2");
    check_field_offset(lv, s20675c14f3, ABISELECT(1520,1056), "S20675C14.s20675c14f3");
    test_class_info(&lv, &cd_S20675C14);
    dp->~S20675C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20675C14(Test_S20675C14, "S20675C14", ABISELECT(1808,1248));

#else // __cplusplus

extern void _ZN9S20675C14C1Ev();
extern void _ZN9S20675C14D1Ev();
Name_Map name_map_S20675C14[] = {
  NSPAIR(_ZN9S20675C14C1Ev),
  NSPAIR(_ZN9S20675C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20675C13;
extern VTBL_ENTRY _ZTI9S20675C13[];
extern  VTBL_ENTRY _ZTV9S20675C13[];
static Base_Class bases_S20675C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20675C13,    ABISELECT(1536,1064), //bcp->offset
    4, //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 _ZTI9S20675C14[];
extern void _ZN9S20675C143v14Ev();
extern void _ZN9S20675C133v13Ev();
static  VTBL_ENTRY vtc_S20675C14[] = {
  ABISELECT(1536,1064),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C14[0]),
  (VTBL_ENTRY)&_ZN9S20675C143v14Ev,
  0,
  ABISELECT(-1536,-1064),
  (VTBL_ENTRY)&(_ZTI9S20675C14[0]),
  (VTBL_ENTRY)&_ZN9S20675C133v13Ev,
};
extern VTBL_ENTRY _ZTV9S20675C14[];
static  VTT_ENTRY vtt_S20675C14[] = {
  {&(_ZTV9S20675C14[3]),  3,8},
  {&(_ZTV9S20675C14[7]),  7,8},
};
extern VTBL_ENTRY _ZTI9S20675C14[];
extern  VTBL_ENTRY _ZTV9S20675C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C14[];
Class_Descriptor cd_S20675C14 = {  "S20675C14", // class name
  bases_S20675C14, 1,
  &(vtc_S20675C14[0]), // expected_vtbl_contents
  &(vtt_S20675C14[0]), // expected_vtt_contents
  ABISELECT(1808,1248), // object size
  NSPAIRA(_ZTI9S20675C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20675C14),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20675C14),2, //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  S20675C1  : virtual S20675C2 , S20675C7 , virtual S20675C14 {
  int s20675c1f0;
  int s20675c1f1:13;
  ::S20677C6_nt s20675c1f2;
  ::S20677C6_nt s20675c1f3;
  void *s20675c1f4;
  ::S20677C6_nt s20675c1f5;
  __tsi64 s20675c1f6;
  char s20675c1f7;
  ::S20677C6_nt s20675c1f8;
  virtual void  v1(); // _ZN8S20675C12v1Ev
  ~S20675C1(); // tgen
  S20675C1(); // tgen
};
//SIG(1 S20675C1) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} VBC4{ VBC3 BC5{ VBC3 FD Fi FC3 FC3} v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} v5 v6 v7 FL FC6{} Fp Fc[2] FC3 Fl FC6} BC7{ BC8{ BC3 FC3 Fi FD Fi FL Fl} BC3 VBC9{ BC5 v8 FL Fc[7] Fp Fi FC6 FC6 Fc[10]} VBC10{ VBC5 BC11{ VBC4 VBC2 VBC12{ VBC3 VBC5 v9 v10 Fi FC5 FL Fi Fp} v11 v12 FC6 FC6 Fi FC5 FC6 FC6 FC13{ v13 FC6 FC5 FC6 FL FC6 Fp FC6 Fp[2] FC6} FC2 Fp FC6} BC12 Fi Fc:2 FC6 Fi} vd Fl} VBC14{ VBC13 v14 FC15{ BC16{ VBC3 BC17{ VBC3 FD Fi FC3 FC3} v16 v17 v18 Fs FL Fc Fi[2] FC17 Fp FL Fi FL Fi} VBC18{ VBC3 VBC17 v19 v20 Fi FC17 FL Fi Fp} BC17 VBC19{ v21 FC6 FC17 FC6 FL FC6 Fp FC6 Fp[2] FC6} VBC20{ BC17 v22 FL Fc[7] Fp Fi FC6 FC6 Fc[10]} v15 Fl FL FD FC6} FC6 Fl Fi[2]} v1 Fi Fi:13 FC6 FC6 Fp FC6 FL Fc FC6}


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

static void Test_S20675C1()
{
  extern Class_Descriptor cd_S20675C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(285,793)];
    init_test(&cd_S20675C1, buf);
    S20675C1 *dp, &lv = *(dp=new (buf) S20675C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4544,3168), "sizeof(S20675C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20675C1)");
    check_base_class_offset(lv, (S20677C3*)(S20675C2*), ABISELECT(368,260), "S20675C1");
    check_base_class_offset(lv, (S20677C3*)(S20675C4*), ABISELECT(368,260), "S20675C1");
    check_base_class_offset(lv, (S20677C3*)(S20675C5*)(S20675C4*), ABISELECT(368,260), "S20675C1");
    check_base_class_offset(lv, (S20677C3*)(S20675C5*)(S20675C9*), ABISELECT(368,260), "S20675C1");
    /*is_ambiguous_... S20675C1::S20675C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20675C5*), ABISELECT(368,260), "S20675C1");
    /*is_ambiguous_... S20675C1::S20675C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20675C12*), ABISELECT(368,260), "S20675C1");
    /*is_ambiguous_... S20675C10::S20675C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20675C12*)(S20675C10*), ABISELECT(368,260), "S20675C1");
    check_base_class_offset(lv, (S20675C5*)(S20675C4*), ABISELECT(416,300), "S20675C1");
    check_base_class_offset(lv, (S20675C4*)(S20675C2*), ABISELECT(416,300), "S20675C1");
    check_base_class_offset(lv, (S20675C4*)(S20675C11*)(S20675C10*), ABISELECT(416,300), "S20675C1");
    check_base_class_offset(lv, (S20675C2*), ABISELECT(264,188), "S20675C1");
    check_base_class_offset(lv, (S20675C2*)(S20675C11*)(S20675C10*), ABISELECT(264,188), "S20675C1");
    check_base_class_offset(lv, (S20677C3*)(S20675C8*)(S20675C7*), ABISELECT(16,4), "S20675C1");
    check_base_class_offset(lv, (S20675C8*)(S20675C7*), ABISELECT(16,4), "S20675C1");
    /*is_ambiguous_... S20675C7::S20677C3 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20675C7*), ABISELECT(168,116), "S20675C1");
    check_base_class_offset(lv, (S20675C5*)(S20675C9*), ABISELECT(832,592), "S20675C1");
    check_base_class_offset(lv, (S20675C9*)(S20675C7*), ABISELECT(832,592), "S20675C1");
    /*is_ambiguous_... S20675C10::S20675C5 */ AMB_check_base_class_offset(lv, (S20675C5*)(S20675C10*), ABISELECT(2352,1656), "S20675C1");
    /*is_ambiguous_... S20675C1::S20675C12 */ AMB_check_base_class_offset(lv, (S20675C5*)(S20675C12*), ABISELECT(2352,1656), "S20675C1");
    /*is_ambiguous_... S20675C10::S20675C12 */ AMB_check_base_class_offset(lv, (S20675C5*)(S20675C12*)(S20675C10*), ABISELECT(2352,1656), "S20675C1");
    check_base_class_offset(lv, (S20675C12*)(S20675C11*)(S20675C10*), ABISELECT(2496,1756), "S20675C1");
    check_base_class_offset(lv, (S20675C11*)(S20675C10*), ABISELECT(1008,728), "S20675C1");
    /*is_ambiguous_... S20675C10::S20675C12 */ AMB_check_base_class_offset(lv, (S20675C12*)(S20675C10*), ABISELECT(2096,1480), "S20675C1");
    check_base_class_offset(lv, (S20675C10*)(S20675C7*), ABISELECT(1008,728), "S20675C1");
    check_base_class_offset(lv, (S20675C7*), 0, "S20675C1");
    check_base_class_offset(lv, (S20675C13*)(S20675C14*), ABISELECT(4272,2984), "S20675C1");
    check_base_class_offset(lv, (S20675C14*), ABISELECT(2736,1920), "S20675C1");
    check_field_offset(lv, s20675c1f0, ABISELECT(224,160), "S20675C1.s20675c1f0");
    set_bf_and_test(lv, s20675c1f1, ABISELECT(228,164), 0, 13, 1, "S20675C1");
    set_bf_and_test(lv, s20675c1f1, ABISELECT(228,164), 0, 13, hide_sll(1LL<<12), "S20675C1");
    check_field_offset(lv, s20675c1f2, ABISELECT(230,166), "S20675C1.s20675c1f2");
    check_field_offset(lv, s20675c1f3, ABISELECT(231,167), "S20675C1.s20675c1f3");
    check_field_offset(lv, s20675c1f4, ABISELECT(232,168), "S20675C1.s20675c1f4");
    check_field_offset(lv, s20675c1f5, ABISELECT(240,172), "S20675C1.s20675c1f5");
    check_field_offset(lv, s20675c1f6, ABISELECT(248,176), "S20675C1.s20675c1f6");
    check_field_offset(lv, s20675c1f7, ABISELECT(256,184), "S20675C1.s20675c1f7");
    check_field_offset(lv, s20675c1f8, ABISELECT(257,185), "S20675C1.s20675c1f8");
    test_class_info(&lv, &cd_S20675C1);
    dp->~S20675C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20675C1(Test_S20675C1, "S20675C1", ABISELECT(4544,3168));

#else // __cplusplus

extern void _ZN8S20675C1C1Ev();
extern void _ZN8S20675C1D1Ev();
Name_Map name_map_S20675C1[] = {
  NSPAIR(_ZN8S20675C1C1Ev),
  NSPAIR(_ZN8S20675C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
extern Class_Descriptor cd_S20675C4;
extern VTBL_ENTRY _ZTI8S20675C4[];
extern  VTBL_ENTRY _ZTV8S20675C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C4[];
extern Class_Descriptor cd_S20675C2;
extern VTBL_ENTRY _ZTI8S20675C2[];
extern  VTBL_ENTRY _ZTV8S20675C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C2[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20675C8;
extern VTBL_ENTRY _ZTI8S20675C8[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
extern Class_Descriptor cd_S20675C9;
extern VTBL_ENTRY _ZTI8S20675C9[];
extern  VTBL_ENTRY _ZTV8S20675C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C9[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
extern Class_Descriptor cd_S20675C12;
extern VTBL_ENTRY _ZTI9S20675C12[];
extern  VTBL_ENTRY _ZTV9S20675C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C12[];
extern Class_Descriptor cd_S20675C11;
extern VTBL_ENTRY _ZTI9S20675C11[];
extern  VTBL_ENTRY _ZTV9S20675C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C11[];
extern Class_Descriptor cd_S20675C12;
extern VTBL_ENTRY _ZTI9S20675C12[];
extern  VTBL_ENTRY _ZTV9S20675C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C12[];
extern Class_Descriptor cd_S20675C10;
extern VTBL_ENTRY _ZTI9S20675C10[];
extern  VTBL_ENTRY _ZTV9S20675C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C10[];
extern Class_Descriptor cd_S20675C7;
extern VTBL_ENTRY _ZTI8S20675C7[];
extern  VTBL_ENTRY _ZTV8S20675C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C7[];
extern Class_Descriptor cd_S20675C13;
extern VTBL_ENTRY _ZTI9S20675C13[];
extern  VTBL_ENTRY _ZTV9S20675C13[];
extern Class_Descriptor cd_S20675C14;
extern VTBL_ENTRY _ZTI9S20675C14[];
extern  VTBL_ENTRY _ZTV9S20675C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C14[];
static Base_Class bases_S20675C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(368,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
    1, //immediately_derived
  0, 1},
  {&cd_S20675C5,    ABISELECT(416,300), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20675C4,    ABISELECT(416,300), //bcp->offset
    24, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20675C2,    ABISELECT(264,188), //bcp->offset
    14, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C3,    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_S20675C8,    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_S20677C3,    ABISELECT(168,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
    14, //immediately_derived
  0, 0},
  {&cd_S20675C5,    ABISELECT(832,592), //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
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20675C9,    ABISELECT(832,592), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20675C5,    ABISELECT(2352,1656), //bcp->offset
    57, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20675C12,    ABISELECT(2496,1756), //bcp->offset
    60, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20675C11,    ABISELECT(1008,728), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //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
    13, //immediately_derived
  0, 0},
  {&cd_S20675C12,    ABISELECT(2096,1480), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20675C10,    ABISELECT(1008,728), //bcp->offset
    38, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20675C7,    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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20675C13,    ABISELECT(4272,2984), //bcp->offset
    73, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S20675C14,    ABISELECT(2736,1920), //bcp->offset
    68, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20675C1[];
extern void _ZN8S20675C1D1Ev();
extern void _ZN8S20675C1D0Ev();
extern void _ZN8S20675C12v1Ev();
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
extern void _ZN8S20675C92v8Ev();
extern void _ZN9S20675C113v11Ev();
extern void _ZN9S20675C113v12Ev();
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
extern void _ZN9S20675C143v14Ev();
extern void _ZN9S20675C133v13Ev();
static  VTBL_ENTRY vtc_S20675C1[] = {
  ABISELECT(4272,2984),
  ABISELECT(2736,1920),
  ABISELECT(2496,1756),
  ABISELECT(264,188),
  ABISELECT(416,300),
  ABISELECT(2352,1656),
  ABISELECT(1008,728),
  ABISELECT(368,260),
  ABISELECT(832,592),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C1[0]),
  (VTBL_ENTRY)&_ZN8S20675C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20675C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20675C12v1Ev,
  0,
  0,
  0,
  ABISELECT(152,112),
  ABISELECT(104,72),
  ABISELECT(-264,-188),
  (VTBL_ENTRY)&(_ZTI8S20675C1[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
  0,
  0,
  0,
  ABISELECT(-48,-40),
  ABISELECT(-416,-300),
  (VTBL_ENTRY)&(_ZTI8S20675C1[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
  0,
  ABISELECT(-464,-332),
  ABISELECT(-832,-592),
  (VTBL_ENTRY)&(_ZTI8S20675C1[0]),
  (VTBL_ENTRY)&_ZN8S20675C92v8Ev,
  ABISELECT(1088,752),
  ABISELECT(1088,752),
  0,
  0,
  ABISELECT(1344,928),
  ABISELECT(1488,1028),
  ABISELECT(-744,-540),
  ABISELECT(-640,-468),
  ABISELECT(-592,-428),
  ABISELECT(-1008,-728),
  (VTBL_ENTRY)&(_ZTI8S20675C1[0]),
  (VTBL_ENTRY)&_ZN9S20675C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20675C113v12Ev,
  ABISELECT(256,176),
  ABISELECT(-1728,-1220),
  ABISELECT(-2096,-1480),
  (VTBL_ENTRY)&(_ZTI8S20675C1[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
  ABISELECT(-1984,-1396),
  ABISELECT(-2352,-1656),
  (VTBL_ENTRY)&(_ZTI8S20675C1[0]),
  0,
  0,
  ABISELECT(-144,-100),
  ABISELECT(-2128,-1496),
  ABISELECT(-2496,-1756),
  (VTBL_ENTRY)&(_ZTI8S20675C1[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
  0,
  ABISELECT(1536,1064),
  ABISELECT(-2736,-1920),
  (VTBL_ENTRY)&(_ZTI8S20675C1[0]),
  (VTBL_ENTRY)&_ZN9S20675C143v14Ev,
  0,
  ABISELECT(-4272,-2984),
  (VTBL_ENTRY)&(_ZTI8S20675C1[0]),
  (VTBL_ENTRY)&_ZN9S20675C133v13Ev,
};
extern VTBL_ENTRY _ZTV8S20675C1[];
extern void _ZN8S20675C7D1Ev();
extern void _ZN8S20675C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C7__8S20675C1[] = {
  ABISELECT(2496,1756),
  ABISELECT(264,188),
  ABISELECT(416,300),
  ABISELECT(2352,1656),
  ABISELECT(1008,728),
  ABISELECT(368,260),
  ABISELECT(832,592),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN8S20675C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20675C7D0Ev,
};
extern void _ZN8S20675C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C9__8S20675C7__8S20675C1[] = {
  0,
  ABISELECT(-464,-332),
  ABISELECT(-832,-592),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN8S20675C92v8Ev,
};
extern void _ZN9S20675C113v11Ev();
extern void _ZN9S20675C113v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C10__8S20675C7__8S20675C1[] = {
  ABISELECT(1088,752),
  ABISELECT(1088,752),
  0,
  0,
  ABISELECT(1344,928),
  ABISELECT(1488,1028),
  ABISELECT(-744,-540),
  ABISELECT(-640,-468),
  ABISELECT(-592,-428),
  ABISELECT(-1008,-728),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN9S20675C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20675C113v12Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__A1__8S20675C7__8S20675C1[] = {
  ABISELECT(-1984,-1396),
  ABISELECT(-2352,-1656),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__8S20675C7__8S20675C1[] = {
  0,
  0,
  0,
  ABISELECT(-48,-40),
  ABISELECT(-416,-300),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C2__8S20675C7__8S20675C1[] = {
  0,
  0,
  0,
  ABISELECT(152,112),
  ABISELECT(104,72),
  ABISELECT(-264,-188),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__8S20675C7__8S20675C1[] = {
  0,
  0,
  ABISELECT(-144,-100),
  ABISELECT(-2128,-1496),
  ABISELECT(-2496,-1756),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C129S20675C10__A1__8S20675C7__8S20675C1[] = {
  ABISELECT(256,176),
  ABISELECT(-1728,-1220),
  ABISELECT(-2096,-1480),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C2__8S20675C1[] = {
  ABISELECT(152,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C2[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__8S20675C2__8S20675C1[] = {
  0,
  0,
  0,
  ABISELECT(-48,-40),
  ABISELECT(-152,-112),
  (VTBL_ENTRY)&(_ZTI8S20675C2[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__8S20675C1[] = {
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C4[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C58S20675C4__8S20675C1[] = {
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
extern void _ZN8S20675C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C9__8S20675C1[] = {
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C9[0]),
  (VTBL_ENTRY)&_ZN8S20675C92v8Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C58S20675C9__A1__8S20675C1[] = {
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
extern void _ZN9S20675C113v11Ev();
extern void _ZN9S20675C113v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C10__8S20675C1[] = {
  ABISELECT(1344,928),
  ABISELECT(1488,1028),
  ABISELECT(-744,-540),
  ABISELECT(-640,-468),
  ABISELECT(-592,-428),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN9S20675C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20675C113v12Ev,
};
extern void _ZN9S20675C113v11Ev();
extern void _ZN9S20675C113v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C119S20675C10__8S20675C1[] = {
  ABISELECT(1344,928),
  ABISELECT(1488,1028),
  ABISELECT(-744,-540),
  ABISELECT(-640,-468),
  ABISELECT(-592,-428),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN9S20675C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20675C113v12Ev,
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__9S20675C119S20675C10__8S20675C1[] = {
  0,
  0,
  0,
  ABISELECT(-48,-40),
  ABISELECT(592,428),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C2__9S20675C119S20675C10__8S20675C1[] = {
  0,
  0,
  0,
  ABISELECT(152,112),
  ABISELECT(104,72),
  ABISELECT(744,540),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__9S20675C119S20675C10__8S20675C1[] = {
  0,
  0,
  ABISELECT(-144,-100),
  ABISELECT(-2128,-1496),
  ABISELECT(-1488,-1028),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__A1__9S20675C119S20675C10__8S20675C1[] = {
  ABISELECT(-1984,-1396),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C129S20675C10__A1__8S20675C1[] = {
  ABISELECT(256,176),
  ABISELECT(-1728,-1220),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__9S20675C129S20675C10__A1__8S20675C1[] = {
  ABISELECT(-1984,-1396),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__9S20675C10__8S20675C1[] = {
  ABISELECT(-1984,-1396),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__9S20675C10__8S20675C1[] = {
  0,
  0,
  0,
  ABISELECT(-48,-40),
  ABISELECT(592,428),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C2__9S20675C10__8S20675C1[] = {
  0,
  0,
  0,
  ABISELECT(152,112),
  ABISELECT(104,72),
  ABISELECT(744,540),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__9S20675C10__8S20675C1[] = {
  0,
  0,
  ABISELECT(-144,-100),
  ABISELECT(-2128,-1496),
  ABISELECT(-1488,-1028),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__A__9S20675C10__8S20675C1[] = {
  ABISELECT(256,176),
  ABISELECT(-1728,-1220),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__A2__8S20675C1[] = {
  ABISELECT(-1984,-1396),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__8S20675C1[] = {
  ABISELECT(-144,-100),
  ABISELECT(-2128,-1496),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__9S20675C12__8S20675C1[] = {
  ABISELECT(-1984,-1396),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
};
extern void _ZN9S20675C143v14Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C14__8S20675C1[] = {
  ABISELECT(1536,1064),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C14[0]),
  (VTBL_ENTRY)&_ZN9S20675C143v14Ev,
};
extern void _ZN9S20675C133v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C13__9S20675C14__8S20675C1[] = {
  0,
  ABISELECT(-1536,-1064),
  (VTBL_ENTRY)&(_ZTI9S20675C14[0]),
  (VTBL_ENTRY)&_ZN9S20675C133v13Ev,
};
static  VTT_ENTRY vtt_S20675C1[] = {
  {&(_ZTV8S20675C1[11]),  11,77},
  {&(_tg__ZTV8S20675C7__8S20675C1[9]),  9,11},
  {&(_tg__ZTV8S20675C9__8S20675C7__8S20675C1[4]),  4,5},
  {&(_tg__ZTV9S20675C10__8S20675C7__8S20675C1[11]),  11,13},
  {&(_tg__ZTV8S20675C5__A1__8S20675C7__8S20675C1[3]),  3,3},
  {&(_tg__ZTV8S20675C4__8S20675C7__8S20675C1[6]),  6,9},
  {&(_tg__ZTV8S20675C2__8S20675C7__8S20675C1[7]),  7,10},
  {&(_tg__ZTV9S20675C12__8S20675C7__8S20675C1[6]),  6,8},
  {&(_tg__ZTV9S20675C129S20675C10__A1__8S20675C7__8S20675C1[4]),  4,6},
  {&(_ZTV8S20675C1[21]),  21,77},
  {&(_ZTV8S20675C1[30]),  30,77},
  {&(_ZTV8S20675C1[37]),  37,77},
  {&(_ZTV8S20675C1[49]),  49,77},
  {&(_ZTV8S20675C1[60]),  60,77},
  {&(_ZTV8S20675C1[66]),  66,77},
  {&(_ZTV8S20675C1[55]),  55,77},
  {&(_ZTV8S20675C1[72]),  72,77},
  {&(_ZTV8S20675C1[76]),  76,77},
  {&(_tg__ZTV8S20675C2__8S20675C1[4]),  4,7},
  {&(_tg__ZTV8S20675C4__8S20675C2__8S20675C1[6]),  6,9},
  {&(_tg__ZTV8S20675C4__8S20675C1[3]),  3,6},
  {&(_tg__ZTV8S20675C58S20675C4__8S20675C1[3]),  3,3},
  {&(_tg__ZTV8S20675C9__8S20675C1[3]),  3,4},
  {&(_tg__ZTV8S20675C58S20675C9__A1__8S20675C1[3]),  3,3},
  {&(_tg__ZTV9S20675C10__8S20675C1[7]),  7,9},
  {&(_tg__ZTV9S20675C119S20675C10__8S20675C1[7]),  7,9},
  {&(_tg__ZTV8S20675C4__9S20675C119S20675C10__8S20675C1[6]),  6,9},
  {&(_tg__ZTV8S20675C2__9S20675C119S20675C10__8S20675C1[7]),  7,10},
  {&(_tg__ZTV9S20675C12__9S20675C119S20675C10__8S20675C1[6]),  6,8},
  {&(_tg__ZTV8S20675C5__A1__9S20675C119S20675C10__8S20675C1[3]),  3,3},
  {&(_tg__ZTV9S20675C129S20675C10__A1__8S20675C1[4]),  4,6},
  {&(_tg__ZTV8S20675C5__9S20675C129S20675C10__A1__8S20675C1[3]),  3,3},
  {&(_tg__ZTV8S20675C5__9S20675C10__8S20675C1[3]),  3,3},
  {&(_tg__ZTV8S20675C4__9S20675C10__8S20675C1[6]),  6,9},
  {&(_tg__ZTV8S20675C2__9S20675C10__8S20675C1[7]),  7,10},
  {&(_tg__ZTV9S20675C12__9S20675C10__8S20675C1[6]),  6,8},
  {&(_tg__ZTV9S20675C12__A__9S20675C10__8S20675C1[4]),  4,6},
  {&(_tg__ZTV8S20675C5__A2__8S20675C1[3]),  3,3},
  {&(_tg__ZTV9S20675C12__8S20675C1[4]),  4,6},
  {&(_tg__ZTV8S20675C5__9S20675C12__8S20675C1[3]),  3,3},
  {&(_tg__ZTV9S20675C14__8S20675C1[3]),  3,4},
  {&(_tg__ZTV9S20675C13__9S20675C14__8S20675C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20675C1[];
extern  VTBL_ENTRY _ZTV8S20675C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C1[];
Class_Descriptor cd_S20675C1 = {  "S20675C1", // class name
  bases_S20675C1, 17,
  &(vtc_S20675C1[0]), // expected_vtbl_contents
  &(vtt_S20675C1[0]), // expected_vtt_contents
  ABISELECT(4544,3168), // object size
  NSPAIRA(_ZTI8S20675C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20675C1),77, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20675C1),42, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20676C5  : virtual S20677C3 {
  long double s20676c5f0;
  int s20676c5f1;
  ::S20677C3 s20676c5f2;
  ::S20677C3 s20676c5f3;
  ~S20676C5(); // tgen
  S20676C5(); // tgen
};
//SIG(-1 S20676C5) C1{ VBC2{ m Fp FL[4] Fs} FD Fi FC2 FC2}


S20676C5 ::~S20676C5(){ note_dtor("S20676C5", this);} // tgen
S20676C5 ::S20676C5(){ note_ctor("S20676C5", this);} // tgen

static void Test_S20676C5()
{
  extern Class_Descriptor cd_S20676C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,36)];
    init_test(&cd_S20676C5, buf);
    S20676C5 *dp, &lv = *(dp=new (buf) S20676C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S20676C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20676C5)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(136,100), "S20676C5");
    check_field_offset(lv, s20676c5f0, ABISELECT(16,4), "S20676C5.s20676c5f0");
    check_field_offset(lv, s20676c5f1, ABISELECT(32,16), "S20676C5.s20676c5f1");
    check_field_offset(lv, s20676c5f2, ABISELECT(40,20), "S20676C5.s20676c5f2");
    check_field_offset(lv, s20676c5f3, ABISELECT(88,60), "S20676C5.s20676c5f3");
    test_class_info(&lv, &cd_S20676C5);
    dp->~S20676C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20676C5(Test_S20676C5, "S20676C5", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN8S20676C5C1Ev();
extern void _ZN8S20676C5D1Ev();
Name_Map name_map_S20676C5[] = {
  NSPAIR(_ZN8S20676C5C1Ev),
  NSPAIR(_ZN8S20676C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20676C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(136,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20676C5[];
static  VTBL_ENTRY vtc_S20676C5[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
extern VTBL_ENTRY _ZTV8S20676C5[];
static  VTT_ENTRY vtt_S20676C5[] = {
  {&(_ZTV8S20676C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
Class_Descriptor cd_S20676C5 = {  "S20676C5", // class name
  bases_S20676C5, 1,
  &(vtc_S20676C5[0]), // expected_vtbl_contents
  &(vtt_S20676C5[0]), // expected_vtt_contents
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI8S20676C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20676C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20676C5),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  S20676C4  : virtual S20677C3 , S20676C5 {
  short s20676c4f0;
  __tsi64 s20676c4f1;
  char s20676c4f2;
  int s20676c4f3[2];
  ::S20676C5 s20676c4f4;
  void *s20676c4f5;
  __tsi64 s20676c4f6;
  int s20676c4f7;
  __tsi64 s20676c4f8;
  int s20676c4f9;
  virtual void  v2(); // _ZN8S20676C42v2Ev
  virtual void  v3(); // _ZN8S20676C42v3Ev
  virtual void  v4(); // _ZN8S20676C42v4Ev
  ~S20676C4(); // tgen
  S20676C4(); // tgen
};
//SIG(-1 S20676C4) C1{ VBC2{ m Fp FL[4] Fs} BC3{ VBC2 FD Fi FC2 FC2} v1 v2 v3 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi}


void  S20676C4 ::v2(){vfunc_called(this, "_ZN8S20676C42v2Ev");}
void  S20676C4 ::v3(){vfunc_called(this, "_ZN8S20676C42v3Ev");}
void  S20676C4 ::v4(){vfunc_called(this, "_ZN8S20676C42v4Ev");}
S20676C4 ::~S20676C4(){ note_dtor("S20676C4", this);} // tgen
S20676C4 ::S20676C4(){ note_ctor("S20676C4", this);} // tgen

static void Test_S20676C4()
{
  extern Class_Descriptor cd_S20676C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,84)];
    init_test(&cd_S20676C4, buf);
    S20676C4 *dp, &lv = *(dp=new (buf) S20676C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,332), "sizeof(S20676C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20676C4)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(408,292), "S20676C4");
    check_base_class_offset(lv, (S20677C3*)(S20676C5*), ABISELECT(408,292), "S20676C4");
    check_base_class_offset(lv, (S20676C5*), 0, "S20676C4");
    check_field_offset(lv, s20676c4f0, ABISELECT(136,100), "S20676C4.s20676c4f0");
    check_field_offset(lv, s20676c4f1, ABISELECT(144,104), "S20676C4.s20676c4f1");
    check_field_offset(lv, s20676c4f2, ABISELECT(152,112), "S20676C4.s20676c4f2");
    check_field_offset(lv, s20676c4f3, ABISELECT(156,116), "S20676C4.s20676c4f3");
    check_field_offset(lv, s20676c4f4, ABISELECT(176,124), "S20676C4.s20676c4f4");
    check_field_offset(lv, s20676c4f5, ABISELECT(368,264), "S20676C4.s20676c4f5");
    check_field_offset(lv, s20676c4f6, ABISELECT(376,268), "S20676C4.s20676c4f6");
    check_field_offset(lv, s20676c4f7, ABISELECT(384,276), "S20676C4.s20676c4f7");
    check_field_offset(lv, s20676c4f8, ABISELECT(392,280), "S20676C4.s20676c4f8");
    check_field_offset(lv, s20676c4f9, ABISELECT(400,288), "S20676C4.s20676c4f9");
    test_class_info(&lv, &cd_S20676C4);
    dp->~S20676C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20676C4(Test_S20676C4, "S20676C4", ABISELECT(464,332));

#else // __cplusplus

extern void _ZN8S20676C4C1Ev();
extern void _ZN8S20676C4D1Ev();
Name_Map name_map_S20676C4[] = {
  NSPAIR(_ZN8S20676C4C1Ev),
  NSPAIR(_ZN8S20676C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
static Base_Class bases_S20676C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(408,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20676C5,    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 _ZTI8S20676C4[];
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY vtc_S20676C4[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C4[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S20676C4[];
static  VTBL_ENTRY _tg__ZTV8S20676C5__8S20676C4[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
static  VTT_ENTRY vtt_S20676C4[] = {
  {&(_ZTV8S20676C4[3]),  3,6},
  {&(_tg__ZTV8S20676C5__8S20676C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20676C4[];
extern  VTBL_ENTRY _ZTV8S20676C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C4[];
Class_Descriptor cd_S20676C4 = {  "S20676C4", // class name
  bases_S20676C4, 2,
  &(vtc_S20676C4[0]), // expected_vtbl_contents
  &(vtt_S20676C4[0]), // expected_vtt_contents
  ABISELECT(464,332), // object size
  NSPAIRA(_ZTI8S20676C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20676C4),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20676C4),2, //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  S20676C2  : virtual S20677C3 , virtual S20676C4 {
  __tsi64 s20676c2f0;
  ::S20677C6_nt s20676c2f1;
  void *s20676c2f2;
  char s20676c2f3[2];
  ::S20677C3 s20676c2f4;
  long s20676c2f5;
  ::S20677C6_nt s20676c2f6;
  virtual void  v5(); // _ZN8S20676C22v5Ev
  virtual void  v6(); // _ZN8S20676C22v6Ev
  virtual void  v7(); // _ZN8S20676C22v7Ev
  ~S20676C2(); // tgen
  S20676C2(); // tgen
};
//SIG(-1 S20676C2) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 BC4{ VBC2 FD Fi FC2 FC2} v4 v5 v6 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} v1 v2 v3 FL FC5{} Fp Fc[2] FC2 Fl FC5}


void  S20676C2 ::v5(){vfunc_called(this, "_ZN8S20676C22v5Ev");}
void  S20676C2 ::v6(){vfunc_called(this, "_ZN8S20676C22v6Ev");}
void  S20676C2 ::v7(){vfunc_called(this, "_ZN8S20676C22v7Ev");}
S20676C2 ::~S20676C2(){ note_dtor("S20676C2", this);} // tgen
S20676C2 ::S20676C2(){ note_ctor("S20676C2", this);} // tgen

static void Test_S20676C2()
{
  extern Class_Descriptor cd_S20676C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,102)];
    init_test(&cd_S20676C2, buf);
    S20676C2 *dp, &lv = *(dp=new (buf) S20676C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,404), "sizeof(S20676C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20676C2)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(104,72), "S20676C2");
    check_base_class_offset(lv, (S20677C3*)(S20676C4*), ABISELECT(104,72), "S20676C2");
    check_base_class_offset(lv, (S20677C3*)(S20676C5*)(S20676C4*), ABISELECT(104,72), "S20676C2");
    check_base_class_offset(lv, (S20676C5*)(S20676C4*), ABISELECT(160,112), "S20676C2");
    check_base_class_offset(lv, (S20676C4*), ABISELECT(160,112), "S20676C2");
    check_field_offset(lv, s20676c2f0, ABISELECT(8,4), "S20676C2.s20676c2f0");
    check_field_offset(lv, s20676c2f1, ABISELECT(16,12), "S20676C2.s20676c2f1");
    check_field_offset(lv, s20676c2f2, ABISELECT(24,16), "S20676C2.s20676c2f2");
    check_field_offset(lv, s20676c2f3, ABISELECT(32,20), "S20676C2.s20676c2f3");
    check_field_offset(lv, s20676c2f4, ABISELECT(40,24), "S20676C2.s20676c2f4");
    check_field_offset(lv, s20676c2f5, ABISELECT(88,64), "S20676C2.s20676c2f5");
    check_field_offset(lv, s20676c2f6, ABISELECT(96,68), "S20676C2.s20676c2f6");
    test_class_info(&lv, &cd_S20676C2);
    dp->~S20676C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20676C2(Test_S20676C2, "S20676C2", ABISELECT(576,404));

#else // __cplusplus

extern void _ZN8S20676C2C1Ev();
extern void _ZN8S20676C2D1Ev();
Name_Map name_map_S20676C2[] = {
  NSPAIR(_ZN8S20676C2C1Ev),
  NSPAIR(_ZN8S20676C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
extern Class_Descriptor cd_S20676C4;
extern VTBL_ENTRY _ZTI8S20676C4[];
extern  VTBL_ENTRY _ZTV8S20676C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C4[];
static Base_Class bases_S20676C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(104,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20676C5,    ABISELECT(160,112), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20676C4,    ABISELECT(160,112), //bcp->offset
    7, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20676C2[];
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY vtc_S20676C2[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C2[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20676C2[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S20676C2[];
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__8S20676C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C4[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C58S20676C4__8S20676C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
static  VTT_ENTRY vtt_S20676C2[] = {
  {&(_ZTV8S20676C2[4]),  4,16},
  {&(_ZTV8S20676C2[13]),  13,16},
  {&(_tg__ZTV8S20676C4__8S20676C2[3]),  3,6},
  {&(_tg__ZTV8S20676C58S20676C4__8S20676C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20676C2[];
extern  VTBL_ENTRY _ZTV8S20676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C2[];
Class_Descriptor cd_S20676C2 = {  "S20676C2", // class name
  bases_S20676C2, 3,
  &(vtc_S20676C2[0]), // expected_vtbl_contents
  &(vtt_S20676C2[0]), // expected_vtt_contents
  ABISELECT(576,404), // object size
  NSPAIRA(_ZTI8S20676C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20676C2),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20676C2),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  S20676C8  : S20677C3 {
  ::S20677C3 s20676c8f0;
  int s20676c8f1;
  long double s20676c8f2;
  int s20676c8f3;
  __tsi64 s20676c8f4;
  long s20676c8f5;
};
//SIG(-1 S20676C8) C1{ BC2{ m Fp FL[4] Fs} FC2 Fi FD Fi FL Fl}



static void Test_S20676C8()
{
  extern Class_Descriptor cd_S20676C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S20676C8, buf);
    S20676C8 &lv = *(new (buf) S20676C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20676C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20676C8)");
    check_base_class_offset(lv, (S20677C3*), 0, "S20676C8");
    check_field_offset(lv, s20676c8f0, ABISELECT(48,40), "S20676C8.s20676c8f0");
    check_field_offset(lv, s20676c8f1, ABISELECT(96,80), "S20676C8.s20676c8f1");
    check_field_offset(lv, s20676c8f2, ABISELECT(112,84), "S20676C8.s20676c8f2");
    check_field_offset(lv, s20676c8f3, ABISELECT(128,96), "S20676C8.s20676c8f3");
    check_field_offset(lv, s20676c8f4, ABISELECT(136,100), "S20676C8.s20676c8f4");
    check_field_offset(lv, s20676c8f5, ABISELECT(144,108), "S20676C8.s20676c8f5");
    test_class_info(&lv, &cd_S20676C8);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20676C8(Test_S20676C8, "S20676C8", ABISELECT(160,112));

#else // __cplusplus

extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20676C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20676C8[];
Class_Descriptor cd_S20676C8 = {  "S20676C8", // class name
  bases_S20676C8, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI8S20676C8),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  S20676C9  : S20676C5 {
  __tsi64 s20676c9f0;
  char s20676c9f1[7];
  void *s20676c9f2;
  int s20676c9f3;
  ::S20677C6_nt s20676c9f4;
  ::S20677C6_nt s20676c9f5;
  char s20676c9f6[10];
  virtual void  v8(); // _ZN8S20676C92v8Ev
  ~S20676C9(); // tgen
  S20676C9(); // tgen
};
//SIG(-1 S20676C9) C1{ BC2{ VBC3{ m Fp FL[4] Fs} FD Fi FC3 FC3} v1 FL Fc[7] Fp Fi FC4{} FC4 Fc[10]}


void  S20676C9 ::v8(){vfunc_called(this, "_ZN8S20676C92v8Ev");}
S20676C9 ::~S20676C9(){ note_dtor("S20676C9", this);} // tgen
S20676C9 ::S20676C9(){ note_ctor("S20676C9", this);} // tgen

static void Test_S20676C9()
{
  extern Class_Descriptor cd_S20676C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,45)];
    init_test(&cd_S20676C9, buf);
    S20676C9 *dp, &lv = *(dp=new (buf) S20676C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,176), "sizeof(S20676C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20676C9)");
    check_base_class_offset(lv, (S20677C3*)(S20676C5*), ABISELECT(176,136), "S20676C9");
    check_base_class_offset(lv, (S20676C5*), 0, "S20676C9");
    check_field_offset(lv, s20676c9f0, ABISELECT(136,100), "S20676C9.s20676c9f0");
    check_field_offset(lv, s20676c9f1, ABISELECT(144,108), "S20676C9.s20676c9f1");
    check_field_offset(lv, s20676c9f2, ABISELECT(152,116), "S20676C9.s20676c9f2");
    check_field_offset(lv, s20676c9f3, ABISELECT(160,120), "S20676C9.s20676c9f3");
    check_field_offset(lv, s20676c9f4, ABISELECT(164,124), "S20676C9.s20676c9f4");
    check_field_offset(lv, s20676c9f5, ABISELECT(165,125), "S20676C9.s20676c9f5");
    check_field_offset(lv, s20676c9f6, ABISELECT(166,126), "S20676C9.s20676c9f6");
    test_class_info(&lv, &cd_S20676C9);
    dp->~S20676C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20676C9(Test_S20676C9, "S20676C9", ABISELECT(224,176));

#else // __cplusplus

extern void _ZN8S20676C9C1Ev();
extern void _ZN8S20676C9D1Ev();
Name_Map name_map_S20676C9[] = {
  NSPAIR(_ZN8S20676C9C1Ev),
  NSPAIR(_ZN8S20676C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
static Base_Class bases_S20676C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    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
    1, //immediately_derived
  0, 1},
  {&cd_S20676C5,    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 _ZTI8S20676C9[];
extern void _ZN8S20676C92v8Ev();
static  VTBL_ENTRY vtc_S20676C9[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C9[0]),
  (VTBL_ENTRY)&_ZN8S20676C92v8Ev,
};
extern VTBL_ENTRY _ZTV8S20676C9[];
static  VTBL_ENTRY _tg__ZTV8S20676C5__8S20676C9[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
static  VTT_ENTRY vtt_S20676C9[] = {
  {&(_ZTV8S20676C9[3]),  3,4},
  {&(_tg__ZTV8S20676C5__8S20676C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20676C9[];
extern  VTBL_ENTRY _ZTV8S20676C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C9[];
Class_Descriptor cd_S20676C9 = {  "S20676C9", // class name
  bases_S20676C9, 2,
  &(vtc_S20676C9[0]), // expected_vtbl_contents
  &(vtt_S20676C9[0]), // expected_vtt_contents
  ABISELECT(224,176), // object size
  NSPAIRA(_ZTI8S20676C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20676C9),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20676C9),2, //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  S20676C12  : virtual S20677C3 , virtual S20676C5 {
  int s20676c12f0;
  ::S20676C5 s20676c12f1;
  __tsi64 s20676c12f2;
  int s20676c12f3;
  void *s20676c12f4;
  virtual void  v9(); // _ZN9S20676C122v9Ev
  virtual void  v10(); // _ZN9S20676C123v10Ev
  ~S20676C12(); // tgen
  S20676C12(); // tgen
};
//SIG(-1 S20676C12) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 FD Fi FC2 FC2} v1 v2 Fi FC3 FL Fi Fp}


void  S20676C12 ::v9(){vfunc_called(this, "_ZN9S20676C122v9Ev");}
void  S20676C12 ::v10(){vfunc_called(this, "_ZN9S20676C123v10Ev");}
S20676C12 ::~S20676C12(){ note_dtor("S20676C12", this);} // tgen
S20676C12 ::S20676C12(){ note_ctor("S20676C12", this);} // tgen

static void Test_S20676C12()
{
  extern Class_Descriptor cd_S20676C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,77)];
    init_test(&cd_S20676C12, buf);
    S20676C12 *dp, &lv = *(dp=new (buf) S20676C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,304), "sizeof(S20676C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20676C12)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(232,164), "S20676C12");
    check_base_class_offset(lv, (S20677C3*)(S20676C5*), ABISELECT(232,164), "S20676C12");
    check_base_class_offset(lv, (S20676C5*), ABISELECT(288,204), "S20676C12");
    check_field_offset(lv, s20676c12f0, ABISELECT(8,4), "S20676C12.s20676c12f0");
    check_field_offset(lv, s20676c12f1, ABISELECT(16,8), "S20676C12.s20676c12f1");
    check_field_offset(lv, s20676c12f2, ABISELECT(208,148), "S20676C12.s20676c12f2");
    check_field_offset(lv, s20676c12f3, ABISELECT(216,156), "S20676C12.s20676c12f3");
    check_field_offset(lv, s20676c12f4, ABISELECT(224,160), "S20676C12.s20676c12f4");
    test_class_info(&lv, &cd_S20676C12);
    dp->~S20676C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20676C12(Test_S20676C12, "S20676C12", ABISELECT(432,304));

#else // __cplusplus

extern void _ZN9S20676C12C1Ev();
extern void _ZN9S20676C12D1Ev();
Name_Map name_map_S20676C12[] = {
  NSPAIR(_ZN9S20676C12C1Ev),
  NSPAIR(_ZN9S20676C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
static Base_Class bases_S20676C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(232,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_S20676C5,    ABISELECT(288,204), //bcp->offset
    6, //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 _ZTI9S20676C12[];
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY vtc_S20676C12[] = {
  ABISELECT(288,204),
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
  ABISELECT(-56,-40),
  ABISELECT(-288,-204),
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
};
extern VTBL_ENTRY _ZTV9S20676C12[];
static  VTBL_ENTRY _tg__ZTV8S20676C5__9S20676C12[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
static  VTT_ENTRY vtt_S20676C12[] = {
  {&(_ZTV9S20676C12[4]),  4,9},
  {&(_ZTV9S20676C12[9]),  9,9},
  {&(_tg__ZTV8S20676C5__9S20676C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20676C12[];
extern  VTBL_ENTRY _ZTV9S20676C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C12[];
Class_Descriptor cd_S20676C12 = {  "S20676C12", // class name
  bases_S20676C12, 2,
  &(vtc_S20676C12[0]), // expected_vtbl_contents
  &(vtt_S20676C12[0]), // expected_vtt_contents
  ABISELECT(432,304), // object size
  NSPAIRA(_ZTI9S20676C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20676C12),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20676C12),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  S20676C13  {
  ::S20677C6_nt s20676c13f0;
  ::S20676C5 s20676c13f1;
  ::S20677C6_nt s20676c13f2;
  __tsi64 s20676c13f3;
  ::S20677C6_nt s20676c13f4;
  void *s20676c13f5;
  ::S20677C6_nt s20676c13f6;
  void *s20676c13f7[2];
  ::S20677C6_nt s20676c13f8;
  virtual void  v13(); // _ZN9S20676C133v13Ev
  ~S20676C13(); // tgen
  S20676C13(); // tgen
};
//SIG(-1 S20676C13) C1{ v1 FC2{} FC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} FC2 FL FC2 Fp FC2 Fp[2] FC2}


void  S20676C13 ::v13(){vfunc_called(this, "_ZN9S20676C133v13Ev");}
S20676C13 ::~S20676C13(){ note_dtor("S20676C13", this);} // tgen
S20676C13 ::S20676C13(){ note_ctor("S20676C13", this);} // tgen

static void Test_S20676C13()
{
  extern Class_Descriptor cd_S20676C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,47)];
    init_test(&cd_S20676C13, buf);
    S20676C13 *dp, &lv = *(dp=new (buf) S20676C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,184), "sizeof(S20676C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20676C13)");
    check_field_offset(lv, s20676c13f0, ABISELECT(8,4), "S20676C13.s20676c13f0");
    check_field_offset(lv, s20676c13f1, ABISELECT(16,8), "S20676C13.s20676c13f1");
    check_field_offset(lv, s20676c13f2, ABISELECT(208,148), "S20676C13.s20676c13f2");
    check_field_offset(lv, s20676c13f3, ABISELECT(216,152), "S20676C13.s20676c13f3");
    check_field_offset(lv, s20676c13f4, ABISELECT(224,160), "S20676C13.s20676c13f4");
    check_field_offset(lv, s20676c13f5, ABISELECT(232,164), "S20676C13.s20676c13f5");
    check_field_offset(lv, s20676c13f6, ABISELECT(240,168), "S20676C13.s20676c13f6");
    check_field_offset(lv, s20676c13f7, ABISELECT(248,172), "S20676C13.s20676c13f7");
    check_field_offset(lv, s20676c13f8, ABISELECT(264,180), "S20676C13.s20676c13f8");
    test_class_info(&lv, &cd_S20676C13);
    dp->~S20676C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20676C13(Test_S20676C13, "S20676C13", ABISELECT(272,184));

#else // __cplusplus

extern void _ZN9S20676C13C1Ev();
extern void _ZN9S20676C13D1Ev();
Name_Map name_map_S20676C13[] = {
  NSPAIR(_ZN9S20676C13C1Ev),
  NSPAIR(_ZN9S20676C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20676C13[];
extern void _ZN9S20676C133v13Ev();
static  VTBL_ENTRY vtc_S20676C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C13[0]),
  (VTBL_ENTRY)&_ZN9S20676C133v13Ev,
};
extern VTBL_ENTRY _ZTI9S20676C13[];
extern  VTBL_ENTRY _ZTV9S20676C13[];
Class_Descriptor cd_S20676C13 = {  "S20676C13", // class name
  0,0,//no base classes
  &(vtc_S20676C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,184), // object size
  NSPAIRA(_ZTI9S20676C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20676C13),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  S20676C11  : virtual S20676C4 , virtual S20676C2 , virtual S20676C12 {
  ::S20677C6_nt s20676c11f0;
  ::S20677C6_nt s20676c11f1;
  int s20676c11f2;
  ::S20676C5 s20676c11f3;
  ::S20677C6_nt s20676c11f4;
  ::S20677C6_nt s20676c11f5;
  ::S20676C13 s20676c11f6;
  ::S20676C2 s20676c11f7;
  void *s20676c11f8;
  ::S20677C6_nt s20676c11f9;
  virtual void  v11(); // _ZN9S20676C113v11Ev
  virtual void  v12(); // _ZN9S20676C113v12Ev
  ~S20676C11(); // tgen
  S20676C11(); // tgen
};
//SIG(-1 S20676C11) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} BC4{ VBC3 FD Fi FC3 FC3} v3 v4 v5 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC5{ VBC3 VBC2 v6 v7 v8 FL FC6{} Fp Fc[2] FC3 Fl FC6} VBC7{ VBC3 VBC4 v9 v10 Fi FC4 FL Fi Fp} v1 v2 FC6 FC6 Fi FC4 FC6 FC6 FC8{ v11 FC6 FC4 FC6 FL FC6 Fp FC6 Fp[2] FC6} FC5 Fp FC6}


void  S20676C11 ::v11(){vfunc_called(this, "_ZN9S20676C113v11Ev");}
void  S20676C11 ::v12(){vfunc_called(this, "_ZN9S20676C113v12Ev");}
S20676C11 ::~S20676C11(){ note_dtor("S20676C11", this);} // tgen
S20676C11 ::S20676C11(){ note_ctor("S20676C11", this);} // tgen

static void Test_S20676C11()
{
  extern Class_Descriptor cd_S20676C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(128,356)];
    init_test(&cd_S20676C11, buf);
    S20676C11 *dp, &lv = *(dp=new (buf) S20676C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2032,1420), "sizeof(S20676C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20676C11)");
    check_base_class_offset(lv, (S20677C3*)(S20676C4*), ABISELECT(1496,1044), "S20676C11");
    check_base_class_offset(lv, (S20677C3*)(S20676C5*)(S20676C4*), ABISELECT(1496,1044), "S20676C11");
    check_base_class_offset(lv, (S20677C3*)(S20676C2*), ABISELECT(1496,1044), "S20676C11");
    check_base_class_offset(lv, (S20677C3*)(S20676C12*), ABISELECT(1496,1044), "S20676C11");
    /*is_ambiguous_... S20676C11::S20676C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20676C5*), ABISELECT(1496,1044), "S20676C11");
    check_base_class_offset(lv, (S20676C5*)(S20676C4*), ABISELECT(1088,752), "S20676C11");
    check_base_class_offset(lv, (S20676C4*), ABISELECT(1088,752), "S20676C11");
    check_base_class_offset(lv, (S20676C4*)(S20676C2*), ABISELECT(1088,752), "S20676C11");
    check_base_class_offset(lv, (S20676C2*), ABISELECT(1544,1084), "S20676C11");
    check_base_class_offset(lv, (S20676C5*)(S20676C12*), ABISELECT(1888,1320), "S20676C11");
    check_base_class_offset(lv, (S20676C12*), ABISELECT(1648,1156), "S20676C11");
    check_field_offset(lv, s20676c11f0, ABISELECT(8,4), "S20676C11.s20676c11f0");
    check_field_offset(lv, s20676c11f1, ABISELECT(9,5), "S20676C11.s20676c11f1");
    check_field_offset(lv, s20676c11f2, ABISELECT(12,8), "S20676C11.s20676c11f2");
    check_field_offset(lv, s20676c11f3, ABISELECT(16,12), "S20676C11.s20676c11f3");
    check_field_offset(lv, s20676c11f4, ABISELECT(208,152), "S20676C11.s20676c11f4");
    check_field_offset(lv, s20676c11f5, ABISELECT(209,153), "S20676C11.s20676c11f5");
    check_field_offset(lv, s20676c11f6, ABISELECT(224,156), "S20676C11.s20676c11f6");
    check_field_offset(lv, s20676c11f7, ABISELECT(496,340), "S20676C11.s20676c11f7");
    check_field_offset(lv, s20676c11f8, ABISELECT(1072,744), "S20676C11.s20676c11f8");
    check_field_offset(lv, s20676c11f9, ABISELECT(1080,748), "S20676C11.s20676c11f9");
    test_class_info(&lv, &cd_S20676C11);
    dp->~S20676C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20676C11(Test_S20676C11, "S20676C11", ABISELECT(2032,1420));

#else // __cplusplus

extern void _ZN9S20676C11C1Ev();
extern void _ZN9S20676C11D1Ev();
Name_Map name_map_S20676C11[] = {
  NSPAIR(_ZN9S20676C11C1Ev),
  NSPAIR(_ZN9S20676C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
extern Class_Descriptor cd_S20676C4;
extern VTBL_ENTRY _ZTI8S20676C4[];
extern  VTBL_ENTRY _ZTV8S20676C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C4[];
extern Class_Descriptor cd_S20676C2;
extern VTBL_ENTRY _ZTI8S20676C2[];
extern  VTBL_ENTRY _ZTV8S20676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C2[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
extern Class_Descriptor cd_S20676C12;
extern VTBL_ENTRY _ZTI9S20676C12[];
extern  VTBL_ENTRY _ZTV9S20676C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C12[];
static Base_Class bases_S20676C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1496,1044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20676C5,    ABISELECT(1088,752), //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_S20676C4,    ABISELECT(1088,752), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20676C2,    ABISELECT(1544,1084), //bcp->offset
    18, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20676C5,    ABISELECT(1888,1320), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20676C12,    ABISELECT(1648,1156), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20676C11[];
extern void _ZN9S20676C113v11Ev();
extern void _ZN9S20676C113v12Ev();
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY vtc_S20676C11[] = {
  ABISELECT(1888,1320),
  ABISELECT(1648,1156),
  ABISELECT(1544,1084),
  ABISELECT(1496,1044),
  ABISELECT(1088,752),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN9S20676C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20676C113v12Ev,
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-1544,-1084),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-1648,-1156),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
  ABISELECT(-392,-276),
  ABISELECT(-1888,-1320),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
};
extern VTBL_ENTRY _ZTV9S20676C11[];
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__9S20676C11[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C4[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C58S20676C4__9S20676C11[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C2__9S20676C11[] = {
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C2[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__8S20676C2__9S20676C11[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(456,332),
  (VTBL_ENTRY)&(_ZTI8S20676C2[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__9S20676C11[] = {
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__9S20676C12__9S20676C11[] = {
  ABISELECT(-392,-276),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__A1__9S20676C11[] = {
  ABISELECT(-392,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
static  VTT_ENTRY vtt_S20676C11[] = {
  {&(_ZTV9S20676C11[7]),  7,39},
  {&(_ZTV9S20676C11[15]),  15,39},
  {&(_ZTV9S20676C11[25]),  25,39},
  {&(_ZTV9S20676C11[34]),  34,39},
  {&(_ZTV9S20676C11[39]),  39,39},
  {&(_tg__ZTV8S20676C4__9S20676C11[3]),  3,6},
  {&(_tg__ZTV8S20676C58S20676C4__9S20676C11[3]),  3,3},
  {&(_tg__ZTV8S20676C2__9S20676C11[4]),  4,7},
  {&(_tg__ZTV8S20676C4__8S20676C2__9S20676C11[6]),  6,9},
  {&(_tg__ZTV9S20676C12__9S20676C11[4]),  4,6},
  {&(_tg__ZTV8S20676C5__9S20676C12__9S20676C11[3]),  3,3},
  {&(_tg__ZTV8S20676C5__A1__9S20676C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20676C11[];
extern  VTBL_ENTRY _ZTV9S20676C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C11[];
Class_Descriptor cd_S20676C11 = {  "S20676C11", // class name
  bases_S20676C11, 6,
  &(vtc_S20676C11[0]), // expected_vtbl_contents
  &(vtt_S20676C11[0]), // expected_vtt_contents
  ABISELECT(2032,1420), // object size
  NSPAIRA(_ZTI9S20676C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20676C11),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20676C11),12, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20676C10  : virtual S20676C5 , S20676C11 , S20676C12 {
  int s20676c10f0;
  char s20676c10f1:2;
  ::S20677C6_nt s20676c10f2;
  int s20676c10f3;
  ~S20676C10(); // tgen
  S20676C10(); // tgen
};
//SIG(-1 S20676C10) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} FD Fi FC3 FC3} BC4{ VBC5{ VBC3 BC2 v1 v2 v3 Fs FL Fc Fi[2] FC2 Fp FL Fi FL Fi} VBC6{ VBC3 VBC5 v4 v5 v6 FL FC7{} Fp Fc[2] FC3 Fl FC7} VBC8{ VBC3 VBC2 v7 v8 Fi FC2 FL Fi Fp} v9 v10 FC7 FC7 Fi FC2 FC7 FC7 FC9{ v11 FC7 FC2 FC7 FL FC7 Fp FC7 Fp[2] FC7} FC6 Fp FC7} BC8 Fi Fc:2 FC7 Fi}


S20676C10 ::~S20676C10(){ note_dtor("S20676C10", this);} // tgen
S20676C10 ::S20676C10(){ note_ctor("S20676C10", this);} // tgen

static void Test_S20676C10()
{
  extern Class_Descriptor cd_S20676C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(144,400)];
    init_test(&cd_S20676C10, buf);
    S20676C10 *dp, &lv = *(dp=new (buf) S20676C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2288,1596), "sizeof(S20676C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20676C10)");
    /*is_ambiguous_... S20676C10::S20676C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20676C5*), ABISELECT(1480,1028), "S20676C10");
    check_base_class_offset(lv, (S20677C3*)(S20676C4*), ABISELECT(1480,1028), "S20676C10");
    check_base_class_offset(lv, (S20677C3*)(S20676C5*)(S20676C4*), ABISELECT(1480,1028), "S20676C10");
    check_base_class_offset(lv, (S20677C3*)(S20676C2*), ABISELECT(1480,1028), "S20676C10");
    /*is_ambiguous_... S20676C10::S20676C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20676C12*), ABISELECT(1480,1028), "S20676C10");
    /*is_ambiguous_... S20676C10::S20676C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20676C12*), ABISELECT(1480,1028), "S20676C10");
    /*is_ambiguous_... S20676C10::S20676C5 */ AMB_check_base_class_offset(lv, (S20676C5*), ABISELECT(1344,928), "S20676C10");
    /*is_ambiguous_... S20676C10::S20676C12 */ AMB_check_base_class_offset(lv, (S20676C5*)(S20676C12*), ABISELECT(1344,928), "S20676C10");
    /*is_ambiguous_... S20676C10::S20676C12 */ AMB_check_base_class_offset(lv, (S20676C5*)(S20676C12*), ABISELECT(1344,928), "S20676C10");
    check_base_class_offset(lv, (S20676C5*)(S20676C4*), ABISELECT(1536,1068), "S20676C10");
    check_base_class_offset(lv, (S20676C4*)(S20676C11*), ABISELECT(1536,1068), "S20676C10");
    check_base_class_offset(lv, (S20676C4*)(S20676C2*), ABISELECT(1536,1068), "S20676C10");
    check_base_class_offset(lv, (S20676C2*)(S20676C11*), ABISELECT(1944,1360), "S20676C10");
    check_base_class_offset(lv, (S20676C12*)(S20676C11*), ABISELECT(2048,1432), "S20676C10");
    check_base_class_offset(lv, (S20676C11*), 0, "S20676C10");
    /*is_ambiguous_... S20676C10::S20676C12 */ AMB_check_base_class_offset(lv, (S20676C12*), ABISELECT(1088,752), "S20676C10");
    check_field_offset(lv, s20676c10f0, ABISELECT(1320,916), "S20676C10.s20676c10f0");
    set_bf_and_test(lv, s20676c10f1, ABISELECT(1324,920), 0, 2, 1, "S20676C10");
    set_bf_and_test(lv, s20676c10f1, ABISELECT(1324,920), 0, 2, hide_sll(1LL<<1), "S20676C10");
    check_field_offset(lv, s20676c10f2, ABISELECT(1325,921), "S20676C10.s20676c10f2");
    check_field_offset(lv, s20676c10f3, ABISELECT(1328,924), "S20676C10.s20676c10f3");
    test_class_info(&lv, &cd_S20676C10);
    dp->~S20676C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20676C10(Test_S20676C10, "S20676C10", ABISELECT(2288,1596));

#else // __cplusplus

extern void _ZN9S20676C10C1Ev();
extern void _ZN9S20676C10D1Ev();
Name_Map name_map_S20676C10[] = {
  NSPAIR(_ZN9S20676C10C1Ev),
  NSPAIR(_ZN9S20676C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
extern Class_Descriptor cd_S20676C4;
extern VTBL_ENTRY _ZTI8S20676C4[];
extern  VTBL_ENTRY _ZTV8S20676C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C4[];
extern Class_Descriptor cd_S20676C2;
extern VTBL_ENTRY _ZTI8S20676C2[];
extern  VTBL_ENTRY _ZTV8S20676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C2[];
extern Class_Descriptor cd_S20676C12;
extern VTBL_ENTRY _ZTI9S20676C12[];
extern  VTBL_ENTRY _ZTV9S20676C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C12[];
extern Class_Descriptor cd_S20676C11;
extern VTBL_ENTRY _ZTI9S20676C11[];
extern  VTBL_ENTRY _ZTV9S20676C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C11[];
extern Class_Descriptor cd_S20676C12;
extern VTBL_ENTRY _ZTI9S20676C12[];
extern  VTBL_ENTRY _ZTV9S20676C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C12[];
static Base_Class bases_S20676C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1480,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
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20676C5,    ABISELECT(1344,928), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20676C5,    ABISELECT(1536,1068), //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
    3, //immediately_derived
  0, 0},
  {&cd_S20676C4,    ABISELECT(1536,1068), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20676C2,    ABISELECT(1944,1360), //bcp->offset
    27, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20676C12,    ABISELECT(2048,1432), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20676C11,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20676C12,    ABISELECT(1088,752), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20676C10[];
extern void _ZN9S20676C113v11Ev();
extern void _ZN9S20676C113v12Ev();
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY vtc_S20676C10[] = {
  ABISELECT(1344,928),
  ABISELECT(2048,1432),
  ABISELECT(1944,1360),
  ABISELECT(1480,1028),
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN9S20676C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20676C113v12Ev,
  ABISELECT(256,176),
  ABISELECT(392,276),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
  ABISELECT(136,100),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-1944,-1360),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2048,-1432),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
extern VTBL_ENTRY _ZTV9S20676C10[];
extern void _ZN9S20676C113v11Ev();
extern void _ZN9S20676C113v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C11__9S20676C10[] = {
  ABISELECT(1344,928),
  ABISELECT(2048,1432),
  ABISELECT(1944,1360),
  ABISELECT(1480,1028),
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN9S20676C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20676C113v12Ev,
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__9S20676C11__9S20676C10[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C2__9S20676C11__9S20676C10[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-1944,-1360),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__9S20676C11__9S20676C10[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2048,-1432),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__A1__9S20676C11__9S20676C10[] = {
  ABISELECT(136,100),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__A__9S20676C10[] = {
  ABISELECT(256,176),
  ABISELECT(392,276),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__9S20676C12__A__9S20676C10[] = {
  ABISELECT(136,100),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__9S20676C10[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__9S20676C10[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C4[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C58S20676C4__A1__9S20676C10[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C2__9S20676C10[] = {
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C2[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__8S20676C2__9S20676C10[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI8S20676C2[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__9S20676C10[] = {
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__9S20676C12__9S20676C10[] = {
  ABISELECT(136,100),
  ABISELECT(704,504),
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
};
static  VTT_ENTRY vtt_S20676C10[] = {
  {&(_ZTV9S20676C10[7]),  7,45},
  {&(_tg__ZTV9S20676C11__9S20676C10[7]),  7,9},
  {&(_tg__ZTV8S20676C4__9S20676C11__9S20676C10[6]),  6,9},
  {&(_tg__ZTV8S20676C2__9S20676C11__9S20676C10[7]),  7,10},
  {&(_tg__ZTV9S20676C12__9S20676C11__9S20676C10[6]),  6,8},
  {&(_tg__ZTV8S20676C5__A1__9S20676C11__9S20676C10[3]),  3,3},
  {&(_tg__ZTV9S20676C12__A__9S20676C10[4]),  4,6},
  {&(_tg__ZTV8S20676C5__9S20676C12__A__9S20676C10[3]),  3,3},
  {&(_ZTV9S20676C10[18]),  18,45},
  {&(_ZTV9S20676C10[24]),  24,45},
  {&(_ZTV9S20676C10[34]),  34,45},
  {&(_ZTV9S20676C10[43]),  43,45},
  {&(_ZTV9S20676C10[13]),  13,45},
  {&(_tg__ZTV8S20676C5__9S20676C10[3]),  3,3},
  {&(_tg__ZTV8S20676C4__9S20676C10[3]),  3,6},
  {&(_tg__ZTV8S20676C58S20676C4__A1__9S20676C10[3]),  3,3},
  {&(_tg__ZTV8S20676C2__9S20676C10[4]),  4,7},
  {&(_tg__ZTV8S20676C4__8S20676C2__9S20676C10[6]),  6,9},
  {&(_tg__ZTV9S20676C12__9S20676C10[4]),  4,6},
  {&(_tg__ZTV8S20676C5__9S20676C12__9S20676C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20676C10[];
extern  VTBL_ENTRY _ZTV9S20676C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C10[];
Class_Descriptor cd_S20676C10 = {  "S20676C10", // class name
  bases_S20676C10, 8,
  &(vtc_S20676C10[0]), // expected_vtbl_contents
  &(vtt_S20676C10[0]), // expected_vtt_contents
  ABISELECT(2288,1596), // object size
  NSPAIRA(_ZTI9S20676C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20676C10),45, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20676C10),20, //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  S20676C7  : S20676C8 , S20677C3 , virtual S20676C9 , virtual S20676C10 {
  __tsi64 s20676c7f0;
  virtual  ~S20676C7(); // _ZN8S20676C7D2Ev
  S20676C7(); // tgen
};
//SIG(-1 S20676C7) C1{ BC2{ BC3{ m Fp FL[4] Fs} FC3 Fi FD Fi FL Fl} BC3 VBC4{ BC5{ VBC3 FD Fi FC3 FC3} v1 FL Fc[7] Fp Fi FC6{} FC6 Fc[10]} VBC7{ VBC5 BC8{ VBC9{ VBC3 BC5 v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} VBC10{ VBC3 VBC9 v5 v6 v7 FL FC6 Fp Fc[2] FC3 Fl FC6} VBC11{ VBC3 VBC5 v8 v9 Fi FC5 FL Fi Fp} v10 v11 FC6 FC6 Fi FC5 FC6 FC6 FC12{ v12 FC6 FC5 FC6 FL FC6 Fp FC6 Fp[2] FC6} FC10 Fp FC6} BC11 Fi Fc:2 FC6 Fi} vd FL}


 S20676C7 ::~S20676C7(){ note_dtor("S20676C7", this);}
S20676C7 ::S20676C7(){ note_ctor("S20676C7", this);} // tgen

static void Test_S20676C7()
{
  extern Class_Descriptor cd_S20676C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(169,475)];
    init_test(&cd_S20676C7, buf);
    S20676C7 *dp, &lv = *(dp=new (buf) S20676C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2688,1896), "sizeof(S20676C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20676C7)");
    check_base_class_offset(lv, (S20677C3*)(S20676C8*), ABISELECT(16,4), "S20676C7");
    check_base_class_offset(lv, (S20676C8*), ABISELECT(16,4), "S20676C7");
    /*is_ambiguous_... S20676C7::S20677C3 */ AMB_check_base_class_offset(lv, (S20677C3*), ABISELECT(168,116), "S20676C7");
    check_base_class_offset(lv, (S20677C3*)(S20676C5*)(S20676C9*), ABISELECT(400,300), "S20676C7");
    /*is_ambiguous_... S20676C7::S20676C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20676C5*), ABISELECT(400,300), "S20676C7");
    check_base_class_offset(lv, (S20677C3*)(S20676C4*), ABISELECT(400,300), "S20676C7");
    check_base_class_offset(lv, (S20677C3*)(S20676C5*)(S20676C4*), ABISELECT(400,300), "S20676C7");
    check_base_class_offset(lv, (S20677C3*)(S20676C2*), ABISELECT(400,300), "S20676C7");
    /*is_ambiguous_... S20676C7::S20676C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20676C12*), ABISELECT(400,300), "S20676C7");
    /*is_ambiguous_... S20676C10::S20676C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20676C12*)(S20676C10*), ABISELECT(400,300), "S20676C7");
    check_base_class_offset(lv, (S20676C5*)(S20676C9*), ABISELECT(224,164), "S20676C7");
    check_base_class_offset(lv, (S20676C9*), ABISELECT(224,164), "S20676C7");
    /*is_ambiguous_... S20676C10::S20676C5 */ AMB_check_base_class_offset(lv, (S20676C5*)(S20676C10*), ABISELECT(1792,1268), "S20676C7");
    /*is_ambiguous_... S20676C7::S20676C12 */ AMB_check_base_class_offset(lv, (S20676C5*)(S20676C12*), ABISELECT(1792,1268), "S20676C7");
    /*is_ambiguous_... S20676C10::S20676C12 */ AMB_check_base_class_offset(lv, (S20676C5*)(S20676C12*)(S20676C10*), ABISELECT(1792,1268), "S20676C7");
    check_base_class_offset(lv, (S20676C5*)(S20676C4*), ABISELECT(1936,1368), "S20676C7");
    check_base_class_offset(lv, (S20676C4*)(S20676C11*)(S20676C10*), ABISELECT(1936,1368), "S20676C7");
    check_base_class_offset(lv, (S20676C4*)(S20676C2*), ABISELECT(1936,1368), "S20676C7");
    check_base_class_offset(lv, (S20676C2*)(S20676C11*)(S20676C10*), ABISELECT(2344,1660), "S20676C7");
    check_base_class_offset(lv, (S20676C12*)(S20676C11*)(S20676C10*), ABISELECT(2448,1732), "S20676C7");
    check_base_class_offset(lv, (S20676C11*)(S20676C10*), ABISELECT(448,340), "S20676C7");
    /*is_ambiguous_... S20676C10::S20676C12 */ AMB_check_base_class_offset(lv, (S20676C12*)(S20676C10*), ABISELECT(1536,1092), "S20676C7");
    check_base_class_offset(lv, (S20676C10*), ABISELECT(448,340), "S20676C7");
    check_field_offset(lv, s20676c7f0, ABISELECT(216,156), "S20676C7.s20676c7f0");
    test_class_info(&lv, &cd_S20676C7);
    dp->~S20676C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20676C7(Test_S20676C7, "S20676C7", ABISELECT(2688,1896));

#else // __cplusplus

extern void _ZN8S20676C7C1Ev();
extern void _ZN8S20676C7D2Ev();
Name_Map name_map_S20676C7[] = {
  NSPAIR(_ZN8S20676C7C1Ev),
  NSPAIR(_ZN8S20676C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20676C8;
extern VTBL_ENTRY _ZTI8S20676C8[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
extern Class_Descriptor cd_S20676C9;
extern VTBL_ENTRY _ZTI8S20676C9[];
extern  VTBL_ENTRY _ZTV8S20676C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C9[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
extern Class_Descriptor cd_S20676C4;
extern VTBL_ENTRY _ZTI8S20676C4[];
extern  VTBL_ENTRY _ZTV8S20676C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C4[];
extern Class_Descriptor cd_S20676C2;
extern VTBL_ENTRY _ZTI8S20676C2[];
extern  VTBL_ENTRY _ZTV8S20676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C2[];
extern Class_Descriptor cd_S20676C12;
extern VTBL_ENTRY _ZTI9S20676C12[];
extern  VTBL_ENTRY _ZTV9S20676C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C12[];
extern Class_Descriptor cd_S20676C11;
extern VTBL_ENTRY _ZTI9S20676C11[];
extern  VTBL_ENTRY _ZTV9S20676C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C11[];
extern Class_Descriptor cd_S20676C12;
extern VTBL_ENTRY _ZTI9S20676C12[];
extern  VTBL_ENTRY _ZTV9S20676C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C12[];
extern Class_Descriptor cd_S20676C10;
extern VTBL_ENTRY _ZTI9S20676C10[];
extern  VTBL_ENTRY _ZTV9S20676C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C10[];
static Base_Class bases_S20676C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    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
  0, 0},
  {&cd_S20676C8,    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_S20677C3,    ABISELECT(168,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_S20677C3,    ABISELECT(400,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
    4, //immediately_derived
  0, 1},
  {&cd_S20676C5,    ABISELECT(224,164), //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
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20676C9,    ABISELECT(224,164), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20676C5,    ABISELECT(1792,1268), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20676C5,    ABISELECT(1936,1368), //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
    8, //immediately_derived
  0, 0},
  {&cd_S20676C4,    ABISELECT(1936,1368), //bcp->offset
    38, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20676C2,    ABISELECT(2344,1660), //bcp->offset
    47, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20676C12,    ABISELECT(2448,1732), //bcp->offset
    57, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20676C11,    ABISELECT(448,340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20676C12,    ABISELECT(1536,1092), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20676C10,    ABISELECT(448,340), //bcp->offset
    16, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20676C7[];
extern void _ZN8S20676C7D1Ev();
extern void _ZN8S20676C7D0Ev();
extern void _ZN8S20676C92v8Ev();
extern void _ZN9S20676C113v11Ev();
extern void _ZN9S20676C113v12Ev();
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY vtc_S20676C7[] = {
  ABISELECT(2448,1732),
  ABISELECT(2344,1660),
  ABISELECT(1936,1368),
  ABISELECT(1792,1268),
  ABISELECT(448,340),
  ABISELECT(400,300),
  ABISELECT(224,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN8S20676C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20676C7D0Ev,
  0,
  ABISELECT(176,136),
  ABISELECT(-224,-164),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN8S20676C92v8Ev,
  ABISELECT(1088,752),
  ABISELECT(1088,752),
  0,
  0,
  ABISELECT(1344,928),
  ABISELECT(2000,1392),
  ABISELECT(1896,1320),
  ABISELECT(-48,-40),
  ABISELECT(1488,1028),
  ABISELECT(-448,-340),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN9S20676C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20676C113v12Ev,
  ABISELECT(256,176),
  ABISELECT(-1136,-792),
  ABISELECT(-1536,-1092),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
  ABISELECT(-1392,-968),
  ABISELECT(-1792,-1268),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  0,
  0,
  0,
  ABISELECT(-1536,-1068),
  ABISELECT(-1936,-1368),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-1944,-1360),
  ABISELECT(-2344,-1660),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
  0,
  0,
  ABISELECT(-656,-464),
  ABISELECT(-2048,-1432),
  ABISELECT(-2448,-1732),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
extern VTBL_ENTRY _ZTV8S20676C7[];
extern void _ZN8S20676C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C9__8S20676C7[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C9[0]),
  (VTBL_ENTRY)&_ZN8S20676C92v8Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C58S20676C9__8S20676C7[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
extern void _ZN9S20676C113v11Ev();
extern void _ZN9S20676C113v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C10__8S20676C7[] = {
  ABISELECT(1344,928),
  ABISELECT(2000,1392),
  ABISELECT(1896,1320),
  ABISELECT(-48,-40),
  ABISELECT(1488,1028),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN9S20676C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20676C113v12Ev,
};
extern void _ZN9S20676C113v11Ev();
extern void _ZN9S20676C113v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C119S20676C10__8S20676C7[] = {
  ABISELECT(1344,928),
  ABISELECT(2000,1392),
  ABISELECT(1896,1320),
  ABISELECT(-48,-40),
  ABISELECT(1488,1028),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN9S20676C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20676C113v12Ev,
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__9S20676C119S20676C10__8S20676C7[] = {
  0,
  0,
  0,
  ABISELECT(-1536,-1068),
  ABISELECT(-1488,-1028),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C2__9S20676C119S20676C10__8S20676C7[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-1944,-1360),
  ABISELECT(-1896,-1320),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__9S20676C119S20676C10__8S20676C7[] = {
  0,
  0,
  ABISELECT(-656,-464),
  ABISELECT(-2048,-1432),
  ABISELECT(-2000,-1392),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__A1__9S20676C119S20676C10__8S20676C7[] = {
  ABISELECT(-1392,-968),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C129S20676C10__A1__8S20676C7[] = {
  ABISELECT(256,176),
  ABISELECT(-1136,-792),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__9S20676C129S20676C10__A1__8S20676C7[] = {
  ABISELECT(-1392,-968),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__9S20676C10__8S20676C7[] = {
  ABISELECT(-1392,-968),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__9S20676C10__8S20676C7[] = {
  0,
  0,
  0,
  ABISELECT(-1536,-1068),
  ABISELECT(-1488,-1028),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C2__9S20676C10__8S20676C7[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-1944,-1360),
  ABISELECT(-1896,-1320),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__9S20676C10__8S20676C7[] = {
  0,
  0,
  ABISELECT(-656,-464),
  ABISELECT(-2048,-1432),
  ABISELECT(-2000,-1392),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__A__9S20676C10__8S20676C7[] = {
  ABISELECT(256,176),
  ABISELECT(-1136,-792),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__A1__8S20676C7[] = {
  ABISELECT(-1392,-968),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__8S20676C7[] = {
  ABISELECT(-1536,-1068),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C4[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C58S20676C4__A2__8S20676C7[] = {
  ABISELECT(-1536,-1068),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C2__8S20676C7[] = {
  ABISELECT(-408,-292),
  ABISELECT(-1944,-1360),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C2[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__8S20676C2__8S20676C7[] = {
  0,
  0,
  0,
  ABISELECT(-1536,-1068),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI8S20676C2[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__8S20676C7[] = {
  ABISELECT(-656,-464),
  ABISELECT(-2048,-1432),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__9S20676C12__8S20676C7[] = {
  ABISELECT(-1392,-968),
  ABISELECT(656,464),
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
};
static  VTT_ENTRY vtt_S20676C7[] = {
  {&(_ZTV8S20676C7[9]),  9,65},
  {&(_ZTV8S20676C7[15]),  15,65},
  {&(_ZTV8S20676C7[27]),  27,65},
  {&(_ZTV8S20676C7[38]),  38,65},
  {&(_ZTV8S20676C7[44]),  44,65},
  {&(_ZTV8S20676C7[54]),  54,65},
  {&(_ZTV8S20676C7[63]),  63,65},
  {&(_ZTV8S20676C7[33]),  33,65},
  {&(_tg__ZTV8S20676C9__8S20676C7[3]),  3,4},
  {&(_tg__ZTV8S20676C58S20676C9__8S20676C7[3]),  3,3},
  {&(_tg__ZTV9S20676C10__8S20676C7[7]),  7,9},
  {&(_tg__ZTV9S20676C119S20676C10__8S20676C7[7]),  7,9},
  {&(_tg__ZTV8S20676C4__9S20676C119S20676C10__8S20676C7[6]),  6,9},
  {&(_tg__ZTV8S20676C2__9S20676C119S20676C10__8S20676C7[7]),  7,10},
  {&(_tg__ZTV9S20676C12__9S20676C119S20676C10__8S20676C7[6]),  6,8},
  {&(_tg__ZTV8S20676C5__A1__9S20676C119S20676C10__8S20676C7[3]),  3,3},
  {&(_tg__ZTV9S20676C129S20676C10__A1__8S20676C7[4]),  4,6},
  {&(_tg__ZTV8S20676C5__9S20676C129S20676C10__A1__8S20676C7[3]),  3,3},
  {&(_tg__ZTV8S20676C5__9S20676C10__8S20676C7[3]),  3,3},
  {&(_tg__ZTV8S20676C4__9S20676C10__8S20676C7[6]),  6,9},
  {&(_tg__ZTV8S20676C2__9S20676C10__8S20676C7[7]),  7,10},
  {&(_tg__ZTV9S20676C12__9S20676C10__8S20676C7[6]),  6,8},
  {&(_tg__ZTV9S20676C12__A__9S20676C10__8S20676C7[4]),  4,6},
  {&(_tg__ZTV8S20676C5__A1__8S20676C7[3]),  3,3},
  {&(_tg__ZTV8S20676C4__8S20676C7[3]),  3,6},
  {&(_tg__ZTV8S20676C58S20676C4__A2__8S20676C7[3]),  3,3},
  {&(_tg__ZTV8S20676C2__8S20676C7[4]),  4,7},
  {&(_tg__ZTV8S20676C4__8S20676C2__8S20676C7[6]),  6,9},
  {&(_tg__ZTV9S20676C12__8S20676C7[4]),  4,6},
  {&(_tg__ZTV8S20676C5__9S20676C12__8S20676C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20676C7[];
extern  VTBL_ENTRY _ZTV8S20676C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C7[];
Class_Descriptor cd_S20676C7 = {  "S20676C7", // class name
  bases_S20676C7, 14,
  &(vtc_S20676C7[0]), // expected_vtbl_contents
  &(vtt_S20676C7[0]), // expected_vtt_contents
  ABISELECT(2688,1896), // object size
  NSPAIRA(_ZTI8S20676C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20676C7),65, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20676C7),30, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20676C14  : virtual S20676C13 {
  ::S20680C5 s20676c14f0;
  ::S20677C6_nt s20676c14f1;
  __tsi64 s20676c14f2;
  int s20676c14f3[2];
  virtual void  v14(); // _ZN9S20676C143v14Ev
  ~S20676C14(); // tgen
  S20676C14(); // tgen
};
//SIG(-1 S20676C14) C1{ VBC2{ v2 FC3{} FC4{ VBC5{ m Fp FL[4] Fs} FD Fi FC5 FC5} FC3 FL FC3 Fp FC3 Fp[2] FC3} v1 FC6{ BC7{ VBC5 BC8{ VBC5 FD Fi FC5 FC5} v4 v5 v6 Fs FL Fc Fi[2] FC8 Fp FL Fi FL Fi} VBC9{ VBC5 VBC8 v7 v8 Fi FC8 FL Fi Fp} BC8 VBC10{ v9 FC3 FC8 FC3 FL FC3 Fp FC3 Fp[2] FC3} VBC11{ BC8 v10 FL Fc[7] Fp Fi FC3 FC3 Fc[10]} v3 Fl FL FD FC3} FC3 FL Fi[2]}


void  S20676C14 ::v14(){vfunc_called(this, "_ZN9S20676C143v14Ev");}
S20676C14 ::~S20676C14(){ note_dtor("S20676C14", this);} // tgen
S20676C14 ::S20676C14(){ note_ctor("S20676C14", this);} // tgen

static void Test_S20676C14()
{
  extern Class_Descriptor cd_S20676C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(114,314)];
    init_test(&cd_S20676C14, buf);
    S20676C14 *dp, &lv = *(dp=new (buf) S20676C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1808,1252), "sizeof(S20676C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20676C14)");
    check_base_class_offset(lv, (S20676C13*), ABISELECT(1536,1068), "S20676C14");
    check_field_offset(lv, s20676c14f0, ABISELECT(16,4), "S20676C14.s20676c14f0");
    check_field_offset(lv, s20676c14f1, ABISELECT(1504,1048), "S20676C14.s20676c14f1");
    check_field_offset(lv, s20676c14f2, ABISELECT(1512,1052), "S20676C14.s20676c14f2");
    check_field_offset(lv, s20676c14f3, ABISELECT(1520,1060), "S20676C14.s20676c14f3");
    test_class_info(&lv, &cd_S20676C14);
    dp->~S20676C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20676C14(Test_S20676C14, "S20676C14", ABISELECT(1808,1252));

#else // __cplusplus

extern void _ZN9S20676C14C1Ev();
extern void _ZN9S20676C14D1Ev();
Name_Map name_map_S20676C14[] = {
  NSPAIR(_ZN9S20676C14C1Ev),
  NSPAIR(_ZN9S20676C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20676C13;
extern VTBL_ENTRY _ZTI9S20676C13[];
extern  VTBL_ENTRY _ZTV9S20676C13[];
static Base_Class bases_S20676C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20676C13,    ABISELECT(1536,1068), //bcp->offset
    4, //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 _ZTI9S20676C14[];
extern void _ZN9S20676C143v14Ev();
extern void _ZN9S20676C133v13Ev();
static  VTBL_ENTRY vtc_S20676C14[] = {
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C14[0]),
  (VTBL_ENTRY)&_ZN9S20676C143v14Ev,
  0,
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI9S20676C14[0]),
  (VTBL_ENTRY)&_ZN9S20676C133v13Ev,
};
extern VTBL_ENTRY _ZTV9S20676C14[];
static  VTT_ENTRY vtt_S20676C14[] = {
  {&(_ZTV9S20676C14[3]),  3,8},
  {&(_ZTV9S20676C14[7]),  7,8},
};
extern VTBL_ENTRY _ZTI9S20676C14[];
extern  VTBL_ENTRY _ZTV9S20676C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C14[];
Class_Descriptor cd_S20676C14 = {  "S20676C14", // class name
  bases_S20676C14, 1,
  &(vtc_S20676C14[0]), // expected_vtbl_contents
  &(vtt_S20676C14[0]), // expected_vtt_contents
  ABISELECT(1808,1252), // object size
  NSPAIRA(_ZTI9S20676C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20676C14),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20676C14),2, //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  S20676C1  : virtual S20676C2 , S20676C7 , virtual S20676C14 {
  int s20676c1f0;
  int s20676c1f1:13;
  ::S20677C6_nt s20676c1f2;
  ::S20677C6_nt s20676c1f3;
  void *s20676c1f4;
  ::S20677C6_nt s20676c1f5;
  __tsi64 s20676c1f6;
  char s20676c1f7;
  ::S20677C6_nt s20676c1f8;
  virtual void  v1(); // _ZN8S20676C12v1Ev
  ~S20676C1(); // tgen
  S20676C1(); // tgen
};
//SIG(1 S20676C1) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} VBC4{ VBC3 BC5{ VBC3 FD Fi FC3 FC3} v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} v5 v6 v7 FL FC6{} Fp Fc[2] FC3 Fl FC6} BC7{ BC8{ BC3 FC3 Fi FD Fi FL Fl} BC3 VBC9{ BC5 v8 FL Fc[7] Fp Fi FC6 FC6 Fc[10]} VBC10{ VBC5 BC11{ VBC4 VBC2 VBC12{ VBC3 VBC5 v9 v10 Fi FC5 FL Fi Fp} v11 v12 FC6 FC6 Fi FC5 FC6 FC6 FC13{ v13 FC6 FC5 FC6 FL FC6 Fp FC6 Fp[2] FC6} FC2 Fp FC6} BC12 Fi Fc:2 FC6 Fi} vd FL} VBC14{ VBC13 v14 FC15{ BC16{ VBC3 BC17{ VBC3 FD Fi FC3 FC3} v16 v17 v18 Fs FL Fc Fi[2] FC17 Fp FL Fi FL Fi} VBC18{ VBC3 VBC17 v19 v20 Fi FC17 FL Fi Fp} BC17 VBC19{ v21 FC6 FC17 FC6 FL FC6 Fp FC6 Fp[2] FC6} VBC20{ BC17 v22 FL Fc[7] Fp Fi FC6 FC6 Fc[10]} v15 Fl FL FD FC6} FC6 FL Fi[2]} v1 Fi Fi:13 FC6 FC6 Fp FC6 FL Fc FC6}


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

static void Test_S20676C1()
{
  extern Class_Descriptor cd_S20676C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(285,795)];
    init_test(&cd_S20676C1, buf);
    S20676C1 *dp, &lv = *(dp=new (buf) S20676C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4544,3176), "sizeof(S20676C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20676C1)");
    check_base_class_offset(lv, (S20677C3*)(S20676C2*), ABISELECT(368,264), "S20676C1");
    check_base_class_offset(lv, (S20677C3*)(S20676C4*), ABISELECT(368,264), "S20676C1");
    check_base_class_offset(lv, (S20677C3*)(S20676C5*)(S20676C4*), ABISELECT(368,264), "S20676C1");
    check_base_class_offset(lv, (S20677C3*)(S20676C5*)(S20676C9*), ABISELECT(368,264), "S20676C1");
    /*is_ambiguous_... S20676C1::S20676C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20676C5*), ABISELECT(368,264), "S20676C1");
    /*is_ambiguous_... S20676C1::S20676C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20676C12*), ABISELECT(368,264), "S20676C1");
    /*is_ambiguous_... S20676C10::S20676C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20676C12*)(S20676C10*), ABISELECT(368,264), "S20676C1");
    check_base_class_offset(lv, (S20676C5*)(S20676C4*), ABISELECT(416,304), "S20676C1");
    check_base_class_offset(lv, (S20676C4*)(S20676C2*), ABISELECT(416,304), "S20676C1");
    check_base_class_offset(lv, (S20676C4*)(S20676C11*)(S20676C10*), ABISELECT(416,304), "S20676C1");
    check_base_class_offset(lv, (S20676C2*), ABISELECT(264,192), "S20676C1");
    check_base_class_offset(lv, (S20676C2*)(S20676C11*)(S20676C10*), ABISELECT(264,192), "S20676C1");
    check_base_class_offset(lv, (S20677C3*)(S20676C8*)(S20676C7*), ABISELECT(16,4), "S20676C1");
    check_base_class_offset(lv, (S20676C8*)(S20676C7*), ABISELECT(16,4), "S20676C1");
    /*is_ambiguous_... S20676C7::S20677C3 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20676C7*), ABISELECT(168,116), "S20676C1");
    check_base_class_offset(lv, (S20676C5*)(S20676C9*), ABISELECT(832,596), "S20676C1");
    check_base_class_offset(lv, (S20676C9*)(S20676C7*), ABISELECT(832,596), "S20676C1");
    /*is_ambiguous_... S20676C10::S20676C5 */ AMB_check_base_class_offset(lv, (S20676C5*)(S20676C10*), ABISELECT(2352,1660), "S20676C1");
    /*is_ambiguous_... S20676C1::S20676C12 */ AMB_check_base_class_offset(lv, (S20676C5*)(S20676C12*), ABISELECT(2352,1660), "S20676C1");
    /*is_ambiguous_... S20676C10::S20676C12 */ AMB_check_base_class_offset(lv, (S20676C5*)(S20676C12*)(S20676C10*), ABISELECT(2352,1660), "S20676C1");
    check_base_class_offset(lv, (S20676C12*)(S20676C11*)(S20676C10*), ABISELECT(2496,1760), "S20676C1");
    check_base_class_offset(lv, (S20676C11*)(S20676C10*), ABISELECT(1008,732), "S20676C1");
    /*is_ambiguous_... S20676C10::S20676C12 */ AMB_check_base_class_offset(lv, (S20676C12*)(S20676C10*), ABISELECT(2096,1484), "S20676C1");
    check_base_class_offset(lv, (S20676C10*)(S20676C7*), ABISELECT(1008,732), "S20676C1");
    check_base_class_offset(lv, (S20676C7*), 0, "S20676C1");
    check_base_class_offset(lv, (S20676C13*)(S20676C14*), ABISELECT(4272,2992), "S20676C1");
    check_base_class_offset(lv, (S20676C14*), ABISELECT(2736,1924), "S20676C1");
    check_field_offset(lv, s20676c1f0, ABISELECT(224,164), "S20676C1.s20676c1f0");
    set_bf_and_test(lv, s20676c1f1, ABISELECT(228,168), 0, 13, 1, "S20676C1");
    set_bf_and_test(lv, s20676c1f1, ABISELECT(228,168), 0, 13, hide_sll(1LL<<12), "S20676C1");
    check_field_offset(lv, s20676c1f2, ABISELECT(230,170), "S20676C1.s20676c1f2");
    check_field_offset(lv, s20676c1f3, ABISELECT(231,171), "S20676C1.s20676c1f3");
    check_field_offset(lv, s20676c1f4, ABISELECT(232,172), "S20676C1.s20676c1f4");
    check_field_offset(lv, s20676c1f5, ABISELECT(240,176), "S20676C1.s20676c1f5");
    check_field_offset(lv, s20676c1f6, ABISELECT(248,180), "S20676C1.s20676c1f6");
    check_field_offset(lv, s20676c1f7, ABISELECT(256,188), "S20676C1.s20676c1f7");
    check_field_offset(lv, s20676c1f8, ABISELECT(257,189), "S20676C1.s20676c1f8");
    test_class_info(&lv, &cd_S20676C1);
    dp->~S20676C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20676C1(Test_S20676C1, "S20676C1", ABISELECT(4544,3176));

#else // __cplusplus

extern void _ZN8S20676C1C1Ev();
extern void _ZN8S20676C1D1Ev();
Name_Map name_map_S20676C1[] = {
  NSPAIR(_ZN8S20676C1C1Ev),
  NSPAIR(_ZN8S20676C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
extern Class_Descriptor cd_S20676C4;
extern VTBL_ENTRY _ZTI8S20676C4[];
extern  VTBL_ENTRY _ZTV8S20676C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C4[];
extern Class_Descriptor cd_S20676C2;
extern VTBL_ENTRY _ZTI8S20676C2[];
extern  VTBL_ENTRY _ZTV8S20676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C2[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20676C8;
extern VTBL_ENTRY _ZTI8S20676C8[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
extern Class_Descriptor cd_S20676C9;
extern VTBL_ENTRY _ZTI8S20676C9[];
extern  VTBL_ENTRY _ZTV8S20676C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C9[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
extern Class_Descriptor cd_S20676C12;
extern VTBL_ENTRY _ZTI9S20676C12[];
extern  VTBL_ENTRY _ZTV9S20676C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C12[];
extern Class_Descriptor cd_S20676C11;
extern VTBL_ENTRY _ZTI9S20676C11[];
extern  VTBL_ENTRY _ZTV9S20676C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C11[];
extern Class_Descriptor cd_S20676C12;
extern VTBL_ENTRY _ZTI9S20676C12[];
extern  VTBL_ENTRY _ZTV9S20676C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C12[];
extern Class_Descriptor cd_S20676C10;
extern VTBL_ENTRY _ZTI9S20676C10[];
extern  VTBL_ENTRY _ZTV9S20676C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C10[];
extern Class_Descriptor cd_S20676C7;
extern VTBL_ENTRY _ZTI8S20676C7[];
extern  VTBL_ENTRY _ZTV8S20676C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C7[];
extern Class_Descriptor cd_S20676C13;
extern VTBL_ENTRY _ZTI9S20676C13[];
extern  VTBL_ENTRY _ZTV9S20676C13[];
extern Class_Descriptor cd_S20676C14;
extern VTBL_ENTRY _ZTI9S20676C14[];
extern  VTBL_ENTRY _ZTV9S20676C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C14[];
static Base_Class bases_S20676C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(368,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
    1, //immediately_derived
  0, 1},
  {&cd_S20676C5,    ABISELECT(416,304), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20676C4,    ABISELECT(416,304), //bcp->offset
    24, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20676C2,    ABISELECT(264,192), //bcp->offset
    14, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C3,    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_S20676C8,    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_S20677C3,    ABISELECT(168,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
    14, //immediately_derived
  0, 0},
  {&cd_S20676C5,    ABISELECT(832,596), //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
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20676C9,    ABISELECT(832,596), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20676C5,    ABISELECT(2352,1660), //bcp->offset
    57, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20676C12,    ABISELECT(2496,1760), //bcp->offset
    60, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20676C11,    ABISELECT(1008,732), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //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
    13, //immediately_derived
  0, 0},
  {&cd_S20676C12,    ABISELECT(2096,1484), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20676C10,    ABISELECT(1008,732), //bcp->offset
    38, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20676C7,    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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20676C13,    ABISELECT(4272,2992), //bcp->offset
    73, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S20676C14,    ABISELECT(2736,1924), //bcp->offset
    68, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20676C1[];
extern void _ZN8S20676C1D1Ev();
extern void _ZN8S20676C1D0Ev();
extern void _ZN8S20676C12v1Ev();
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
extern void _ZN8S20676C92v8Ev();
extern void _ZN9S20676C113v11Ev();
extern void _ZN9S20676C113v12Ev();
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
extern void _ZN9S20676C143v14Ev();
extern void _ZN9S20676C133v13Ev();
static  VTBL_ENTRY vtc_S20676C1[] = {
  ABISELECT(4272,2992),
  ABISELECT(2736,1924),
  ABISELECT(2496,1760),
  ABISELECT(264,192),
  ABISELECT(416,304),
  ABISELECT(2352,1660),
  ABISELECT(1008,732),
  ABISELECT(368,264),
  ABISELECT(832,596),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C1[0]),
  (VTBL_ENTRY)&_ZN8S20676C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20676C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20676C12v1Ev,
  0,
  0,
  0,
  ABISELECT(152,112),
  ABISELECT(104,72),
  ABISELECT(-264,-192),
  (VTBL_ENTRY)&(_ZTI8S20676C1[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
  0,
  0,
  0,
  ABISELECT(-48,-40),
  ABISELECT(-416,-304),
  (VTBL_ENTRY)&(_ZTI8S20676C1[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
  0,
  ABISELECT(-464,-332),
  ABISELECT(-832,-596),
  (VTBL_ENTRY)&(_ZTI8S20676C1[0]),
  (VTBL_ENTRY)&_ZN8S20676C92v8Ev,
  ABISELECT(1088,752),
  ABISELECT(1088,752),
  0,
  0,
  ABISELECT(1344,928),
  ABISELECT(1488,1028),
  ABISELECT(-744,-540),
  ABISELECT(-640,-468),
  ABISELECT(-592,-428),
  ABISELECT(-1008,-732),
  (VTBL_ENTRY)&(_ZTI8S20676C1[0]),
  (VTBL_ENTRY)&_ZN9S20676C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20676C113v12Ev,
  ABISELECT(256,176),
  ABISELECT(-1728,-1220),
  ABISELECT(-2096,-1484),
  (VTBL_ENTRY)&(_ZTI8S20676C1[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
  ABISELECT(-1984,-1396),
  ABISELECT(-2352,-1660),
  (VTBL_ENTRY)&(_ZTI8S20676C1[0]),
  0,
  0,
  ABISELECT(-144,-100),
  ABISELECT(-2128,-1496),
  ABISELECT(-2496,-1760),
  (VTBL_ENTRY)&(_ZTI8S20676C1[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
  0,
  ABISELECT(1536,1068),
  ABISELECT(-2736,-1924),
  (VTBL_ENTRY)&(_ZTI8S20676C1[0]),
  (VTBL_ENTRY)&_ZN9S20676C143v14Ev,
  0,
  ABISELECT(-4272,-2992),
  (VTBL_ENTRY)&(_ZTI8S20676C1[0]),
  (VTBL_ENTRY)&_ZN9S20676C133v13Ev,
};
extern VTBL_ENTRY _ZTV8S20676C1[];
extern void _ZN8S20676C7D1Ev();
extern void _ZN8S20676C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C7__8S20676C1[] = {
  ABISELECT(2496,1760),
  ABISELECT(264,192),
  ABISELECT(416,304),
  ABISELECT(2352,1660),
  ABISELECT(1008,732),
  ABISELECT(368,264),
  ABISELECT(832,596),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN8S20676C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20676C7D0Ev,
};
extern void _ZN8S20676C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C9__8S20676C7__8S20676C1[] = {
  0,
  ABISELECT(-464,-332),
  ABISELECT(-832,-596),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN8S20676C92v8Ev,
};
extern void _ZN9S20676C113v11Ev();
extern void _ZN9S20676C113v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C10__8S20676C7__8S20676C1[] = {
  ABISELECT(1088,752),
  ABISELECT(1088,752),
  0,
  0,
  ABISELECT(1344,928),
  ABISELECT(1488,1028),
  ABISELECT(-744,-540),
  ABISELECT(-640,-468),
  ABISELECT(-592,-428),
  ABISELECT(-1008,-732),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN9S20676C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20676C113v12Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__A1__8S20676C7__8S20676C1[] = {
  ABISELECT(-1984,-1396),
  ABISELECT(-2352,-1660),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__8S20676C7__8S20676C1[] = {
  0,
  0,
  0,
  ABISELECT(-48,-40),
  ABISELECT(-416,-304),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C2__8S20676C7__8S20676C1[] = {
  0,
  0,
  0,
  ABISELECT(152,112),
  ABISELECT(104,72),
  ABISELECT(-264,-192),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__8S20676C7__8S20676C1[] = {
  0,
  0,
  ABISELECT(-144,-100),
  ABISELECT(-2128,-1496),
  ABISELECT(-2496,-1760),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C129S20676C10__A1__8S20676C7__8S20676C1[] = {
  ABISELECT(256,176),
  ABISELECT(-1728,-1220),
  ABISELECT(-2096,-1484),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C2__8S20676C1[] = {
  ABISELECT(152,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C2[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__8S20676C2__8S20676C1[] = {
  0,
  0,
  0,
  ABISELECT(-48,-40),
  ABISELECT(-152,-112),
  (VTBL_ENTRY)&(_ZTI8S20676C2[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__8S20676C1[] = {
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C4[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C58S20676C4__8S20676C1[] = {
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
extern void _ZN8S20676C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C9__8S20676C1[] = {
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C9[0]),
  (VTBL_ENTRY)&_ZN8S20676C92v8Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C58S20676C9__A1__8S20676C1[] = {
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
extern void _ZN9S20676C113v11Ev();
extern void _ZN9S20676C113v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C10__8S20676C1[] = {
  ABISELECT(1344,928),
  ABISELECT(1488,1028),
  ABISELECT(-744,-540),
  ABISELECT(-640,-468),
  ABISELECT(-592,-428),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN9S20676C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20676C113v12Ev,
};
extern void _ZN9S20676C113v11Ev();
extern void _ZN9S20676C113v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C119S20676C10__8S20676C1[] = {
  ABISELECT(1344,928),
  ABISELECT(1488,1028),
  ABISELECT(-744,-540),
  ABISELECT(-640,-468),
  ABISELECT(-592,-428),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN9S20676C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20676C113v12Ev,
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__9S20676C119S20676C10__8S20676C1[] = {
  0,
  0,
  0,
  ABISELECT(-48,-40),
  ABISELECT(592,428),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C2__9S20676C119S20676C10__8S20676C1[] = {
  0,
  0,
  0,
  ABISELECT(152,112),
  ABISELECT(104,72),
  ABISELECT(744,540),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__9S20676C119S20676C10__8S20676C1[] = {
  0,
  0,
  ABISELECT(-144,-100),
  ABISELECT(-2128,-1496),
  ABISELECT(-1488,-1028),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__A1__9S20676C119S20676C10__8S20676C1[] = {
  ABISELECT(-1984,-1396),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C129S20676C10__A1__8S20676C1[] = {
  ABISELECT(256,176),
  ABISELECT(-1728,-1220),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__9S20676C129S20676C10__A1__8S20676C1[] = {
  ABISELECT(-1984,-1396),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__9S20676C10__8S20676C1[] = {
  ABISELECT(-1984,-1396),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__9S20676C10__8S20676C1[] = {
  0,
  0,
  0,
  ABISELECT(-48,-40),
  ABISELECT(592,428),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C2__9S20676C10__8S20676C1[] = {
  0,
  0,
  0,
  ABISELECT(152,112),
  ABISELECT(104,72),
  ABISELECT(744,540),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__9S20676C10__8S20676C1[] = {
  0,
  0,
  ABISELECT(-144,-100),
  ABISELECT(-2128,-1496),
  ABISELECT(-1488,-1028),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__A__9S20676C10__8S20676C1[] = {
  ABISELECT(256,176),
  ABISELECT(-1728,-1220),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__A2__8S20676C1[] = {
  ABISELECT(-1984,-1396),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__8S20676C1[] = {
  ABISELECT(-144,-100),
  ABISELECT(-2128,-1496),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__9S20676C12__8S20676C1[] = {
  ABISELECT(-1984,-1396),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
};
extern void _ZN9S20676C143v14Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C14__8S20676C1[] = {
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C14[0]),
  (VTBL_ENTRY)&_ZN9S20676C143v14Ev,
};
extern void _ZN9S20676C133v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C13__9S20676C14__8S20676C1[] = {
  0,
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI9S20676C14[0]),
  (VTBL_ENTRY)&_ZN9S20676C133v13Ev,
};
static  VTT_ENTRY vtt_S20676C1[] = {
  {&(_ZTV8S20676C1[11]),  11,77},
  {&(_tg__ZTV8S20676C7__8S20676C1[9]),  9,11},
  {&(_tg__ZTV8S20676C9__8S20676C7__8S20676C1[4]),  4,5},
  {&(_tg__ZTV9S20676C10__8S20676C7__8S20676C1[11]),  11,13},
  {&(_tg__ZTV8S20676C5__A1__8S20676C7__8S20676C1[3]),  3,3},
  {&(_tg__ZTV8S20676C4__8S20676C7__8S20676C1[6]),  6,9},
  {&(_tg__ZTV8S20676C2__8S20676C7__8S20676C1[7]),  7,10},
  {&(_tg__ZTV9S20676C12__8S20676C7__8S20676C1[6]),  6,8},
  {&(_tg__ZTV9S20676C129S20676C10__A1__8S20676C7__8S20676C1[4]),  4,6},
  {&(_ZTV8S20676C1[21]),  21,77},
  {&(_ZTV8S20676C1[30]),  30,77},
  {&(_ZTV8S20676C1[37]),  37,77},
  {&(_ZTV8S20676C1[49]),  49,77},
  {&(_ZTV8S20676C1[60]),  60,77},
  {&(_ZTV8S20676C1[66]),  66,77},
  {&(_ZTV8S20676C1[55]),  55,77},
  {&(_ZTV8S20676C1[72]),  72,77},
  {&(_ZTV8S20676C1[76]),  76,77},
  {&(_tg__ZTV8S20676C2__8S20676C1[4]),  4,7},
  {&(_tg__ZTV8S20676C4__8S20676C2__8S20676C1[6]),  6,9},
  {&(_tg__ZTV8S20676C4__8S20676C1[3]),  3,6},
  {&(_tg__ZTV8S20676C58S20676C4__8S20676C1[3]),  3,3},
  {&(_tg__ZTV8S20676C9__8S20676C1[3]),  3,4},
  {&(_tg__ZTV8S20676C58S20676C9__A1__8S20676C1[3]),  3,3},
  {&(_tg__ZTV9S20676C10__8S20676C1[7]),  7,9},
  {&(_tg__ZTV9S20676C119S20676C10__8S20676C1[7]),  7,9},
  {&(_tg__ZTV8S20676C4__9S20676C119S20676C10__8S20676C1[6]),  6,9},
  {&(_tg__ZTV8S20676C2__9S20676C119S20676C10__8S20676C1[7]),  7,10},
  {&(_tg__ZTV9S20676C12__9S20676C119S20676C10__8S20676C1[6]),  6,8},
  {&(_tg__ZTV8S20676C5__A1__9S20676C119S20676C10__8S20676C1[3]),  3,3},
  {&(_tg__ZTV9S20676C129S20676C10__A1__8S20676C1[4]),  4,6},
  {&(_tg__ZTV8S20676C5__9S20676C129S20676C10__A1__8S20676C1[3]),  3,3},
  {&(_tg__ZTV8S20676C5__9S20676C10__8S20676C1[3]),  3,3},
  {&(_tg__ZTV8S20676C4__9S20676C10__8S20676C1[6]),  6,9},
  {&(_tg__ZTV8S20676C2__9S20676C10__8S20676C1[7]),  7,10},
  {&(_tg__ZTV9S20676C12__9S20676C10__8S20676C1[6]),  6,8},
  {&(_tg__ZTV9S20676C12__A__9S20676C10__8S20676C1[4]),  4,6},
  {&(_tg__ZTV8S20676C5__A2__8S20676C1[3]),  3,3},
  {&(_tg__ZTV9S20676C12__8S20676C1[4]),  4,6},
  {&(_tg__ZTV8S20676C5__9S20676C12__8S20676C1[3]),  3,3},
  {&(_tg__ZTV9S20676C14__8S20676C1[3]),  3,4},
  {&(_tg__ZTV9S20676C13__9S20676C14__8S20676C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20676C1[];
extern  VTBL_ENTRY _ZTV8S20676C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C1[];
Class_Descriptor cd_S20676C1 = {  "S20676C1", // class name
  bases_S20676C1, 17,
  &(vtc_S20676C1[0]), // expected_vtbl_contents
  &(vtt_S20676C1[0]), // expected_vtt_contents
  ABISELECT(4544,3176), // object size
  NSPAIRA(_ZTI8S20676C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20676C1),77, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20676C1),42, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20673C5  : virtual S20677C3 {
  long double s20673c5f0;
  int s20673c5f1;
  ::S20677C3 s20673c5f2;
  ::S20677C3 s20673c5f3;
  ~S20673C5(); // tgen
  S20673C5(); // tgen
};
//SIG(-1 S20673C5) C1{ VBC2{ m Fp FL[4] Fs} FD Fi FC2 FC2}


S20673C5 ::~S20673C5(){ note_dtor("S20673C5", this);} // tgen
S20673C5 ::S20673C5(){ note_ctor("S20673C5", this);} // tgen

static void Test_S20673C5()
{
  extern Class_Descriptor cd_S20673C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,36)];
    init_test(&cd_S20673C5, buf);
    S20673C5 *dp, &lv = *(dp=new (buf) S20673C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S20673C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20673C5)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(136,100), "S20673C5");
    check_field_offset(lv, s20673c5f0, ABISELECT(16,4), "S20673C5.s20673c5f0");
    check_field_offset(lv, s20673c5f1, ABISELECT(32,16), "S20673C5.s20673c5f1");
    check_field_offset(lv, s20673c5f2, ABISELECT(40,20), "S20673C5.s20673c5f2");
    check_field_offset(lv, s20673c5f3, ABISELECT(88,60), "S20673C5.s20673c5f3");
    test_class_info(&lv, &cd_S20673C5);
    dp->~S20673C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20673C5(Test_S20673C5, "S20673C5", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN8S20673C5C1Ev();
extern void _ZN8S20673C5D1Ev();
Name_Map name_map_S20673C5[] = {
  NSPAIR(_ZN8S20673C5C1Ev),
  NSPAIR(_ZN8S20673C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20673C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(136,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20673C5[];
static  VTBL_ENTRY vtc_S20673C5[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C5[0]),
};
extern VTBL_ENTRY _ZTV8S20673C5[];
static  VTT_ENTRY vtt_S20673C5[] = {
  {&(_ZTV8S20673C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20673C5[];
extern  VTBL_ENTRY _ZTV8S20673C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C5[];
Class_Descriptor cd_S20673C5 = {  "S20673C5", // class name
  bases_S20673C5, 1,
  &(vtc_S20673C5[0]), // expected_vtbl_contents
  &(vtt_S20673C5[0]), // expected_vtt_contents
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI8S20673C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20673C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20673C5),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  S20673C4  : virtual S20677C3 , S20673C5 {
  short s20673c4f0;
  __tsi64 s20673c4f1;
  char s20673c4f2;
  int s20673c4f3[2];
  ::S20673C5 s20673c4f4;
  void *s20673c4f5;
  __tsi64 s20673c4f6;
  int s20673c4f7;
  __tsi64 s20673c4f8;
  int s20673c4f9;
  virtual void  v1(); // _ZN8S20673C42v1Ev
  virtual void  v2(); // _ZN8S20673C42v2Ev
  virtual void  v3(); // _ZN8S20673C42v3Ev
  ~S20673C4(); // tgen
  S20673C4(); // tgen
};
//SIG(-1 S20673C4) C1{ VBC2{ m Fp FL[4] Fs} BC3{ VBC2 FD Fi FC2 FC2} v1 v2 v3 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi}


void  S20673C4 ::v1(){vfunc_called(this, "_ZN8S20673C42v1Ev");}
void  S20673C4 ::v2(){vfunc_called(this, "_ZN8S20673C42v2Ev");}
void  S20673C4 ::v3(){vfunc_called(this, "_ZN8S20673C42v3Ev");}
S20673C4 ::~S20673C4(){ note_dtor("S20673C4", this);} // tgen
S20673C4 ::S20673C4(){ note_ctor("S20673C4", this);} // tgen

static void Test_S20673C4()
{
  extern Class_Descriptor cd_S20673C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,84)];
    init_test(&cd_S20673C4, buf);
    S20673C4 *dp, &lv = *(dp=new (buf) S20673C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,332), "sizeof(S20673C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20673C4)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(408,292), "S20673C4");
    check_base_class_offset(lv, (S20677C3*)(S20673C5*), ABISELECT(408,292), "S20673C4");
    check_base_class_offset(lv, (S20673C5*), 0, "S20673C4");
    check_field_offset(lv, s20673c4f0, ABISELECT(136,100), "S20673C4.s20673c4f0");
    check_field_offset(lv, s20673c4f1, ABISELECT(144,104), "S20673C4.s20673c4f1");
    check_field_offset(lv, s20673c4f2, ABISELECT(152,112), "S20673C4.s20673c4f2");
    check_field_offset(lv, s20673c4f3, ABISELECT(156,116), "S20673C4.s20673c4f3");
    check_field_offset(lv, s20673c4f4, ABISELECT(176,124), "S20673C4.s20673c4f4");
    check_field_offset(lv, s20673c4f5, ABISELECT(368,264), "S20673C4.s20673c4f5");
    check_field_offset(lv, s20673c4f6, ABISELECT(376,268), "S20673C4.s20673c4f6");
    check_field_offset(lv, s20673c4f7, ABISELECT(384,276), "S20673C4.s20673c4f7");
    check_field_offset(lv, s20673c4f8, ABISELECT(392,280), "S20673C4.s20673c4f8");
    check_field_offset(lv, s20673c4f9, ABISELECT(400,288), "S20673C4.s20673c4f9");
    test_class_info(&lv, &cd_S20673C4);
    dp->~S20673C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20673C4(Test_S20673C4, "S20673C4", ABISELECT(464,332));

#else // __cplusplus

extern void _ZN8S20673C4C1Ev();
extern void _ZN8S20673C4D1Ev();
Name_Map name_map_S20673C4[] = {
  NSPAIR(_ZN8S20673C4C1Ev),
  NSPAIR(_ZN8S20673C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20673C5;
extern VTBL_ENTRY _ZTI8S20673C5[];
extern  VTBL_ENTRY _ZTV8S20673C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C5[];
static Base_Class bases_S20673C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(408,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20673C5,    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 _ZTI8S20673C4[];
extern void _ZN8S20673C42v1Ev();
extern void _ZN8S20673C42v2Ev();
extern void _ZN8S20673C42v3Ev();
static  VTBL_ENTRY vtc_S20673C4[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C4[0]),
  (VTBL_ENTRY)&_ZN8S20673C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S20673C4[];
static  VTBL_ENTRY _tg__ZTV8S20673C5__8S20673C4[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C5[0]),
};
static  VTT_ENTRY vtt_S20673C4[] = {
  {&(_ZTV8S20673C4[3]),  3,6},
  {&(_tg__ZTV8S20673C5__8S20673C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20673C4[];
extern  VTBL_ENTRY _ZTV8S20673C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C4[];
Class_Descriptor cd_S20673C4 = {  "S20673C4", // class name
  bases_S20673C4, 2,
  &(vtc_S20673C4[0]), // expected_vtbl_contents
  &(vtt_S20673C4[0]), // expected_vtt_contents
  ABISELECT(464,332), // object size
  NSPAIRA(_ZTI8S20673C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20673C4),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20673C4),2, //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  S20673C2  : virtual S20677C3 , virtual S20673C4 {
  __tsi64 s20673c2f0;
  ::S20677C6_nt s20673c2f1;
  void *s20673c2f2;
  char s20673c2f3[2];
  ::S20677C3 s20673c2f4;
  long s20673c2f5;
  ::S20677C6_nt s20673c2f6;
  virtual void  v4(); // _ZN8S20673C22v4Ev
  virtual void  v5(); // _ZN8S20673C22v5Ev
  virtual void  v6(); // _ZN8S20673C22v6Ev
  ~S20673C2(); // tgen
  S20673C2(); // tgen
};
//SIG(-1 S20673C2) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 BC4{ VBC2 FD Fi FC2 FC2} v4 v5 v6 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} v1 v2 v3 FL FC5{} Fp Fc[2] FC2 Fl FC5}


void  S20673C2 ::v4(){vfunc_called(this, "_ZN8S20673C22v4Ev");}
void  S20673C2 ::v5(){vfunc_called(this, "_ZN8S20673C22v5Ev");}
void  S20673C2 ::v6(){vfunc_called(this, "_ZN8S20673C22v6Ev");}
S20673C2 ::~S20673C2(){ note_dtor("S20673C2", this);} // tgen
S20673C2 ::S20673C2(){ note_ctor("S20673C2", this);} // tgen

static void Test_S20673C2()
{
  extern Class_Descriptor cd_S20673C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,102)];
    init_test(&cd_S20673C2, buf);
    S20673C2 *dp, &lv = *(dp=new (buf) S20673C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,404), "sizeof(S20673C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20673C2)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(104,72), "S20673C2");
    check_base_class_offset(lv, (S20677C3*)(S20673C4*), ABISELECT(104,72), "S20673C2");
    check_base_class_offset(lv, (S20677C3*)(S20673C5*)(S20673C4*), ABISELECT(104,72), "S20673C2");
    check_base_class_offset(lv, (S20673C5*)(S20673C4*), ABISELECT(160,112), "S20673C2");
    check_base_class_offset(lv, (S20673C4*), ABISELECT(160,112), "S20673C2");
    check_field_offset(lv, s20673c2f0, ABISELECT(8,4), "S20673C2.s20673c2f0");
    check_field_offset(lv, s20673c2f1, ABISELECT(16,12), "S20673C2.s20673c2f1");
    check_field_offset(lv, s20673c2f2, ABISELECT(24,16), "S20673C2.s20673c2f2");
    check_field_offset(lv, s20673c2f3, ABISELECT(32,20), "S20673C2.s20673c2f3");
    check_field_offset(lv, s20673c2f4, ABISELECT(40,24), "S20673C2.s20673c2f4");
    check_field_offset(lv, s20673c2f5, ABISELECT(88,64), "S20673C2.s20673c2f5");
    check_field_offset(lv, s20673c2f6, ABISELECT(96,68), "S20673C2.s20673c2f6");
    test_class_info(&lv, &cd_S20673C2);
    dp->~S20673C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20673C2(Test_S20673C2, "S20673C2", ABISELECT(576,404));

#else // __cplusplus

extern void _ZN8S20673C2C1Ev();
extern void _ZN8S20673C2D1Ev();
Name_Map name_map_S20673C2[] = {
  NSPAIR(_ZN8S20673C2C1Ev),
  NSPAIR(_ZN8S20673C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20673C5;
extern VTBL_ENTRY _ZTI8S20673C5[];
extern  VTBL_ENTRY _ZTV8S20673C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C5[];
extern Class_Descriptor cd_S20673C4;
extern VTBL_ENTRY _ZTI8S20673C4[];
extern  VTBL_ENTRY _ZTV8S20673C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C4[];
static Base_Class bases_S20673C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(104,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20673C5,    ABISELECT(160,112), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20673C4,    ABISELECT(160,112), //bcp->offset
    7, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20673C2[];
extern void _ZN8S20673C22v4Ev();
extern void _ZN8S20673C22v5Ev();
extern void _ZN8S20673C22v6Ev();
extern void _ZN8S20673C42v1Ev();
extern void _ZN8S20673C42v2Ev();
extern void _ZN8S20673C42v3Ev();
static  VTBL_ENTRY vtc_S20673C2[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C2[0]),
  (VTBL_ENTRY)&_ZN8S20673C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20673C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20673C22v6Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20673C2[0]),
  (VTBL_ENTRY)&_ZN8S20673C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S20673C2[];
extern void _ZN8S20673C42v1Ev();
extern void _ZN8S20673C42v2Ev();
extern void _ZN8S20673C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20673C4__8S20673C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C4[0]),
  (VTBL_ENTRY)&_ZN8S20673C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20673C58S20673C4__8S20673C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C5[0]),
};
static  VTT_ENTRY vtt_S20673C2[] = {
  {&(_ZTV8S20673C2[4]),  4,16},
  {&(_ZTV8S20673C2[13]),  13,16},
  {&(_tg__ZTV8S20673C4__8S20673C2[3]),  3,6},
  {&(_tg__ZTV8S20673C58S20673C4__8S20673C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20673C2[];
extern  VTBL_ENTRY _ZTV8S20673C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C2[];
Class_Descriptor cd_S20673C2 = {  "S20673C2", // class name
  bases_S20673C2, 3,
  &(vtc_S20673C2[0]), // expected_vtbl_contents
  &(vtt_S20673C2[0]), // expected_vtt_contents
  ABISELECT(576,404), // object size
  NSPAIRA(_ZTI8S20673C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20673C2),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20673C2),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  S20673C11  : S20677C3 {
  ::S20677C3 s20673c11f0;
  int s20673c11f1;
  long double s20673c11f2;
  int s20673c11f3;
  __tsi64 s20673c11f4;
  long s20673c11f5;
};
//SIG(-1 S20673C11) C1{ BC2{ m Fp FL[4] Fs} FC2 Fi FD Fi FL Fl}



static void Test_S20673C11()
{
  extern Class_Descriptor cd_S20673C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S20673C11, buf);
    S20673C11 &lv = *(new (buf) S20673C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20673C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20673C11)");
    check_base_class_offset(lv, (S20677C3*), 0, "S20673C11");
    check_field_offset(lv, s20673c11f0, ABISELECT(48,40), "S20673C11.s20673c11f0");
    check_field_offset(lv, s20673c11f1, ABISELECT(96,80), "S20673C11.s20673c11f1");
    check_field_offset(lv, s20673c11f2, ABISELECT(112,84), "S20673C11.s20673c11f2");
    check_field_offset(lv, s20673c11f3, ABISELECT(128,96), "S20673C11.s20673c11f3");
    check_field_offset(lv, s20673c11f4, ABISELECT(136,100), "S20673C11.s20673c11f4");
    check_field_offset(lv, s20673c11f5, ABISELECT(144,108), "S20673C11.s20673c11f5");
    test_class_info(&lv, &cd_S20673C11);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20673C11(Test_S20673C11, "S20673C11", ABISELECT(160,112));

#else // __cplusplus

extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20673C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20673C11[];
Class_Descriptor cd_S20673C11 = {  "S20673C11", // class name
  bases_S20673C11, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI9S20673C11),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  S20673C9  {
  ::S20677C6_nt s20673c9f0;
  ::S20673C5 s20673c9f1;
  ::S20677C6_nt s20673c9f2;
  __tsi64 s20673c9f3;
  ::S20677C6_nt s20673c9f4;
  void *s20673c9f5;
  ::S20677C6_nt s20673c9f6;
  void *s20673c9f7[2];
  ::S20677C6_nt s20673c9f8;
  virtual void  v11(); // _ZN8S20673C93v11Ev
  ~S20673C9(); // tgen
  S20673C9(); // tgen
};
//SIG(-1 S20673C9) C1{ v1 FC2{} FC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} FC2 FL FC2 Fp FC2 Fp[2] FC2}


void  S20673C9 ::v11(){vfunc_called(this, "_ZN8S20673C93v11Ev");}
S20673C9 ::~S20673C9(){ note_dtor("S20673C9", this);} // tgen
S20673C9 ::S20673C9(){ note_ctor("S20673C9", this);} // tgen

static void Test_S20673C9()
{
  extern Class_Descriptor cd_S20673C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,47)];
    init_test(&cd_S20673C9, buf);
    S20673C9 *dp, &lv = *(dp=new (buf) S20673C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,184), "sizeof(S20673C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20673C9)");
    check_field_offset(lv, s20673c9f0, ABISELECT(8,4), "S20673C9.s20673c9f0");
    check_field_offset(lv, s20673c9f1, ABISELECT(16,8), "S20673C9.s20673c9f1");
    check_field_offset(lv, s20673c9f2, ABISELECT(208,148), "S20673C9.s20673c9f2");
    check_field_offset(lv, s20673c9f3, ABISELECT(216,152), "S20673C9.s20673c9f3");
    check_field_offset(lv, s20673c9f4, ABISELECT(224,160), "S20673C9.s20673c9f4");
    check_field_offset(lv, s20673c9f5, ABISELECT(232,164), "S20673C9.s20673c9f5");
    check_field_offset(lv, s20673c9f6, ABISELECT(240,168), "S20673C9.s20673c9f6");
    check_field_offset(lv, s20673c9f7, ABISELECT(248,172), "S20673C9.s20673c9f7");
    check_field_offset(lv, s20673c9f8, ABISELECT(264,180), "S20673C9.s20673c9f8");
    test_class_info(&lv, &cd_S20673C9);
    dp->~S20673C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20673C9(Test_S20673C9, "S20673C9", ABISELECT(272,184));

#else // __cplusplus

extern void _ZN8S20673C9C1Ev();
extern void _ZN8S20673C9D1Ev();
Name_Map name_map_S20673C9[] = {
  NSPAIR(_ZN8S20673C9C1Ev),
  NSPAIR(_ZN8S20673C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20673C9[];
extern void _ZN8S20673C93v11Ev();
static  VTBL_ENTRY vtc_S20673C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C9[0]),
  (VTBL_ENTRY)&_ZN8S20673C93v11Ev,
};
extern VTBL_ENTRY _ZTI8S20673C9[];
extern  VTBL_ENTRY _ZTV8S20673C9[];
Class_Descriptor cd_S20673C9 = {  "S20673C9", // class name
  0,0,//no base classes
  &(vtc_S20673C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,184), // object size
  NSPAIRA(_ZTI8S20673C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20673C9),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  S20673C10  : virtual S20673C2 , S20673C11 , S20673C9 {
  ::S20673C9 s20673c10f0;
  int s20673c10f1:3;
  ::S20680C5 s20673c10f2[2];
  int s20673c10f3;
  long double s20673c10f4;
  __tsi64 s20673c10f5;
  long double s20673c10f6;
  virtual  ~S20673C10(); // _ZN9S20673C10D2Ev
  virtual void  v12(); // _ZN9S20673C103v12Ev
  S20673C10(); // tgen
};
//SIG(-1 S20673C10) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} VBC4{ VBC3 BC5{ VBC3 FD Fi FC3 FC3} v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} v5 v6 v7 FL FC6{} Fp Fc[2] FC3 Fl FC6} BC7{ BC3 FC3 Fi FD Fi FL Fl} BC8{ v8 FC6 FC5 FC6 FL FC6 Fp FC6 Fp[2] FC6} vd v1 FC8 Fi:3 FC9{ BC10{ VBC3 BC11{ VBC3 FD Fi FC3 FC3} v10 v11 v12 Fs FL Fc Fi[2] FC11 Fp FL Fi FL Fi} VBC12{ VBC3 VBC11 v13 v14 Fi FC11 FL Fi Fp} BC11 VBC13{ v15 FC6 FC11 FC6 FL FC6 Fp FC6 Fp[2] FC6} VBC14{ BC11 v16 FL Fc[7] Fp Fi FC6 FC6 Fc[10]} v9 Fl FL FD FC6}[2] Fi FD FL FD}


 S20673C10 ::~S20673C10(){ note_dtor("S20673C10", this);}
void  S20673C10 ::v12(){vfunc_called(this, "_ZN9S20673C103v12Ev");}
S20673C10 ::S20673C10(){ note_ctor("S20673C10", this);} // tgen

static void Test_S20673C10()
{
  extern Class_Descriptor cd_S20673C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(272,754)];
    init_test(&cd_S20673C10, buf);
    S20673C10 *dp, &lv = *(dp=new (buf) S20673C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4336,3012), "sizeof(S20673C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20673C10)");
    check_base_class_offset(lv, (S20677C3*)(S20673C2*), ABISELECT(3864,2680), "S20673C10");
    check_base_class_offset(lv, (S20677C3*)(S20673C4*), ABISELECT(3864,2680), "S20673C10");
    check_base_class_offset(lv, (S20677C3*)(S20673C5*)(S20673C4*), ABISELECT(3864,2680), "S20673C10");
    check_base_class_offset(lv, (S20673C5*)(S20673C4*), ABISELECT(3920,2720), "S20673C10");
    check_base_class_offset(lv, (S20673C4*)(S20673C2*), ABISELECT(3920,2720), "S20673C10");
    check_base_class_offset(lv, (S20673C2*), ABISELECT(3760,2608), "S20673C10");
    check_base_class_offset(lv, (S20677C3*)(S20673C11*), ABISELECT(272,184), "S20673C10");
    check_base_class_offset(lv, (S20673C11*), ABISELECT(272,184), "S20673C10");
    check_base_class_offset(lv, (S20673C9*), 0, "S20673C10");
    check_field_offset(lv, s20673c10f0, ABISELECT(432,296), "S20673C10.s20673c10f0");
    set_bf_and_test(lv, s20673c10f1, ABISELECT(704,480), 0, 3, 1, "S20673C10");
    set_bf_and_test(lv, s20673c10f1, ABISELECT(704,480), 0, 3, hide_sll(1LL<<2), "S20673C10");
    check_field_offset(lv, s20673c10f2, ABISELECT(720,484), "S20673C10.s20673c10f2");
    check_field_offset(lv, s20673c10f3, ABISELECT(3696,2572), "S20673C10.s20673c10f3");
    check_field_offset(lv, s20673c10f4, ABISELECT(3712,2576), "S20673C10.s20673c10f4");
    check_field_offset(lv, s20673c10f5, ABISELECT(3728,2588), "S20673C10.s20673c10f5");
    check_field_offset(lv, s20673c10f6, ABISELECT(3744,2596), "S20673C10.s20673c10f6");
    test_class_info(&lv, &cd_S20673C10);
    dp->~S20673C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20673C10(Test_S20673C10, "S20673C10", ABISELECT(4336,3012));

#else // __cplusplus

extern void _ZN9S20673C10C1Ev();
extern void _ZN9S20673C10D2Ev();
Name_Map name_map_S20673C10[] = {
  NSPAIR(_ZN9S20673C10C1Ev),
  NSPAIR(_ZN9S20673C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20673C5;
extern VTBL_ENTRY _ZTI8S20673C5[];
extern  VTBL_ENTRY _ZTV8S20673C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C5[];
extern Class_Descriptor cd_S20673C4;
extern VTBL_ENTRY _ZTI8S20673C4[];
extern  VTBL_ENTRY _ZTV8S20673C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C4[];
extern Class_Descriptor cd_S20673C2;
extern VTBL_ENTRY _ZTI8S20673C2[];
extern  VTBL_ENTRY _ZTV8S20673C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C2[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20673C11;
extern VTBL_ENTRY _ZTI9S20673C11[];
extern Class_Descriptor cd_S20673C9;
extern VTBL_ENTRY _ZTI8S20673C9[];
extern  VTBL_ENTRY _ZTV8S20673C9[];
static Base_Class bases_S20673C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(3864,2680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20673C5,    ABISELECT(3920,2720), //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_S20673C4,    ABISELECT(3920,2720), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20673C2,    ABISELECT(3760,2608), //bcp->offset
    9, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C3,    ABISELECT(272,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_S20673C11,    ABISELECT(272,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
    -1, //immediately_derived
  1, 0},
  {&cd_S20673C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S20673C10[];
extern void _ZN8S20673C93v11Ev();
extern void _ZN9S20673C10D1Ev();
extern void _ZN9S20673C10D0Ev();
extern void _ZN9S20673C103v12Ev();
extern void _ZN8S20673C22v4Ev();
extern void _ZN8S20673C22v5Ev();
extern void _ZN8S20673C22v6Ev();
extern void _ZN8S20673C42v1Ev();
extern void _ZN8S20673C42v2Ev();
extern void _ZN8S20673C42v3Ev();
static  VTBL_ENTRY vtc_S20673C10[] = {
  ABISELECT(3920,2720),
  ABISELECT(3864,2680),
  ABISELECT(3760,2608),
  0,
  (VTBL_ENTRY)&(_ZTI9S20673C10[0]),
  (VTBL_ENTRY)&_ZN8S20673C93v11Ev,
  (VTBL_ENTRY)&_ZN9S20673C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20673C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20673C103v12Ev,
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(-3760,-2608),
  (VTBL_ENTRY)&(_ZTI9S20673C10[0]),
  (VTBL_ENTRY)&_ZN8S20673C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20673C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20673C22v6Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3920,-2720),
  (VTBL_ENTRY)&(_ZTI9S20673C10[0]),
  (VTBL_ENTRY)&_ZN8S20673C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v3Ev,
};
extern VTBL_ENTRY _ZTV9S20673C10[];
extern void _ZN8S20673C22v4Ev();
extern void _ZN8S20673C22v5Ev();
extern void _ZN8S20673C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20673C2__9S20673C10[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C2[0]),
  (VTBL_ENTRY)&_ZN8S20673C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20673C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20673C22v6Ev,
};
extern void _ZN8S20673C42v1Ev();
extern void _ZN8S20673C42v2Ev();
extern void _ZN8S20673C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20673C4__8S20673C2__9S20673C10[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20673C2[0]),
  (VTBL_ENTRY)&_ZN8S20673C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v3Ev,
};
extern void _ZN8S20673C42v1Ev();
extern void _ZN8S20673C42v2Ev();
extern void _ZN8S20673C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20673C4__9S20673C10[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C4[0]),
  (VTBL_ENTRY)&_ZN8S20673C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20673C58S20673C4__9S20673C10[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C5[0]),
};
static  VTT_ENTRY vtt_S20673C10[] = {
  {&(_ZTV9S20673C10[5]),  5,28},
  {&(_ZTV9S20673C10[16]),  16,28},
  {&(_ZTV9S20673C10[25]),  25,28},
  {&(_tg__ZTV8S20673C2__9S20673C10[4]),  4,7},
  {&(_tg__ZTV8S20673C4__8S20673C2__9S20673C10[6]),  6,9},
  {&(_tg__ZTV8S20673C4__9S20673C10[3]),  3,6},
  {&(_tg__ZTV8S20673C58S20673C4__9S20673C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20673C10[];
extern  VTBL_ENTRY _ZTV9S20673C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20673C10[];
Class_Descriptor cd_S20673C10 = {  "S20673C10", // class name
  bases_S20673C10, 7,
  &(vtc_S20673C10[0]), // expected_vtbl_contents
  &(vtt_S20673C10[0]), // expected_vtt_contents
  ABISELECT(4336,3012), // object size
  NSPAIRA(_ZTI9S20673C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20673C10),28, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20673C10),7, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20673C1  : virtual S20673C2 {
  int s20673c1f0;
  ::S20678C11 s20673c1f1;
  int s20673c1f2[3];
  ::S20677C6_nt s20673c1f3;
  ::S20673C10 s20673c1f4;
  ::S20677C6_nt s20673c1f5;
  void *s20673c1f6;
  ~S20673C1(); // tgen
  S20673C1(); // tgen
};
//SIG(1 S20673C1) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} VBC4{ VBC3 BC5{ VBC3 FD Fi FC3 FC3} v1 v2 v3 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} v4 v5 v6 FL FC6{} Fp Fc[2] FC3 Fl FC6} Fi FC7{ VBC8{ VBC3 BC9{ VBC3 FD Fi FC3 FC3} v9 v10 v11 Fs FL Fc Fi[2] FC9 Fp FL Fi FL Fi} VBC10{ VBC3 VBC8 v12 v13 v14 FL FC6 Fp Fc[2] FC3 Fl FC6} VBC11{ VBC3 VBC9 v15 v16 Fi FC9 FL Fi Fp} v7 v8 FC6 FC6 Fi FC9 FC6 FC6 FC12{ v17 FC6 FC9 FC6 FL FC6 Fp FC6 Fp[2] FC6} FC10 Fp FC6} Fi[3] FC6 FC13{ VBC2 BC14{ BC3 FC3 Fi FD Fi FL Fl} BC15{ v19 FC6 FC5 FC6 FL FC6 Fp FC6 Fp[2] FC6} vd v18 FC15 Fi:3 FC16{ BC17{ VBC3 BC18{ VBC3 FD Fi FC3 FC3} v21 v22 v23 Fs FL Fc Fi[2] FC18 Fp FL Fi FL Fi} VBC19{ VBC3 VBC18 v24 v25 Fi FC18 FL Fi Fp} BC18 VBC20{ v26 FC6 FC18 FC6 FL FC6 Fp FC6 Fp[2] FC6} VBC21{ BC18 v27 FL Fc[7] Fp Fi FC6 FC6 Fc[10]} v20 Fl FL FD FC6}[2] Fi FD FL FD} FC6 Fp}


S20673C1 ::~S20673C1(){ note_dtor("S20673C1", this);} // tgen
S20673C1 ::S20673C1(){ note_ctor("S20673C1", this);} // tgen

static void Test_S20673C1()
{
  extern Class_Descriptor cd_S20673C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(438,1218)];
    init_test(&cd_S20673C1, buf);
    S20673C1 *dp, &lv = *(dp=new (buf) S20673C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6992,4868), "sizeof(S20673C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20673C1)");
    check_base_class_offset(lv, (S20677C3*)(S20673C2*), ABISELECT(6520,4536), "S20673C1");
    check_base_class_offset(lv, (S20677C3*)(S20673C4*), ABISELECT(6520,4536), "S20673C1");
    check_base_class_offset(lv, (S20677C3*)(S20673C5*)(S20673C4*), ABISELECT(6520,4536), "S20673C1");
    check_base_class_offset(lv, (S20673C5*)(S20673C4*), ABISELECT(6576,4576), "S20673C1");
    check_base_class_offset(lv, (S20673C4*)(S20673C2*), ABISELECT(6576,4576), "S20673C1");
    check_base_class_offset(lv, (S20673C2*), ABISELECT(6416,4464), "S20673C1");
    check_field_offset(lv, s20673c1f0, ABISELECT(8,4), "S20673C1.s20673c1f0");
    check_field_offset(lv, s20673c1f1, ABISELECT(16,8), "S20673C1.s20673c1f1");
    check_field_offset(lv, s20673c1f2, ABISELECT(2048,1428), "S20673C1.s20673c1f2");
    check_field_offset(lv, s20673c1f3, ABISELECT(2060,1440), "S20673C1.s20673c1f3");
    check_field_offset(lv, s20673c1f4, ABISELECT(2064,1444), "S20673C1.s20673c1f4");
    check_field_offset(lv, s20673c1f5, ABISELECT(6400,4456), "S20673C1.s20673c1f5");
    check_field_offset(lv, s20673c1f6, ABISELECT(6408,4460), "S20673C1.s20673c1f6");
    test_class_info(&lv, &cd_S20673C1);
    dp->~S20673C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20673C1(Test_S20673C1, "S20673C1", ABISELECT(6992,4868));

#else // __cplusplus

extern void _ZN8S20673C1C1Ev();
extern void _ZN8S20673C1D1Ev();
Name_Map name_map_S20673C1[] = {
  NSPAIR(_ZN8S20673C1C1Ev),
  NSPAIR(_ZN8S20673C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20673C5;
extern VTBL_ENTRY _ZTI8S20673C5[];
extern  VTBL_ENTRY _ZTV8S20673C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C5[];
extern Class_Descriptor cd_S20673C4;
extern VTBL_ENTRY _ZTI8S20673C4[];
extern  VTBL_ENTRY _ZTV8S20673C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C4[];
extern Class_Descriptor cd_S20673C2;
extern VTBL_ENTRY _ZTI8S20673C2[];
extern  VTBL_ENTRY _ZTV8S20673C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C2[];
static Base_Class bases_S20673C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(6520,4536), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20673C5,    ABISELECT(6576,4576), //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_S20673C4,    ABISELECT(6576,4576), //bcp->offset
    15, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20673C2,    ABISELECT(6416,4464), //bcp->offset
    5, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20673C1[];
extern void _ZN8S20673C22v4Ev();
extern void _ZN8S20673C22v5Ev();
extern void _ZN8S20673C22v6Ev();
extern void _ZN8S20673C42v1Ev();
extern void _ZN8S20673C42v2Ev();
extern void _ZN8S20673C42v3Ev();
static  VTBL_ENTRY vtc_S20673C1[] = {
  ABISELECT(6576,4576),
  ABISELECT(6520,4536),
  ABISELECT(6416,4464),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C1[0]),
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(-6416,-4464),
  (VTBL_ENTRY)&(_ZTI8S20673C1[0]),
  (VTBL_ENTRY)&_ZN8S20673C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20673C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20673C22v6Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-6576,-4576),
  (VTBL_ENTRY)&(_ZTI8S20673C1[0]),
  (VTBL_ENTRY)&_ZN8S20673C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S20673C1[];
extern void _ZN8S20673C22v4Ev();
extern void _ZN8S20673C22v5Ev();
extern void _ZN8S20673C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20673C2__8S20673C1[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C2[0]),
  (VTBL_ENTRY)&_ZN8S20673C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20673C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20673C22v6Ev,
};
extern void _ZN8S20673C42v1Ev();
extern void _ZN8S20673C42v2Ev();
extern void _ZN8S20673C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20673C4__8S20673C2__8S20673C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20673C2[0]),
  (VTBL_ENTRY)&_ZN8S20673C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v3Ev,
};
extern void _ZN8S20673C42v1Ev();
extern void _ZN8S20673C42v2Ev();
extern void _ZN8S20673C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20673C4__8S20673C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C4[0]),
  (VTBL_ENTRY)&_ZN8S20673C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20673C58S20673C4__8S20673C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C5[0]),
};
static  VTT_ENTRY vtt_S20673C1[] = {
  {&(_ZTV8S20673C1[5]),  5,24},
  {&(_ZTV8S20673C1[12]),  12,24},
  {&(_ZTV8S20673C1[21]),  21,24},
  {&(_tg__ZTV8S20673C2__8S20673C1[4]),  4,7},
  {&(_tg__ZTV8S20673C4__8S20673C2__8S20673C1[6]),  6,9},
  {&(_tg__ZTV8S20673C4__8S20673C1[3]),  3,6},
  {&(_tg__ZTV8S20673C58S20673C4__8S20673C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20673C1[];
extern  VTBL_ENTRY _ZTV8S20673C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C1[];
Class_Descriptor cd_S20673C1 = {  "S20673C1", // class name
  bases_S20673C1, 4,
  &(vtc_S20673C1[0]), // expected_vtbl_contents
  &(vtt_S20673C1[0]), // expected_vtt_contents
  ABISELECT(6992,4868), // object size
  NSPAIRA(_ZTI8S20673C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20673C1),24, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20673C1),7, //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  S20674C5  : virtual S20677C3 {
  long double s20674c5f0;
  int s20674c5f1;
  ::S20677C3 s20674c5f2;
  ::S20677C3 s20674c5f3;
  ~S20674C5(); // tgen
  S20674C5(); // tgen
};
//SIG(-1 S20674C5) C1{ VBC2{ m Fp FL[4] Fs} FD Fi FC2 FC2}


S20674C5 ::~S20674C5(){ note_dtor("S20674C5", this);} // tgen
S20674C5 ::S20674C5(){ note_ctor("S20674C5", this);} // tgen

static void Test_S20674C5()
{
  extern Class_Descriptor cd_S20674C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,36)];
    init_test(&cd_S20674C5, buf);
    S20674C5 *dp, &lv = *(dp=new (buf) S20674C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S20674C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20674C5)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(136,100), "S20674C5");
    check_field_offset(lv, s20674c5f0, ABISELECT(16,4), "S20674C5.s20674c5f0");
    check_field_offset(lv, s20674c5f1, ABISELECT(32,16), "S20674C5.s20674c5f1");
    check_field_offset(lv, s20674c5f2, ABISELECT(40,20), "S20674C5.s20674c5f2");
    check_field_offset(lv, s20674c5f3, ABISELECT(88,60), "S20674C5.s20674c5f3");
    test_class_info(&lv, &cd_S20674C5);
    dp->~S20674C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20674C5(Test_S20674C5, "S20674C5", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN8S20674C5C1Ev();
extern void _ZN8S20674C5D1Ev();
Name_Map name_map_S20674C5[] = {
  NSPAIR(_ZN8S20674C5C1Ev),
  NSPAIR(_ZN8S20674C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20674C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(136,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20674C5[];
static  VTBL_ENTRY vtc_S20674C5[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C5[0]),
};
extern VTBL_ENTRY _ZTV8S20674C5[];
static  VTT_ENTRY vtt_S20674C5[] = {
  {&(_ZTV8S20674C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20674C5[];
extern  VTBL_ENTRY _ZTV8S20674C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C5[];
Class_Descriptor cd_S20674C5 = {  "S20674C5", // class name
  bases_S20674C5, 1,
  &(vtc_S20674C5[0]), // expected_vtbl_contents
  &(vtt_S20674C5[0]), // expected_vtt_contents
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI8S20674C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20674C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20674C5),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  S20674C4  : virtual S20677C3 , S20674C5 {
  short s20674c4f0;
  __tsi64 s20674c4f1;
  char s20674c4f2;
  int s20674c4f3[2];
  ::S20674C5 s20674c4f4;
  void *s20674c4f5;
  __tsi64 s20674c4f6;
  int s20674c4f7;
  __tsi64 s20674c4f8;
  int s20674c4f9;
  virtual void  v1(); // _ZN8S20674C42v1Ev
  virtual void  v2(); // _ZN8S20674C42v2Ev
  virtual void  v3(); // _ZN8S20674C42v3Ev
  ~S20674C4(); // tgen
  S20674C4(); // tgen
};
//SIG(-1 S20674C4) C1{ VBC2{ m Fp FL[4] Fs} BC3{ VBC2 FD Fi FC2 FC2} v1 v2 v3 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi}


void  S20674C4 ::v1(){vfunc_called(this, "_ZN8S20674C42v1Ev");}
void  S20674C4 ::v2(){vfunc_called(this, "_ZN8S20674C42v2Ev");}
void  S20674C4 ::v3(){vfunc_called(this, "_ZN8S20674C42v3Ev");}
S20674C4 ::~S20674C4(){ note_dtor("S20674C4", this);} // tgen
S20674C4 ::S20674C4(){ note_ctor("S20674C4", this);} // tgen

static void Test_S20674C4()
{
  extern Class_Descriptor cd_S20674C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,84)];
    init_test(&cd_S20674C4, buf);
    S20674C4 *dp, &lv = *(dp=new (buf) S20674C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,332), "sizeof(S20674C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20674C4)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(408,292), "S20674C4");
    check_base_class_offset(lv, (S20677C3*)(S20674C5*), ABISELECT(408,292), "S20674C4");
    check_base_class_offset(lv, (S20674C5*), 0, "S20674C4");
    check_field_offset(lv, s20674c4f0, ABISELECT(136,100), "S20674C4.s20674c4f0");
    check_field_offset(lv, s20674c4f1, ABISELECT(144,104), "S20674C4.s20674c4f1");
    check_field_offset(lv, s20674c4f2, ABISELECT(152,112), "S20674C4.s20674c4f2");
    check_field_offset(lv, s20674c4f3, ABISELECT(156,116), "S20674C4.s20674c4f3");
    check_field_offset(lv, s20674c4f4, ABISELECT(176,124), "S20674C4.s20674c4f4");
    check_field_offset(lv, s20674c4f5, ABISELECT(368,264), "S20674C4.s20674c4f5");
    check_field_offset(lv, s20674c4f6, ABISELECT(376,268), "S20674C4.s20674c4f6");
    check_field_offset(lv, s20674c4f7, ABISELECT(384,276), "S20674C4.s20674c4f7");
    check_field_offset(lv, s20674c4f8, ABISELECT(392,280), "S20674C4.s20674c4f8");
    check_field_offset(lv, s20674c4f9, ABISELECT(400,288), "S20674C4.s20674c4f9");
    test_class_info(&lv, &cd_S20674C4);
    dp->~S20674C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20674C4(Test_S20674C4, "S20674C4", ABISELECT(464,332));

#else // __cplusplus

extern void _ZN8S20674C4C1Ev();
extern void _ZN8S20674C4D1Ev();
Name_Map name_map_S20674C4[] = {
  NSPAIR(_ZN8S20674C4C1Ev),
  NSPAIR(_ZN8S20674C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20674C5;
extern VTBL_ENTRY _ZTI8S20674C5[];
extern  VTBL_ENTRY _ZTV8S20674C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C5[];
static Base_Class bases_S20674C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(408,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20674C5,    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 _ZTI8S20674C4[];
extern void _ZN8S20674C42v1Ev();
extern void _ZN8S20674C42v2Ev();
extern void _ZN8S20674C42v3Ev();
static  VTBL_ENTRY vtc_S20674C4[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C4[0]),
  (VTBL_ENTRY)&_ZN8S20674C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S20674C4[];
static  VTBL_ENTRY _tg__ZTV8S20674C5__8S20674C4[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C5[0]),
};
static  VTT_ENTRY vtt_S20674C4[] = {
  {&(_ZTV8S20674C4[3]),  3,6},
  {&(_tg__ZTV8S20674C5__8S20674C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20674C4[];
extern  VTBL_ENTRY _ZTV8S20674C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C4[];
Class_Descriptor cd_S20674C4 = {  "S20674C4", // class name
  bases_S20674C4, 2,
  &(vtc_S20674C4[0]), // expected_vtbl_contents
  &(vtt_S20674C4[0]), // expected_vtt_contents
  ABISELECT(464,332), // object size
  NSPAIRA(_ZTI8S20674C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20674C4),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20674C4),2, //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  S20674C2  : virtual S20677C3 , virtual S20674C4 {
  __tsi64 s20674c2f0;
  ::S20677C6_nt s20674c2f1;
  void *s20674c2f2;
  char s20674c2f3[2];
  ::S20677C3 s20674c2f4;
  long s20674c2f5;
  ::S20677C6_nt s20674c2f6;
  virtual void  v4(); // _ZN8S20674C22v4Ev
  virtual void  v5(); // _ZN8S20674C22v5Ev
  virtual void  v6(); // _ZN8S20674C22v6Ev
  ~S20674C2(); // tgen
  S20674C2(); // tgen
};
//SIG(-1 S20674C2) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 BC4{ VBC2 FD Fi FC2 FC2} v4 v5 v6 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} v1 v2 v3 FL FC5{} Fp Fc[2] FC2 Fl FC5}


void  S20674C2 ::v4(){vfunc_called(this, "_ZN8S20674C22v4Ev");}
void  S20674C2 ::v5(){vfunc_called(this, "_ZN8S20674C22v5Ev");}
void  S20674C2 ::v6(){vfunc_called(this, "_ZN8S20674C22v6Ev");}
S20674C2 ::~S20674C2(){ note_dtor("S20674C2", this);} // tgen
S20674C2 ::S20674C2(){ note_ctor("S20674C2", this);} // tgen

static void Test_S20674C2()
{
  extern Class_Descriptor cd_S20674C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,102)];
    init_test(&cd_S20674C2, buf);
    S20674C2 *dp, &lv = *(dp=new (buf) S20674C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,404), "sizeof(S20674C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20674C2)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(104,72), "S20674C2");
    check_base_class_offset(lv, (S20677C3*)(S20674C4*), ABISELECT(104,72), "S20674C2");
    check_base_class_offset(lv, (S20677C3*)(S20674C5*)(S20674C4*), ABISELECT(104,72), "S20674C2");
    check_base_class_offset(lv, (S20674C5*)(S20674C4*), ABISELECT(160,112), "S20674C2");
    check_base_class_offset(lv, (S20674C4*), ABISELECT(160,112), "S20674C2");
    check_field_offset(lv, s20674c2f0, ABISELECT(8,4), "S20674C2.s20674c2f0");
    check_field_offset(lv, s20674c2f1, ABISELECT(16,12), "S20674C2.s20674c2f1");
    check_field_offset(lv, s20674c2f2, ABISELECT(24,16), "S20674C2.s20674c2f2");
    check_field_offset(lv, s20674c2f3, ABISELECT(32,20), "S20674C2.s20674c2f3");
    check_field_offset(lv, s20674c2f4, ABISELECT(40,24), "S20674C2.s20674c2f4");
    check_field_offset(lv, s20674c2f5, ABISELECT(88,64), "S20674C2.s20674c2f5");
    check_field_offset(lv, s20674c2f6, ABISELECT(96,68), "S20674C2.s20674c2f6");
    test_class_info(&lv, &cd_S20674C2);
    dp->~S20674C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20674C2(Test_S20674C2, "S20674C2", ABISELECT(576,404));

#else // __cplusplus

extern void _ZN8S20674C2C1Ev();
extern void _ZN8S20674C2D1Ev();
Name_Map name_map_S20674C2[] = {
  NSPAIR(_ZN8S20674C2C1Ev),
  NSPAIR(_ZN8S20674C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20674C5;
extern VTBL_ENTRY _ZTI8S20674C5[];
extern  VTBL_ENTRY _ZTV8S20674C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C5[];
extern Class_Descriptor cd_S20674C4;
extern VTBL_ENTRY _ZTI8S20674C4[];
extern  VTBL_ENTRY _ZTV8S20674C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C4[];
static Base_Class bases_S20674C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(104,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20674C5,    ABISELECT(160,112), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20674C4,    ABISELECT(160,112), //bcp->offset
    7, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20674C2[];
extern void _ZN8S20674C22v4Ev();
extern void _ZN8S20674C22v5Ev();
extern void _ZN8S20674C22v6Ev();
extern void _ZN8S20674C42v1Ev();
extern void _ZN8S20674C42v2Ev();
extern void _ZN8S20674C42v3Ev();
static  VTBL_ENTRY vtc_S20674C2[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C2[0]),
  (VTBL_ENTRY)&_ZN8S20674C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20674C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20674C22v6Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20674C2[0]),
  (VTBL_ENTRY)&_ZN8S20674C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S20674C2[];
extern void _ZN8S20674C42v1Ev();
extern void _ZN8S20674C42v2Ev();
extern void _ZN8S20674C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20674C4__8S20674C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C4[0]),
  (VTBL_ENTRY)&_ZN8S20674C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20674C58S20674C4__8S20674C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C5[0]),
};
static  VTT_ENTRY vtt_S20674C2[] = {
  {&(_ZTV8S20674C2[4]),  4,16},
  {&(_ZTV8S20674C2[13]),  13,16},
  {&(_tg__ZTV8S20674C4__8S20674C2[3]),  3,6},
  {&(_tg__ZTV8S20674C58S20674C4__8S20674C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20674C2[];
extern  VTBL_ENTRY _ZTV8S20674C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C2[];
Class_Descriptor cd_S20674C2 = {  "S20674C2", // class name
  bases_S20674C2, 3,
  &(vtc_S20674C2[0]), // expected_vtbl_contents
  &(vtt_S20674C2[0]), // expected_vtt_contents
  ABISELECT(576,404), // object size
  NSPAIRA(_ZTI8S20674C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20674C2),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20674C2),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  S20674C11  : S20677C3 {
  ::S20677C3 s20674c11f0;
  int s20674c11f1;
  long double s20674c11f2;
  int s20674c11f3;
  __tsi64 s20674c11f4;
  long s20674c11f5;
};
//SIG(-1 S20674C11) C1{ BC2{ m Fp FL[4] Fs} FC2 Fi FD Fi FL Fl}



static void Test_S20674C11()
{
  extern Class_Descriptor cd_S20674C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S20674C11, buf);
    S20674C11 &lv = *(new (buf) S20674C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20674C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20674C11)");
    check_base_class_offset(lv, (S20677C3*), 0, "S20674C11");
    check_field_offset(lv, s20674c11f0, ABISELECT(48,40), "S20674C11.s20674c11f0");
    check_field_offset(lv, s20674c11f1, ABISELECT(96,80), "S20674C11.s20674c11f1");
    check_field_offset(lv, s20674c11f2, ABISELECT(112,84), "S20674C11.s20674c11f2");
    check_field_offset(lv, s20674c11f3, ABISELECT(128,96), "S20674C11.s20674c11f3");
    check_field_offset(lv, s20674c11f4, ABISELECT(136,100), "S20674C11.s20674c11f4");
    check_field_offset(lv, s20674c11f5, ABISELECT(144,108), "S20674C11.s20674c11f5");
    test_class_info(&lv, &cd_S20674C11);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20674C11(Test_S20674C11, "S20674C11", ABISELECT(160,112));

#else // __cplusplus

extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20674C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20674C11[];
Class_Descriptor cd_S20674C11 = {  "S20674C11", // class name
  bases_S20674C11, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI9S20674C11),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  S20674C9  {
  ::S20677C6_nt s20674c9f0;
  ::S20674C5 s20674c9f1;
  ::S20677C6_nt s20674c9f2;
  __tsi64 s20674c9f3;
  ::S20677C6_nt s20674c9f4;
  void *s20674c9f5;
  ::S20677C6_nt s20674c9f6;
  void *s20674c9f7[2];
  ::S20677C6_nt s20674c9f8;
  virtual void  v11(); // _ZN8S20674C93v11Ev
  ~S20674C9(); // tgen
  S20674C9(); // tgen
};
//SIG(-1 S20674C9) C1{ v1 FC2{} FC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} FC2 FL FC2 Fp FC2 Fp[2] FC2}


void  S20674C9 ::v11(){vfunc_called(this, "_ZN8S20674C93v11Ev");}
S20674C9 ::~S20674C9(){ note_dtor("S20674C9", this);} // tgen
S20674C9 ::S20674C9(){ note_ctor("S20674C9", this);} // tgen

static void Test_S20674C9()
{
  extern Class_Descriptor cd_S20674C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,47)];
    init_test(&cd_S20674C9, buf);
    S20674C9 *dp, &lv = *(dp=new (buf) S20674C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,184), "sizeof(S20674C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20674C9)");
    check_field_offset(lv, s20674c9f0, ABISELECT(8,4), "S20674C9.s20674c9f0");
    check_field_offset(lv, s20674c9f1, ABISELECT(16,8), "S20674C9.s20674c9f1");
    check_field_offset(lv, s20674c9f2, ABISELECT(208,148), "S20674C9.s20674c9f2");
    check_field_offset(lv, s20674c9f3, ABISELECT(216,152), "S20674C9.s20674c9f3");
    check_field_offset(lv, s20674c9f4, ABISELECT(224,160), "S20674C9.s20674c9f4");
    check_field_offset(lv, s20674c9f5, ABISELECT(232,164), "S20674C9.s20674c9f5");
    check_field_offset(lv, s20674c9f6, ABISELECT(240,168), "S20674C9.s20674c9f6");
    check_field_offset(lv, s20674c9f7, ABISELECT(248,172), "S20674C9.s20674c9f7");
    check_field_offset(lv, s20674c9f8, ABISELECT(264,180), "S20674C9.s20674c9f8");
    test_class_info(&lv, &cd_S20674C9);
    dp->~S20674C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20674C9(Test_S20674C9, "S20674C9", ABISELECT(272,184));

#else // __cplusplus

extern void _ZN8S20674C9C1Ev();
extern void _ZN8S20674C9D1Ev();
Name_Map name_map_S20674C9[] = {
  NSPAIR(_ZN8S20674C9C1Ev),
  NSPAIR(_ZN8S20674C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20674C9[];
extern void _ZN8S20674C93v11Ev();
static  VTBL_ENTRY vtc_S20674C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C9[0]),
  (VTBL_ENTRY)&_ZN8S20674C93v11Ev,
};
extern VTBL_ENTRY _ZTI8S20674C9[];
extern  VTBL_ENTRY _ZTV8S20674C9[];
Class_Descriptor cd_S20674C9 = {  "S20674C9", // class name
  0,0,//no base classes
  &(vtc_S20674C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,184), // object size
  NSPAIRA(_ZTI8S20674C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20674C9),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  S20674C10  : virtual S20674C2 , S20674C11 , S20674C9 {
  ::S20674C9 s20674c10f0;
  __tsi64 s20674c10f1:3;
  ::S20680C5 s20674c10f2[2];
  int s20674c10f3;
  long double s20674c10f4;
  __tsi64 s20674c10f5;
  long double s20674c10f6;
  virtual  ~S20674C10(); // _ZN9S20674C10D2Ev
  virtual void  v12(); // _ZN9S20674C103v12Ev
  S20674C10(); // tgen
};
//SIG(-1 S20674C10) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} VBC4{ VBC3 BC5{ VBC3 FD Fi FC3 FC3} v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} v5 v6 v7 FL FC6{} Fp Fc[2] FC3 Fl FC6} BC7{ BC3 FC3 Fi FD Fi FL Fl} BC8{ v8 FC6 FC5 FC6 FL FC6 Fp FC6 Fp[2] FC6} vd v1 FC8 FL:3 FC9{ BC10{ VBC3 BC11{ VBC3 FD Fi FC3 FC3} v10 v11 v12 Fs FL Fc Fi[2] FC11 Fp FL Fi FL Fi} VBC12{ VBC3 VBC11 v13 v14 Fi FC11 FL Fi Fp} BC11 VBC13{ v15 FC6 FC11 FC6 FL FC6 Fp FC6 Fp[2] FC6} VBC14{ BC11 v16 FL Fc[7] Fp Fi FC6 FC6 Fc[10]} v9 Fl FL FD FC6}[2] Fi FD FL FD}


 S20674C10 ::~S20674C10(){ note_dtor("S20674C10", this);}
void  S20674C10 ::v12(){vfunc_called(this, "_ZN9S20674C103v12Ev");}
S20674C10 ::S20674C10(){ note_ctor("S20674C10", this);} // tgen

static void Test_S20674C10()
{
  extern Class_Descriptor cd_S20674C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(272,754)];
    init_test(&cd_S20674C10, buf);
    S20674C10 *dp, &lv = *(dp=new (buf) S20674C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4336,3012), "sizeof(S20674C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20674C10)");
    check_base_class_offset(lv, (S20677C3*)(S20674C2*), ABISELECT(3864,2680), "S20674C10");
    check_base_class_offset(lv, (S20677C3*)(S20674C4*), ABISELECT(3864,2680), "S20674C10");
    check_base_class_offset(lv, (S20677C3*)(S20674C5*)(S20674C4*), ABISELECT(3864,2680), "S20674C10");
    check_base_class_offset(lv, (S20674C5*)(S20674C4*), ABISELECT(3920,2720), "S20674C10");
    check_base_class_offset(lv, (S20674C4*)(S20674C2*), ABISELECT(3920,2720), "S20674C10");
    check_base_class_offset(lv, (S20674C2*), ABISELECT(3760,2608), "S20674C10");
    check_base_class_offset(lv, (S20677C3*)(S20674C11*), ABISELECT(272,184), "S20674C10");
    check_base_class_offset(lv, (S20674C11*), ABISELECT(272,184), "S20674C10");
    check_base_class_offset(lv, (S20674C9*), 0, "S20674C10");
    check_field_offset(lv, s20674c10f0, ABISELECT(432,296), "S20674C10.s20674c10f0");
    set_bf_and_test(lv, s20674c10f1, ABISELECT(704,480), 0, 3, 1, "S20674C10");
    set_bf_and_test(lv, s20674c10f1, ABISELECT(704,480), 0, 3, hide_sll(1LL<<2), "S20674C10");
    check_field_offset(lv, s20674c10f2, ABISELECT(720,484), "S20674C10.s20674c10f2");
    check_field_offset(lv, s20674c10f3, ABISELECT(3696,2572), "S20674C10.s20674c10f3");
    check_field_offset(lv, s20674c10f4, ABISELECT(3712,2576), "S20674C10.s20674c10f4");
    check_field_offset(lv, s20674c10f5, ABISELECT(3728,2588), "S20674C10.s20674c10f5");
    check_field_offset(lv, s20674c10f6, ABISELECT(3744,2596), "S20674C10.s20674c10f6");
    test_class_info(&lv, &cd_S20674C10);
    dp->~S20674C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20674C10(Test_S20674C10, "S20674C10", ABISELECT(4336,3012));

#else // __cplusplus

extern void _ZN9S20674C10C1Ev();
extern void _ZN9S20674C10D2Ev();
Name_Map name_map_S20674C10[] = {
  NSPAIR(_ZN9S20674C10C1Ev),
  NSPAIR(_ZN9S20674C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20674C5;
extern VTBL_ENTRY _ZTI8S20674C5[];
extern  VTBL_ENTRY _ZTV8S20674C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C5[];
extern Class_Descriptor cd_S20674C4;
extern VTBL_ENTRY _ZTI8S20674C4[];
extern  VTBL_ENTRY _ZTV8S20674C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C4[];
extern Class_Descriptor cd_S20674C2;
extern VTBL_ENTRY _ZTI8S20674C2[];
extern  VTBL_ENTRY _ZTV8S20674C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C2[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20674C11;
extern VTBL_ENTRY _ZTI9S20674C11[];
extern Class_Descriptor cd_S20674C9;
extern VTBL_ENTRY _ZTI8S20674C9[];
extern  VTBL_ENTRY _ZTV8S20674C9[];
static Base_Class bases_S20674C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(3864,2680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20674C5,    ABISELECT(3920,2720), //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_S20674C4,    ABISELECT(3920,2720), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20674C2,    ABISELECT(3760,2608), //bcp->offset
    9, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C3,    ABISELECT(272,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_S20674C11,    ABISELECT(272,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
    -1, //immediately_derived
  1, 0},
  {&cd_S20674C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S20674C10[];
extern void _ZN8S20674C93v11Ev();
extern void _ZN9S20674C10D1Ev();
extern void _ZN9S20674C10D0Ev();
extern void _ZN9S20674C103v12Ev();
extern void _ZN8S20674C22v4Ev();
extern void _ZN8S20674C22v5Ev();
extern void _ZN8S20674C22v6Ev();
extern void _ZN8S20674C42v1Ev();
extern void _ZN8S20674C42v2Ev();
extern void _ZN8S20674C42v3Ev();
static  VTBL_ENTRY vtc_S20674C10[] = {
  ABISELECT(3920,2720),
  ABISELECT(3864,2680),
  ABISELECT(3760,2608),
  0,
  (VTBL_ENTRY)&(_ZTI9S20674C10[0]),
  (VTBL_ENTRY)&_ZN8S20674C93v11Ev,
  (VTBL_ENTRY)&_ZN9S20674C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20674C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20674C103v12Ev,
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(-3760,-2608),
  (VTBL_ENTRY)&(_ZTI9S20674C10[0]),
  (VTBL_ENTRY)&_ZN8S20674C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20674C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20674C22v6Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3920,-2720),
  (VTBL_ENTRY)&(_ZTI9S20674C10[0]),
  (VTBL_ENTRY)&_ZN8S20674C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v3Ev,
};
extern VTBL_ENTRY _ZTV9S20674C10[];
extern void _ZN8S20674C22v4Ev();
extern void _ZN8S20674C22v5Ev();
extern void _ZN8S20674C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20674C2__9S20674C10[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C2[0]),
  (VTBL_ENTRY)&_ZN8S20674C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20674C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20674C22v6Ev,
};
extern void _ZN8S20674C42v1Ev();
extern void _ZN8S20674C42v2Ev();
extern void _ZN8S20674C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20674C4__8S20674C2__9S20674C10[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20674C2[0]),
  (VTBL_ENTRY)&_ZN8S20674C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v3Ev,
};
extern void _ZN8S20674C42v1Ev();
extern void _ZN8S20674C42v2Ev();
extern void _ZN8S20674C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20674C4__9S20674C10[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C4[0]),
  (VTBL_ENTRY)&_ZN8S20674C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20674C58S20674C4__9S20674C10[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C5[0]),
};
static  VTT_ENTRY vtt_S20674C10[] = {
  {&(_ZTV9S20674C10[5]),  5,28},
  {&(_ZTV9S20674C10[16]),  16,28},
  {&(_ZTV9S20674C10[25]),  25,28},
  {&(_tg__ZTV8S20674C2__9S20674C10[4]),  4,7},
  {&(_tg__ZTV8S20674C4__8S20674C2__9S20674C10[6]),  6,9},
  {&(_tg__ZTV8S20674C4__9S20674C10[3]),  3,6},
  {&(_tg__ZTV8S20674C58S20674C4__9S20674C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20674C10[];
extern  VTBL_ENTRY _ZTV9S20674C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20674C10[];
Class_Descriptor cd_S20674C10 = {  "S20674C10", // class name
  bases_S20674C10, 7,
  &(vtc_S20674C10[0]), // expected_vtbl_contents
  &(vtt_S20674C10[0]), // expected_vtt_contents
  ABISELECT(4336,3012), // object size
  NSPAIRA(_ZTI9S20674C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20674C10),28, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20674C10),7, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20674C1  : virtual S20674C2 {
  int s20674c1f0;
  ::S20678C11 s20674c1f1;
  int s20674c1f2[3];
  ::S20677C6_nt s20674c1f3;
  ::S20674C10 s20674c1f4;
  ::S20677C6_nt s20674c1f5;
  void *s20674c1f6;
  ~S20674C1(); // tgen
  S20674C1(); // tgen
};
//SIG(1 S20674C1) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} VBC4{ VBC3 BC5{ VBC3 FD Fi FC3 FC3} v1 v2 v3 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} v4 v5 v6 FL FC6{} Fp Fc[2] FC3 Fl FC6} Fi FC7{ VBC8{ VBC3 BC9{ VBC3 FD Fi FC3 FC3} v9 v10 v11 Fs FL Fc Fi[2] FC9 Fp FL Fi FL Fi} VBC10{ VBC3 VBC8 v12 v13 v14 FL FC6 Fp Fc[2] FC3 Fl FC6} VBC11{ VBC3 VBC9 v15 v16 Fi FC9 FL Fi Fp} v7 v8 FC6 FC6 Fi FC9 FC6 FC6 FC12{ v17 FC6 FC9 FC6 FL FC6 Fp FC6 Fp[2] FC6} FC10 Fp FC6} Fi[3] FC6 FC13{ VBC2 BC14{ BC3 FC3 Fi FD Fi FL Fl} BC15{ v19 FC6 FC5 FC6 FL FC6 Fp FC6 Fp[2] FC6} vd v18 FC15 FL:3 FC16{ BC17{ VBC3 BC18{ VBC3 FD Fi FC3 FC3} v21 v22 v23 Fs FL Fc Fi[2] FC18 Fp FL Fi FL Fi} VBC19{ VBC3 VBC18 v24 v25 Fi FC18 FL Fi Fp} BC18 VBC20{ v26 FC6 FC18 FC6 FL FC6 Fp FC6 Fp[2] FC6} VBC21{ BC18 v27 FL Fc[7] Fp Fi FC6 FC6 Fc[10]} v20 Fl FL FD FC6}[2] Fi FD FL FD} FC6 Fp}


S20674C1 ::~S20674C1(){ note_dtor("S20674C1", this);} // tgen
S20674C1 ::S20674C1(){ note_ctor("S20674C1", this);} // tgen

static void Test_S20674C1()
{
  extern Class_Descriptor cd_S20674C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(438,1218)];
    init_test(&cd_S20674C1, buf);
    S20674C1 *dp, &lv = *(dp=new (buf) S20674C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6992,4868), "sizeof(S20674C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20674C1)");
    check_base_class_offset(lv, (S20677C3*)(S20674C2*), ABISELECT(6520,4536), "S20674C1");
    check_base_class_offset(lv, (S20677C3*)(S20674C4*), ABISELECT(6520,4536), "S20674C1");
    check_base_class_offset(lv, (S20677C3*)(S20674C5*)(S20674C4*), ABISELECT(6520,4536), "S20674C1");
    check_base_class_offset(lv, (S20674C5*)(S20674C4*), ABISELECT(6576,4576), "S20674C1");
    check_base_class_offset(lv, (S20674C4*)(S20674C2*), ABISELECT(6576,4576), "S20674C1");
    check_base_class_offset(lv, (S20674C2*), ABISELECT(6416,4464), "S20674C1");
    check_field_offset(lv, s20674c1f0, ABISELECT(8,4), "S20674C1.s20674c1f0");
    check_field_offset(lv, s20674c1f1, ABISELECT(16,8), "S20674C1.s20674c1f1");
    check_field_offset(lv, s20674c1f2, ABISELECT(2048,1428), "S20674C1.s20674c1f2");
    check_field_offset(lv, s20674c1f3, ABISELECT(2060,1440), "S20674C1.s20674c1f3");
    check_field_offset(lv, s20674c1f4, ABISELECT(2064,1444), "S20674C1.s20674c1f4");
    check_field_offset(lv, s20674c1f5, ABISELECT(6400,4456), "S20674C1.s20674c1f5");
    check_field_offset(lv, s20674c1f6, ABISELECT(6408,4460), "S20674C1.s20674c1f6");
    test_class_info(&lv, &cd_S20674C1);
    dp->~S20674C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20674C1(Test_S20674C1, "S20674C1", ABISELECT(6992,4868));

#else // __cplusplus

extern void _ZN8S20674C1C1Ev();
extern void _ZN8S20674C1D1Ev();
Name_Map name_map_S20674C1[] = {
  NSPAIR(_ZN8S20674C1C1Ev),
  NSPAIR(_ZN8S20674C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20674C5;
extern VTBL_ENTRY _ZTI8S20674C5[];
extern  VTBL_ENTRY _ZTV8S20674C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C5[];
extern Class_Descriptor cd_S20674C4;
extern VTBL_ENTRY _ZTI8S20674C4[];
extern  VTBL_ENTRY _ZTV8S20674C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C4[];
extern Class_Descriptor cd_S20674C2;
extern VTBL_ENTRY _ZTI8S20674C2[];
extern  VTBL_ENTRY _ZTV8S20674C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C2[];
static Base_Class bases_S20674C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(6520,4536), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20674C5,    ABISELECT(6576,4576), //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_S20674C4,    ABISELECT(6576,4576), //bcp->offset
    15, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20674C2,    ABISELECT(6416,4464), //bcp->offset
    5, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20674C1[];
extern void _ZN8S20674C22v4Ev();
extern void _ZN8S20674C22v5Ev();
extern void _ZN8S20674C22v6Ev();
extern void _ZN8S20674C42v1Ev();
extern void _ZN8S20674C42v2Ev();
extern void _ZN8S20674C42v3Ev();
static  VTBL_ENTRY vtc_S20674C1[] = {
  ABISELECT(6576,4576),
  ABISELECT(6520,4536),
  ABISELECT(6416,4464),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C1[0]),
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(-6416,-4464),
  (VTBL_ENTRY)&(_ZTI8S20674C1[0]),
  (VTBL_ENTRY)&_ZN8S20674C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20674C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20674C22v6Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-6576,-4576),
  (VTBL_ENTRY)&(_ZTI8S20674C1[0]),
  (VTBL_ENTRY)&_ZN8S20674C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S20674C1[];
extern void _ZN8S20674C22v4Ev();
extern void _ZN8S20674C22v5Ev();
extern void _ZN8S20674C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20674C2__8S20674C1[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C2[0]),
  (VTBL_ENTRY)&_ZN8S20674C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20674C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20674C22v6Ev,
};
extern void _ZN8S20674C42v1Ev();
extern void _ZN8S20674C42v2Ev();
extern void _ZN8S20674C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20674C4__8S20674C2__8S20674C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20674C2[0]),
  (VTBL_ENTRY)&_ZN8S20674C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v3Ev,
};
extern void _ZN8S20674C42v1Ev();
extern void _ZN8S20674C42v2Ev();
extern void _ZN8S20674C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20674C4__8S20674C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C4[0]),
  (VTBL_ENTRY)&_ZN8S20674C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20674C58S20674C4__8S20674C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C5[0]),
};
static  VTT_ENTRY vtt_S20674C1[] = {
  {&(_ZTV8S20674C1[5]),  5,24},
  {&(_ZTV8S20674C1[12]),  12,24},
  {&(_ZTV8S20674C1[21]),  21,24},
  {&(_tg__ZTV8S20674C2__8S20674C1[4]),  4,7},
  {&(_tg__ZTV8S20674C4__8S20674C2__8S20674C1[6]),  6,9},
  {&(_tg__ZTV8S20674C4__8S20674C1[3]),  3,6},
  {&(_tg__ZTV8S20674C58S20674C4__8S20674C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20674C1[];
extern  VTBL_ENTRY _ZTV8S20674C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C1[];
Class_Descriptor cd_S20674C1 = {  "S20674C1", // class name
  bases_S20674C1, 4,
  &(vtc_S20674C1[0]), // expected_vtbl_contents
  &(vtt_S20674C1[0]), // expected_vtt_contents
  ABISELECT(6992,4868), // object size
  NSPAIRA(_ZTI8S20674C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20674C1),24, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20674C1),7, //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  S3294C3  {
  int s3294c3f0;
  __tsi64 s3294c3f1;
  void *s3294c3f2[4];
  int s3294c3f3[2];
  void *s3294c3f4;
  ::S1503C5_nt s3294c3f5;
  void *s3294c3f6[2];
  virtual  ~S3294C3(); // _ZN7S3294C3D1Ev
  virtual void  v5(); // _ZN7S3294C32v5Ev
  virtual void  v6(); // _ZN7S3294C32v6Ev
  virtual void  v7(); // _ZN7S3294C32v7Ev
  virtual void  v8(); // _ZN7S3294C32v8Ev
  virtual void  v9(); // _ZN7S3294C32v9Ev
  virtual void  v10(); // _ZN7S3294C33v10Ev
  virtual void  v11(); // _ZN7S3294C33v11Ev
  virtual void  v12(); // _ZN7S3294C33v12Ev
  virtual void  v13(); // _ZN7S3294C33v13Ev
  virtual void  v14(); // _ZN7S3294C33v14Ev
  virtual void  v15(); // _ZN7S3294C33v15Ev
  virtual void  v16(); // _ZN7S3294C33v16Ev
  virtual void  v17(); // _ZN7S3294C33v17Ev
  virtual void  v18(); // _ZN7S3294C33v18Ev
  virtual void  v19(); // _ZN7S3294C33v19Ev
  virtual void  v20(); // _ZN7S3294C33v20Ev
  virtual void  v21(); // _ZN7S3294C33v21Ev
  virtual void  v22(); // _ZN7S3294C33v22Ev
  virtual void  v23(); // _ZN7S3294C33v23Ev
  virtual void  v24(); // _ZN7S3294C33v24Ev
  virtual void  v25(); // _ZN7S3294C33v25Ev
  virtual void  v26(); // _ZN7S3294C33v26Ev
  virtual void  v27(); // _ZN7S3294C33v27Ev
  virtual void  v28(); // _ZN7S3294C33v28Ev
  virtual void  v29(); // _ZN7S3294C33v29Ev
  virtual void  v30(); // _ZN7S3294C33v30Ev
  virtual void  v31(); // _ZN7S3294C33v31Ev
  virtual void  v32(); // _ZN7S3294C33v32Ev
  virtual void  v33(); // _ZN7S3294C33v33Ev
  virtual void  v34(); // _ZN7S3294C33v34Ev
  virtual void  v35(); // _ZN7S3294C33v35Ev
  virtual void  v36(); // _ZN7S3294C33v36Ev
  virtual void  v37(); // _ZN7S3294C33v37Ev
  virtual void  v38(); // _ZN7S3294C33v38Ev
  virtual void  v39(); // _ZN7S3294C33v39Ev
  virtual void  v40(); // _ZN7S3294C33v40Ev
  virtual void  v41(); // _ZN7S3294C33v41Ev
  virtual void  v42(); // _ZN7S3294C33v42Ev
  virtual void  v43(); // _ZN7S3294C33v43Ev
  virtual void  v44(); // _ZN7S3294C33v44Ev
  virtual void  v45(); // _ZN7S3294C33v45Ev
  virtual void  v46(); // _ZN7S3294C33v46Ev
  virtual void  v47(); // _ZN7S3294C33v47Ev
  virtual void  v48(); // _ZN7S3294C33v48Ev
  virtual void  v49(); // _ZN7S3294C33v49Ev
  virtual void  v50(); // _ZN7S3294C33v50Ev
  virtual void  v51(); // _ZN7S3294C33v51Ev
  virtual void  v52(); // _ZN7S3294C33v52Ev
  virtual void  v53(); // _ZN7S3294C33v53Ev
  virtual void  v54(); // _ZN7S3294C33v54Ev
  virtual void  v55(); // _ZN7S3294C33v55Ev
  virtual void  v56(); // _ZN7S3294C33v56Ev
  virtual void  v57(); // _ZN7S3294C33v57Ev
  virtual void  v58(); // _ZN7S3294C33v58Ev
  virtual void  v59(); // _ZN7S3294C33v59Ev
  virtual void  v60(); // _ZN7S3294C33v60Ev
  virtual void  v61(); // _ZN7S3294C33v61Ev
  virtual void  v62(); // _ZN7S3294C33v62Ev
  virtual void  v63(); // _ZN7S3294C33v63Ev
  virtual void  v64(); // _ZN7S3294C33v64Ev
  virtual void  v65(); // _ZN7S3294C33v65Ev
  virtual void  v66(); // _ZN7S3294C33v66Ev
  virtual void  v67(); // _ZN7S3294C33v67Ev
  virtual void  v68(); // _ZN7S3294C33v68Ev
  S3294C3(); // tgen
};
//SIG(-1 S3294C3) 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]}


 S3294C3 ::~S3294C3(){ note_dtor("S3294C3", this);}
void  S3294C3 ::v5(){vfunc_called(this, "_ZN7S3294C32v5Ev");}
void  S3294C3 ::v6(){vfunc_called(this, "_ZN7S3294C32v6Ev");}
void  S3294C3 ::v7(){vfunc_called(this, "_ZN7S3294C32v7Ev");}
void  S3294C3 ::v8(){vfunc_called(this, "_ZN7S3294C32v8Ev");}
void  S3294C3 ::v9(){vfunc_called(this, "_ZN7S3294C32v9Ev");}
void  S3294C3 ::v10(){vfunc_called(this, "_ZN7S3294C33v10Ev");}
void  S3294C3 ::v11(){vfunc_called(this, "_ZN7S3294C33v11Ev");}
void  S3294C3 ::v12(){vfunc_called(this, "_ZN7S3294C33v12Ev");}
void  S3294C3 ::v13(){vfunc_called(this, "_ZN7S3294C33v13Ev");}
void  S3294C3 ::v14(){vfunc_called(this, "_ZN7S3294C33v14Ev");}
void  S3294C3 ::v15(){vfunc_called(this, "_ZN7S3294C33v15Ev");}
void  S3294C3 ::v16(){vfunc_called(this, "_ZN7S3294C33v16Ev");}
void  S3294C3 ::v17(){vfunc_called(this, "_ZN7S3294C33v17Ev");}
void  S3294C3 ::v18(){vfunc_called(this, "_ZN7S3294C33v18Ev");}
void  S3294C3 ::v19(){vfunc_called(this, "_ZN7S3294C33v19Ev");}
void  S3294C3 ::v20(){vfunc_called(this, "_ZN7S3294C33v20Ev");}
void  S3294C3 ::v21(){vfunc_called(this, "_ZN7S3294C33v21Ev");}
void  S3294C3 ::v22(){vfunc_called(this, "_ZN7S3294C33v22Ev");}
void  S3294C3 ::v23(){vfunc_called(this, "_ZN7S3294C33v23Ev");}
void  S3294C3 ::v24(){vfunc_called(this, "_ZN7S3294C33v24Ev");}
void  S3294C3 ::v25(){vfunc_called(this, "_ZN7S3294C33v25Ev");}
void  S3294C3 ::v26(){vfunc_called(this, "_ZN7S3294C33v26Ev");}
void  S3294C3 ::v27(){vfunc_called(this, "_ZN7S3294C33v27Ev");}
void  S3294C3 ::v28(){vfunc_called(this, "_ZN7S3294C33v28Ev");}
void  S3294C3 ::v29(){vfunc_called(this, "_ZN7S3294C33v29Ev");}
void  S3294C3 ::v30(){vfunc_called(this, "_ZN7S3294C33v30Ev");}
void  S3294C3 ::v31(){vfunc_called(this, "_ZN7S3294C33v31Ev");}
void  S3294C3 ::v32(){vfunc_called(this, "_ZN7S3294C33v32Ev");}
void  S3294C3 ::v33(){vfunc_called(this, "_ZN7S3294C33v33Ev");}
void  S3294C3 ::v34(){vfunc_called(this, "_ZN7S3294C33v34Ev");}
void  S3294C3 ::v35(){vfunc_called(this, "_ZN7S3294C33v35Ev");}
void  S3294C3 ::v36(){vfunc_called(this, "_ZN7S3294C33v36Ev");}
void  S3294C3 ::v37(){vfunc_called(this, "_ZN7S3294C33v37Ev");}
void  S3294C3 ::v38(){vfunc_called(this, "_ZN7S3294C33v38Ev");}
void  S3294C3 ::v39(){vfunc_called(this, "_ZN7S3294C33v39Ev");}
void  S3294C3 ::v40(){vfunc_called(this, "_ZN7S3294C33v40Ev");}
void  S3294C3 ::v41(){vfunc_called(this, "_ZN7S3294C33v41Ev");}
void  S3294C3 ::v42(){vfunc_called(this, "_ZN7S3294C33v42Ev");}
void  S3294C3 ::v43(){vfunc_called(this, "_ZN7S3294C33v43Ev");}
void  S3294C3 ::v44(){vfunc_called(this, "_ZN7S3294C33v44Ev");}
void  S3294C3 ::v45(){vfunc_called(this, "_ZN7S3294C33v45Ev");}
void  S3294C3 ::v46(){vfunc_called(this, "_ZN7S3294C33v46Ev");}
void  S3294C3 ::v47(){vfunc_called(this, "_ZN7S3294C33v47Ev");}
void  S3294C3 ::v48(){vfunc_called(this, "_ZN7S3294C33v48Ev");}
void  S3294C3 ::v49(){vfunc_called(this, "_ZN7S3294C33v49Ev");}
void  S3294C3 ::v50(){vfunc_called(this, "_ZN7S3294C33v50Ev");}
void  S3294C3 ::v51(){vfunc_called(this, "_ZN7S3294C33v51Ev");}
void  S3294C3 ::v52(){vfunc_called(this, "_ZN7S3294C33v52Ev");}
void  S3294C3 ::v53(){vfunc_called(this, "_ZN7S3294C33v53Ev");}
void  S3294C3 ::v54(){vfunc_called(this, "_ZN7S3294C33v54Ev");}
void  S3294C3 ::v55(){vfunc_called(this, "_ZN7S3294C33v55Ev");}
void  S3294C3 ::v56(){vfunc_called(this, "_ZN7S3294C33v56Ev");}
void  S3294C3 ::v57(){vfunc_called(this, "_ZN7S3294C33v57Ev");}
void  S3294C3 ::v58(){vfunc_called(this, "_ZN7S3294C33v58Ev");}
void  S3294C3 ::v59(){vfunc_called(this, "_ZN7S3294C33v59Ev");}
void  S3294C3 ::v60(){vfunc_called(this, "_ZN7S3294C33v60Ev");}
void  S3294C3 ::v61(){vfunc_called(this, "_ZN7S3294C33v61Ev");}
void  S3294C3 ::v62(){vfunc_called(this, "_ZN7S3294C33v62Ev");}
void  S3294C3 ::v63(){vfunc_called(this, "_ZN7S3294C33v63Ev");}
void  S3294C3 ::v64(){vfunc_called(this, "_ZN7S3294C33v64Ev");}
void  S3294C3 ::v65(){vfunc_called(this, "_ZN7S3294C33v65Ev");}
void  S3294C3 ::v66(){vfunc_called(this, "_ZN7S3294C33v66Ev");}
void  S3294C3 ::v67(){vfunc_called(this, "_ZN7S3294C33v67Ev");}
void  S3294C3 ::v68(){vfunc_called(this, "_ZN7S3294C33v68Ev");}
S3294C3 ::S3294C3(){ note_ctor("S3294C3", this);} // tgen

static void Test_S3294C3()
{
  extern Class_Descriptor cd_S3294C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3294C3, buf);
    S3294C3 *dp, &lv = *(dp=new (buf) S3294C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3294C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3294C3)");
    check_field_offset(lv, s3294c3f0, ABISELECT(8,4), "S3294C3.s3294c3f0");
    check_field_offset(lv, s3294c3f1, ABISELECT(16,8), "S3294C3.s3294c3f1");
    check_field_offset(lv, s3294c3f2, ABISELECT(24,16), "S3294C3.s3294c3f2");
    check_field_offset(lv, s3294c3f3, ABISELECT(56,32), "S3294C3.s3294c3f3");
    check_field_offset(lv, s3294c3f4, ABISELECT(64,40), "S3294C3.s3294c3f4");
    check_field_offset(lv, s3294c3f5, ABISELECT(72,44), "S3294C3.s3294c3f5");
    check_field_offset(lv, s3294c3f6, ABISELECT(80,52), "S3294C3.s3294c3f6");
    test_class_info(&lv, &cd_S3294C3);
    dp->~S3294C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3294C3(Test_S3294C3, "S3294C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3294C3C1Ev();
extern void _ZN7S3294C3D1Ev();
Name_Map name_map_S3294C3[] = {
  NSPAIR(_ZN7S3294C3C1Ev),
  NSPAIR(_ZN7S3294C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3294C3[];
extern void _ZN7S3294C3D1Ev();
extern void _ZN7S3294C3D0Ev();
extern void _ZN7S3294C32v5Ev();
extern void _ZN7S3294C32v6Ev();
extern void _ZN7S3294C32v7Ev();
extern void _ZN7S3294C32v8Ev();
extern void _ZN7S3294C32v9Ev();
extern void _ZN7S3294C33v10Ev();
extern void _ZN7S3294C33v11Ev();
extern void _ZN7S3294C33v12Ev();
extern void _ZN7S3294C33v13Ev();
extern void _ZN7S3294C33v14Ev();
extern void _ZN7S3294C33v15Ev();
extern void _ZN7S3294C33v16Ev();
extern void _ZN7S3294C33v17Ev();
extern void _ZN7S3294C33v18Ev();
extern void _ZN7S3294C33v19Ev();
extern void _ZN7S3294C33v20Ev();
extern void _ZN7S3294C33v21Ev();
extern void _ZN7S3294C33v22Ev();
extern void _ZN7S3294C33v23Ev();
extern void _ZN7S3294C33v24Ev();
extern void _ZN7S3294C33v25Ev();
extern void _ZN7S3294C33v26Ev();
extern void _ZN7S3294C33v27Ev();
extern void _ZN7S3294C33v28Ev();
extern void _ZN7S3294C33v29Ev();
extern void _ZN7S3294C33v30Ev();
extern void _ZN7S3294C33v31Ev();
extern void _ZN7S3294C33v32Ev();
extern void _ZN7S3294C33v33Ev();
extern void _ZN7S3294C33v34Ev();
extern void _ZN7S3294C33v35Ev();
extern void _ZN7S3294C33v36Ev();
extern void _ZN7S3294C33v37Ev();
extern void _ZN7S3294C33v38Ev();
extern void _ZN7S3294C33v39Ev();
extern void _ZN7S3294C33v40Ev();
extern void _ZN7S3294C33v41Ev();
extern void _ZN7S3294C33v42Ev();
extern void _ZN7S3294C33v43Ev();
extern void _ZN7S3294C33v44Ev();
extern void _ZN7S3294C33v45Ev();
extern void _ZN7S3294C33v46Ev();
extern void _ZN7S3294C33v47Ev();
extern void _ZN7S3294C33v48Ev();
extern void _ZN7S3294C33v49Ev();
extern void _ZN7S3294C33v50Ev();
extern void _ZN7S3294C33v51Ev();
extern void _ZN7S3294C33v52Ev();
extern void _ZN7S3294C33v53Ev();
extern void _ZN7S3294C33v54Ev();
extern void _ZN7S3294C33v55Ev();
extern void _ZN7S3294C33v56Ev();
extern void _ZN7S3294C33v57Ev();
extern void _ZN7S3294C33v58Ev();
extern void _ZN7S3294C33v59Ev();
extern void _ZN7S3294C33v60Ev();
extern void _ZN7S3294C33v61Ev();
extern void _ZN7S3294C33v62Ev();
extern void _ZN7S3294C33v63Ev();
extern void _ZN7S3294C33v64Ev();
extern void _ZN7S3294C33v65Ev();
extern void _ZN7S3294C33v66Ev();
extern void _ZN7S3294C33v67Ev();
extern void _ZN7S3294C33v68Ev();
static  VTBL_ENTRY vtc_S3294C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3294C3[0]),
  (VTBL_ENTRY)&_ZN7S3294C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3294C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v68Ev,
};
extern VTBL_ENTRY _ZTI7S3294C3[];
extern  VTBL_ENTRY _ZTV7S3294C3[];
Class_Descriptor cd_S3294C3 = {  "S3294C3", // class name
  0,0,//no base classes
  &(vtc_S3294C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3294C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3294C3),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  S3294C2_nt  : S3294C3 {
  int s3294c2f0[2];
  unsigned int s3294c2f1:1;
  unsigned int s3294c2f2:1;
  void *s3294c2f3;
  ::S210C8_nt s3294c2f4;
  virtual  ~S3294C2_nt(); // _ZN10S3294C2_ntD1Ev
  virtual void  v69(); // _ZN10S3294C2_nt3v69Ev
  virtual void  v70(); // _ZN10S3294C2_nt3v70Ev
  virtual void  v71(); // _ZN10S3294C2_nt3v71Ev
  virtual void  v72(); // _ZN10S3294C2_nt3v72Ev
  virtual void  v73(); // _ZN10S3294C2_nt3v73Ev
  virtual void  v74(); // _ZN10S3294C2_nt3v74Ev
  virtual void  v75(); // _ZN10S3294C2_nt3v75Ev
  virtual void  v76(); // _ZN10S3294C2_nt3v76Ev
  virtual void  v77(); // _ZN10S3294C2_nt3v77Ev
  virtual void  v78(); // _ZN10S3294C2_nt3v78Ev
  virtual void  v79(); // _ZN10S3294C2_nt3v79Ev
  virtual void  v80(); // _ZN10S3294C2_nt3v80Ev
  virtual void  v81(); // _ZN10S3294C2_nt3v81Ev
  S3294C2_nt(); // tgen
};
//SIG(-1 S3294C2_nt) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fi[2] Fi:1 Fi:1 Fp FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}}}


 S3294C2_nt ::~S3294C2_nt(){ note_dtor("S3294C2_nt", this);}
void  S3294C2_nt ::v69(){vfunc_called(this, "_ZN10S3294C2_nt3v69Ev");}
void  S3294C2_nt ::v70(){vfunc_called(this, "_ZN10S3294C2_nt3v70Ev");}
void  S3294C2_nt ::v71(){vfunc_called(this, "_ZN10S3294C2_nt3v71Ev");}
void  S3294C2_nt ::v72(){vfunc_called(this, "_ZN10S3294C2_nt3v72Ev");}
void  S3294C2_nt ::v73(){vfunc_called(this, "_ZN10S3294C2_nt3v73Ev");}
void  S3294C2_nt ::v74(){vfunc_called(this, "_ZN10S3294C2_nt3v74Ev");}
void  S3294C2_nt ::v75(){vfunc_called(this, "_ZN10S3294C2_nt3v75Ev");}
void  S3294C2_nt ::v76(){vfunc_called(this, "_ZN10S3294C2_nt3v76Ev");}
void  S3294C2_nt ::v77(){vfunc_called(this, "_ZN10S3294C2_nt3v77Ev");}
void  S3294C2_nt ::v78(){vfunc_called(this, "_ZN10S3294C2_nt3v78Ev");}
void  S3294C2_nt ::v79(){vfunc_called(this, "_ZN10S3294C2_nt3v79Ev");}
void  S3294C2_nt ::v80(){vfunc_called(this, "_ZN10S3294C2_nt3v80Ev");}
void  S3294C2_nt ::v81(){vfunc_called(this, "_ZN10S3294C2_nt3v81Ev");}
S3294C2_nt ::S3294C2_nt(){ note_ctor("S3294C2_nt", this);} // tgen

//skip512 S3294C2_nt

#else // __cplusplus

extern void _ZN10S3294C2_ntC1Ev();
extern void _ZN10S3294C2_ntD1Ev();
Name_Map name_map_S3294C2_nt[] = {
  NSPAIR(_ZN10S3294C2_ntC1Ev),
  NSPAIR(_ZN10S3294C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3294C3;
extern VTBL_ENTRY _ZTI7S3294C3[];
extern  VTBL_ENTRY _ZTV7S3294C3[];
static Base_Class bases_S3294C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3294C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S3294C2_nt[];
extern void _ZN10S3294C2_ntD1Ev();
extern void _ZN10S3294C2_ntD0Ev();
extern void _ZN7S3294C32v5Ev();
extern void _ZN7S3294C32v6Ev();
extern void _ZN7S3294C32v7Ev();
extern void _ZN7S3294C32v8Ev();
extern void _ZN7S3294C32v9Ev();
extern void _ZN7S3294C33v10Ev();
extern void _ZN7S3294C33v11Ev();
extern void _ZN7S3294C33v12Ev();
extern void _ZN7S3294C33v13Ev();
extern void _ZN7S3294C33v14Ev();
extern void _ZN7S3294C33v15Ev();
extern void _ZN7S3294C33v16Ev();
extern void _ZN7S3294C33v17Ev();
extern void _ZN7S3294C33v18Ev();
extern void _ZN7S3294C33v19Ev();
extern void _ZN7S3294C33v20Ev();
extern void _ZN7S3294C33v21Ev();
extern void _ZN7S3294C33v22Ev();
extern void _ZN7S3294C33v23Ev();
extern void _ZN7S3294C33v24Ev();
extern void _ZN7S3294C33v25Ev();
extern void _ZN7S3294C33v26Ev();
extern void _ZN7S3294C33v27Ev();
extern void _ZN7S3294C33v28Ev();
extern void _ZN7S3294C33v29Ev();
extern void _ZN7S3294C33v30Ev();
extern void _ZN7S3294C33v31Ev();
extern void _ZN7S3294C33v32Ev();
extern void _ZN7S3294C33v33Ev();
extern void _ZN7S3294C33v34Ev();
extern void _ZN7S3294C33v35Ev();
extern void _ZN7S3294C33v36Ev();
extern void _ZN7S3294C33v37Ev();
extern void _ZN7S3294C33v38Ev();
extern void _ZN7S3294C33v39Ev();
extern void _ZN7S3294C33v40Ev();
extern void _ZN7S3294C33v41Ev();
extern void _ZN7S3294C33v42Ev();
extern void _ZN7S3294C33v43Ev();
extern void _ZN7S3294C33v44Ev();
extern void _ZN7S3294C33v45Ev();
extern void _ZN7S3294C33v46Ev();
extern void _ZN7S3294C33v47Ev();
extern void _ZN7S3294C33v48Ev();
extern void _ZN7S3294C33v49Ev();
extern void _ZN7S3294C33v50Ev();
extern void _ZN7S3294C33v51Ev();
extern void _ZN7S3294C33v52Ev();
extern void _ZN7S3294C33v53Ev();
extern void _ZN7S3294C33v54Ev();
extern void _ZN7S3294C33v55Ev();
extern void _ZN7S3294C33v56Ev();
extern void _ZN7S3294C33v57Ev();
extern void _ZN7S3294C33v58Ev();
extern void _ZN7S3294C33v59Ev();
extern void _ZN7S3294C33v60Ev();
extern void _ZN7S3294C33v61Ev();
extern void _ZN7S3294C33v62Ev();
extern void _ZN7S3294C33v63Ev();
extern void _ZN7S3294C33v64Ev();
extern void _ZN7S3294C33v65Ev();
extern void _ZN7S3294C33v66Ev();
extern void _ZN7S3294C33v67Ev();
extern void _ZN7S3294C33v68Ev();
extern void _ZN10S3294C2_nt3v69Ev();
extern void _ZN10S3294C2_nt3v70Ev();
extern void _ZN10S3294C2_nt3v71Ev();
extern void _ZN10S3294C2_nt3v72Ev();
extern void _ZN10S3294C2_nt3v73Ev();
extern void _ZN10S3294C2_nt3v74Ev();
extern void _ZN10S3294C2_nt3v75Ev();
extern void _ZN10S3294C2_nt3v76Ev();
extern void _ZN10S3294C2_nt3v77Ev();
extern void _ZN10S3294C2_nt3v78Ev();
extern void _ZN10S3294C2_nt3v79Ev();
extern void _ZN10S3294C2_nt3v80Ev();
extern void _ZN10S3294C2_nt3v81Ev();
static  VTBL_ENTRY vtc_S3294C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3294C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S3294C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v68Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v81Ev,
};
extern VTBL_ENTRY _ZTI10S3294C2_nt[];
VTBL_ENTRY *P__ZTI10S3294C2_nt = _ZTI10S3294C2_nt; 
extern  VTBL_ENTRY _ZTV10S3294C2_nt[];
Class_Descriptor cd_S3294C2_nt = {  "S3294C2_nt", // class name
  bases_S3294C2_nt, 1,
  &(vtc_S3294C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI10S3294C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S3294C2_nt),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3294C1  : S3294C2_nt {
  virtual  ~S3294C1(); // _ZN7S3294C1D1Ev
  virtual void  v1(); // _ZN7S3294C12v1Ev
  virtual void  v2(); // _ZN7S3294C12v2Ev
  virtual void  v3(); // _ZN7S3294C12v3Ev
  virtual void  v4(); // _ZN7S3294C12v4Ev
  S3294C1(); // tgen
};
//SIG(1 S3294C1) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 Fi[2] Fi:1 Fi:1 Fp FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}}} vd v1 v2 v3 v4}


 S3294C1 ::~S3294C1(){ note_dtor("S3294C1", this);}
void  S3294C1 ::v1(){vfunc_called(this, "_ZN7S3294C12v1Ev");}
void  S3294C1 ::v2(){vfunc_called(this, "_ZN7S3294C12v2Ev");}
void  S3294C1 ::v3(){vfunc_called(this, "_ZN7S3294C12v3Ev");}
void  S3294C1 ::v4(){vfunc_called(this, "_ZN7S3294C12v4Ev");}
S3294C1 ::S3294C1(){ note_ctor("S3294C1", this);} // tgen

static void Test_S3294C1()
{
  extern Class_Descriptor cd_S3294C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,23)];
    init_test(&cd_S3294C1, buf);
    S3294C1 *dp, &lv = *(dp=new (buf) S3294C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,88), "sizeof(S3294C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3294C1)");
    check_base_class_offset(lv, (S3294C3*)(S3294C2_nt*), 0, "S3294C1");
    check_base_class_offset(lv, (S3294C2_nt*), 0, "S3294C1");
    test_class_info(&lv, &cd_S3294C1);
    dp->~S3294C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3294C1(Test_S3294C1, "S3294C1", ABISELECT(136,88));

#else // __cplusplus

extern void _ZN7S3294C1C1Ev();
extern void _ZN7S3294C1D1Ev();
Name_Map name_map_S3294C1[] = {
  NSPAIR(_ZN7S3294C1C1Ev),
  NSPAIR(_ZN7S3294C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3294C3;
extern VTBL_ENTRY _ZTI7S3294C3[];
extern  VTBL_ENTRY _ZTV7S3294C3[];
extern Class_Descriptor cd_S3294C2_nt;
extern VTBL_ENTRY _ZTI10S3294C2_nt[];
extern  VTBL_ENTRY _ZTV10S3294C2_nt[];
static Base_Class bases_S3294C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3294C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3294C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3294C1[];
extern void _ZN7S3294C1D1Ev();
extern void _ZN7S3294C1D0Ev();
extern void _ZN7S3294C32v5Ev();
extern void _ZN7S3294C32v6Ev();
extern void _ZN7S3294C32v7Ev();
extern void _ZN7S3294C32v8Ev();
extern void _ZN7S3294C32v9Ev();
extern void _ZN7S3294C33v10Ev();
extern void _ZN7S3294C33v11Ev();
extern void _ZN7S3294C33v12Ev();
extern void _ZN7S3294C33v13Ev();
extern void _ZN7S3294C33v14Ev();
extern void _ZN7S3294C33v15Ev();
extern void _ZN7S3294C33v16Ev();
extern void _ZN7S3294C33v17Ev();
extern void _ZN7S3294C33v18Ev();
extern void _ZN7S3294C33v19Ev();
extern void _ZN7S3294C33v20Ev();
extern void _ZN7S3294C33v21Ev();
extern void _ZN7S3294C33v22Ev();
extern void _ZN7S3294C33v23Ev();
extern void _ZN7S3294C33v24Ev();
extern void _ZN7S3294C33v25Ev();
extern void _ZN7S3294C33v26Ev();
extern void _ZN7S3294C33v27Ev();
extern void _ZN7S3294C33v28Ev();
extern void _ZN7S3294C33v29Ev();
extern void _ZN7S3294C33v30Ev();
extern void _ZN7S3294C33v31Ev();
extern void _ZN7S3294C33v32Ev();
extern void _ZN7S3294C33v33Ev();
extern void _ZN7S3294C33v34Ev();
extern void _ZN7S3294C33v35Ev();
extern void _ZN7S3294C33v36Ev();
extern void _ZN7S3294C33v37Ev();
extern void _ZN7S3294C33v38Ev();
extern void _ZN7S3294C33v39Ev();
extern void _ZN7S3294C33v40Ev();
extern void _ZN7S3294C33v41Ev();
extern void _ZN7S3294C33v42Ev();
extern void _ZN7S3294C33v43Ev();
extern void _ZN7S3294C33v44Ev();
extern void _ZN7S3294C33v45Ev();
extern void _ZN7S3294C33v46Ev();
extern void _ZN7S3294C33v47Ev();
extern void _ZN7S3294C33v48Ev();
extern void _ZN7S3294C33v49Ev();
extern void _ZN7S3294C33v50Ev();
extern void _ZN7S3294C33v51Ev();
extern void _ZN7S3294C33v52Ev();
extern void _ZN7S3294C33v53Ev();
extern void _ZN7S3294C33v54Ev();
extern void _ZN7S3294C33v55Ev();
extern void _ZN7S3294C33v56Ev();
extern void _ZN7S3294C33v57Ev();
extern void _ZN7S3294C33v58Ev();
extern void _ZN7S3294C33v59Ev();
extern void _ZN7S3294C33v60Ev();
extern void _ZN7S3294C33v61Ev();
extern void _ZN7S3294C33v62Ev();
extern void _ZN7S3294C33v63Ev();
extern void _ZN7S3294C33v64Ev();
extern void _ZN7S3294C33v65Ev();
extern void _ZN7S3294C33v66Ev();
extern void _ZN7S3294C33v67Ev();
extern void _ZN7S3294C33v68Ev();
extern void _ZN10S3294C2_nt3v69Ev();
extern void _ZN10S3294C2_nt3v70Ev();
extern void _ZN10S3294C2_nt3v71Ev();
extern void _ZN10S3294C2_nt3v72Ev();
extern void _ZN10S3294C2_nt3v73Ev();
extern void _ZN10S3294C2_nt3v74Ev();
extern void _ZN10S3294C2_nt3v75Ev();
extern void _ZN10S3294C2_nt3v76Ev();
extern void _ZN10S3294C2_nt3v77Ev();
extern void _ZN10S3294C2_nt3v78Ev();
extern void _ZN10S3294C2_nt3v79Ev();
extern void _ZN10S3294C2_nt3v80Ev();
extern void _ZN10S3294C2_nt3v81Ev();
extern void _ZN7S3294C12v1Ev();
extern void _ZN7S3294C12v2Ev();
extern void _ZN7S3294C12v3Ev();
extern void _ZN7S3294C12v4Ev();
static  VTBL_ENTRY vtc_S3294C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3294C1[0]),
  (VTBL_ENTRY)&_ZN7S3294C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3294C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v68Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN7S3294C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3294C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3294C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3294C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S3294C1[];
extern  VTBL_ENTRY _ZTV7S3294C1[];
Class_Descriptor cd_S3294C1 = {  "S3294C1", // class name
  bases_S3294C1, 2,
  &(vtc_S3294C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI7S3294C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3294C1),85, //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  S21008C6  : virtual S20677C3 {
  long double s21008c6f0;
  int s21008c6f1;
  ::S20677C3 s21008c6f2;
  ::S20677C3 s21008c6f3;
  ~S21008C6(); // tgen
  S21008C6(); // tgen
};
//SIG(-1 S21008C6) C1{ VBC2{ m Fp FL[4] Fs} FD Fi FC2 FC2}


S21008C6 ::~S21008C6(){ note_dtor("S21008C6", this);} // tgen
S21008C6 ::S21008C6(){ note_ctor("S21008C6", this);} // tgen

static void Test_S21008C6()
{
  extern Class_Descriptor cd_S21008C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,36)];
    init_test(&cd_S21008C6, buf);
    S21008C6 *dp, &lv = *(dp=new (buf) S21008C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S21008C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21008C6)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(136,100), "S21008C6");
    check_field_offset(lv, s21008c6f0, ABISELECT(16,4), "S21008C6.s21008c6f0");
    check_field_offset(lv, s21008c6f1, ABISELECT(32,16), "S21008C6.s21008c6f1");
    check_field_offset(lv, s21008c6f2, ABISELECT(40,20), "S21008C6.s21008c6f2");
    check_field_offset(lv, s21008c6f3, ABISELECT(88,60), "S21008C6.s21008c6f3");
    test_class_info(&lv, &cd_S21008C6);
    dp->~S21008C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21008C6(Test_S21008C6, "S21008C6", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN8S21008C6C1Ev();
extern void _ZN8S21008C6D1Ev();
Name_Map name_map_S21008C6[] = {
  NSPAIR(_ZN8S21008C6C1Ev),
  NSPAIR(_ZN8S21008C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S21008C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(136,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21008C6[];
static  VTBL_ENTRY vtc_S21008C6[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C6[0]),
};
extern VTBL_ENTRY _ZTV8S21008C6[];
static  VTT_ENTRY vtt_S21008C6[] = {
  {&(_ZTV8S21008C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21008C6[];
extern  VTBL_ENTRY _ZTV8S21008C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C6[];
Class_Descriptor cd_S21008C6 = {  "S21008C6", // class name
  bases_S21008C6, 1,
  &(vtc_S21008C6[0]), // expected_vtbl_contents
  &(vtt_S21008C6[0]), // expected_vtt_contents
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI8S21008C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21008C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21008C6),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  S21008C5  : virtual S20677C3 , S21008C6 {
  short s21008c5f0;
  __tsi64 s21008c5f1;
  char s21008c5f2;
  int s21008c5f3[2];
  ::S21008C6 s21008c5f4;
  void *s21008c5f5;
  __tsi64 s21008c5f6;
  int s21008c5f7;
  __tsi64 s21008c5f8;
  int s21008c5f9;
  virtual void  v2(); // _ZN8S21008C52v2Ev
  virtual void  v3(); // _ZN8S21008C52v3Ev
  virtual void  v4(); // _ZN8S21008C52v4Ev
  ~S21008C5(); // tgen
  S21008C5(); // tgen
};
//SIG(-1 S21008C5) C1{ VBC2{ m Fp FL[4] Fs} BC3{ VBC2 FD Fi FC2 FC2} v1 v2 v3 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi}


void  S21008C5 ::v2(){vfunc_called(this, "_ZN8S21008C52v2Ev");}
void  S21008C5 ::v3(){vfunc_called(this, "_ZN8S21008C52v3Ev");}
void  S21008C5 ::v4(){vfunc_called(this, "_ZN8S21008C52v4Ev");}
S21008C5 ::~S21008C5(){ note_dtor("S21008C5", this);} // tgen
S21008C5 ::S21008C5(){ note_ctor("S21008C5", this);} // tgen

static void Test_S21008C5()
{
  extern Class_Descriptor cd_S21008C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,84)];
    init_test(&cd_S21008C5, buf);
    S21008C5 *dp, &lv = *(dp=new (buf) S21008C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,332), "sizeof(S21008C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21008C5)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(408,292), "S21008C5");
    check_base_class_offset(lv, (S20677C3*)(S21008C6*), ABISELECT(408,292), "S21008C5");
    check_base_class_offset(lv, (S21008C6*), 0, "S21008C5");
    check_field_offset(lv, s21008c5f0, ABISELECT(136,100), "S21008C5.s21008c5f0");
    check_field_offset(lv, s21008c5f1, ABISELECT(144,104), "S21008C5.s21008c5f1");
    check_field_offset(lv, s21008c5f2, ABISELECT(152,112), "S21008C5.s21008c5f2");
    check_field_offset(lv, s21008c5f3, ABISELECT(156,116), "S21008C5.s21008c5f3");
    check_field_offset(lv, s21008c5f4, ABISELECT(176,124), "S21008C5.s21008c5f4");
    check_field_offset(lv, s21008c5f5, ABISELECT(368,264), "S21008C5.s21008c5f5");
    check_field_offset(lv, s21008c5f6, ABISELECT(376,268), "S21008C5.s21008c5f6");
    check_field_offset(lv, s21008c5f7, ABISELECT(384,276), "S21008C5.s21008c5f7");
    check_field_offset(lv, s21008c5f8, ABISELECT(392,280), "S21008C5.s21008c5f8");
    check_field_offset(lv, s21008c5f9, ABISELECT(400,288), "S21008C5.s21008c5f9");
    test_class_info(&lv, &cd_S21008C5);
    dp->~S21008C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21008C5(Test_S21008C5, "S21008C5", ABISELECT(464,332));

#else // __cplusplus

extern void _ZN8S21008C5C1Ev();
extern void _ZN8S21008C5D1Ev();
Name_Map name_map_S21008C5[] = {
  NSPAIR(_ZN8S21008C5C1Ev),
  NSPAIR(_ZN8S21008C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S21008C6;
extern VTBL_ENTRY _ZTI8S21008C6[];
extern  VTBL_ENTRY _ZTV8S21008C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C6[];
static Base_Class bases_S21008C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(408,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
    -1, //immediately_derived
  1, 1},
  {&cd_S21008C6,    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 _ZTI8S21008C5[];
extern void _ZN8S21008C52v2Ev();
extern void _ZN8S21008C52v3Ev();
extern void _ZN8S21008C52v4Ev();
static  VTBL_ENTRY vtc_S21008C5[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C5[0]),
  (VTBL_ENTRY)&_ZN8S21008C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S21008C5[];
static  VTBL_ENTRY _tg__ZTV8S21008C6__8S21008C5[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C6[0]),
};
static  VTT_ENTRY vtt_S21008C5[] = {
  {&(_ZTV8S21008C5[3]),  3,6},
  {&(_tg__ZTV8S21008C6__8S21008C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21008C5[];
extern  VTBL_ENTRY _ZTV8S21008C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C5[];
Class_Descriptor cd_S21008C5 = {  "S21008C5", // class name
  bases_S21008C5, 2,
  &(vtc_S21008C5[0]), // expected_vtbl_contents
  &(vtt_S21008C5[0]), // expected_vtt_contents
  ABISELECT(464,332), // object size
  NSPAIRA(_ZTI8S21008C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21008C5),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21008C5),2, //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  S21008C3  : virtual S20677C3 , virtual S21008C5 {
  __tsi64 s21008c3f0;
  ::S20677C6_nt s21008c3f1;
  void *s21008c3f2;
  char s21008c3f3[2];
  ::S20677C3 s21008c3f4;
  long s21008c3f5;
  ::S20677C6_nt s21008c3f6;
  virtual void  v5(); // _ZN8S21008C32v5Ev
  virtual void  v6(); // _ZN8S21008C32v6Ev
  virtual void  v7(); // _ZN8S21008C32v7Ev
  ~S21008C3(); // tgen
  S21008C3(); // tgen
};
//SIG(-1 S21008C3) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 BC4{ VBC2 FD Fi FC2 FC2} v4 v5 v6 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} v1 v2 v3 FL FC5{} Fp Fc[2] FC2 Fl FC5}


void  S21008C3 ::v5(){vfunc_called(this, "_ZN8S21008C32v5Ev");}
void  S21008C3 ::v6(){vfunc_called(this, "_ZN8S21008C32v6Ev");}
void  S21008C3 ::v7(){vfunc_called(this, "_ZN8S21008C32v7Ev");}
S21008C3 ::~S21008C3(){ note_dtor("S21008C3", this);} // tgen
S21008C3 ::S21008C3(){ note_ctor("S21008C3", this);} // tgen

static void Test_S21008C3()
{
  extern Class_Descriptor cd_S21008C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,102)];
    init_test(&cd_S21008C3, buf);
    S21008C3 *dp, &lv = *(dp=new (buf) S21008C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,404), "sizeof(S21008C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21008C3)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(104,72), "S21008C3");
    check_base_class_offset(lv, (S20677C3*)(S21008C5*), ABISELECT(104,72), "S21008C3");
    check_base_class_offset(lv, (S20677C3*)(S21008C6*)(S21008C5*), ABISELECT(104,72), "S21008C3");
    check_base_class_offset(lv, (S21008C6*)(S21008C5*), ABISELECT(160,112), "S21008C3");
    check_base_class_offset(lv, (S21008C5*), ABISELECT(160,112), "S21008C3");
    check_field_offset(lv, s21008c3f0, ABISELECT(8,4), "S21008C3.s21008c3f0");
    check_field_offset(lv, s21008c3f1, ABISELECT(16,12), "S21008C3.s21008c3f1");
    check_field_offset(lv, s21008c3f2, ABISELECT(24,16), "S21008C3.s21008c3f2");
    check_field_offset(lv, s21008c3f3, ABISELECT(32,20), "S21008C3.s21008c3f3");
    check_field_offset(lv, s21008c3f4, ABISELECT(40,24), "S21008C3.s21008c3f4");
    check_field_offset(lv, s21008c3f5, ABISELECT(88,64), "S21008C3.s21008c3f5");
    check_field_offset(lv, s21008c3f6, ABISELECT(96,68), "S21008C3.s21008c3f6");
    test_class_info(&lv, &cd_S21008C3);
    dp->~S21008C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21008C3(Test_S21008C3, "S21008C3", ABISELECT(576,404));

#else // __cplusplus

extern void _ZN8S21008C3C1Ev();
extern void _ZN8S21008C3D1Ev();
Name_Map name_map_S21008C3[] = {
  NSPAIR(_ZN8S21008C3C1Ev),
  NSPAIR(_ZN8S21008C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S21008C6;
extern VTBL_ENTRY _ZTI8S21008C6[];
extern  VTBL_ENTRY _ZTV8S21008C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C6[];
extern Class_Descriptor cd_S21008C5;
extern VTBL_ENTRY _ZTI8S21008C5[];
extern  VTBL_ENTRY _ZTV8S21008C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C5[];
static Base_Class bases_S21008C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(104,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
    -1, //immediately_derived
  1, 1},
  {&cd_S21008C6,    ABISELECT(160,112), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21008C5,    ABISELECT(160,112), //bcp->offset
    7, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21008C3[];
extern void _ZN8S21008C32v5Ev();
extern void _ZN8S21008C32v6Ev();
extern void _ZN8S21008C32v7Ev();
extern void _ZN8S21008C52v2Ev();
extern void _ZN8S21008C52v3Ev();
extern void _ZN8S21008C52v4Ev();
static  VTBL_ENTRY vtc_S21008C3[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C3[0]),
  (VTBL_ENTRY)&_ZN8S21008C32v5Ev,
  (VTBL_ENTRY)&_ZN8S21008C32v6Ev,
  (VTBL_ENTRY)&_ZN8S21008C32v7Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S21008C3[0]),
  (VTBL_ENTRY)&_ZN8S21008C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S21008C3[];
extern void _ZN8S21008C52v2Ev();
extern void _ZN8S21008C52v3Ev();
extern void _ZN8S21008C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21008C5__8S21008C3[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C5[0]),
  (VTBL_ENTRY)&_ZN8S21008C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S21008C68S21008C5__8S21008C3[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C6[0]),
};
static  VTT_ENTRY vtt_S21008C3[] = {
  {&(_ZTV8S21008C3[4]),  4,16},
  {&(_ZTV8S21008C3[13]),  13,16},
  {&(_tg__ZTV8S21008C5__8S21008C3[3]),  3,6},
  {&(_tg__ZTV8S21008C68S21008C5__8S21008C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21008C3[];
extern  VTBL_ENTRY _ZTV8S21008C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C3[];
Class_Descriptor cd_S21008C3 = {  "S21008C3", // class name
  bases_S21008C3, 3,
  &(vtc_S21008C3[0]), // expected_vtbl_contents
  &(vtt_S21008C3[0]), // expected_vtt_contents
  ABISELECT(576,404), // object size
  NSPAIRA(_ZTI8S21008C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21008C3),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21008C3),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  S21008C8  : S20677C3 {
  ::S20677C3 s21008c8f0;
  int s21008c8f1;
  long double s21008c8f2;
  int s21008c8f3;
  __tsi64 s21008c8f4;
  long s21008c8f5;
};
//SIG(-1 S21008C8) C1{ BC2{ m Fp FL[4] Fs} FC2 Fi FD Fi FL Fl}



static void Test_S21008C8()
{
  extern Class_Descriptor cd_S21008C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S21008C8, buf);
    S21008C8 &lv = *(new (buf) S21008C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S21008C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21008C8)");
    check_base_class_offset(lv, (S20677C3*), 0, "S21008C8");
    check_field_offset(lv, s21008c8f0, ABISELECT(48,40), "S21008C8.s21008c8f0");
    check_field_offset(lv, s21008c8f1, ABISELECT(96,80), "S21008C8.s21008c8f1");
    check_field_offset(lv, s21008c8f2, ABISELECT(112,84), "S21008C8.s21008c8f2");
    check_field_offset(lv, s21008c8f3, ABISELECT(128,96), "S21008C8.s21008c8f3");
    check_field_offset(lv, s21008c8f4, ABISELECT(136,100), "S21008C8.s21008c8f4");
    check_field_offset(lv, s21008c8f5, ABISELECT(144,108), "S21008C8.s21008c8f5");
    test_class_info(&lv, &cd_S21008C8);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21008C8(Test_S21008C8, "S21008C8", ABISELECT(160,112));

#else // __cplusplus

extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S21008C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21008C8[];
Class_Descriptor cd_S21008C8 = {  "S21008C8", // class name
  bases_S21008C8, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI8S21008C8),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  S21008C9  {
  ::S20677C6_nt s21008c9f0;
  ::S21008C6 s21008c9f1;
  ::S20677C6_nt s21008c9f2;
  __tsi64 s21008c9f3;
  ::S20677C6_nt s21008c9f4;
  void *s21008c9f5;
  ::S20677C6_nt s21008c9f6;
  void *s21008c9f7[2];
  ::S20677C6_nt s21008c9f8;
  virtual void  v8(); // _ZN8S21008C92v8Ev
  ~S21008C9(); // tgen
  S21008C9(); // tgen
};
//SIG(-1 S21008C9) C1{ v1 FC2{} FC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} FC2 FL FC2 Fp FC2 Fp[2] FC2}


void  S21008C9 ::v8(){vfunc_called(this, "_ZN8S21008C92v8Ev");}
S21008C9 ::~S21008C9(){ note_dtor("S21008C9", this);} // tgen
S21008C9 ::S21008C9(){ note_ctor("S21008C9", this);} // tgen

static void Test_S21008C9()
{
  extern Class_Descriptor cd_S21008C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,47)];
    init_test(&cd_S21008C9, buf);
    S21008C9 *dp, &lv = *(dp=new (buf) S21008C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,184), "sizeof(S21008C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21008C9)");
    check_field_offset(lv, s21008c9f0, ABISELECT(8,4), "S21008C9.s21008c9f0");
    check_field_offset(lv, s21008c9f1, ABISELECT(16,8), "S21008C9.s21008c9f1");
    check_field_offset(lv, s21008c9f2, ABISELECT(208,148), "S21008C9.s21008c9f2");
    check_field_offset(lv, s21008c9f3, ABISELECT(216,152), "S21008C9.s21008c9f3");
    check_field_offset(lv, s21008c9f4, ABISELECT(224,160), "S21008C9.s21008c9f4");
    check_field_offset(lv, s21008c9f5, ABISELECT(232,164), "S21008C9.s21008c9f5");
    check_field_offset(lv, s21008c9f6, ABISELECT(240,168), "S21008C9.s21008c9f6");
    check_field_offset(lv, s21008c9f7, ABISELECT(248,172), "S21008C9.s21008c9f7");
    check_field_offset(lv, s21008c9f8, ABISELECT(264,180), "S21008C9.s21008c9f8");
    test_class_info(&lv, &cd_S21008C9);
    dp->~S21008C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21008C9(Test_S21008C9, "S21008C9", ABISELECT(272,184));

#else // __cplusplus

extern void _ZN8S21008C9C1Ev();
extern void _ZN8S21008C9D1Ev();
Name_Map name_map_S21008C9[] = {
  NSPAIR(_ZN8S21008C9C1Ev),
  NSPAIR(_ZN8S21008C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21008C9[];
extern void _ZN8S21008C92v8Ev();
static  VTBL_ENTRY vtc_S21008C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C9[0]),
  (VTBL_ENTRY)&_ZN8S21008C92v8Ev,
};
extern VTBL_ENTRY _ZTI8S21008C9[];
extern  VTBL_ENTRY _ZTV8S21008C9[];
Class_Descriptor cd_S21008C9 = {  "S21008C9", // class name
  0,0,//no base classes
  &(vtc_S21008C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,184), // object size
  NSPAIRA(_ZTI8S21008C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21008C9),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  S21008C2  : virtual S21008C3 , S21008C8 , S21008C9 {
  ::S21008C9 s21008c2f0;
  __tsi64 s21008c2f1:3;
  ::S20680C5 s21008c2f2[2];
  int s21008c2f3;
  long double s21008c2f4;
  __tsi64 s21008c2f5;
  long double s21008c2f6;
  virtual  ~S21008C2(); // _ZN8S21008C2D2Ev
  virtual void  v9(); // _ZN8S21008C22v9Ev
  S21008C2(); // tgen
};
//SIG(-1 S21008C2) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} VBC4{ VBC3 BC5{ VBC3 FD Fi FC3 FC3} v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} v5 v6 v7 FL FC6{} Fp Fc[2] FC3 Fl FC6} BC7{ BC3 FC3 Fi FD Fi FL Fl} BC8{ v8 FC6 FC5 FC6 FL FC6 Fp FC6 Fp[2] FC6} vd v1 FC8 FL:3 FC9{ BC10{ VBC3 BC11{ VBC3 FD Fi FC3 FC3} v10 v11 v12 Fs FL Fc Fi[2] FC11 Fp FL Fi FL Fi} VBC12{ VBC3 VBC11 v13 v14 Fi FC11 FL Fi Fp} BC11 VBC13{ v15 FC6 FC11 FC6 FL FC6 Fp FC6 Fp[2] FC6} VBC14{ BC11 v16 FL Fc[7] Fp Fi FC6 FC6 Fc[10]} v9 Fl FL FD FC6}[2] Fi FD FL FD}


 S21008C2 ::~S21008C2(){ note_dtor("S21008C2", this);}
void  S21008C2 ::v9(){vfunc_called(this, "_ZN8S21008C22v9Ev");}
S21008C2 ::S21008C2(){ note_ctor("S21008C2", this);} // tgen

static void Test_S21008C2()
{
  extern Class_Descriptor cd_S21008C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(272,754)];
    init_test(&cd_S21008C2, buf);
    S21008C2 *dp, &lv = *(dp=new (buf) S21008C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4336,3012), "sizeof(S21008C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21008C2)");
    check_base_class_offset(lv, (S20677C3*)(S21008C3*), ABISELECT(3864,2680), "S21008C2");
    check_base_class_offset(lv, (S20677C3*)(S21008C5*), ABISELECT(3864,2680), "S21008C2");
    check_base_class_offset(lv, (S20677C3*)(S21008C6*)(S21008C5*), ABISELECT(3864,2680), "S21008C2");
    check_base_class_offset(lv, (S21008C6*)(S21008C5*), ABISELECT(3920,2720), "S21008C2");
    check_base_class_offset(lv, (S21008C5*)(S21008C3*), ABISELECT(3920,2720), "S21008C2");
    check_base_class_offset(lv, (S21008C3*), ABISELECT(3760,2608), "S21008C2");
    check_base_class_offset(lv, (S20677C3*)(S21008C8*), ABISELECT(272,184), "S21008C2");
    check_base_class_offset(lv, (S21008C8*), ABISELECT(272,184), "S21008C2");
    check_base_class_offset(lv, (S21008C9*), 0, "S21008C2");
    check_field_offset(lv, s21008c2f0, ABISELECT(432,296), "S21008C2.s21008c2f0");
    set_bf_and_test(lv, s21008c2f1, ABISELECT(704,480), 0, 3, 1, "S21008C2");
    set_bf_and_test(lv, s21008c2f1, ABISELECT(704,480), 0, 3, hide_sll(1LL<<2), "S21008C2");
    check_field_offset(lv, s21008c2f2, ABISELECT(720,484), "S21008C2.s21008c2f2");
    check_field_offset(lv, s21008c2f3, ABISELECT(3696,2572), "S21008C2.s21008c2f3");
    check_field_offset(lv, s21008c2f4, ABISELECT(3712,2576), "S21008C2.s21008c2f4");
    check_field_offset(lv, s21008c2f5, ABISELECT(3728,2588), "S21008C2.s21008c2f5");
    check_field_offset(lv, s21008c2f6, ABISELECT(3744,2596), "S21008C2.s21008c2f6");
    test_class_info(&lv, &cd_S21008C2);
    dp->~S21008C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21008C2(Test_S21008C2, "S21008C2", ABISELECT(4336,3012));

#else // __cplusplus

extern void _ZN8S21008C2C1Ev();
extern void _ZN8S21008C2D2Ev();
Name_Map name_map_S21008C2[] = {
  NSPAIR(_ZN8S21008C2C1Ev),
  NSPAIR(_ZN8S21008C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S21008C6;
extern VTBL_ENTRY _ZTI8S21008C6[];
extern  VTBL_ENTRY _ZTV8S21008C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C6[];
extern Class_Descriptor cd_S21008C5;
extern VTBL_ENTRY _ZTI8S21008C5[];
extern  VTBL_ENTRY _ZTV8S21008C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C5[];
extern Class_Descriptor cd_S21008C3;
extern VTBL_ENTRY _ZTI8S21008C3[];
extern  VTBL_ENTRY _ZTV8S21008C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C3[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S21008C8;
extern VTBL_ENTRY _ZTI8S21008C8[];
extern Class_Descriptor cd_S21008C9;
extern VTBL_ENTRY _ZTI8S21008C9[];
extern  VTBL_ENTRY _ZTV8S21008C9[];
static Base_Class bases_S21008C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(3864,2680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S21008C6,    ABISELECT(3920,2720), //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_S21008C5,    ABISELECT(3920,2720), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21008C3,    ABISELECT(3760,2608), //bcp->offset
    9, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C3,    ABISELECT(272,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_S21008C8,    ABISELECT(272,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
    -1, //immediately_derived
  1, 0},
  {&cd_S21008C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S21008C2[];
extern void _ZN8S21008C92v8Ev();
extern void _ZN8S21008C2D1Ev();
extern void _ZN8S21008C2D0Ev();
extern void _ZN8S21008C22v9Ev();
extern void _ZN8S21008C32v5Ev();
extern void _ZN8S21008C32v6Ev();
extern void _ZN8S21008C32v7Ev();
extern void _ZN8S21008C52v2Ev();
extern void _ZN8S21008C52v3Ev();
extern void _ZN8S21008C52v4Ev();
static  VTBL_ENTRY vtc_S21008C2[] = {
  ABISELECT(3920,2720),
  ABISELECT(3864,2680),
  ABISELECT(3760,2608),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C2[0]),
  (VTBL_ENTRY)&_ZN8S21008C92v8Ev,
  (VTBL_ENTRY)&_ZN8S21008C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21008C2D0Ev,
  (VTBL_ENTRY)&_ZN8S21008C22v9Ev,
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(-3760,-2608),
  (VTBL_ENTRY)&(_ZTI8S21008C2[0]),
  (VTBL_ENTRY)&_ZN8S21008C32v5Ev,
  (VTBL_ENTRY)&_ZN8S21008C32v6Ev,
  (VTBL_ENTRY)&_ZN8S21008C32v7Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3920,-2720),
  (VTBL_ENTRY)&(_ZTI8S21008C2[0]),
  (VTBL_ENTRY)&_ZN8S21008C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S21008C2[];
extern void _ZN8S21008C32v5Ev();
extern void _ZN8S21008C32v6Ev();
extern void _ZN8S21008C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S21008C3__8S21008C2[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C3[0]),
  (VTBL_ENTRY)&_ZN8S21008C32v5Ev,
  (VTBL_ENTRY)&_ZN8S21008C32v6Ev,
  (VTBL_ENTRY)&_ZN8S21008C32v7Ev,
};
extern void _ZN8S21008C52v2Ev();
extern void _ZN8S21008C52v3Ev();
extern void _ZN8S21008C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21008C5__8S21008C3__8S21008C2[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S21008C3[0]),
  (VTBL_ENTRY)&_ZN8S21008C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v4Ev,
};
extern void _ZN8S21008C52v2Ev();
extern void _ZN8S21008C52v3Ev();
extern void _ZN8S21008C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21008C5__8S21008C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C5[0]),
  (VTBL_ENTRY)&_ZN8S21008C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S21008C68S21008C5__8S21008C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C6[0]),
};
static  VTT_ENTRY vtt_S21008C2[] = {
  {&(_ZTV8S21008C2[5]),  5,28},
  {&(_ZTV8S21008C2[16]),  16,28},
  {&(_ZTV8S21008C2[25]),  25,28},
  {&(_tg__ZTV8S21008C3__8S21008C2[4]),  4,7},
  {&(_tg__ZTV8S21008C5__8S21008C3__8S21008C2[6]),  6,9},
  {&(_tg__ZTV8S21008C5__8S21008C2[3]),  3,6},
  {&(_tg__ZTV8S21008C68S21008C5__8S21008C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21008C2[];
extern  VTBL_ENTRY _ZTV8S21008C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C2[];
Class_Descriptor cd_S21008C2 = {  "S21008C2", // class name
  bases_S21008C2, 7,
  &(vtc_S21008C2[0]), // expected_vtbl_contents
  &(vtt_S21008C2[0]), // expected_vtt_contents
  ABISELECT(4336,3012), // object size
  NSPAIRA(_ZTI8S21008C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21008C2),28, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21008C2),7, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21008C1  : virtual S21008C2 {
  long s21008c1f0[5];
  ::S21008C5 s21008c1f1;
  int s21008c1f2;
  ::S20677C17 s21008c1f3;
  virtual  ~S21008C1(); // _ZN8S21008C1D2Ev
  virtual void  v1(); // _ZN8S21008C12v1Ev
  S21008C1(); // tgen
};
//SIG(1 S21008C1) C1{ VBC2{ VBC3{ VBC4{ m Fp FL[4] Fs} VBC5{ VBC4 BC6{ VBC4 FD Fi FC4 FC4} v2 v3 v4 Fs FL Fc Fi[2] FC6 Fp FL Fi FL Fi} v5 v6 v7 FL FC7{} Fp Fc[2] FC4 Fl FC7} BC8{ BC4 FC4 Fi FD Fi FL Fl} BC9{ v8 FC7 FC6 FC7 FL FC7 Fp FC7 Fp[2] FC7} vd v9 FC9 FL:3 FC10{ BC11{ VBC4 BC12{ VBC4 FD Fi FC4 FC4} v20 v21 v22 Fs FL Fc Fi[2] FC12 Fp FL Fi FL Fi} VBC13{ VBC4 VBC12 v23 v24 Fi FC12 FL Fi Fp} BC12 VBC14{ v25 FC7 FC12 FC7 FL FC7 Fp FC7 Fp[2] FC7} VBC15{ BC12 v26 FL Fc[7] Fp Fi FC7 FC7 Fc[10]} v19 Fl FL FD FC7}[2] Fi FD FL FD} vd v1 Fl[5] FC5 Fi FC16{ VBC17{ v11 FC7 FC18{ VBC4 FD Fi FC4 FC4} FC7 FL FC7 Fp FC7 Fp[2] FC7} v10 FC19{ BC20{ VBC4 BC18 v13 v14 v15 Fs FL Fc Fi[2] FC18 Fp FL Fi FL Fi} VBC21{ VBC4 VBC18 v16 v17 Fi FC18 FL Fi Fp} BC18 VBC17 VBC22{ BC18 v18 FL Fc[7] Fp Fi FC7 FC7 Fc[10]} v12 Fl FL FD FC7} FC7 Fl Fi[2]}}


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

static void Test_S21008C1()
{
  extern Class_Descriptor cd_S21008C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(418,1156)];
    init_test(&cd_S21008C1, buf);
    S21008C1 *dp, &lv = *(dp=new (buf) S21008C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6672,4620), "sizeof(S21008C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21008C1)");
    check_base_class_offset(lv, (S20677C3*)(S21008C3*), ABISELECT(6200,4288), "S21008C1");
    check_base_class_offset(lv, (S20677C3*)(S21008C5*), ABISELECT(6200,4288), "S21008C1");
    check_base_class_offset(lv, (S20677C3*)(S21008C6*)(S21008C5*), ABISELECT(6200,4288), "S21008C1");
    check_base_class_offset(lv, (S21008C6*)(S21008C5*), ABISELECT(6256,4328), "S21008C1");
    check_base_class_offset(lv, (S21008C5*)(S21008C3*), ABISELECT(6256,4328), "S21008C1");
    check_base_class_offset(lv, (S21008C3*)(S21008C2*), ABISELECT(6096,4216), "S21008C1");
    check_base_class_offset(lv, (S20677C3*)(S21008C8*)(S21008C2*), ABISELECT(2608,1792), "S21008C1");
    check_base_class_offset(lv, (S21008C8*)(S21008C2*), ABISELECT(2608,1792), "S21008C1");
    check_base_class_offset(lv, (S21008C9*)(S21008C2*), ABISELECT(2336,1608), "S21008C1");
    check_base_class_offset(lv, (S21008C2*), ABISELECT(2336,1608), "S21008C1");
    check_field_offset(lv, s21008c1f0, ABISELECT(8,4), "S21008C1.s21008c1f0");
    check_field_offset(lv, s21008c1f1, ABISELECT(48,24), "S21008C1.s21008c1f1");
    check_field_offset(lv, s21008c1f2, ABISELECT(512,356), "S21008C1.s21008c1f2");
    check_field_offset(lv, s21008c1f3, ABISELECT(528,360), "S21008C1.s21008c1f3");
    test_class_info(&lv, &cd_S21008C1);
    dp->~S21008C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21008C1(Test_S21008C1, "S21008C1", ABISELECT(6672,4620));

#else // __cplusplus

extern void _ZN8S21008C1C1Ev();
extern void _ZN8S21008C1D2Ev();
Name_Map name_map_S21008C1[] = {
  NSPAIR(_ZN8S21008C1C1Ev),
  NSPAIR(_ZN8S21008C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S21008C6;
extern VTBL_ENTRY _ZTI8S21008C6[];
extern  VTBL_ENTRY _ZTV8S21008C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C6[];
extern Class_Descriptor cd_S21008C5;
extern VTBL_ENTRY _ZTI8S21008C5[];
extern  VTBL_ENTRY _ZTV8S21008C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C5[];
extern Class_Descriptor cd_S21008C3;
extern VTBL_ENTRY _ZTI8S21008C3[];
extern  VTBL_ENTRY _ZTV8S21008C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C3[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S21008C8;
extern VTBL_ENTRY _ZTI8S21008C8[];
extern Class_Descriptor cd_S21008C9;
extern VTBL_ENTRY _ZTI8S21008C9[];
extern  VTBL_ENTRY _ZTV8S21008C9[];
extern Class_Descriptor cd_S21008C2;
extern VTBL_ENTRY _ZTI8S21008C2[];
extern  VTBL_ENTRY _ZTV8S21008C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C2[];
static Base_Class bases_S21008C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(6200,4288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S21008C6,    ABISELECT(6256,4328), //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_S21008C5,    ABISELECT(6256,4328), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21008C3,    ABISELECT(6096,4216), //bcp->offset
    21, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20677C3,    ABISELECT(2608,1792), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21008C8,    ABISELECT(2608,1792), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21008C9,    ABISELECT(2336,1608), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S21008C2,    ABISELECT(2336,1608), //bcp->offset
    9, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21008C1[];
extern void _ZN8S21008C1D1Ev();
extern void _ZN8S21008C1D0Ev();
extern void _ZN8S21008C12v1Ev();
extern void _ZN8S21008C92v8Ev();
extern void ABISELECT(_ZTv0_n56_N8S21008C1D1Ev,_ZTv0_n28_N8S21008C1D1Ev)();
extern void ABISELECT(_ZThn2336_N8S21008C1D1Ev,_ZThn1608_N8S21008C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S21008C1D0Ev,_ZTv0_n28_N8S21008C1D0Ev)();
extern void ABISELECT(_ZThn2336_N8S21008C1D0Ev,_ZThn1608_N8S21008C1D0Ev)() __attribute__((weak));
extern void _ZN8S21008C22v9Ev();
extern void _ZN8S21008C32v5Ev();
extern void _ZN8S21008C32v6Ev();
extern void _ZN8S21008C32v7Ev();
extern void _ZN8S21008C52v2Ev();
extern void _ZN8S21008C52v3Ev();
extern void _ZN8S21008C52v4Ev();
static  VTBL_ENTRY vtc_S21008C1[] = {
  ABISELECT(6256,4328),
  ABISELECT(6200,4288),
  ABISELECT(6096,4216),
  ABISELECT(2336,1608),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C1[0]),
  (VTBL_ENTRY)&_ZN8S21008C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21008C1D0Ev,
  (VTBL_ENTRY)&_ZN8S21008C12v1Ev,
  0,
  ABISELECT(-2336,-1608),
  0,
  ABISELECT(3920,2720),
  ABISELECT(3864,2680),
  ABISELECT(3760,2608),
  ABISELECT(-2336,-1608),
  (VTBL_ENTRY)&(_ZTI8S21008C1[0]),
  (VTBL_ENTRY)&_ZN8S21008C92v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21008C1D1Ev,_ZTv0_n28_N8S21008C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21008C1D0Ev,_ZTv0_n28_N8S21008C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21008C22v9Ev,
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(-6096,-4216),
  (VTBL_ENTRY)&(_ZTI8S21008C1[0]),
  (VTBL_ENTRY)&_ZN8S21008C32v5Ev,
  (VTBL_ENTRY)&_ZN8S21008C32v6Ev,
  (VTBL_ENTRY)&_ZN8S21008C32v7Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-6256,-4328),
  (VTBL_ENTRY)&(_ZTI8S21008C1[0]),
  (VTBL_ENTRY)&_ZN8S21008C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S21008C1[];
extern void _ZN8S21008C92v8Ev();
extern void _ZN8S21008C2D1Ev();
extern void _ZN8S21008C2D0Ev();
extern void _ZN8S21008C22v9Ev();
static  VTBL_ENTRY _tg__ZTV8S21008C2__8S21008C1[] = {
  ABISELECT(3920,2720),
  ABISELECT(3864,2680),
  ABISELECT(3760,2608),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C2[0]),
  (VTBL_ENTRY)&_ZN8S21008C92v8Ev,
  (VTBL_ENTRY)&_ZN8S21008C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21008C2D0Ev,
  (VTBL_ENTRY)&_ZN8S21008C22v9Ev,
};
extern void _ZN8S21008C32v5Ev();
extern void _ZN8S21008C32v6Ev();
extern void _ZN8S21008C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S21008C3__8S21008C2__8S21008C1[] = {
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(-3760,-2608),
  (VTBL_ENTRY)&(_ZTI8S21008C2[0]),
  (VTBL_ENTRY)&_ZN8S21008C32v5Ev,
  (VTBL_ENTRY)&_ZN8S21008C32v6Ev,
  (VTBL_ENTRY)&_ZN8S21008C32v7Ev,
};
extern void _ZN8S21008C52v2Ev();
extern void _ZN8S21008C52v3Ev();
extern void _ZN8S21008C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21008C5__8S21008C2__8S21008C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3920,-2720),
  (VTBL_ENTRY)&(_ZTI8S21008C2[0]),
  (VTBL_ENTRY)&_ZN8S21008C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v4Ev,
};
extern void _ZN8S21008C32v5Ev();
extern void _ZN8S21008C32v6Ev();
extern void _ZN8S21008C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S21008C3__8S21008C1[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C3[0]),
  (VTBL_ENTRY)&_ZN8S21008C32v5Ev,
  (VTBL_ENTRY)&_ZN8S21008C32v6Ev,
  (VTBL_ENTRY)&_ZN8S21008C32v7Ev,
};
extern void _ZN8S21008C52v2Ev();
extern void _ZN8S21008C52v3Ev();
extern void _ZN8S21008C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21008C5__8S21008C3__8S21008C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S21008C3[0]),
  (VTBL_ENTRY)&_ZN8S21008C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v4Ev,
};
extern void _ZN8S21008C52v2Ev();
extern void _ZN8S21008C52v3Ev();
extern void _ZN8S21008C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21008C5__8S21008C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C5[0]),
  (VTBL_ENTRY)&_ZN8S21008C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S21008C68S21008C5__8S21008C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C6[0]),
};
static  VTT_ENTRY vtt_S21008C1[] = {
  {&(_ZTV8S21008C1[6]),  6,40},
  {&(_ZTV8S21008C1[17]),  17,40},
  {&(_ZTV8S21008C1[28]),  28,40},
  {&(_ZTV8S21008C1[37]),  37,40},
  {&(_tg__ZTV8S21008C2__8S21008C1[5]),  5,9},
  {&(_tg__ZTV8S21008C3__8S21008C2__8S21008C1[7]),  7,10},
  {&(_tg__ZTV8S21008C5__8S21008C2__8S21008C1[6]),  6,9},
  {&(_tg__ZTV8S21008C3__8S21008C1[4]),  4,7},
  {&(_tg__ZTV8S21008C5__8S21008C3__8S21008C1[6]),  6,9},
  {&(_tg__ZTV8S21008C5__8S21008C1[3]),  3,6},
  {&(_tg__ZTV8S21008C68S21008C5__8S21008C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21008C1[];
extern  VTBL_ENTRY _ZTV8S21008C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C1[];
static VTBL_ENTRY alt_thunk_names1[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21008C1D0Ev,_ZTv0_n28_N8S21008C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2336_N8S21008C1D0Ev,_ZThn1608_N8S21008C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21008C1D1Ev,_ZTv0_n28_N8S21008C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2336_N8S21008C1D1Ev,_ZThn1608_N8S21008C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21008C1 = {  "S21008C1", // class name
  bases_S21008C1, 8,
  &(vtc_S21008C1[0]), // expected_vtbl_contents
  &(vtt_S21008C1[0]), // expected_vtt_contents
  ABISELECT(6672,4620), // object size
  NSPAIRA(_ZTI8S21008C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21008C1),40, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21008C1),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names1,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21007C6  : virtual S20677C3 {
  long double s21007c6f0;
  int s21007c6f1;
  ::S20677C3 s21007c6f2;
  ::S20677C3 s21007c6f3;
  ~S21007C6(); // tgen
  S21007C6(); // tgen
};
//SIG(-1 S21007C6) C1{ VBC2{ m Fp FL[4] Fs} FD Fi FC2 FC2}


S21007C6 ::~S21007C6(){ note_dtor("S21007C6", this);} // tgen
S21007C6 ::S21007C6(){ note_ctor("S21007C6", this);} // tgen

static void Test_S21007C6()
{
  extern Class_Descriptor cd_S21007C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,36)];
    init_test(&cd_S21007C6, buf);
    S21007C6 *dp, &lv = *(dp=new (buf) S21007C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S21007C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21007C6)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(136,100), "S21007C6");
    check_field_offset(lv, s21007c6f0, ABISELECT(16,4), "S21007C6.s21007c6f0");
    check_field_offset(lv, s21007c6f1, ABISELECT(32,16), "S21007C6.s21007c6f1");
    check_field_offset(lv, s21007c6f2, ABISELECT(40,20), "S21007C6.s21007c6f2");
    check_field_offset(lv, s21007c6f3, ABISELECT(88,60), "S21007C6.s21007c6f3");
    test_class_info(&lv, &cd_S21007C6);
    dp->~S21007C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21007C6(Test_S21007C6, "S21007C6", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN8S21007C6C1Ev();
extern void _ZN8S21007C6D1Ev();
Name_Map name_map_S21007C6[] = {
  NSPAIR(_ZN8S21007C6C1Ev),
  NSPAIR(_ZN8S21007C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S21007C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(136,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21007C6[];
static  VTBL_ENTRY vtc_S21007C6[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C6[0]),
};
extern VTBL_ENTRY _ZTV8S21007C6[];
static  VTT_ENTRY vtt_S21007C6[] = {
  {&(_ZTV8S21007C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21007C6[];
extern  VTBL_ENTRY _ZTV8S21007C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C6[];
Class_Descriptor cd_S21007C6 = {  "S21007C6", // class name
  bases_S21007C6, 1,
  &(vtc_S21007C6[0]), // expected_vtbl_contents
  &(vtt_S21007C6[0]), // expected_vtt_contents
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI8S21007C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21007C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21007C6),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  S21007C5  : virtual S20677C3 , S21007C6 {
  short s21007c5f0;
  __tsi64 s21007c5f1;
  char s21007c5f2;
  int s21007c5f3[2];
  ::S21007C6 s21007c5f4;
  void *s21007c5f5;
  __tsi64 s21007c5f6;
  int s21007c5f7;
  __tsi64 s21007c5f8;
  int s21007c5f9;
  virtual void  v2(); // _ZN8S21007C52v2Ev
  virtual void  v3(); // _ZN8S21007C52v3Ev
  virtual void  v4(); // _ZN8S21007C52v4Ev
  ~S21007C5(); // tgen
  S21007C5(); // tgen
};
//SIG(-1 S21007C5) C1{ VBC2{ m Fp FL[4] Fs} BC3{ VBC2 FD Fi FC2 FC2} v1 v2 v3 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi}


void  S21007C5 ::v2(){vfunc_called(this, "_ZN8S21007C52v2Ev");}
void  S21007C5 ::v3(){vfunc_called(this, "_ZN8S21007C52v3Ev");}
void  S21007C5 ::v4(){vfunc_called(this, "_ZN8S21007C52v4Ev");}
S21007C5 ::~S21007C5(){ note_dtor("S21007C5", this);} // tgen
S21007C5 ::S21007C5(){ note_ctor("S21007C5", this);} // tgen

static void Test_S21007C5()
{
  extern Class_Descriptor cd_S21007C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,84)];
    init_test(&cd_S21007C5, buf);
    S21007C5 *dp, &lv = *(dp=new (buf) S21007C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,332), "sizeof(S21007C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21007C5)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(408,292), "S21007C5");
    check_base_class_offset(lv, (S20677C3*)(S21007C6*), ABISELECT(408,292), "S21007C5");
    check_base_class_offset(lv, (S21007C6*), 0, "S21007C5");
    check_field_offset(lv, s21007c5f0, ABISELECT(136,100), "S21007C5.s21007c5f0");
    check_field_offset(lv, s21007c5f1, ABISELECT(144,104), "S21007C5.s21007c5f1");
    check_field_offset(lv, s21007c5f2, ABISELECT(152,112), "S21007C5.s21007c5f2");
    check_field_offset(lv, s21007c5f3, ABISELECT(156,116), "S21007C5.s21007c5f3");
    check_field_offset(lv, s21007c5f4, ABISELECT(176,124), "S21007C5.s21007c5f4");
    check_field_offset(lv, s21007c5f5, ABISELECT(368,264), "S21007C5.s21007c5f5");
    check_field_offset(lv, s21007c5f6, ABISELECT(376,268), "S21007C5.s21007c5f6");
    check_field_offset(lv, s21007c5f7, ABISELECT(384,276), "S21007C5.s21007c5f7");
    check_field_offset(lv, s21007c5f8, ABISELECT(392,280), "S21007C5.s21007c5f8");
    check_field_offset(lv, s21007c5f9, ABISELECT(400,288), "S21007C5.s21007c5f9");
    test_class_info(&lv, &cd_S21007C5);
    dp->~S21007C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21007C5(Test_S21007C5, "S21007C5", ABISELECT(464,332));

#else // __cplusplus

extern void _ZN8S21007C5C1Ev();
extern void _ZN8S21007C5D1Ev();
Name_Map name_map_S21007C5[] = {
  NSPAIR(_ZN8S21007C5C1Ev),
  NSPAIR(_ZN8S21007C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S21007C6;
extern VTBL_ENTRY _ZTI8S21007C6[];
extern  VTBL_ENTRY _ZTV8S21007C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C6[];
static Base_Class bases_S21007C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(408,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
    -1, //immediately_derived
  1, 1},
  {&cd_S21007C6,    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 _ZTI8S21007C5[];
extern void _ZN8S21007C52v2Ev();
extern void _ZN8S21007C52v3Ev();
extern void _ZN8S21007C52v4Ev();
static  VTBL_ENTRY vtc_S21007C5[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C5[0]),
  (VTBL_ENTRY)&_ZN8S21007C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S21007C5[];
static  VTBL_ENTRY _tg__ZTV8S21007C6__8S21007C5[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C6[0]),
};
static  VTT_ENTRY vtt_S21007C5[] = {
  {&(_ZTV8S21007C5[3]),  3,6},
  {&(_tg__ZTV8S21007C6__8S21007C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21007C5[];
extern  VTBL_ENTRY _ZTV8S21007C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C5[];
Class_Descriptor cd_S21007C5 = {  "S21007C5", // class name
  bases_S21007C5, 2,
  &(vtc_S21007C5[0]), // expected_vtbl_contents
  &(vtt_S21007C5[0]), // expected_vtt_contents
  ABISELECT(464,332), // object size
  NSPAIRA(_ZTI8S21007C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21007C5),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21007C5),2, //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  S21007C3  : virtual S20677C3 , virtual S21007C5 {
  __tsi64 s21007c3f0;
  ::S20677C6_nt s21007c3f1;
  void *s21007c3f2;
  char s21007c3f3[2];
  ::S20677C3 s21007c3f4;
  long s21007c3f5;
  ::S20677C6_nt s21007c3f6;
  virtual void  v5(); // _ZN8S21007C32v5Ev
  virtual void  v6(); // _ZN8S21007C32v6Ev
  virtual void  v7(); // _ZN8S21007C32v7Ev
  ~S21007C3(); // tgen
  S21007C3(); // tgen
};
//SIG(-1 S21007C3) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 BC4{ VBC2 FD Fi FC2 FC2} v4 v5 v6 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} v1 v2 v3 FL FC5{} Fp Fc[2] FC2 Fl FC5}


void  S21007C3 ::v5(){vfunc_called(this, "_ZN8S21007C32v5Ev");}
void  S21007C3 ::v6(){vfunc_called(this, "_ZN8S21007C32v6Ev");}
void  S21007C3 ::v7(){vfunc_called(this, "_ZN8S21007C32v7Ev");}
S21007C3 ::~S21007C3(){ note_dtor("S21007C3", this);} // tgen
S21007C3 ::S21007C3(){ note_ctor("S21007C3", this);} // tgen

static void Test_S21007C3()
{
  extern Class_Descriptor cd_S21007C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,102)];
    init_test(&cd_S21007C3, buf);
    S21007C3 *dp, &lv = *(dp=new (buf) S21007C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,404), "sizeof(S21007C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21007C3)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(104,72), "S21007C3");
    check_base_class_offset(lv, (S20677C3*)(S21007C5*), ABISELECT(104,72), "S21007C3");
    check_base_class_offset(lv, (S20677C3*)(S21007C6*)(S21007C5*), ABISELECT(104,72), "S21007C3");
    check_base_class_offset(lv, (S21007C6*)(S21007C5*), ABISELECT(160,112), "S21007C3");
    check_base_class_offset(lv, (S21007C5*), ABISELECT(160,112), "S21007C3");
    check_field_offset(lv, s21007c3f0, ABISELECT(8,4), "S21007C3.s21007c3f0");
    check_field_offset(lv, s21007c3f1, ABISELECT(16,12), "S21007C3.s21007c3f1");
    check_field_offset(lv, s21007c3f2, ABISELECT(24,16), "S21007C3.s21007c3f2");
    check_field_offset(lv, s21007c3f3, ABISELECT(32,20), "S21007C3.s21007c3f3");
    check_field_offset(lv, s21007c3f4, ABISELECT(40,24), "S21007C3.s21007c3f4");
    check_field_offset(lv, s21007c3f5, ABISELECT(88,64), "S21007C3.s21007c3f5");
    check_field_offset(lv, s21007c3f6, ABISELECT(96,68), "S21007C3.s21007c3f6");
    test_class_info(&lv, &cd_S21007C3);
    dp->~S21007C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21007C3(Test_S21007C3, "S21007C3", ABISELECT(576,404));

#else // __cplusplus

extern void _ZN8S21007C3C1Ev();
extern void _ZN8S21007C3D1Ev();
Name_Map name_map_S21007C3[] = {
  NSPAIR(_ZN8S21007C3C1Ev),
  NSPAIR(_ZN8S21007C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S21007C6;
extern VTBL_ENTRY _ZTI8S21007C6[];
extern  VTBL_ENTRY _ZTV8S21007C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C6[];
extern Class_Descriptor cd_S21007C5;
extern VTBL_ENTRY _ZTI8S21007C5[];
extern  VTBL_ENTRY _ZTV8S21007C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C5[];
static Base_Class bases_S21007C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(104,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
    -1, //immediately_derived
  1, 1},
  {&cd_S21007C6,    ABISELECT(160,112), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21007C5,    ABISELECT(160,112), //bcp->offset
    7, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21007C3[];
extern void _ZN8S21007C32v5Ev();
extern void _ZN8S21007C32v6Ev();
extern void _ZN8S21007C32v7Ev();
extern void _ZN8S21007C52v2Ev();
extern void _ZN8S21007C52v3Ev();
extern void _ZN8S21007C52v4Ev();
static  VTBL_ENTRY vtc_S21007C3[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C3[0]),
  (VTBL_ENTRY)&_ZN8S21007C32v5Ev,
  (VTBL_ENTRY)&_ZN8S21007C32v6Ev,
  (VTBL_ENTRY)&_ZN8S21007C32v7Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S21007C3[0]),
  (VTBL_ENTRY)&_ZN8S21007C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S21007C3[];
extern void _ZN8S21007C52v2Ev();
extern void _ZN8S21007C52v3Ev();
extern void _ZN8S21007C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21007C5__8S21007C3[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C5[0]),
  (VTBL_ENTRY)&_ZN8S21007C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S21007C68S21007C5__8S21007C3[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C6[0]),
};
static  VTT_ENTRY vtt_S21007C3[] = {
  {&(_ZTV8S21007C3[4]),  4,16},
  {&(_ZTV8S21007C3[13]),  13,16},
  {&(_tg__ZTV8S21007C5__8S21007C3[3]),  3,6},
  {&(_tg__ZTV8S21007C68S21007C5__8S21007C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21007C3[];
extern  VTBL_ENTRY _ZTV8S21007C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C3[];
Class_Descriptor cd_S21007C3 = {  "S21007C3", // class name
  bases_S21007C3, 3,
  &(vtc_S21007C3[0]), // expected_vtbl_contents
  &(vtt_S21007C3[0]), // expected_vtt_contents
  ABISELECT(576,404), // object size
  NSPAIRA(_ZTI8S21007C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21007C3),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21007C3),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  S21007C8  : S20677C3 {
  ::S20677C3 s21007c8f0;
  int s21007c8f1;
  long double s21007c8f2;
  int s21007c8f3;
  __tsi64 s21007c8f4;
  long s21007c8f5;
};
//SIG(-1 S21007C8) C1{ BC2{ m Fp FL[4] Fs} FC2 Fi FD Fi FL Fl}



static void Test_S21007C8()
{
  extern Class_Descriptor cd_S21007C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S21007C8, buf);
    S21007C8 &lv = *(new (buf) S21007C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S21007C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21007C8)");
    check_base_class_offset(lv, (S20677C3*), 0, "S21007C8");
    check_field_offset(lv, s21007c8f0, ABISELECT(48,40), "S21007C8.s21007c8f0");
    check_field_offset(lv, s21007c8f1, ABISELECT(96,80), "S21007C8.s21007c8f1");
    check_field_offset(lv, s21007c8f2, ABISELECT(112,84), "S21007C8.s21007c8f2");
    check_field_offset(lv, s21007c8f3, ABISELECT(128,96), "S21007C8.s21007c8f3");
    check_field_offset(lv, s21007c8f4, ABISELECT(136,100), "S21007C8.s21007c8f4");
    check_field_offset(lv, s21007c8f5, ABISELECT(144,108), "S21007C8.s21007c8f5");
    test_class_info(&lv, &cd_S21007C8);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21007C8(Test_S21007C8, "S21007C8", ABISELECT(160,112));

#else // __cplusplus

extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S21007C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21007C8[];
Class_Descriptor cd_S21007C8 = {  "S21007C8", // class name
  bases_S21007C8, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI8S21007C8),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  S21007C9  {
  ::S20677C6_nt s21007c9f0;
  ::S21007C6 s21007c9f1;
  ::S20677C6_nt s21007c9f2;
  __tsi64 s21007c9f3;
  ::S20677C6_nt s21007c9f4;
  void *s21007c9f5;
  ::S20677C6_nt s21007c9f6;
  void *s21007c9f7[2];
  ::S20677C6_nt s21007c9f8;
  virtual void  v8(); // _ZN8S21007C92v8Ev
  ~S21007C9(); // tgen
  S21007C9(); // tgen
};
//SIG(-1 S21007C9) C1{ v1 FC2{} FC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} FC2 FL FC2 Fp FC2 Fp[2] FC2}


void  S21007C9 ::v8(){vfunc_called(this, "_ZN8S21007C92v8Ev");}
S21007C9 ::~S21007C9(){ note_dtor("S21007C9", this);} // tgen
S21007C9 ::S21007C9(){ note_ctor("S21007C9", this);} // tgen

static void Test_S21007C9()
{
  extern Class_Descriptor cd_S21007C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,47)];
    init_test(&cd_S21007C9, buf);
    S21007C9 *dp, &lv = *(dp=new (buf) S21007C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,184), "sizeof(S21007C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21007C9)");
    check_field_offset(lv, s21007c9f0, ABISELECT(8,4), "S21007C9.s21007c9f0");
    check_field_offset(lv, s21007c9f1, ABISELECT(16,8), "S21007C9.s21007c9f1");
    check_field_offset(lv, s21007c9f2, ABISELECT(208,148), "S21007C9.s21007c9f2");
    check_field_offset(lv, s21007c9f3, ABISELECT(216,152), "S21007C9.s21007c9f3");
    check_field_offset(lv, s21007c9f4, ABISELECT(224,160), "S21007C9.s21007c9f4");
    check_field_offset(lv, s21007c9f5, ABISELECT(232,164), "S21007C9.s21007c9f5");
    check_field_offset(lv, s21007c9f6, ABISELECT(240,168), "S21007C9.s21007c9f6");
    check_field_offset(lv, s21007c9f7, ABISELECT(248,172), "S21007C9.s21007c9f7");
    check_field_offset(lv, s21007c9f8, ABISELECT(264,180), "S21007C9.s21007c9f8");
    test_class_info(&lv, &cd_S21007C9);
    dp->~S21007C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21007C9(Test_S21007C9, "S21007C9", ABISELECT(272,184));

#else // __cplusplus

extern void _ZN8S21007C9C1Ev();
extern void _ZN8S21007C9D1Ev();
Name_Map name_map_S21007C9[] = {
  NSPAIR(_ZN8S21007C9C1Ev),
  NSPAIR(_ZN8S21007C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21007C9[];
extern void _ZN8S21007C92v8Ev();
static  VTBL_ENTRY vtc_S21007C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C9[0]),
  (VTBL_ENTRY)&_ZN8S21007C92v8Ev,
};
extern VTBL_ENTRY _ZTI8S21007C9[];
extern  VTBL_ENTRY _ZTV8S21007C9[];
Class_Descriptor cd_S21007C9 = {  "S21007C9", // class name
  0,0,//no base classes
  &(vtc_S21007C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,184), // object size
  NSPAIRA(_ZTI8S21007C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21007C9),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  S21007C2  : virtual S21007C3 , S21007C8 , S21007C9 {
  ::S21007C9 s21007c2f0;
  int s21007c2f1:3;
  ::S20680C5 s21007c2f2[2];
  int s21007c2f3;
  long double s21007c2f4;
  __tsi64 s21007c2f5;
  long double s21007c2f6;
  virtual  ~S21007C2(); // _ZN8S21007C2D2Ev
  virtual void  v9(); // _ZN8S21007C22v9Ev
  S21007C2(); // tgen
};
//SIG(-1 S21007C2) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} VBC4{ VBC3 BC5{ VBC3 FD Fi FC3 FC3} v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} v5 v6 v7 FL FC6{} Fp Fc[2] FC3 Fl FC6} BC7{ BC3 FC3 Fi FD Fi FL Fl} BC8{ v8 FC6 FC5 FC6 FL FC6 Fp FC6 Fp[2] FC6} vd v1 FC8 Fi:3 FC9{ BC10{ VBC3 BC11{ VBC3 FD Fi FC3 FC3} v10 v11 v12 Fs FL Fc Fi[2] FC11 Fp FL Fi FL Fi} VBC12{ VBC3 VBC11 v13 v14 Fi FC11 FL Fi Fp} BC11 VBC13{ v15 FC6 FC11 FC6 FL FC6 Fp FC6 Fp[2] FC6} VBC14{ BC11 v16 FL Fc[7] Fp Fi FC6 FC6 Fc[10]} v9 Fl FL FD FC6}[2] Fi FD FL FD}


 S21007C2 ::~S21007C2(){ note_dtor("S21007C2", this);}
void  S21007C2 ::v9(){vfunc_called(this, "_ZN8S21007C22v9Ev");}
S21007C2 ::S21007C2(){ note_ctor("S21007C2", this);} // tgen

static void Test_S21007C2()
{
  extern Class_Descriptor cd_S21007C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(272,754)];
    init_test(&cd_S21007C2, buf);
    S21007C2 *dp, &lv = *(dp=new (buf) S21007C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4336,3012), "sizeof(S21007C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21007C2)");
    check_base_class_offset(lv, (S20677C3*)(S21007C3*), ABISELECT(3864,2680), "S21007C2");
    check_base_class_offset(lv, (S20677C3*)(S21007C5*), ABISELECT(3864,2680), "S21007C2");
    check_base_class_offset(lv, (S20677C3*)(S21007C6*)(S21007C5*), ABISELECT(3864,2680), "S21007C2");
    check_base_class_offset(lv, (S21007C6*)(S21007C5*), ABISELECT(3920,2720), "S21007C2");
    check_base_class_offset(lv, (S21007C5*)(S21007C3*), ABISELECT(3920,2720), "S21007C2");
    check_base_class_offset(lv, (S21007C3*), ABISELECT(3760,2608), "S21007C2");
    check_base_class_offset(lv, (S20677C3*)(S21007C8*), ABISELECT(272,184), "S21007C2");
    check_base_class_offset(lv, (S21007C8*), ABISELECT(272,184), "S21007C2");
    check_base_class_offset(lv, (S21007C9*), 0, "S21007C2");
    check_field_offset(lv, s21007c2f0, ABISELECT(432,296), "S21007C2.s21007c2f0");
    set_bf_and_test(lv, s21007c2f1, ABISELECT(704,480), 0, 3, 1, "S21007C2");
    set_bf_and_test(lv, s21007c2f1, ABISELECT(704,480), 0, 3, hide_sll(1LL<<2), "S21007C2");
    check_field_offset(lv, s21007c2f2, ABISELECT(720,484), "S21007C2.s21007c2f2");
    check_field_offset(lv, s21007c2f3, ABISELECT(3696,2572), "S21007C2.s21007c2f3");
    check_field_offset(lv, s21007c2f4, ABISELECT(3712,2576), "S21007C2.s21007c2f4");
    check_field_offset(lv, s21007c2f5, ABISELECT(3728,2588), "S21007C2.s21007c2f5");
    check_field_offset(lv, s21007c2f6, ABISELECT(3744,2596), "S21007C2.s21007c2f6");
    test_class_info(&lv, &cd_S21007C2);
    dp->~S21007C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21007C2(Test_S21007C2, "S21007C2", ABISELECT(4336,3012));

#else // __cplusplus

extern void _ZN8S21007C2C1Ev();
extern void _ZN8S21007C2D2Ev();
Name_Map name_map_S21007C2[] = {
  NSPAIR(_ZN8S21007C2C1Ev),
  NSPAIR(_ZN8S21007C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S21007C6;
extern VTBL_ENTRY _ZTI8S21007C6[];
extern  VTBL_ENTRY _ZTV8S21007C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C6[];
extern Class_Descriptor cd_S21007C5;
extern VTBL_ENTRY _ZTI8S21007C5[];
extern  VTBL_ENTRY _ZTV8S21007C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C5[];
extern Class_Descriptor cd_S21007C3;
extern VTBL_ENTRY _ZTI8S21007C3[];
extern  VTBL_ENTRY _ZTV8S21007C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C3[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S21007C8;
extern VTBL_ENTRY _ZTI8S21007C8[];
extern Class_Descriptor cd_S21007C9;
extern VTBL_ENTRY _ZTI8S21007C9[];
extern  VTBL_ENTRY _ZTV8S21007C9[];
static Base_Class bases_S21007C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(3864,2680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S21007C6,    ABISELECT(3920,2720), //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_S21007C5,    ABISELECT(3920,2720), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21007C3,    ABISELECT(3760,2608), //bcp->offset
    9, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C3,    ABISELECT(272,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_S21007C8,    ABISELECT(272,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
    -1, //immediately_derived
  1, 0},
  {&cd_S21007C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S21007C2[];
extern void _ZN8S21007C92v8Ev();
extern void _ZN8S21007C2D1Ev();
extern void _ZN8S21007C2D0Ev();
extern void _ZN8S21007C22v9Ev();
extern void _ZN8S21007C32v5Ev();
extern void _ZN8S21007C32v6Ev();
extern void _ZN8S21007C32v7Ev();
extern void _ZN8S21007C52v2Ev();
extern void _ZN8S21007C52v3Ev();
extern void _ZN8S21007C52v4Ev();
static  VTBL_ENTRY vtc_S21007C2[] = {
  ABISELECT(3920,2720),
  ABISELECT(3864,2680),
  ABISELECT(3760,2608),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C2[0]),
  (VTBL_ENTRY)&_ZN8S21007C92v8Ev,
  (VTBL_ENTRY)&_ZN8S21007C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21007C2D0Ev,
  (VTBL_ENTRY)&_ZN8S21007C22v9Ev,
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(-3760,-2608),
  (VTBL_ENTRY)&(_ZTI8S21007C2[0]),
  (VTBL_ENTRY)&_ZN8S21007C32v5Ev,
  (VTBL_ENTRY)&_ZN8S21007C32v6Ev,
  (VTBL_ENTRY)&_ZN8S21007C32v7Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3920,-2720),
  (VTBL_ENTRY)&(_ZTI8S21007C2[0]),
  (VTBL_ENTRY)&_ZN8S21007C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S21007C2[];
extern void _ZN8S21007C32v5Ev();
extern void _ZN8S21007C32v6Ev();
extern void _ZN8S21007C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S21007C3__8S21007C2[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C3[0]),
  (VTBL_ENTRY)&_ZN8S21007C32v5Ev,
  (VTBL_ENTRY)&_ZN8S21007C32v6Ev,
  (VTBL_ENTRY)&_ZN8S21007C32v7Ev,
};
extern void _ZN8S21007C52v2Ev();
extern void _ZN8S21007C52v3Ev();
extern void _ZN8S21007C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21007C5__8S21007C3__8S21007C2[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S21007C3[0]),
  (VTBL_ENTRY)&_ZN8S21007C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v4Ev,
};
extern void _ZN8S21007C52v2Ev();
extern void _ZN8S21007C52v3Ev();
extern void _ZN8S21007C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21007C5__8S21007C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C5[0]),
  (VTBL_ENTRY)&_ZN8S21007C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S21007C68S21007C5__8S21007C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C6[0]),
};
static  VTT_ENTRY vtt_S21007C2[] = {
  {&(_ZTV8S21007C2[5]),  5,28},
  {&(_ZTV8S21007C2[16]),  16,28},
  {&(_ZTV8S21007C2[25]),  25,28},
  {&(_tg__ZTV8S21007C3__8S21007C2[4]),  4,7},
  {&(_tg__ZTV8S21007C5__8S21007C3__8S21007C2[6]),  6,9},
  {&(_tg__ZTV8S21007C5__8S21007C2[3]),  3,6},
  {&(_tg__ZTV8S21007C68S21007C5__8S21007C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21007C2[];
extern  VTBL_ENTRY _ZTV8S21007C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C2[];
Class_Descriptor cd_S21007C2 = {  "S21007C2", // class name
  bases_S21007C2, 7,
  &(vtc_S21007C2[0]), // expected_vtbl_contents
  &(vtt_S21007C2[0]), // expected_vtt_contents
  ABISELECT(4336,3012), // object size
  NSPAIRA(_ZTI8S21007C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21007C2),28, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21007C2),7, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21007C1  : virtual S21007C2 {
  __tsi64 s21007c1f0[5];
  ::S21007C5 s21007c1f1;
  int s21007c1f2;
  ::S20678C17 s21007c1f3;
  virtual  ~S21007C1(); // _ZN8S21007C1D2Ev
  virtual void  v1(); // _ZN8S21007C12v1Ev
  S21007C1(); // tgen
};
//SIG(1 S21007C1) C1{ VBC2{ VBC3{ VBC4{ m Fp FL[4] Fs} VBC5{ VBC4 BC6{ VBC4 FD Fi FC4 FC4} v2 v3 v4 Fs FL Fc Fi[2] FC6 Fp FL Fi FL Fi} v5 v6 v7 FL FC7{} Fp Fc[2] FC4 Fl FC7} BC8{ BC4 FC4 Fi FD Fi FL Fl} BC9{ v8 FC7 FC6 FC7 FL FC7 Fp FC7 Fp[2] FC7} vd v9 FC9 Fi:3 FC10{ BC11{ VBC4 BC12{ VBC4 FD Fi FC4 FC4} v20 v21 v22 Fs FL Fc Fi[2] FC12 Fp FL Fi FL Fi} VBC13{ VBC4 VBC12 v23 v24 Fi FC12 FL Fi Fp} BC12 VBC14{ v25 FC7 FC12 FC7 FL FC7 Fp FC7 Fp[2] FC7} VBC15{ BC12 v26 FL Fc[7] Fp Fi FC7 FC7 Fc[10]} v19 Fl FL FD FC7}[2] Fi FD FL FD} vd v1 FL[5] FC5 Fi FC16{ VBC17{ v11 FC7 FC18{ VBC4 FD Fi FC4 FC4} FC7 FL FC7 Fp FC7 Fp[2] FC7} v10 FC19{ BC20{ VBC4 BC18 v13 v14 v15 Fs FL Fc Fi[2] FC18 Fp FL Fi FL Fi} VBC21{ VBC4 VBC18 v16 v17 Fi FC18 FL Fi Fp} BC18 VBC17 VBC22{ BC18 v18 FL Fc[7] Fp Fi FC7 FC7 Fc[10]} v12 Fl FL FD FC7} FC7 FL Fi[2]}}


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

static void Test_S21007C1()
{
  extern Class_Descriptor cd_S21007C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(418,1162)];
    init_test(&cd_S21007C1, buf);
    S21007C1 *dp, &lv = *(dp=new (buf) S21007C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6672,4644), "sizeof(S21007C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21007C1)");
    check_base_class_offset(lv, (S20677C3*)(S21007C3*), ABISELECT(6200,4312), "S21007C1");
    check_base_class_offset(lv, (S20677C3*)(S21007C5*), ABISELECT(6200,4312), "S21007C1");
    check_base_class_offset(lv, (S20677C3*)(S21007C6*)(S21007C5*), ABISELECT(6200,4312), "S21007C1");
    check_base_class_offset(lv, (S21007C6*)(S21007C5*), ABISELECT(6256,4352), "S21007C1");
    check_base_class_offset(lv, (S21007C5*)(S21007C3*), ABISELECT(6256,4352), "S21007C1");
    check_base_class_offset(lv, (S21007C3*)(S21007C2*), ABISELECT(6096,4240), "S21007C1");
    check_base_class_offset(lv, (S20677C3*)(S21007C8*)(S21007C2*), ABISELECT(2608,1816), "S21007C1");
    check_base_class_offset(lv, (S21007C8*)(S21007C2*), ABISELECT(2608,1816), "S21007C1");
    check_base_class_offset(lv, (S21007C9*)(S21007C2*), ABISELECT(2336,1632), "S21007C1");
    check_base_class_offset(lv, (S21007C2*), ABISELECT(2336,1632), "S21007C1");
    check_field_offset(lv, s21007c1f0, ABISELECT(8,4), "S21007C1.s21007c1f0");
    check_field_offset(lv, s21007c1f1, ABISELECT(48,44), "S21007C1.s21007c1f1");
    check_field_offset(lv, s21007c1f2, ABISELECT(512,376), "S21007C1.s21007c1f2");
    check_field_offset(lv, s21007c1f3, ABISELECT(528,380), "S21007C1.s21007c1f3");
    test_class_info(&lv, &cd_S21007C1);
    dp->~S21007C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21007C1(Test_S21007C1, "S21007C1", ABISELECT(6672,4644));

#else // __cplusplus

extern void _ZN8S21007C1C1Ev();
extern void _ZN8S21007C1D2Ev();
Name_Map name_map_S21007C1[] = {
  NSPAIR(_ZN8S21007C1C1Ev),
  NSPAIR(_ZN8S21007C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S21007C6;
extern VTBL_ENTRY _ZTI8S21007C6[];
extern  VTBL_ENTRY _ZTV8S21007C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C6[];
extern Class_Descriptor cd_S21007C5;
extern VTBL_ENTRY _ZTI8S21007C5[];
extern  VTBL_ENTRY _ZTV8S21007C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C5[];
extern Class_Descriptor cd_S21007C3;
extern VTBL_ENTRY _ZTI8S21007C3[];
extern  VTBL_ENTRY _ZTV8S21007C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C3[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S21007C8;
extern VTBL_ENTRY _ZTI8S21007C8[];
extern Class_Descriptor cd_S21007C9;
extern VTBL_ENTRY _ZTI8S21007C9[];
extern  VTBL_ENTRY _ZTV8S21007C9[];
extern Class_Descriptor cd_S21007C2;
extern VTBL_ENTRY _ZTI8S21007C2[];
extern  VTBL_ENTRY _ZTV8S21007C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C2[];
static Base_Class bases_S21007C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(6200,4312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S21007C6,    ABISELECT(6256,4352), //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_S21007C5,    ABISELECT(6256,4352), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21007C3,    ABISELECT(6096,4240), //bcp->offset
    21, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20677C3,    ABISELECT(2608,1816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21007C8,    ABISELECT(2608,1816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21007C9,    ABISELECT(2336,1632), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S21007C2,    ABISELECT(2336,1632), //bcp->offset
    9, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21007C1[];
extern void _ZN8S21007C1D1Ev();
extern void _ZN8S21007C1D0Ev();
extern void _ZN8S21007C12v1Ev();
extern void _ZN8S21007C92v8Ev();
extern void ABISELECT(_ZTv0_n56_N8S21007C1D1Ev,_ZTv0_n28_N8S21007C1D1Ev)();
extern void ABISELECT(_ZThn2336_N8S21007C1D1Ev,_ZThn1632_N8S21007C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S21007C1D0Ev,_ZTv0_n28_N8S21007C1D0Ev)();
extern void ABISELECT(_ZThn2336_N8S21007C1D0Ev,_ZThn1632_N8S21007C1D0Ev)() __attribute__((weak));
extern void _ZN8S21007C22v9Ev();
extern void _ZN8S21007C32v5Ev();
extern void _ZN8S21007C32v6Ev();
extern void _ZN8S21007C32v7Ev();
extern void _ZN8S21007C52v2Ev();
extern void _ZN8S21007C52v3Ev();
extern void _ZN8S21007C52v4Ev();
static  VTBL_ENTRY vtc_S21007C1[] = {
  ABISELECT(6256,4352),
  ABISELECT(6200,4312),
  ABISELECT(6096,4240),
  ABISELECT(2336,1632),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C1[0]),
  (VTBL_ENTRY)&_ZN8S21007C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21007C1D0Ev,
  (VTBL_ENTRY)&_ZN8S21007C12v1Ev,
  0,
  ABISELECT(-2336,-1632),
  0,
  ABISELECT(3920,2720),
  ABISELECT(3864,2680),
  ABISELECT(3760,2608),
  ABISELECT(-2336,-1632),
  (VTBL_ENTRY)&(_ZTI8S21007C1[0]),
  (VTBL_ENTRY)&_ZN8S21007C92v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21007C1D1Ev,_ZTv0_n28_N8S21007C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21007C1D0Ev,_ZTv0_n28_N8S21007C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21007C22v9Ev,
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(-6096,-4240),
  (VTBL_ENTRY)&(_ZTI8S21007C1[0]),
  (VTBL_ENTRY)&_ZN8S21007C32v5Ev,
  (VTBL_ENTRY)&_ZN8S21007C32v6Ev,
  (VTBL_ENTRY)&_ZN8S21007C32v7Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-6256,-4352),
  (VTBL_ENTRY)&(_ZTI8S21007C1[0]),
  (VTBL_ENTRY)&_ZN8S21007C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S21007C1[];
extern void _ZN8S21007C92v8Ev();
extern void _ZN8S21007C2D1Ev();
extern void _ZN8S21007C2D0Ev();
extern void _ZN8S21007C22v9Ev();
static  VTBL_ENTRY _tg__ZTV8S21007C2__8S21007C1[] = {
  ABISELECT(3920,2720),
  ABISELECT(3864,2680),
  ABISELECT(3760,2608),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C2[0]),
  (VTBL_ENTRY)&_ZN8S21007C92v8Ev,
  (VTBL_ENTRY)&_ZN8S21007C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21007C2D0Ev,
  (VTBL_ENTRY)&_ZN8S21007C22v9Ev,
};
extern void _ZN8S21007C32v5Ev();
extern void _ZN8S21007C32v6Ev();
extern void _ZN8S21007C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S21007C3__8S21007C2__8S21007C1[] = {
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(-3760,-2608),
  (VTBL_ENTRY)&(_ZTI8S21007C2[0]),
  (VTBL_ENTRY)&_ZN8S21007C32v5Ev,
  (VTBL_ENTRY)&_ZN8S21007C32v6Ev,
  (VTBL_ENTRY)&_ZN8S21007C32v7Ev,
};
extern void _ZN8S21007C52v2Ev();
extern void _ZN8S21007C52v3Ev();
extern void _ZN8S21007C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21007C5__8S21007C2__8S21007C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3920,-2720),
  (VTBL_ENTRY)&(_ZTI8S21007C2[0]),
  (VTBL_ENTRY)&_ZN8S21007C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v4Ev,
};
extern void _ZN8S21007C32v5Ev();
extern void _ZN8S21007C32v6Ev();
extern void _ZN8S21007C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S21007C3__8S21007C1[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C3[0]),
  (VTBL_ENTRY)&_ZN8S21007C32v5Ev,
  (VTBL_ENTRY)&_ZN8S21007C32v6Ev,
  (VTBL_ENTRY)&_ZN8S21007C32v7Ev,
};
extern void _ZN8S21007C52v2Ev();
extern void _ZN8S21007C52v3Ev();
extern void _ZN8S21007C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21007C5__8S21007C3__8S21007C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S21007C3[0]),
  (VTBL_ENTRY)&_ZN8S21007C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v4Ev,
};
extern void _ZN8S21007C52v2Ev();
extern void _ZN8S21007C52v3Ev();
extern void _ZN8S21007C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21007C5__8S21007C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C5[0]),
  (VTBL_ENTRY)&_ZN8S21007C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S21007C68S21007C5__8S21007C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C6[0]),
};
static  VTT_ENTRY vtt_S21007C1[] = {
  {&(_ZTV8S21007C1[6]),  6,40},
  {&(_ZTV8S21007C1[17]),  17,40},
  {&(_ZTV8S21007C1[28]),  28,40},
  {&(_ZTV8S21007C1[37]),  37,40},
  {&(_tg__ZTV8S21007C2__8S21007C1[5]),  5,9},
  {&(_tg__ZTV8S21007C3__8S21007C2__8S21007C1[7]),  7,10},
  {&(_tg__ZTV8S21007C5__8S21007C2__8S21007C1[6]),  6,9},
  {&(_tg__ZTV8S21007C3__8S21007C1[4]),  4,7},
  {&(_tg__ZTV8S21007C5__8S21007C3__8S21007C1[6]),  6,9},
  {&(_tg__ZTV8S21007C5__8S21007C1[3]),  3,6},
  {&(_tg__ZTV8S21007C68S21007C5__8S21007C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21007C1[];
extern  VTBL_ENTRY _ZTV8S21007C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C1[];
static VTBL_ENTRY alt_thunk_names2[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21007C1D0Ev,_ZTv0_n28_N8S21007C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2336_N8S21007C1D0Ev,_ZThn1632_N8S21007C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21007C1D1Ev,_ZTv0_n28_N8S21007C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2336_N8S21007C1D1Ev,_ZThn1632_N8S21007C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21007C1 = {  "S21007C1", // class name
  bases_S21007C1, 8,
  &(vtc_S21007C1[0]), // expected_vtbl_contents
  &(vtt_S21007C1[0]), // expected_vtt_contents
  ABISELECT(6672,4644), // object size
  NSPAIRA(_ZTI8S21007C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21007C1),40, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21007C1),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  S1400C5_nt  {
  virtual void  v8(); // _ZN10S1400C5_nt2v8Ev
  ~S1400C5_nt(); // tgen
  S1400C5_nt(); // tgen
};
//SIG(-1 S1400C5_nt) C1{ v1}


void  S1400C5_nt ::v8(){vfunc_called(this, "_ZN10S1400C5_nt2v8Ev");}
S1400C5_nt ::~S1400C5_nt(){ note_dtor("S1400C5_nt", this);} // tgen
S1400C5_nt ::S1400C5_nt(){ note_ctor("S1400C5_nt", this);} // tgen

//skip512 S1400C5_nt

#else // __cplusplus

extern void _ZN10S1400C5_ntC1Ev();
extern void _ZN10S1400C5_ntD1Ev();
Name_Map name_map_S1400C5_nt[] = {
  NSPAIR(_ZN10S1400C5_ntC1Ev),
  NSPAIR(_ZN10S1400C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY vtc_S1400C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1400C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
VTBL_ENTRY *P__ZTI10S1400C5_nt = _ZTI10S1400C5_nt; 
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
Class_Descriptor cd_S1400C5_nt = {  "S1400C5_nt", // class name
  0,0,//no base classes
  &(vtc_S1400C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S1400C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1400C5_nt),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S1400C6  {
  __tsi64 s1400c6f0[4];
  __tsi64 s1400c6f1;
  void  mf1400c6(); // _ZN7S1400C68mf1400c6Ev
};
//SIG(1 S1400C6) U1{ m FL[4] FL}

#endif // __cplusplus
#ifdef __cplusplus

struct  S1400C4  {
  ::S1400C5_nt s1400c4f0;
  int s1400c4f1;
  ::S1400C6 s1400c4f2[6];
  virtual void  v4(); // _ZN7S1400C42v4Ev
  virtual void  v5(); // _ZN7S1400C42v5Ev
  virtual void  v6(); // _ZN7S1400C42v6Ev
  virtual void  v7(); // _ZN7S1400C42v7Ev
  ~S1400C4(); // tgen
  S1400C4(); // tgen
};
//SIG(-1 S1400C4) C1{ v1 v2 v3 v4 FC2{ v5} Fi FU3{ m FL[4] FL}[6]}


void  S1400C4 ::v4(){vfunc_called(this, "_ZN7S1400C42v4Ev");}
void  S1400C4 ::v5(){vfunc_called(this, "_ZN7S1400C42v5Ev");}
void  S1400C4 ::v6(){vfunc_called(this, "_ZN7S1400C42v6Ev");}
void  S1400C4 ::v7(){vfunc_called(this, "_ZN7S1400C42v7Ev");}
S1400C4 ::~S1400C4(){ note_dtor("S1400C4", this);} // tgen
S1400C4 ::S1400C4(){ note_ctor("S1400C4", this);} // tgen

static void Test_S1400C4()
{
  extern Class_Descriptor cd_S1400C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,52)];
    init_test(&cd_S1400C4, buf);
    S1400C4 *dp, &lv = *(dp=new (buf) S1400C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,204), "sizeof(S1400C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1400C4)");
    check_field_offset(lv, s1400c4f0, ABISELECT(8,4), "S1400C4.s1400c4f0");
    check_field_offset(lv, s1400c4f1, ABISELECT(16,8), "S1400C4.s1400c4f1");
    check_field_offset(lv, s1400c4f2, ABISELECT(24,12), "S1400C4.s1400c4f2");
    test_class_info(&lv, &cd_S1400C4);
    dp->~S1400C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1400C4(Test_S1400C4, "S1400C4", ABISELECT(216,204));

#else // __cplusplus

extern void _ZN7S1400C4C1Ev();
extern void _ZN7S1400C4D1Ev();
Name_Map name_map_S1400C4[] = {
  NSPAIR(_ZN7S1400C4C1Ev),
  NSPAIR(_ZN7S1400C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1400C4[];
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
static  VTBL_ENTRY vtc_S1400C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C4[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
};
extern VTBL_ENTRY _ZTI7S1400C4[];
extern  VTBL_ENTRY _ZTV7S1400C4[];
Class_Descriptor cd_S1400C4 = {  "S1400C4", // class name
  0,0,//no base classes
  &(vtc_S1400C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,204), // object size
  NSPAIRA(_ZTI7S1400C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1400C4),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  S1400C7_nt  {
  int s1400c7f0;
  virtual void  v17(); // _ZN10S1400C7_nt3v17Ev
  ~S1400C7_nt(); // tgen
  S1400C7_nt(); // tgen
};
//SIG(-1 S1400C7_nt) C1{ v1 Fi}


void  S1400C7_nt ::v17(){vfunc_called(this, "_ZN10S1400C7_nt3v17Ev");}
S1400C7_nt ::~S1400C7_nt(){ note_dtor("S1400C7_nt", this);} // tgen
S1400C7_nt ::S1400C7_nt(){ note_ctor("S1400C7_nt", this);} // tgen

//skip512 S1400C7_nt

#else // __cplusplus

extern void _ZN10S1400C7_ntC1Ev();
extern void _ZN10S1400C7_ntD1Ev();
Name_Map name_map_S1400C7_nt[] = {
  NSPAIR(_ZN10S1400C7_ntC1Ev),
  NSPAIR(_ZN10S1400C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY vtc_S1400C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1400C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
VTBL_ENTRY *P__ZTI10S1400C7_nt = _ZTI10S1400C7_nt; 
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
Class_Descriptor cd_S1400C7_nt = {  "S1400C7_nt", // class name
  0,0,//no base classes
  &(vtc_S1400C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S1400C7_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1400C7_nt),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1400C10  {
  void *s1400c10f0[4];
  virtual void  v9(); // _ZN8S1400C102v9Ev
  virtual void  v10(); // _ZN8S1400C103v10Ev
  virtual void  v11(); // _ZN8S1400C103v11Ev
  virtual void  v12(); // _ZN8S1400C103v12Ev
  virtual void  v13(); // _ZN8S1400C103v13Ev
  virtual void  v14(); // _ZN8S1400C103v14Ev
  ~S1400C10(); // tgen
  S1400C10(); // tgen
};
//SIG(-1 S1400C10) C1{ v1 v2 v3 v4 v5 v6 Fp[4]}


void  S1400C10 ::v9(){vfunc_called(this, "_ZN8S1400C102v9Ev");}
void  S1400C10 ::v10(){vfunc_called(this, "_ZN8S1400C103v10Ev");}
void  S1400C10 ::v11(){vfunc_called(this, "_ZN8S1400C103v11Ev");}
void  S1400C10 ::v12(){vfunc_called(this, "_ZN8S1400C103v12Ev");}
void  S1400C10 ::v13(){vfunc_called(this, "_ZN8S1400C103v13Ev");}
void  S1400C10 ::v14(){vfunc_called(this, "_ZN8S1400C103v14Ev");}
S1400C10 ::~S1400C10(){ note_dtor("S1400C10", this);} // tgen
S1400C10 ::S1400C10(){ note_ctor("S1400C10", this);} // tgen

static void Test_S1400C10()
{
  extern Class_Descriptor cd_S1400C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S1400C10, buf);
    S1400C10 *dp, &lv = *(dp=new (buf) S1400C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S1400C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1400C10)");
    check_field_offset(lv, s1400c10f0, ABISELECT(8,4), "S1400C10.s1400c10f0");
    test_class_info(&lv, &cd_S1400C10);
    dp->~S1400C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1400C10(Test_S1400C10, "S1400C10", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S1400C10C1Ev();
extern void _ZN8S1400C10D1Ev();
Name_Map name_map_S1400C10[] = {
  NSPAIR(_ZN8S1400C10C1Ev),
  NSPAIR(_ZN8S1400C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S1400C10[];
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY vtc_S1400C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C10[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
Class_Descriptor cd_S1400C10 = {  "S1400C10", // class name
  0,0,//no base classes
  &(vtc_S1400C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S1400C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S1400C10),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  S1400C9  : S1400C10 {
  __tsi64 s1400c9f0;
  virtual  ~S1400C9(); // _ZN7S1400C9D1Ev
  virtual void  v15(); // _ZN7S1400C93v15Ev
  virtual void  v16(); // _ZN7S1400C93v16Ev
  S1400C9(); // tgen
};
//SIG(-1 S1400C9) C1{ BC2{ v3 v4 v5 v6 v7 v8 Fp[4]} vd v1 v2 FL}


 S1400C9 ::~S1400C9(){ note_dtor("S1400C9", this);}
void  S1400C9 ::v15(){vfunc_called(this, "_ZN7S1400C93v15Ev");}
void  S1400C9 ::v16(){vfunc_called(this, "_ZN7S1400C93v16Ev");}
S1400C9 ::S1400C9(){ note_ctor("S1400C9", this);} // tgen

static void Test_S1400C9()
{
  extern Class_Descriptor cd_S1400C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S1400C9, buf);
    S1400C9 *dp, &lv = *(dp=new (buf) S1400C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S1400C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1400C9)");
    check_base_class_offset(lv, (S1400C10*), 0, "S1400C9");
    check_field_offset(lv, s1400c9f0, ABISELECT(40,20), "S1400C9.s1400c9f0");
    test_class_info(&lv, &cd_S1400C9);
    dp->~S1400C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1400C9(Test_S1400C9, "S1400C9", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S1400C9C1Ev();
extern void _ZN7S1400C9D1Ev();
Name_Map name_map_S1400C9[] = {
  NSPAIR(_ZN7S1400C9C1Ev),
  NSPAIR(_ZN7S1400C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
static Base_Class bases_S1400C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1400C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1400C9[];
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN7S1400C9D1Ev();
extern void _ZN7S1400C9D0Ev();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY vtc_S1400C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C9[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&_ZN7S1400C9D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C9D0Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
Class_Descriptor cd_S1400C9 = {  "S1400C9", // class name
  bases_S1400C9, 1,
  &(vtc_S1400C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S1400C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1400C9),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1400C8  : S1400C5_nt , S1400C9 , virtual S1400C7_nt {
  int s1400c8f0;
  ::S20677C6_nt s1400c8f1;
  virtual void  v18(); // _ZN7S1400C83v18Ev
  virtual void  v19(); // _ZN7S1400C83v19Ev
  ~S1400C8(); // tgen
  S1400C8(); // tgen
};
//SIG(-1 S1400C8) C1{ BC2{ v3} BC3{ BC4{ v4 v5 v6 v7 v8 v9 Fp[4]} vd v10 v11 FL} VBC5{ v12 Fi} v1 v2 Fi FC6{}}


void  S1400C8 ::v18(){vfunc_called(this, "_ZN7S1400C83v18Ev");}
void  S1400C8 ::v19(){vfunc_called(this, "_ZN7S1400C83v19Ev");}
S1400C8 ::~S1400C8(){ note_dtor("S1400C8", this);} // tgen
S1400C8 ::S1400C8(){ note_ctor("S1400C8", this);} // tgen

static void Test_S1400C8()
{
  extern Class_Descriptor cd_S1400C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S1400C8, buf);
    S1400C8 *dp, &lv = *(dp=new (buf) S1400C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S1400C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1400C8)");
    check_base_class_offset(lv, (S1400C5_nt*), 0, "S1400C8");
    check_base_class_offset(lv, (S1400C10*)(S1400C9*), ABISELECT(8,4), "S1400C8");
    check_base_class_offset(lv, (S1400C9*), ABISELECT(8,4), "S1400C8");
    check_base_class_offset(lv, (S1400C7_nt*), ABISELECT(64,40), "S1400C8");
    check_field_offset(lv, s1400c8f0, ABISELECT(56,32), "S1400C8.s1400c8f0");
    check_field_offset(lv, s1400c8f1, ABISELECT(60,36), "S1400C8.s1400c8f1");
    test_class_info(&lv, &cd_S1400C8);
    dp->~S1400C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1400C8(Test_S1400C8, "S1400C8", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S1400C8C1Ev();
extern void _ZN7S1400C8D1Ev();
Name_Map name_map_S1400C8[] = {
  NSPAIR(_ZN7S1400C8C1Ev),
  NSPAIR(_ZN7S1400C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C7_nt;
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
static Base_Class bases_S1400C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1400C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1400C10,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1400C9,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1400C7_nt,    ABISELECT(64,40), //bcp->offset
    20, //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 _ZTI7S1400C8[];
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZThn8_N7S1400C8D1Ev,_ZThn4_N7S1400C8D1Ev)();
extern void ABISELECT(_ZThn8_N7S1400C8D0Ev,_ZThn4_N7S1400C8D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY vtc_S1400C8[] = {
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1400C8D1Ev,_ZThn4_N7S1400C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1400C8D0Ev,_ZThn4_N7S1400C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  0,
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern VTBL_ENTRY _ZTV7S1400C8[];
static  VTT_ENTRY vtt_S1400C8[] = {
  {&(_ZTV7S1400C8[3]),  3,24},
  {&(_ZTV7S1400C8[23]),  23,24},
};
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
Class_Descriptor cd_S1400C8 = {  "S1400C8", // class name
  bases_S1400C8, 4,
  &(vtc_S1400C8[0]), // expected_vtbl_contents
  &(vtt_S1400C8[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S1400C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1400C8),24, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1400C8),2, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1400C13  {
  short s1400c13f0:16;
  __tsi64 s1400c13f1;
  void *s1400c13f2[8];
  virtual void  v20(); // _ZN8S1400C133v20Ev
  virtual void  v21(); // _ZN8S1400C133v21Ev
  ~S1400C13(); // tgen
  S1400C13(); // tgen
};
//SIG(-1 S1400C13) C1{ v1 v2 Fs:16 FL Fp[8]}


void  S1400C13 ::v20(){vfunc_called(this, "_ZN8S1400C133v20Ev");}
void  S1400C13 ::v21(){vfunc_called(this, "_ZN8S1400C133v21Ev");}
S1400C13 ::~S1400C13(){ note_dtor("S1400C13", this);} // tgen
S1400C13 ::S1400C13(){ note_ctor("S1400C13", this);} // tgen

static void Test_S1400C13()
{
  extern Class_Descriptor cd_S1400C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S1400C13, buf);
    S1400C13 *dp, &lv = *(dp=new (buf) S1400C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S1400C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1400C13)");
    set_bf_and_test(lv, s1400c13f0, ABISELECT(8,4), 0, 16, 1, "S1400C13");
    set_bf_and_test(lv, s1400c13f0, ABISELECT(8,4), 0, 16, hide_sll(1LL<<15), "S1400C13");
    check_field_offset(lv, s1400c13f1, ABISELECT(16,8), "S1400C13.s1400c13f1");
    check_field_offset(lv, s1400c13f2, ABISELECT(24,16), "S1400C13.s1400c13f2");
    test_class_info(&lv, &cd_S1400C13);
    dp->~S1400C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1400C13(Test_S1400C13, "S1400C13", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN8S1400C13C1Ev();
extern void _ZN8S1400C13D1Ev();
Name_Map name_map_S1400C13[] = {
  NSPAIR(_ZN8S1400C13C1Ev),
  NSPAIR(_ZN8S1400C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S1400C13[];
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY vtc_S1400C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C13[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern VTBL_ENTRY _ZTI8S1400C13[];
extern  VTBL_ENTRY _ZTV8S1400C13[];
Class_Descriptor cd_S1400C13 = {  "S1400C13", // class name
  0,0,//no base classes
  &(vtc_S1400C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI8S1400C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S1400C13),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  S1400C12  : S1400C7_nt , S1400C13 , S1400C5_nt , virtual S1400C9 , S1400C10 {
  int s1400c12f0;
  virtual  ~S1400C12(); // _ZN8S1400C12D2Ev
  virtual void  v22(); // _ZN8S1400C123v22Ev
  virtual void  v23(); // _ZN8S1400C123v23Ev
  virtual void  v24(); // _ZN8S1400C123v24Ev
  S1400C12(); // tgen
};
//SIG(-1 S1400C12) C1{ BC2{ v4 Fi} BC3{ v5 v6 Fs:16 FL Fp[8]} BC4{ v7} VBC5{ BC6{ v8 v9 v10 v11 v12 v13 Fp[4]} vd v14 v15 FL} BC6 vd v1 v2 v3 Fi}


 S1400C12 ::~S1400C12(){ note_dtor("S1400C12", this);}
void  S1400C12 ::v22(){vfunc_called(this, "_ZN8S1400C123v22Ev");}
void  S1400C12 ::v23(){vfunc_called(this, "_ZN8S1400C123v23Ev");}
void  S1400C12 ::v24(){vfunc_called(this, "_ZN8S1400C123v24Ev");}
S1400C12 ::S1400C12(){ note_ctor("S1400C12", this);} // tgen

static void Test_S1400C12()
{
  extern Class_Descriptor cd_S1400C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,29)];
    init_test(&cd_S1400C12, buf);
    S1400C12 *dp, &lv = *(dp=new (buf) S1400C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,112), "sizeof(S1400C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1400C12)");
    check_base_class_offset(lv, (S1400C7_nt*), 0, "S1400C12");
    check_base_class_offset(lv, (S1400C13*), ABISELECT(16,8), "S1400C12");
    check_base_class_offset(lv, (S1400C5_nt*), ABISELECT(104,56), "S1400C12");
    check_base_class_offset(lv, (S1400C10*)(S1400C9*), ABISELECT(160,84), "S1400C12");
    check_base_class_offset(lv, (S1400C9*), ABISELECT(160,84), "S1400C12");
    /*is_ambiguous_... S1400C12::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*), ABISELECT(112,60), "S1400C12");
    check_field_offset(lv, s1400c12f0, ABISELECT(152,80), "S1400C12.s1400c12f0");
    test_class_info(&lv, &cd_S1400C12);
    dp->~S1400C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1400C12(Test_S1400C12, "S1400C12", ABISELECT(208,112));

#else // __cplusplus

extern void _ZN8S1400C12C1Ev();
extern void _ZN8S1400C12D2Ev();
Name_Map name_map_S1400C12[] = {
  NSPAIR(_ZN8S1400C12C1Ev),
  NSPAIR(_ZN8S1400C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1400C7_nt;
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
extern Class_Descriptor cd_S1400C13;
extern VTBL_ENTRY _ZTI8S1400C13[];
extern  VTBL_ENTRY _ZTV8S1400C13[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
static Base_Class bases_S1400C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1400C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1400C13,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1400C5_nt,    ABISELECT(104,56), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1400C10,    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
    4, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(160,84), //bcp->offset
    24, //bcp->virtual_function_table_offset
    11, //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_S1400C10,    ABISELECT(112,60), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S1400C12[];
extern void _ZN10S1400C7_nt3v17Ev();
extern void _ZN8S1400C12D1Ev();
extern void _ZN8S1400C12D0Ev();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev)();
extern void ABISELECT(_ZThn160_N8S1400C12D1Ev,_ZThn84_N8S1400C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev)();
extern void ABISELECT(_ZThn160_N8S1400C12D0Ev,_ZThn84_N8S1400C12D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY vtc_S1400C12[] = {
  ABISELECT(160,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN8S1400C12D1Ev,
  (VTBL_ENTRY)&_ZN8S1400C12D0Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  0,
  0,
  ABISELECT(-160,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern VTBL_ENTRY _ZTV8S1400C12[];
static  VTT_ENTRY vtt_S1400C12[] = {
  {&(_ZTV8S1400C12[3]),  3,45},
  {&(_ZTV8S1400C12[35]),  35,45},
};
extern VTBL_ENTRY _ZTI8S1400C12[];
extern  VTBL_ENTRY _ZTV8S1400C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1400C12[];
static VTBL_ENTRY alt_thunk_names3[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S1400C12D0Ev,_ZThn84_N8S1400C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S1400C12D1Ev,_ZThn84_N8S1400C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1400C12 = {  "S1400C12", // class name
  bases_S1400C12, 6,
  &(vtc_S1400C12[0]), // expected_vtbl_contents
  &(vtt_S1400C12[0]), // expected_vtt_contents
  ABISELECT(208,112), // object size
  NSPAIRA(_ZTI8S1400C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S1400C12),45, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1400C12),2, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names3,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1400C3  : S1400C4 , virtual S1400C7_nt , S1400C8 , virtual S1400C12 , virtual S1400C10 {
  int s1400c3f0[2];
  virtual void  v25(); // _ZN7S1400C33v25Ev
  virtual void  v26(); // _ZN7S1400C33v26Ev
  virtual void  v27(); // _ZN7S1400C33v27Ev
  ~S1400C3(); // tgen
  S1400C3(); // tgen
};
//SIG(-1 S1400C3) C1{ BC2{ v4 v5 v6 v7 FC3{ v9} Fi FU4{ m FL[4] FL}[6]} VBC5{ v8 Fi} BC6{ BC3 BC7{ BC8{ v10 v11 v12 v13 v14 v15 Fp[4]} vd v16 v17 FL} VBC5 v18 v19 Fi FC9{}} VBC10{ BC5 BC11{ v20 v21 Fs:16 FL Fp[8]} BC3 VBC7 BC8 vd v22 v23 v24 Fi} VBC8 v1 v2 v3 Fi[2]}


void  S1400C3 ::v25(){vfunc_called(this, "_ZN7S1400C33v25Ev");}
void  S1400C3 ::v26(){vfunc_called(this, "_ZN7S1400C33v26Ev");}
void  S1400C3 ::v27(){vfunc_called(this, "_ZN7S1400C33v27Ev");}
S1400C3 ::~S1400C3(){ note_dtor("S1400C3", this);} // tgen
S1400C3 ::S1400C3(){ note_ctor("S1400C3", this);} // tgen

static void Test_S1400C3()
{
  extern Class_Descriptor cd_S1400C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(70,99)];
    init_test(&cd_S1400C3, buf);
    S1400C3 *dp, &lv = *(dp=new (buf) S1400C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(552,392), "sizeof(S1400C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1400C3)");
    check_base_class_offset(lv, (S1400C4*), 0, "S1400C3");
    /*is_ambiguous_... S1400C3::S1400C7_nt */ AMB_check_base_class_offset(lv, (S1400C7_nt*), ABISELECT(288,252), "S1400C3");
    check_base_class_offset(lv, (S1400C7_nt*)(S1400C8*), ABISELECT(288,252), "S1400C3");
    check_base_class_offset(lv, (S1400C5_nt*)(S1400C8*), ABISELECT(216,204), "S1400C3");
    check_base_class_offset(lv, (S1400C10*)(S1400C9*)(S1400C8*), ABISELECT(224,208), "S1400C3");
    check_base_class_offset(lv, (S1400C9*)(S1400C8*), ABISELECT(224,208), "S1400C3");
    check_base_class_offset(lv, (S1400C8*), ABISELECT(216,204), "S1400C3");
    check_base_class_offset(lv, (S1400C7_nt*)(S1400C12*), ABISELECT(304,260), "S1400C3");
    check_base_class_offset(lv, (S1400C13*)(S1400C12*), ABISELECT(320,268), "S1400C3");
    check_base_class_offset(lv, (S1400C5_nt*)(S1400C12*), ABISELECT(408,316), "S1400C3");
    /*is_ambiguous_... S1400C3::S1400C9 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*), ABISELECT(464,344), "S1400C3");
    check_base_class_offset(lv, (S1400C9*)(S1400C12*), ABISELECT(464,344), "S1400C3");
    /*is_ambiguous_... S1400C12::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C12*), ABISELECT(416,320), "S1400C3");
    check_base_class_offset(lv, (S1400C12*), ABISELECT(304,260), "S1400C3");
    /*is_ambiguous_... S1400C3::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*), ABISELECT(512,372), "S1400C3");
    check_field_offset(lv, s1400c3f0, ABISELECT(280,244), "S1400C3.s1400c3f0");
    test_class_info(&lv, &cd_S1400C3);
    dp->~S1400C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1400C3(Test_S1400C3, "S1400C3", ABISELECT(552,392));

#else // __cplusplus

extern void _ZN7S1400C3C1Ev();
extern void _ZN7S1400C3D1Ev();
Name_Map name_map_S1400C3[] = {
  NSPAIR(_ZN7S1400C3C1Ev),
  NSPAIR(_ZN7S1400C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1400C4;
extern VTBL_ENTRY _ZTI7S1400C4[];
extern  VTBL_ENTRY _ZTV7S1400C4[];
extern Class_Descriptor cd_S1400C7_nt;
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C8;
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
extern Class_Descriptor cd_S1400C7_nt;
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
extern Class_Descriptor cd_S1400C13;
extern VTBL_ENTRY _ZTI8S1400C13[];
extern  VTBL_ENTRY _ZTV8S1400C13[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C12;
extern VTBL_ENTRY _ZTI8S1400C12[];
extern  VTBL_ENTRY _ZTV8S1400C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1400C12[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
static Base_Class bases_S1400C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1400C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1400C7_nt,    ABISELECT(288,252), //bcp->offset
    35, //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_S1400C5_nt,    ABISELECT(216,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
    11, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(224,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
    12, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(224,208), //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
    13, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1400C8,    ABISELECT(216,204), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1400C7_nt,    ABISELECT(304,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
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C13,    ABISELECT(320,268), //bcp->offset
    62, //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
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C5_nt,    ABISELECT(408,316), //bcp->offset
    66, //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
    12, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(464,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
    2, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(464,344), //bcp->offset
    77, //bcp->virtual_function_table_offset
    11, //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
    12, //immediately_derived
  0, 1},
  {&cd_S1400C10,    ABISELECT(416,320), //bcp->offset
    69, //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
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C12,    ABISELECT(304,260), //bcp->offset
    39, //bcp->virtual_function_table_offset
    17, //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_S1400C10,    ABISELECT(512,372), //bcp->offset
    98, //bcp->virtual_function_table_offset
    8, //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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1400C3[];
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C3D1Ev();
extern void _ZN7S1400C3D0Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev)();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZThn224_N7S1400C3D1Ev,_ZThn208_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn224_N7S1400C3D0Ev,_ZThn208_N7S1400C3D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN10S1400C7_nt3v17Ev();
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn304_N7S1400C3D1Ev,_ZThn260_N7S1400C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev)();
extern void ABISELECT(_ZThn304_N7S1400C3D0Ev,_ZThn260_N7S1400C3D0Ev)() __attribute__((weak));
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn464_N7S1400C3D1Ev,_ZThn344_N7S1400C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev)();
extern void ABISELECT(_ZThn464_N7S1400C3D0Ev,_ZThn344_N7S1400C3D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY vtc_S1400C3[] = {
  ABISELECT(512,372),
  ABISELECT(464,344),
  ABISELECT(304,260),
  ABISELECT(288,252),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D0Ev,
  ABISELECT(72,48),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev),
  ABISELECT(-224,-208),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S1400C3D1Ev,_ZThn208_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S1400C3D0Ev,_ZThn208_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  0,
  ABISELECT(-288,-252),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-304,-260),
  0,
  ABISELECT(160,84),
  ABISELECT(-304,-260),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
  ABISELECT(-320,-268),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
  ABISELECT(-408,-316),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  ABISELECT(-416,-320),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  0,
  0,
  ABISELECT(-464,-344),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-464,-344),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-512,-372),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern VTBL_ENTRY _ZTV7S1400C3[];
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C8__7S1400C3[] = {
  ABISELECT(72,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C8__7S1400C3[] = {
  0,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void _ZN8S1400C12D1Ev();
extern void _ZN8S1400C12D0Ev();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C3[] = {
  ABISELECT(160,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN8S1400C12D1Ev,
  (VTBL_ENTRY)&_ZN8S1400C12D0Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev)();
extern void ABISELECT(_ZThn160_N8S1400C12D1Ev,_ZThn84_N8S1400C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev)();
extern void ABISELECT(_ZThn160_N8S1400C12D0Ev,_ZThn84_N8S1400C12D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__8S1400C12__7S1400C3[] = {
  0,
  0,
  ABISELECT(-160,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
static  VTT_ENTRY vtt_S1400C3[] = {
  {&(_ZTV7S1400C3[6]),  6,112},
  {&(_tg__ZTV7S1400C8__7S1400C3[3]),  3,8},
  {&(_tg__ZTV10S1400C7_nt__7S1400C8__7S1400C3[3]),  3,4},
  {&(_ZTV7S1400C3[38]),  38,112},
  {&(_ZTV7S1400C3[18]),  18,112},
  {&(_ZTV7S1400C3[56]),  56,112},
  {&(_ZTV7S1400C3[64]),  64,112},
  {&(_ZTV7S1400C3[68]),  68,112},
  {&(_ZTV7S1400C3[88]),  88,112},
  {&(_ZTV7S1400C3[71]),  71,112},
  {&(_ZTV7S1400C3[106]),  106,112},
  {&(_tg__ZTV8S1400C12__7S1400C3[3]),  3,9},
  {&(_tg__ZTV7S1400C9__8S1400C12__7S1400C3[11]),  11,21},
};
extern VTBL_ENTRY _ZTI7S1400C3[];
extern  VTBL_ENTRY _ZTV7S1400C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C3[];
static VTBL_ENTRY alt_thunk_names4[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S1400C12D0Ev,_ZThn84_N8S1400C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S1400C12D1Ev,_ZThn84_N8S1400C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S1400C3D0Ev,_ZThn344_N7S1400C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S1400C3D1Ev,_ZThn344_N7S1400C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1400C3D0Ev,_ZThn260_N7S1400C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1400C3D1Ev,_ZThn260_N7S1400C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1400C3 = {  "S1400C3", // class name
  bases_S1400C3, 14,
  &(vtc_S1400C3[0]), // expected_vtbl_contents
  &(vtt_S1400C3[0]), // expected_vtt_contents
  ABISELECT(552,392), // object size
  NSPAIRA(_ZTI7S1400C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S1400C3),112, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1400C3),13, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names4,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1400C2  : S1400C3 , S1400C10 , S1400C8 {
  virtual  ~S1400C2(); // _ZN7S1400C2D2Ev
  virtual void  v28(); // _ZN7S1400C23v28Ev
  S1400C2(); // tgen
};
//SIG(-1 S1400C2) C1{ BC2{ BC3{ v2 v3 v4 v5 FC4{ v7} Fi FU5{ m FL[4] FL}[6]} VBC6{ v6 Fi} BC7{ BC4 BC8{ BC9{ v8 v9 v10 v11 v12 v13 Fp[4]} vd v14 v15 FL} VBC6 v16 v17 Fi FC10{}} VBC11{ BC6 BC12{ v18 v19 Fs:16 FL Fp[8]} BC4 VBC8 BC9 vd v20 v21 v22 Fi} VBC9 v23 v24 v25 Fi[2]} BC9 BC7 vd v1}


 S1400C2 ::~S1400C2(){ note_dtor("S1400C2", this);}
void  S1400C2 ::v28(){vfunc_called(this, "_ZN7S1400C23v28Ev");}
S1400C2 ::S1400C2(){ note_ctor("S1400C2", this);} // tgen

static void Test_S1400C2()
{
  extern Class_Descriptor cd_S1400C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(83,114)];
    init_test(&cd_S1400C2, buf);
    S1400C2 *dp, &lv = *(dp=new (buf) S1400C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(656,452), "sizeof(S1400C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1400C2)");
    check_base_class_offset(lv, (S1400C4*)(S1400C3*), 0, "S1400C2");
    /*is_ambiguous_... S1400C3::S1400C7_nt */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C3*), ABISELECT(392,312), "S1400C2");
    check_base_class_offset(lv, (S1400C7_nt*)(S1400C8*)(S1400C3*), ABISELECT(392,312), "S1400C2");
    /*is_ambiguous_... S1400C2::S1400C8 */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C8*), ABISELECT(392,312), "S1400C2");
    check_base_class_offset(lv, (S1400C5_nt*)(S1400C8*)(S1400C3*), ABISELECT(216,204), "S1400C2");
    check_base_class_offset(lv, (S1400C10*)(S1400C9*)(S1400C8*)(S1400C3*), ABISELECT(224,208), "S1400C2");
    check_base_class_offset(lv, (S1400C9*)(S1400C8*)(S1400C3*), ABISELECT(224,208), "S1400C2");
    check_base_class_offset(lv, (S1400C8*)(S1400C3*), ABISELECT(216,204), "S1400C2");
    check_base_class_offset(lv, (S1400C7_nt*)(S1400C12*), ABISELECT(408,320), "S1400C2");
    check_base_class_offset(lv, (S1400C13*)(S1400C12*), ABISELECT(424,328), "S1400C2");
    check_base_class_offset(lv, (S1400C5_nt*)(S1400C12*), ABISELECT(512,376), "S1400C2");
    /*is_ambiguous_... S1400C2::S1400C9 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*), ABISELECT(568,404), "S1400C2");
    check_base_class_offset(lv, (S1400C9*)(S1400C12*), ABISELECT(568,404), "S1400C2");
    /*is_ambiguous_... S1400C12::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C12*), ABISELECT(520,380), "S1400C2");
    check_base_class_offset(lv, (S1400C12*)(S1400C3*), ABISELECT(408,320), "S1400C2");
    /*is_ambiguous_... S1400C3::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C3*), ABISELECT(616,432), "S1400C2");
    check_base_class_offset(lv, (S1400C3*), 0, "S1400C2");
    /*is_ambiguous_... S1400C2::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*), ABISELECT(288,252), "S1400C2");
    /*is_ambiguous_... S1400C2::S1400C8 */ AMB_check_base_class_offset(lv, (S1400C5_nt*)(S1400C8*), ABISELECT(328,272), "S1400C2");
    /*is_ambiguous_... S1400C2::S1400C8 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*)(S1400C8*), ABISELECT(336,276), "S1400C2");
    /*is_ambiguous_... S1400C2::S1400C8 */ AMB_check_base_class_offset(lv, (S1400C9*)(S1400C8*), ABISELECT(336,276), "S1400C2");
    /*is_ambiguous_... S1400C2::S1400C8 */ AMB_check_base_class_offset(lv, (S1400C8*), ABISELECT(328,272), "S1400C2");
    test_class_info(&lv, &cd_S1400C2);
    dp->~S1400C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1400C2(Test_S1400C2, "S1400C2", ABISELECT(656,452));

#else // __cplusplus

extern void _ZN7S1400C2C1Ev();
extern void _ZN7S1400C2D2Ev();
Name_Map name_map_S1400C2[] = {
  NSPAIR(_ZN7S1400C2C1Ev),
  NSPAIR(_ZN7S1400C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1400C4;
extern VTBL_ENTRY _ZTI7S1400C4[];
extern  VTBL_ENTRY _ZTV7S1400C4[];
extern Class_Descriptor cd_S1400C7_nt;
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C8;
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
extern Class_Descriptor cd_S1400C7_nt;
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
extern Class_Descriptor cd_S1400C13;
extern VTBL_ENTRY _ZTI8S1400C13[];
extern  VTBL_ENTRY _ZTV8S1400C13[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C12;
extern VTBL_ENTRY _ZTI8S1400C12[];
extern  VTBL_ENTRY _ZTV8S1400C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1400C12[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C3;
extern VTBL_ENTRY _ZTI7S1400C3[];
extern  VTBL_ENTRY _ZTV7S1400C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C3[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C8;
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
static Base_Class bases_S1400C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1400C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S1400C7_nt,    ABISELECT(392,312), //bcp->offset
    64, //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
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S1400C5_nt,    ABISELECT(216,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
    11, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(224,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
    12, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(224,208), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1400C8,    ABISELECT(216,204), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1400C7_nt,    ABISELECT(408,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
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C13,    ABISELECT(424,328), //bcp->offset
    91, //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
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C5_nt,    ABISELECT(512,376), //bcp->offset
    95, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(568,404), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(568,404), //bcp->offset
    106, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S1400C10,    ABISELECT(520,380), //bcp->offset
    98, //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
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C12,    ABISELECT(408,320), //bcp->offset
    68, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1400C10,    ABISELECT(616,432), //bcp->offset
    127, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1400C3,    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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1400C10,    ABISELECT(288,252), //bcp->offset
    36, //bcp->virtual_function_table_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},
  {&cd_S1400C5_nt,    ABISELECT(328,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
    17, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(336,276), //bcp->offset
    -1, //bcp->virtual_function_table_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
    18, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(336,276), //bcp->offset
    52, //bcp->virtual_function_table_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
    19, //immediately_derived
  0, 0},
  {&cd_S1400C8,    ABISELECT(328,272), //bcp->offset
    44, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1400C2[];
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C2D1Ev();
extern void _ZN7S1400C2D0Ev();
extern void _ZN7S1400C23v28Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C2D1Ev,_ZThn204_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C2D0Ev,_ZThn204_N7S1400C2D0Ev)();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZThn224_N7S1400C2D1Ev,_ZThn208_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn224_N7S1400C2D0Ev,_ZThn208_N7S1400C2D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn328_N7S1400C2D1Ev,_ZThn272_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn328_N7S1400C2D0Ev,_ZThn272_N7S1400C2D0Ev)();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZThn336_N7S1400C2D1Ev,_ZThn276_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn336_N7S1400C2D0Ev,_ZThn276_N7S1400C2D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN10S1400C7_nt3v17Ev();
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C2D1Ev,_ZTv0_n20_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn408_N7S1400C2D1Ev,_ZThn320_N7S1400C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S1400C2D0Ev,_ZTv0_n20_N7S1400C2D0Ev)();
extern void ABISELECT(_ZThn408_N7S1400C2D0Ev,_ZThn320_N7S1400C2D0Ev)() __attribute__((weak));
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C2D1Ev,_ZTv0_n36_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn568_N7S1400C2D1Ev,_ZThn404_N7S1400C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1400C2D0Ev,_ZTv0_n36_N7S1400C2D0Ev)();
extern void ABISELECT(_ZThn568_N7S1400C2D0Ev,_ZThn404_N7S1400C2D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY vtc_S1400C2[] = {
  ABISELECT(616,432),
  ABISELECT(568,404),
  ABISELECT(408,320),
  ABISELECT(392,312),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1400C23v28Ev,
  ABISELECT(176,108),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C2D1Ev,_ZThn204_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C2D0Ev,_ZThn204_N7S1400C2D0Ev),
  ABISELECT(-224,-208),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S1400C2D1Ev,_ZThn208_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S1400C2D0Ev,_ZThn208_N7S1400C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  ABISELECT(-288,-252),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  ABISELECT(64,40),
  ABISELECT(-328,-272),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1400C2D1Ev,_ZThn272_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1400C2D0Ev,_ZThn272_N7S1400C2D0Ev),
  ABISELECT(-336,-276),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn336_N7S1400C2D1Ev,_ZThn276_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn336_N7S1400C2D0Ev,_ZThn276_N7S1400C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  0,
  ABISELECT(-392,-312),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-408,-320),
  0,
  ABISELECT(160,84),
  ABISELECT(-408,-320),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C2D1Ev,_ZTv0_n20_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C2D0Ev,_ZTv0_n20_N7S1400C2D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
  ABISELECT(-424,-328),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
  ABISELECT(-512,-376),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  ABISELECT(-520,-380),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  0,
  0,
  ABISELECT(-568,-404),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-568,-404),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C2D1Ev,_ZTv0_n36_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C2D0Ev,_ZTv0_n36_N7S1400C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-616,-432),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern VTBL_ENTRY _ZTV7S1400C2[];
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C3D1Ev();
extern void _ZN7S1400C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C3__7S1400C2[] = {
  ABISELECT(616,432),
  ABISELECT(568,404),
  ABISELECT(408,320),
  ABISELECT(392,312),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D0Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C3__7S1400C2[] = {
  ABISELECT(176,108),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C87S1400C3__7S1400C2[] = {
  0,
  ABISELECT(-176,-108),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C3__7S1400C2[] = {
  0,
  ABISELECT(-392,-312),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C8__7S1400C3__7S1400C2[] = {
  ABISELECT(176,108),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn408_N7S1400C3D1Ev,_ZThn320_N7S1400C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev)();
extern void ABISELECT(_ZThn408_N7S1400C3D0Ev,_ZThn320_N7S1400C3D0Ev)() __attribute__((weak));
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C3__7S1400C2[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-408,-320),
  0,
  ABISELECT(160,84),
  ABISELECT(-408,-320),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__7S1400C3__7S1400C2[] = {
  ABISELECT(-424,-328),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C3__7S1400C2[] = {
  ABISELECT(-512,-376),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn568_N7S1400C3D1Ev,_ZThn404_N7S1400C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev)();
extern void ABISELECT(_ZThn568_N7S1400C3D0Ev,_ZThn404_N7S1400C3D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__7S1400C3__7S1400C2[] = {
  0,
  0,
  ABISELECT(-568,-404),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-568,-404),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A2__7S1400C3__7S1400C2[] = {
  ABISELECT(-520,-380),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__A3__7S1400C3__7S1400C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-616,-432),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C8__A1__7S1400C2[] = {
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C8__A1__7S1400C2[] = {
  0,
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void _ZN8S1400C12D1Ev();
extern void _ZN8S1400C12D0Ev();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C2[] = {
  ABISELECT(160,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN8S1400C12D1Ev,
  (VTBL_ENTRY)&_ZN8S1400C12D0Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev)();
extern void ABISELECT(_ZThn160_N8S1400C12D1Ev,_ZThn84_N8S1400C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev)();
extern void ABISELECT(_ZThn160_N8S1400C12D0Ev,_ZThn84_N8S1400C12D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__8S1400C12__7S1400C2[] = {
  0,
  0,
  ABISELECT(-160,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
static  VTT_ENTRY vtt_S1400C2[] = {
  {&(_ZTV7S1400C2[6]),  6,141},
  {&(_tg__ZTV7S1400C3__7S1400C2[6]),  6,15},
  {&(_tg__ZTV7S1400C87S1400C3__7S1400C2[3]),  3,8},
  {&(_tg__ZTV10S1400C7_nt__7S1400C87S1400C3__7S1400C2[3]),  3,4},
  {&(_tg__ZTV10S1400C7_nt__7S1400C3__7S1400C2[3]),  3,4},
  {&(_tg__ZTV7S1400C8__7S1400C3__7S1400C2[3]),  3,8},
  {&(_tg__ZTV8S1400C12__7S1400C3__7S1400C2[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__7S1400C3__7S1400C2[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C3__7S1400C2[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__7S1400C3__7S1400C2[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A2__7S1400C3__7S1400C2[2]),  2,8},
  {&(_tg__ZTV8S1400C10__A3__7S1400C3__7S1400C2[8]),  8,14},
  {&(_tg__ZTV7S1400C8__A1__7S1400C2[3]),  3,8},
  {&(_tg__ZTV10S1400C7_nt__7S1400C8__A1__7S1400C2[3]),  3,4},
  {&(_ZTV7S1400C2[67]),  67,141},
  {&(_ZTV7S1400C2[19]),  19,141},
  {&(_ZTV7S1400C2[85]),  85,141},
  {&(_ZTV7S1400C2[93]),  93,141},
  {&(_ZTV7S1400C2[97]),  97,141},
  {&(_ZTV7S1400C2[117]),  117,141},
  {&(_ZTV7S1400C2[100]),  100,141},
  {&(_ZTV7S1400C2[135]),  135,141},
  {&(_ZTV7S1400C2[47]),  47,141},
  {&(_tg__ZTV8S1400C12__7S1400C2[3]),  3,9},
  {&(_tg__ZTV7S1400C9__8S1400C12__7S1400C2[11]),  11,21},
};
extern VTBL_ENTRY _ZTI7S1400C2[];
extern  VTBL_ENTRY _ZTV7S1400C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C2[];
static VTBL_ENTRY alt_thunk_names5[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S1400C12D0Ev,_ZThn84_N8S1400C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S1400C12D1Ev,_ZThn84_N8S1400C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn568_N7S1400C3D0Ev,_ZThn404_N7S1400C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn568_N7S1400C3D1Ev,_ZThn404_N7S1400C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N7S1400C3D0Ev,_ZThn320_N7S1400C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N7S1400C3D1Ev,_ZThn320_N7S1400C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C2D0Ev,_ZTv0_n36_N7S1400C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn568_N7S1400C2D0Ev,_ZThn404_N7S1400C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C2D1Ev,_ZTv0_n36_N7S1400C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn568_N7S1400C2D1Ev,_ZThn404_N7S1400C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C2D0Ev,_ZTv0_n20_N7S1400C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N7S1400C2D0Ev,_ZThn320_N7S1400C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C2D1Ev,_ZTv0_n20_N7S1400C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N7S1400C2D1Ev,_ZThn320_N7S1400C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1400C2 = {  "S1400C2", // class name
  bases_S1400C2, 20,
  &(vtc_S1400C2[0]), // expected_vtbl_contents
  &(vtt_S1400C2[0]), // expected_vtt_contents
  ABISELECT(656,452), // object size
  NSPAIRA(_ZTI7S1400C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1400C2),141, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1400C2),25, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names5,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1400C14_nt  {
  virtual void  v29(); // _ZN11S1400C14_nt3v29Ev
  virtual void  v30(); // _ZN11S1400C14_nt3v30Ev
  virtual void  v31(); // _ZN11S1400C14_nt3v31Ev
  ~S1400C14_nt(); // tgen
  S1400C14_nt(); // tgen
};
//SIG(-1 S1400C14_nt) C1{ v1 v2 v3}


void  S1400C14_nt ::v29(){vfunc_called(this, "_ZN11S1400C14_nt3v29Ev");}
void  S1400C14_nt ::v30(){vfunc_called(this, "_ZN11S1400C14_nt3v30Ev");}
void  S1400C14_nt ::v31(){vfunc_called(this, "_ZN11S1400C14_nt3v31Ev");}
S1400C14_nt ::~S1400C14_nt(){ note_dtor("S1400C14_nt", this);} // tgen
S1400C14_nt ::S1400C14_nt(){ note_ctor("S1400C14_nt", this);} // tgen

//skip512 S1400C14_nt

#else // __cplusplus

extern void _ZN11S1400C14_ntC1Ev();
extern void _ZN11S1400C14_ntD1Ev();
Name_Map name_map_S1400C14_nt[] = {
  NSPAIR(_ZN11S1400C14_ntC1Ev),
  NSPAIR(_ZN11S1400C14_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S1400C14_nt[];
extern void _ZN11S1400C14_nt3v29Ev();
extern void _ZN11S1400C14_nt3v30Ev();
extern void _ZN11S1400C14_nt3v31Ev();
static  VTBL_ENTRY vtc_S1400C14_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S1400C14_nt[0]),
  (VTBL_ENTRY)&_ZN11S1400C14_nt3v29Ev,
  (VTBL_ENTRY)&_ZN11S1400C14_nt3v30Ev,
  (VTBL_ENTRY)&_ZN11S1400C14_nt3v31Ev,
};
extern VTBL_ENTRY _ZTI11S1400C14_nt[];
VTBL_ENTRY *P__ZTI11S1400C14_nt = _ZTI11S1400C14_nt; 
extern  VTBL_ENTRY _ZTV11S1400C14_nt[];
Class_Descriptor cd_S1400C14_nt = {  "S1400C14_nt", // class name
  0,0,//no base classes
  &(vtc_S1400C14_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S1400C14_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S1400C14_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  S1400C17_nt  {
  virtual void  v32(); // _ZN11S1400C17_nt3v32Ev
  virtual void  v33(); // _ZN11S1400C17_nt3v33Ev
  ~S1400C17_nt(); // tgen
  S1400C17_nt(); // tgen
};
//SIG(-1 S1400C17_nt) C1{ v1 v2}


void  S1400C17_nt ::v32(){vfunc_called(this, "_ZN11S1400C17_nt3v32Ev");}
void  S1400C17_nt ::v33(){vfunc_called(this, "_ZN11S1400C17_nt3v33Ev");}
S1400C17_nt ::~S1400C17_nt(){ note_dtor("S1400C17_nt", this);} // tgen
S1400C17_nt ::S1400C17_nt(){ note_ctor("S1400C17_nt", this);} // tgen

//skip512 S1400C17_nt

#else // __cplusplus

extern void _ZN11S1400C17_ntC1Ev();
extern void _ZN11S1400C17_ntD1Ev();
Name_Map name_map_S1400C17_nt[] = {
  NSPAIR(_ZN11S1400C17_ntC1Ev),
  NSPAIR(_ZN11S1400C17_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S1400C17_nt[];
extern void _ZN11S1400C17_nt3v32Ev();
extern void _ZN11S1400C17_nt3v33Ev();
static  VTBL_ENTRY vtc_S1400C17_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S1400C17_nt[0]),
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v33Ev,
};
extern VTBL_ENTRY _ZTI11S1400C17_nt[];
VTBL_ENTRY *P__ZTI11S1400C17_nt = _ZTI11S1400C17_nt; 
extern  VTBL_ENTRY _ZTV11S1400C17_nt[];
Class_Descriptor cd_S1400C17_nt = {  "S1400C17_nt", // class name
  0,0,//no base classes
  &(vtc_S1400C17_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S1400C17_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S1400C17_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  S1400C16  : virtual S1400C10 , S1400C17_nt , virtual S1400C3 {
  virtual  ~S1400C16(); // _ZN8S1400C16D2Ev
  virtual void  v34(); // _ZN8S1400C163v34Ev
  virtual void  v35(); // _ZN8S1400C163v35Ev
  virtual void  v36(); // _ZN8S1400C163v36Ev
  virtual void  v37(); // _ZN8S1400C163v37Ev
  virtual void  v38(); // _ZN8S1400C163v38Ev
  S1400C16(); // tgen
};
//SIG(-1 S1400C16) C1{ VBC2{ v6 v7 v8 v9 v10 v11 Fp[4]} BC3{ v12 v13} VBC4{ BC5{ v14 v15 v16 v17 FC6{ v19} Fi FU7{ m FL[4] FL}[6]} VBC8{ v18 Fi} BC9{ BC6 BC10{ BC2 vd v20 v21 FL} VBC8 v22 v23 Fi FC11{}} VBC12{ BC8 BC13{ v24 v25 Fs:16 FL Fp[8]} BC6 VBC10 BC2 vd v26 v27 v28 Fi} VBC2 v29 v30 v31 Fi[2]} vd v1 v2 v3 v4 v5}


 S1400C16 ::~S1400C16(){ note_dtor("S1400C16", this);}
void  S1400C16 ::v34(){vfunc_called(this, "_ZN8S1400C163v34Ev");}
void  S1400C16 ::v35(){vfunc_called(this, "_ZN8S1400C163v35Ev");}
void  S1400C16 ::v36(){vfunc_called(this, "_ZN8S1400C163v36Ev");}
void  S1400C16 ::v37(){vfunc_called(this, "_ZN8S1400C163v37Ev");}
void  S1400C16 ::v38(){vfunc_called(this, "_ZN8S1400C163v38Ev");}
S1400C16 ::S1400C16(){ note_ctor("S1400C16", this);} // tgen

static void Test_S1400C16()
{
  extern Class_Descriptor cd_S1400C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(71,100)];
    init_test(&cd_S1400C16, buf);
    S1400C16 *dp, &lv = *(dp=new (buf) S1400C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,396), "sizeof(S1400C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1400C16)");
    /*is_ambiguous_... S1400C16::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*), ABISELECT(8,4), "S1400C16");
    /*is_ambiguous_... S1400C3::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C3*), ABISELECT(8,4), "S1400C16");
    check_base_class_offset(lv, (S1400C17_nt*), 0, "S1400C16");
    check_base_class_offset(lv, (S1400C4*)(S1400C3*), ABISELECT(48,24), "S1400C16");
    /*is_ambiguous_... S1400C3::S1400C7_nt */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C3*), ABISELECT(336,276), "S1400C16");
    check_base_class_offset(lv, (S1400C7_nt*)(S1400C8*)(S1400C3*), ABISELECT(336,276), "S1400C16");
    check_base_class_offset(lv, (S1400C5_nt*)(S1400C8*)(S1400C3*), ABISELECT(264,228), "S1400C16");
    check_base_class_offset(lv, (S1400C10*)(S1400C9*)(S1400C8*)(S1400C3*), ABISELECT(272,232), "S1400C16");
    check_base_class_offset(lv, (S1400C9*)(S1400C8*)(S1400C3*), ABISELECT(272,232), "S1400C16");
    check_base_class_offset(lv, (S1400C8*)(S1400C3*), ABISELECT(264,228), "S1400C16");
    check_base_class_offset(lv, (S1400C7_nt*)(S1400C12*), ABISELECT(352,284), "S1400C16");
    check_base_class_offset(lv, (S1400C13*)(S1400C12*), ABISELECT(368,292), "S1400C16");
    check_base_class_offset(lv, (S1400C5_nt*)(S1400C12*), ABISELECT(456,340), "S1400C16");
    /*is_ambiguous_... S1400C16::S1400C9 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*), ABISELECT(512,368), "S1400C16");
    check_base_class_offset(lv, (S1400C9*)(S1400C12*), ABISELECT(512,368), "S1400C16");
    /*is_ambiguous_... S1400C12::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C12*), ABISELECT(464,344), "S1400C16");
    check_base_class_offset(lv, (S1400C12*)(S1400C3*), ABISELECT(352,284), "S1400C16");
    check_base_class_offset(lv, (S1400C3*), ABISELECT(48,24), "S1400C16");
    test_class_info(&lv, &cd_S1400C16);
    dp->~S1400C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1400C16(Test_S1400C16, "S1400C16", ABISELECT(560,396));

#else // __cplusplus

extern void _ZN8S1400C16C1Ev();
extern void _ZN8S1400C16D2Ev();
Name_Map name_map_S1400C16[] = {
  NSPAIR(_ZN8S1400C16C1Ev),
  NSPAIR(_ZN8S1400C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C17_nt;
extern VTBL_ENTRY _ZTI11S1400C17_nt[];
extern  VTBL_ENTRY _ZTV11S1400C17_nt[];
extern Class_Descriptor cd_S1400C4;
extern VTBL_ENTRY _ZTI7S1400C4[];
extern  VTBL_ENTRY _ZTV7S1400C4[];
extern Class_Descriptor cd_S1400C7_nt;
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C8;
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
extern Class_Descriptor cd_S1400C7_nt;
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
extern Class_Descriptor cd_S1400C13;
extern VTBL_ENTRY _ZTI8S1400C13[];
extern  VTBL_ENTRY _ZTV8S1400C13[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C12;
extern VTBL_ENTRY _ZTI8S1400C12[];
extern  VTBL_ENTRY _ZTV8S1400C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1400C12[];
extern Class_Descriptor cd_S1400C3;
extern VTBL_ENTRY _ZTI7S1400C3[];
extern  VTBL_ENTRY _ZTV7S1400C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C3[];
static Base_Class bases_S1400C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1400C10,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    8, //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_S1400C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S1400C4,    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
    10, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1400C7_nt,    ABISELECT(336,276), //bcp->offset
    84, //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
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1400C5_nt,    ABISELECT(264,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
    11, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(272,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
    12, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(272,232), //bcp->offset
    72, //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
    13, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1400C8,    ABISELECT(264,228), //bcp->offset
    64, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1400C7_nt,    ABISELECT(352,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
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1400C13,    ABISELECT(368,292), //bcp->offset
    111, //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
    14, //immediately_derived
  0, 0},
  {&cd_S1400C5_nt,    ABISELECT(456,340), //bcp->offset
    115, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(512,368), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(512,368), //bcp->offset
    126, //bcp->virtual_function_table_offset
    11, //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
    14, //immediately_derived
  0, 1},
  {&cd_S1400C10,    ABISELECT(464,344), //bcp->offset
    118, //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
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1400C12,    ABISELECT(352,284), //bcp->offset
    88, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S1400C3,    ABISELECT(48,24), //bcp->offset
    30, //bcp->virtual_function_table_offset
    25, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S1400C16[];
extern void _ZN11S1400C17_nt3v32Ev();
extern void _ZN11S1400C17_nt3v33Ev();
extern void _ZN8S1400C16D1Ev();
extern void _ZN8S1400C16D0Ev();
extern void _ZN8S1400C163v34Ev();
extern void _ZN8S1400C163v35Ev();
extern void _ZN8S1400C163v36Ev();
extern void _ZN8S1400C163v37Ev();
extern void _ZN8S1400C163v38Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void ABISELECT(_ZTv0_n112_N8S1400C16D1Ev,_ZTv0_n56_N8S1400C16D1Ev)();
extern void ABISELECT(_ZThn48_N8S1400C16D1Ev,_ZThn24_N8S1400C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S1400C16D0Ev,_ZTv0_n56_N8S1400C16D0Ev)();
extern void ABISELECT(_ZThn48_N8S1400C16D0Ev,_ZThn24_N8S1400C16D0Ev)() __attribute__((weak));
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZTvn216_n112_N8S1400C16D1Ev,_ZTvn204_n56_N8S1400C16D1Ev)();
extern void ABISELECT(_ZTvn216_n112_N8S1400C16D0Ev,_ZTvn204_n56_N8S1400C16D0Ev)();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTvn224_n112_N8S1400C16D1Ev,_ZTvn208_n56_N8S1400C16D1Ev)();
extern void ABISELECT(_ZTvn224_n112_N8S1400C16D0Ev,_ZTvn208_n56_N8S1400C16D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN10S1400C7_nt3v17Ev();
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N8S1400C16D1Ev,_ZTv0_n20_N8S1400C16D1Ev)();
extern void ABISELECT(_ZThn352_N8S1400C16D1Ev,_ZThn284_N8S1400C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S1400C16D0Ev,_ZTv0_n20_N8S1400C16D0Ev)();
extern void ABISELECT(_ZThn352_N8S1400C16D0Ev,_ZThn284_N8S1400C16D0Ev)() __attribute__((weak));
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N8S1400C16D1Ev,_ZTv0_n36_N8S1400C16D1Ev)();
extern void ABISELECT(_ZThn512_N8S1400C16D1Ev,_ZThn368_N8S1400C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1400C16D0Ev,_ZTv0_n36_N8S1400C16D0Ev)();
extern void ABISELECT(_ZThn512_N8S1400C16D0Ev,_ZThn368_N8S1400C16D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY vtc_S1400C16[] = {
  ABISELECT(512,368),
  ABISELECT(352,284),
  ABISELECT(336,276),
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v33Ev,
  (VTBL_ENTRY)&_ZN8S1400C16D1Ev,
  (VTBL_ENTRY)&_ZN8S1400C16D0Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v34Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v35Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v36Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v37Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v38Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(-48,-24),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(464,344),
  ABISELECT(304,260),
  ABISELECT(288,252),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C16D1Ev,_ZTv0_n56_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C16D0Ev,_ZTv0_n56_N8S1400C16D0Ev),
  ABISELECT(72,48),
  ABISELECT(-264,-228),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C16D1Ev,_ZTvn204_n56_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C16D0Ev,_ZTvn204_n56_N8S1400C16D0Ev),
  ABISELECT(-272,-232),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C16D1Ev,_ZTvn208_n56_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C16D0Ev,_ZTvn208_n56_N8S1400C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  0,
  ABISELECT(-336,-276),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-352,-284),
  0,
  ABISELECT(160,84),
  ABISELECT(-352,-284),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S1400C16D1Ev,_ZTv0_n20_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S1400C16D0Ev,_ZTv0_n20_N8S1400C16D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
  ABISELECT(-368,-292),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
  ABISELECT(-456,-340),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  ABISELECT(-464,-344),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  0,
  0,
  ABISELECT(-512,-368),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-512,-368),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C16D1Ev,_ZTv0_n36_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C16D0Ev,_ZTv0_n36_N8S1400C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern VTBL_ENTRY _ZTV8S1400C16[];
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C3D1Ev();
extern void _ZN7S1400C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C3__8S1400C16[] = {
  ABISELECT(-40,-20),
  ABISELECT(464,344),
  ABISELECT(304,260),
  ABISELECT(288,252),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D0Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C3__8S1400C16[] = {
  ABISELECT(72,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C87S1400C3__8S1400C16[] = {
  0,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C3__8S1400C16[] = {
  0,
  ABISELECT(-288,-252),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C8__7S1400C3__8S1400C16[] = {
  ABISELECT(72,48),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn304_N7S1400C3D1Ev,_ZThn260_N7S1400C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev)();
extern void ABISELECT(_ZThn304_N7S1400C3D0Ev,_ZThn260_N7S1400C3D0Ev)() __attribute__((weak));
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C3__8S1400C16[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-304,-260),
  0,
  ABISELECT(160,84),
  ABISELECT(-304,-260),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__7S1400C3__8S1400C16[] = {
  ABISELECT(-320,-268),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C3__8S1400C16[] = {
  ABISELECT(-408,-316),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn464_N7S1400C3D1Ev,_ZThn344_N7S1400C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev)();
extern void ABISELECT(_ZThn464_N7S1400C3D0Ev,_ZThn344_N7S1400C3D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__7S1400C3__8S1400C16[] = {
  0,
  0,
  ABISELECT(-464,-344),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-464,-344),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A2__7S1400C3__8S1400C16[] = {
  ABISELECT(-416,-320),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__A3__7S1400C3__8S1400C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void _ZN8S1400C12D1Ev();
extern void _ZN8S1400C12D0Ev();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__8S1400C16[] = {
  ABISELECT(160,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN8S1400C12D1Ev,
  (VTBL_ENTRY)&_ZN8S1400C12D0Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev)();
extern void ABISELECT(_ZThn160_N8S1400C12D1Ev,_ZThn84_N8S1400C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev)();
extern void ABISELECT(_ZThn160_N8S1400C12D0Ev,_ZThn84_N8S1400C12D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__8S1400C12__8S1400C16[] = {
  0,
  0,
  ABISELECT(-160,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
static  VTT_ENTRY vtt_S1400C16[] = {
  {&(_ZTV8S1400C16[7]),  7,147},
  {&(_ZTV8S1400C16[24]),  24,147},
  {&(_ZTV8S1400C16[55]),  55,147},
  {&(_ZTV8S1400C16[87]),  87,147},
  {&(_ZTV8S1400C16[67]),  67,147},
  {&(_ZTV8S1400C16[74]),  74,147},
  {&(_ZTV8S1400C16[105]),  105,147},
  {&(_ZTV8S1400C16[113]),  113,147},
  {&(_ZTV8S1400C16[117]),  117,147},
  {&(_ZTV8S1400C16[137]),  137,147},
  {&(_ZTV8S1400C16[120]),  120,147},
  {&(_tg__ZTV7S1400C3__8S1400C16[6]),  6,15},
  {&(_tg__ZTV7S1400C87S1400C3__8S1400C16[3]),  3,8},
  {&(_tg__ZTV10S1400C7_nt__7S1400C87S1400C3__8S1400C16[3]),  3,4},
  {&(_tg__ZTV10S1400C7_nt__7S1400C3__8S1400C16[3]),  3,4},
  {&(_tg__ZTV7S1400C8__7S1400C3__8S1400C16[3]),  3,8},
  {&(_tg__ZTV8S1400C12__7S1400C3__8S1400C16[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__7S1400C3__8S1400C16[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C3__8S1400C16[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__7S1400C3__8S1400C16[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A2__7S1400C3__8S1400C16[2]),  2,8},
  {&(_tg__ZTV8S1400C10__A3__7S1400C3__8S1400C16[8]),  8,14},
  {&(_tg__ZTV8S1400C12__8S1400C16[3]),  3,9},
  {&(_tg__ZTV7S1400C9__8S1400C12__8S1400C16[11]),  11,21},
};
extern VTBL_ENTRY _ZTI8S1400C16[];
extern  VTBL_ENTRY _ZTV8S1400C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1400C16[];
static VTBL_ENTRY alt_thunk_names6[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S1400C12D0Ev,_ZThn84_N8S1400C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S1400C12D1Ev,_ZThn84_N8S1400C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S1400C3D0Ev,_ZThn344_N7S1400C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S1400C3D1Ev,_ZThn344_N7S1400C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1400C3D0Ev,_ZThn260_N7S1400C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1400C3D1Ev,_ZThn260_N7S1400C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C16D0Ev,_ZTv0_n36_N8S1400C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn512_N8S1400C16D0Ev,_ZThn368_N8S1400C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C16D1Ev,_ZTv0_n36_N8S1400C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn512_N8S1400C16D1Ev,_ZThn368_N8S1400C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S1400C16D0Ev,_ZTv0_n20_N8S1400C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S1400C16D0Ev,_ZThn284_N8S1400C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S1400C16D1Ev,_ZTv0_n20_N8S1400C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S1400C16D1Ev,_ZThn284_N8S1400C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S1400C16D0Ev,_ZTv0_n56_N8S1400C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S1400C16D0Ev,_ZThn24_N8S1400C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S1400C16D1Ev,_ZTv0_n56_N8S1400C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S1400C16D1Ev,_ZThn24_N8S1400C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1400C16 = {  "S1400C16", // class name
  bases_S1400C16, 16,
  &(vtc_S1400C16[0]), // expected_vtbl_contents
  &(vtt_S1400C16[0]), // expected_vtt_contents
  ABISELECT(560,396), // object size
  NSPAIRA(_ZTI8S1400C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S1400C16),147, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1400C16),24, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names6,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1400C15  : virtual S1400C3 , virtual S1400C16 , virtual S1400C2 {
  void *s1400c15f0;
  short  :0;
  virtual void  v39(); // _ZN8S1400C153v39Ev
  virtual void  v40(); // _ZN8S1400C153v40Ev
  virtual void  v41(); // _ZN8S1400C153v41Ev
  virtual void  v42(); // _ZN8S1400C153v42Ev
  ~S1400C15(); // tgen
  S1400C15(); // tgen
};
//SIG(-1 S1400C15) C1{ VBC2{ BC3{ v5 v6 v7 v8 FC4{ v10} Fi FU5{ m FL[4] FL}[6]} VBC6{ v9 Fi} BC7{ BC4 BC8{ BC9{ v11 v12 v13 v14 v15 v16 Fp[4]} vd v17 v18 FL} VBC6 v19 v20 Fi FC10{}} VBC11{ BC6 BC12{ v21 v22 Fs:16 FL Fp[8]} BC4 VBC8 BC9 vd v23 v24 v25 Fi} VBC9 v26 v27 v28 Fi[2]} VBC13{ VBC9 BC14{ v29 v30} VBC2 vd v31 v32 v33 v34 v35} VBC15{ BC2 BC9 BC7 vd v36} v1 v2 v3 v4 Fp Fs:0}


void  S1400C15 ::v39(){vfunc_called(this, "_ZN8S1400C153v39Ev");}
void  S1400C15 ::v40(){vfunc_called(this, "_ZN8S1400C153v40Ev");}
void  S1400C15 ::v41(){vfunc_called(this, "_ZN8S1400C153v41Ev");}
void  S1400C15 ::v42(){vfunc_called(this, "_ZN8S1400C153v42Ev");}
S1400C15 ::~S1400C15(){ note_dtor("S1400C15", this);} // tgen
S1400C15 ::S1400C15(){ note_ctor("S1400C15", this);} // tgen

static void Test_S1400C15()
{
  extern Class_Descriptor cd_S1400C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(121,179)];
    init_test(&cd_S1400C15, buf);
    S1400C15 *dp, &lv = *(dp=new (buf) S1400C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(960,712), "sizeof(S1400C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1400C15)");
    /*is_ambiguous_... S1400C15::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C4*)(S1400C3*), ABISELECT(16,8), "S1400C15");
    /*is_ambiguous_... S1400C15::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C3*), ABISELECT(304,260), "S1400C15");
    /*is_ambiguous_... S1400C15::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C8*)(S1400C3*), ABISELECT(304,260), "S1400C15");
    /*is_ambiguous_... S1400C3::S1400C7_nt */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C3*)(S1400C2*), ABISELECT(304,260), "S1400C15");
    check_base_class_offset(lv, (S1400C7_nt*)(S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(304,260), "S1400C15");
    /*is_ambiguous_... S1400C2::S1400C8 */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C8*)(S1400C2*), ABISELECT(304,260), "S1400C15");
    /*is_ambiguous_... S1400C15::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C5_nt*)(S1400C8*)(S1400C3*), ABISELECT(232,212), "S1400C15");
    /*is_ambiguous_... S1400C15::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*)(S1400C8*)(S1400C3*), ABISELECT(240,216), "S1400C15");
    /*is_ambiguous_... S1400C15::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C9*)(S1400C8*)(S1400C3*), ABISELECT(240,216), "S1400C15");
    /*is_ambiguous_... S1400C15::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C8*)(S1400C3*), ABISELECT(232,212), "S1400C15");
    check_base_class_offset(lv, (S1400C7_nt*)(S1400C12*), ABISELECT(320,268), "S1400C15");
    check_base_class_offset(lv, (S1400C13*)(S1400C12*), ABISELECT(336,276), "S1400C15");
    check_base_class_offset(lv, (S1400C5_nt*)(S1400C12*), ABISELECT(424,324), "S1400C15");
    /*is_ambiguous_... S1400C15::S1400C9 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*), ABISELECT(480,352), "S1400C15");
    check_base_class_offset(lv, (S1400C9*)(S1400C12*), ABISELECT(480,352), "S1400C15");
    /*is_ambiguous_... S1400C12::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C12*), ABISELECT(432,328), "S1400C15");
    /*is_ambiguous_... S1400C15::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C12*)(S1400C3*), ABISELECT(320,268), "S1400C15");
    check_base_class_offset(lv, (S1400C12*)(S1400C3*)(S1400C2*), ABISELECT(320,268), "S1400C15");
    /*is_ambiguous_... S1400C15::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C3*), ABISELECT(528,380), "S1400C15");
    /*is_ambiguous_... S1400C16::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C16*), ABISELECT(528,380), "S1400C15");
    /*is_ambiguous_... S1400C3::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C3*)(S1400C2*), ABISELECT(528,380), "S1400C15");
    /*is_ambiguous_... S1400C15::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C3*), ABISELECT(16,8), "S1400C15");
    check_base_class_offset(lv, (S1400C3*)(S1400C16*), ABISELECT(16,8), "S1400C15");
    check_base_class_offset(lv, (S1400C17_nt*)(S1400C16*), 0, "S1400C15");
    check_base_class_offset(lv, (S1400C16*), 0, "S1400C15");
    check_base_class_offset(lv, (S1400C4*)(S1400C3*)(S1400C2*), ABISELECT(568,400), "S1400C15");
    check_base_class_offset(lv, (S1400C5_nt*)(S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(784,604), "S1400C15");
    check_base_class_offset(lv, (S1400C10*)(S1400C9*)(S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(792,608), "S1400C15");
    check_base_class_offset(lv, (S1400C9*)(S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(792,608), "S1400C15");
    check_base_class_offset(lv, (S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(784,604), "S1400C15");
    check_base_class_offset(lv, (S1400C3*)(S1400C2*), ABISELECT(568,400), "S1400C15");
    /*is_ambiguous_... S1400C2::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C2*), ABISELECT(856,652), "S1400C15");
    /*is_ambiguous_... S1400C2::S1400C8 */ AMB_check_base_class_offset(lv, (S1400C5_nt*)(S1400C8*)(S1400C2*), ABISELECT(896,672), "S1400C15");
    /*is_ambiguous_... S1400C2::S1400C8 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*)(S1400C8*)(S1400C2*), ABISELECT(904,676), "S1400C15");
    /*is_ambiguous_... S1400C2::S1400C8 */ AMB_check_base_class_offset(lv, (S1400C9*)(S1400C8*)(S1400C2*), ABISELECT(904,676), "S1400C15");
    /*is_ambiguous_... S1400C2::S1400C8 */ AMB_check_base_class_offset(lv, (S1400C8*)(S1400C2*), ABISELECT(896,672), "S1400C15");
    check_base_class_offset(lv, (S1400C2*), ABISELECT(568,400), "S1400C15");
    check_field_offset(lv, s1400c15f0, ABISELECT(8,4), "S1400C15.s1400c15f0");
    test_class_info(&lv, &cd_S1400C15);
    dp->~S1400C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1400C15(Test_S1400C15, "S1400C15", ABISELECT(960,712));

#else // __cplusplus

extern void _ZN8S1400C15C1Ev();
extern void _ZN8S1400C15D1Ev();
Name_Map name_map_S1400C15[] = {
  NSPAIR(_ZN8S1400C15C1Ev),
  NSPAIR(_ZN8S1400C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1400C4;
extern VTBL_ENTRY _ZTI7S1400C4[];
extern  VTBL_ENTRY _ZTV7S1400C4[];
extern Class_Descriptor cd_S1400C7_nt;
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C8;
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
extern Class_Descriptor cd_S1400C7_nt;
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
extern Class_Descriptor cd_S1400C13;
extern VTBL_ENTRY _ZTI8S1400C13[];
extern  VTBL_ENTRY _ZTV8S1400C13[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C12;
extern VTBL_ENTRY _ZTI8S1400C12[];
extern  VTBL_ENTRY _ZTV8S1400C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1400C12[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C3;
extern VTBL_ENTRY _ZTI7S1400C3[];
extern  VTBL_ENTRY _ZTV7S1400C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C3[];
extern Class_Descriptor cd_S1400C17_nt;
extern VTBL_ENTRY _ZTI11S1400C17_nt[];
extern  VTBL_ENTRY _ZTV11S1400C17_nt[];
extern Class_Descriptor cd_S1400C16;
extern VTBL_ENTRY _ZTI8S1400C16[];
extern  VTBL_ENTRY _ZTV8S1400C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1400C16[];
extern Class_Descriptor cd_S1400C4;
extern VTBL_ENTRY _ZTI7S1400C4[];
extern  VTBL_ENTRY _ZTV7S1400C4[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C8;
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
extern Class_Descriptor cd_S1400C3;
extern VTBL_ENTRY _ZTI7S1400C3[];
extern  VTBL_ENTRY _ZTV7S1400C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C3[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C8;
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
extern Class_Descriptor cd_S1400C2;
extern VTBL_ENTRY _ZTI7S1400C2[];
extern  VTBL_ENTRY _ZTV7S1400C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C2[];
static Base_Class bases_S1400C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1400C4,    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
    14, //immediately_derived
  0, 0},
  {&cd_S1400C7_nt,    ABISELECT(304,260), //bcp->offset
    84, //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
    5, //immediately_derived
  0, 1},
  {&cd_S1400C5_nt,    ABISELECT(232,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
    11, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(240,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
    12, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(240,216), //bcp->offset
    72, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1400C8,    ABISELECT(232,212), //bcp->offset
    64, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1400C7_nt,    ABISELECT(320,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
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C13,    ABISELECT(336,276), //bcp->offset
    111, //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
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C5_nt,    ABISELECT(424,324), //bcp->offset
    115, //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
    12, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(480,352), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(480,352), //bcp->offset
    126, //bcp->virtual_function_table_offset
    11, //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
    12, //immediately_derived
  0, 1},
  {&cd_S1400C10,    ABISELECT(432,328), //bcp->offset
    118, //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
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C12,    ABISELECT(320,268), //bcp->offset
    88, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1400C10,    ABISELECT(528,380), //bcp->offset
    147, //bcp->virtual_function_table_offset
    8, //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
    14, //immediately_derived
  0, 1},
  {&cd_S1400C3,    ABISELECT(16,8), //bcp->offset
    30, //bcp->virtual_function_table_offset
    25, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1400C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1400C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1400C4,    ABISELECT(568,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
    18, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S1400C5_nt,    ABISELECT(784,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
    19, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(792,608), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(792,608), //bcp->offset
    205, //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
    21, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S1400C8,    ABISELECT(784,604), //bcp->offset
    197, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S1400C3,    ABISELECT(568,400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(856,652), //bcp->offset
    217, //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
    24, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S1400C5_nt,    ABISELECT(896,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
    25, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(904,676), //bcp->offset
    -1, //bcp->virtual_function_table_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
    26, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(904,676), //bcp->offset
    233, //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
    27, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S1400C8,    ABISELECT(896,672), //bcp->offset
    225, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S1400C2,    ABISELECT(568,400), //bcp->offset
    161, //bcp->virtual_function_table_offset
    26, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S1400C15[];
extern void _ZN11S1400C17_nt3v32Ev();
extern void _ZN11S1400C17_nt3v33Ev();
extern void _ZN8S1400C15D1Ev();
extern void _ZN8S1400C15D0Ev();
extern void _ZN8S1400C163v34Ev();
extern void _ZN8S1400C163v35Ev();
extern void _ZN8S1400C163v36Ev();
extern void _ZN8S1400C163v37Ev();
extern void _ZN8S1400C163v38Ev();
extern void _ZN8S1400C153v39Ev();
extern void _ZN8S1400C153v40Ev();
extern void _ZN8S1400C153v41Ev();
extern void _ZN8S1400C153v42Ev();
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void ABISELECT(_ZTv0_n112_N8S1400C15D1Ev,_ZTv0_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZThn16_N8S1400C15D1Ev,_ZThn8_N8S1400C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S1400C15D0Ev,_ZTv0_n56_N8S1400C15D0Ev)();
extern void ABISELECT(_ZThn16_N8S1400C15D0Ev,_ZThn8_N8S1400C15D0Ev)() __attribute__((weak));
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZTvn216_n112_N8S1400C15D1Ev,_ZTvn204_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTvn216_n112_N8S1400C15D0Ev,_ZTvn204_n56_N8S1400C15D0Ev)();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTvn224_n112_N8S1400C15D1Ev,_ZTvn208_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTvn224_n112_N8S1400C15D0Ev,_ZTvn208_n56_N8S1400C15D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN10S1400C7_nt3v17Ev();
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N8S1400C15D1Ev,_ZTv0_n20_N8S1400C15D1Ev)();
extern void ABISELECT(_ZThn320_N8S1400C15D1Ev,_ZThn268_N8S1400C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S1400C15D0Ev,_ZTv0_n20_N8S1400C15D0Ev)();
extern void ABISELECT(_ZThn320_N8S1400C15D0Ev,_ZThn268_N8S1400C15D0Ev)() __attribute__((weak));
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N8S1400C15D1Ev,_ZTv0_n36_N8S1400C15D1Ev)();
extern void ABISELECT(_ZThn480_N8S1400C15D1Ev,_ZThn352_N8S1400C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1400C15D0Ev,_ZTv0_n36_N8S1400C15D0Ev)();
extern void ABISELECT(_ZThn480_N8S1400C15D0Ev,_ZThn352_N8S1400C15D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void ABISELECT(_ZTv0_n112_N8S1400C15D1Ev,_ZTv0_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZThn568_N8S1400C15D1Ev,_ZThn400_N8S1400C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S1400C15D0Ev,_ZTv0_n56_N8S1400C15D0Ev)();
extern void ABISELECT(_ZThn568_N8S1400C15D0Ev,_ZThn400_N8S1400C15D0Ev)() __attribute__((weak));
extern void _ZN7S1400C23v28Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZTvn216_n112_N8S1400C15D1Ev,_ZTvn204_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTvn216_n112_N8S1400C15D0Ev,_ZTvn204_n56_N8S1400C15D0Ev)();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTvn224_n112_N8S1400C15D1Ev,_ZTvn208_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTvn224_n112_N8S1400C15D0Ev,_ZTvn208_n56_N8S1400C15D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZTvn328_n112_N8S1400C15D1Ev,_ZTvn272_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTvn328_n112_N8S1400C15D0Ev,_ZTvn272_n56_N8S1400C15D0Ev)();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTvn336_n112_N8S1400C15D1Ev,_ZTvn276_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTvn336_n112_N8S1400C15D0Ev,_ZTvn276_n56_N8S1400C15D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY vtc_S1400C15[] = {
  ABISELECT(568,400),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(480,352),
  ABISELECT(320,268),
  ABISELECT(304,260),
  ABISELECT(16,8),
  ABISELECT(528,380),
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v33Ev,
  (VTBL_ENTRY)&_ZN8S1400C15D1Ev,
  (VTBL_ENTRY)&_ZN8S1400C15D0Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v34Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v35Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v36Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v37Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v38Ev,
  (VTBL_ENTRY)&_ZN8S1400C153v39Ev,
  (VTBL_ENTRY)&_ZN8S1400C153v40Ev,
  (VTBL_ENTRY)&_ZN8S1400C153v41Ev,
  (VTBL_ENTRY)&_ZN8S1400C153v42Ev,
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(512,372),
  ABISELECT(464,344),
  ABISELECT(304,260),
  ABISELECT(288,252),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C15D1Ev,_ZTv0_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C15D0Ev,_ZTv0_n56_N8S1400C15D0Ev),
  ABISELECT(72,48),
  ABISELECT(-232,-212),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C15D1Ev,_ZTvn204_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C15D0Ev,_ZTvn204_n56_N8S1400C15D0Ev),
  ABISELECT(-240,-216),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C15D1Ev,_ZTvn208_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C15D0Ev,_ZTvn208_n56_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  0,
  ABISELECT(-304,-260),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-320,-268),
  0,
  ABISELECT(160,84),
  ABISELECT(-320,-268),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S1400C15D1Ev,_ZTv0_n20_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S1400C15D0Ev,_ZTv0_n20_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
  ABISELECT(-336,-276),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
  ABISELECT(-424,-324),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  ABISELECT(-432,-328),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  0,
  0,
  ABISELECT(-480,-352),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-480,-352),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C15D1Ev,_ZTv0_n36_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C15D0Ev,_ZTv0_n36_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-528,-380),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  0,
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(-568,-400),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-88,-48),
  ABISELECT(-248,-132),
  ABISELECT(-264,-140),
  ABISELECT(-568,-400),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C15D1Ev,_ZTv0_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C15D0Ev,_ZTv0_n56_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C23v28Ev,
  ABISELECT(-480,-344),
  ABISELECT(-784,-604),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C15D1Ev,_ZTvn204_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C15D0Ev,_ZTvn204_n56_N8S1400C15D0Ev),
  ABISELECT(-792,-608),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C15D1Ev,_ZTvn208_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C15D0Ev,_ZTvn208_n56_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  ABISELECT(-856,-652),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  ABISELECT(-592,-412),
  ABISELECT(-896,-672),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn328_n112_N8S1400C15D1Ev,_ZTvn272_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn328_n112_N8S1400C15D0Ev,_ZTvn272_n56_N8S1400C15D0Ev),
  ABISELECT(-904,-676),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn336_n112_N8S1400C15D1Ev,_ZTvn276_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn336_n112_N8S1400C15D0Ev,_ZTvn276_n56_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern VTBL_ENTRY _ZTV8S1400C15[];
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C3D1Ev();
extern void _ZN7S1400C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C3__8S1400C15[] = {
  ABISELECT(512,372),
  ABISELECT(464,344),
  ABISELECT(304,260),
  ABISELECT(288,252),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D0Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C3__8S1400C15[] = {
  ABISELECT(72,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C87S1400C3__8S1400C15[] = {
  0,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C3__8S1400C15[] = {
  0,
  ABISELECT(-288,-252),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C8__7S1400C3__8S1400C15[] = {
  ABISELECT(72,48),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn304_N7S1400C3D1Ev,_ZThn260_N7S1400C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev)();
extern void ABISELECT(_ZThn304_N7S1400C3D0Ev,_ZThn260_N7S1400C3D0Ev)() __attribute__((weak));
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C3__8S1400C15[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-304,-260),
  0,
  ABISELECT(160,84),
  ABISELECT(-304,-260),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__7S1400C3__8S1400C15[] = {
  ABISELECT(-320,-268),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C3__8S1400C15[] = {
  ABISELECT(-408,-316),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn464_N7S1400C3D1Ev,_ZThn344_N7S1400C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev)();
extern void ABISELECT(_ZThn464_N7S1400C3D0Ev,_ZThn344_N7S1400C3D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__7S1400C3__8S1400C15[] = {
  0,
  0,
  ABISELECT(-464,-344),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-464,-344),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A2__7S1400C3__8S1400C15[] = {
  ABISELECT(-416,-320),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__A3__7S1400C3__8S1400C15[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-512,-372),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void _ZN8S1400C12D1Ev();
extern void _ZN8S1400C12D0Ev();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__8S1400C15[] = {
  ABISELECT(160,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN8S1400C12D1Ev,
  (VTBL_ENTRY)&_ZN8S1400C12D0Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev)();
extern void ABISELECT(_ZThn160_N8S1400C12D1Ev,_ZThn84_N8S1400C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev)();
extern void ABISELECT(_ZThn160_N8S1400C12D0Ev,_ZThn84_N8S1400C12D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__8S1400C12__8S1400C15[] = {
  0,
  0,
  ABISELECT(-160,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN11S1400C17_nt3v32Ev();
extern void _ZN11S1400C17_nt3v33Ev();
extern void _ZN8S1400C16D1Ev();
extern void _ZN8S1400C16D0Ev();
extern void _ZN8S1400C163v34Ev();
extern void _ZN8S1400C163v35Ev();
extern void _ZN8S1400C163v36Ev();
extern void _ZN8S1400C163v37Ev();
extern void _ZN8S1400C163v38Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C16__8S1400C15[] = {
  ABISELECT(480,352),
  ABISELECT(320,268),
  ABISELECT(304,260),
  ABISELECT(16,8),
  ABISELECT(528,380),
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v33Ev,
  (VTBL_ENTRY)&_ZN8S1400C16D1Ev,
  (VTBL_ENTRY)&_ZN8S1400C16D0Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v34Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v35Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v36Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v37Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v38Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__8S1400C16__8S1400C15[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-528,-380),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void ABISELECT(_ZTv0_n112_N8S1400C16D1Ev,_ZTv0_n56_N8S1400C16D1Ev)();
extern void ABISELECT(_ZThn16_N8S1400C16D1Ev,_ZThn8_N8S1400C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S1400C16D0Ev,_ZTv0_n56_N8S1400C16D0Ev)();
extern void ABISELECT(_ZThn16_N8S1400C16D0Ev,_ZThn8_N8S1400C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S1400C3__8S1400C16__8S1400C15[] = {
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(512,372),
  ABISELECT(464,344),
  ABISELECT(304,260),
  ABISELECT(288,252),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C16D1Ev,_ZTv0_n56_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C16D0Ev,_ZTv0_n56_N8S1400C16D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__8S1400C16__8S1400C15[] = {
  0,
  ABISELECT(-304,-260),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZTvn216_n112_N8S1400C16D1Ev,_ZTvn204_n56_N8S1400C16D1Ev)();
extern void ABISELECT(_ZTvn216_n112_N8S1400C16D0Ev,_ZTvn204_n56_N8S1400C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C3__8S1400C16__8S1400C15[] = {
  ABISELECT(72,48),
  ABISELECT(-232,-212),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C16D1Ev,_ZTvn204_n56_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C16D0Ev,_ZTvn204_n56_N8S1400C16D0Ev),
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTvn224_n112_N8S1400C16D1Ev,_ZTvn208_n56_N8S1400C16D1Ev)();
extern void ABISELECT(_ZTvn224_n112_N8S1400C16D0Ev,_ZTvn208_n56_N8S1400C16D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C97S1400C87S1400C3__8S1400C16__8S1400C15[] = {
  ABISELECT(-240,-216),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C16D1Ev,_ZTvn208_n56_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C16D0Ev,_ZTvn208_n56_N8S1400C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N8S1400C16D1Ev,_ZTv0_n20_N8S1400C16D1Ev)();
extern void ABISELECT(_ZThn320_N8S1400C16D1Ev,_ZThn268_N8S1400C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S1400C16D0Ev,_ZTv0_n20_N8S1400C16D0Ev)();
extern void ABISELECT(_ZThn320_N8S1400C16D0Ev,_ZThn268_N8S1400C16D0Ev)() __attribute__((weak));
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__8S1400C16__8S1400C15[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-320,-268),
  0,
  ABISELECT(160,84),
  ABISELECT(-320,-268),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S1400C16D1Ev,_ZTv0_n20_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S1400C16D0Ev,_ZTv0_n20_N8S1400C16D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__8S1400C16__8S1400C15[] = {
  ABISELECT(-336,-276),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__8S1400C16__8S1400C15[] = {
  ABISELECT(-424,-324),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N8S1400C16D1Ev,_ZTv0_n36_N8S1400C16D1Ev)();
extern void ABISELECT(_ZThn480_N8S1400C16D1Ev,_ZThn352_N8S1400C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1400C16D0Ev,_ZTv0_n36_N8S1400C16D0Ev)();
extern void ABISELECT(_ZThn480_N8S1400C16D0Ev,_ZThn352_N8S1400C16D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__8S1400C16__8S1400C15[] = {
  0,
  0,
  ABISELECT(-480,-352),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-480,-352),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C16D1Ev,_ZTv0_n36_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C16D0Ev,_ZTv0_n36_N8S1400C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A3__8S1400C16__8S1400C15[] = {
  ABISELECT(-432,-328),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C2D1Ev();
extern void _ZN7S1400C2D0Ev();
extern void _ZN7S1400C23v28Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C2__8S1400C15[] = {
  ABISELECT(-40,-20),
  ABISELECT(-88,-48),
  ABISELECT(-248,-132),
  ABISELECT(-264,-140),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1400C23v28Ev,
};
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C3D1Ev();
extern void _ZN7S1400C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C37S1400C2__A1__8S1400C15[] = {
  ABISELECT(-40,-20),
  ABISELECT(-88,-48),
  ABISELECT(-248,-132),
  ABISELECT(-264,-140),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D0Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C37S1400C2__A1__8S1400C15[] = {
  ABISELECT(-480,-344),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C87S1400C37S1400C2__A1__8S1400C15[] = {
  0,
  ABISELECT(480,344),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C37S1400C2__A1__8S1400C15[] = {
  0,
  ABISELECT(264,140),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C8__7S1400C37S1400C2__A1__8S1400C15[] = {
  ABISELECT(-480,-344),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev)();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C37S1400C2__A1__8S1400C15[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(248,132),
  0,
  ABISELECT(160,84),
  ABISELECT(248,132),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__7S1400C37S1400C2__A1__8S1400C15[] = {
  ABISELECT(232,124),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C37S1400C2__A1__8S1400C15[] = {
  ABISELECT(144,76),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev)();
extern void ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__7S1400C37S1400C2__A1__8S1400C15[] = {
  0,
  0,
  ABISELECT(88,48),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A2__7S1400C37S1400C2__A1__8S1400C15[] = {
  ABISELECT(136,72),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__A3__7S1400C37S1400C2__A1__8S1400C15[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C2__A2__8S1400C15[] = {
  ABISELECT(-592,-412),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C87S1400C2__A2__8S1400C15[] = {
  0,
  ABISELECT(592,412),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C2__8S1400C15[] = {
  0,
  ABISELECT(264,140),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C2D1Ev,_ZThn204_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C2D0Ev,_ZThn204_N7S1400C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C3__7S1400C2__8S1400C15[] = {
  ABISELECT(-480,-344),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C2D1Ev,_ZThn204_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C2D0Ev,_ZThn204_N7S1400C2D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C2D1Ev,_ZTv0_n20_N7S1400C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S1400C2D0Ev,_ZTv0_n20_N7S1400C2D0Ev)();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C2__8S1400C15[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(248,132),
  0,
  ABISELECT(160,84),
  ABISELECT(248,132),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C2D1Ev,_ZTv0_n20_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C2D0Ev,_ZTv0_n20_N7S1400C2D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__7S1400C2__8S1400C15[] = {
  ABISELECT(232,124),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C2__8S1400C15[] = {
  ABISELECT(144,76),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C2D1Ev,_ZTv0_n36_N7S1400C2D1Ev)();
extern void ABISELECT(_ZTv0_n72_N7S1400C2D0Ev,_ZTv0_n36_N7S1400C2D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__7S1400C2__8S1400C15[] = {
  0,
  0,
  ABISELECT(88,48),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C2D1Ev,_ZTv0_n36_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C2D0Ev,_ZTv0_n36_N7S1400C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A2__7S1400C2__8S1400C15[] = {
  ABISELECT(136,72),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__A3__7S1400C2__8S1400C15[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn328_N7S1400C2D1Ev,_ZThn272_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn328_N7S1400C2D0Ev,_ZThn272_N7S1400C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C8__A1__7S1400C2__8S1400C15[] = {
  ABISELECT(-592,-412),
  ABISELECT(-328,-272),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1400C2D1Ev,_ZThn272_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1400C2D0Ev,_ZThn272_N7S1400C2D0Ev),
};
static  VTT_ENTRY vtt_S1400C15[] = {
  {&(_ZTV8S1400C15[17]),  17,245},
  {&(_ZTV8S1400C15[55]),  55,245},
  {&(_ZTV8S1400C15[87]),  87,245},
  {&(_ZTV8S1400C15[67]),  67,245},
  {&(_ZTV8S1400C15[74]),  74,245},
  {&(_ZTV8S1400C15[105]),  105,245},
  {&(_ZTV8S1400C15[113]),  113,245},
  {&(_ZTV8S1400C15[117]),  117,245},
  {&(_ZTV8S1400C15[137]),  137,245},
  {&(_ZTV8S1400C15[120]),  120,245},
  {&(_ZTV8S1400C15[155]),  155,245},
  {&(_ZTV8S1400C15[17]),  17,245},
  {&(_ZTV8S1400C15[187]),  187,245},
  {&(_ZTV8S1400C15[200]),  200,245},
  {&(_ZTV8S1400C15[207]),  207,245},
  {&(_ZTV8S1400C15[219]),  219,245},
  {&(_ZTV8S1400C15[228]),  228,245},
  {&(_ZTV8S1400C15[235]),  235,245},
  {&(_tg__ZTV7S1400C3__8S1400C15[6]),  6,15},
  {&(_tg__ZTV7S1400C87S1400C3__8S1400C15[3]),  3,8},
  {&(_tg__ZTV10S1400C7_nt__7S1400C87S1400C3__8S1400C15[3]),  3,4},
  {&(_tg__ZTV10S1400C7_nt__7S1400C3__8S1400C15[3]),  3,4},
  {&(_tg__ZTV7S1400C8__7S1400C3__8S1400C15[3]),  3,8},
  {&(_tg__ZTV8S1400C12__7S1400C3__8S1400C15[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__7S1400C3__8S1400C15[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C3__8S1400C15[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__7S1400C3__8S1400C15[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A2__7S1400C3__8S1400C15[2]),  2,8},
  {&(_tg__ZTV8S1400C10__A3__7S1400C3__8S1400C15[8]),  8,14},
  {&(_tg__ZTV8S1400C12__8S1400C15[3]),  3,9},
  {&(_tg__ZTV7S1400C9__8S1400C12__8S1400C15[11]),  11,21},
  {&(_tg__ZTV8S1400C16__8S1400C15[7]),  7,16},
  {&(_tg__ZTV8S1400C10__8S1400C16__8S1400C15[8]),  8,14},
  {&(_tg__ZTV7S1400C3__8S1400C16__8S1400C15[25]),  25,34},
  {&(_tg__ZTV10S1400C7_nt__8S1400C16__8S1400C15[3]),  3,4},
  {&(_tg__ZTV7S1400C87S1400C3__8S1400C16__8S1400C15[3]),  3,8},
  {&(_tg__ZTV7S1400C97S1400C87S1400C3__8S1400C16__8S1400C15[2]),  2,12},
  {&(_tg__ZTV8S1400C12__8S1400C16__8S1400C15[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__8S1400C16__8S1400C15[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__8S1400C16__8S1400C15[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__8S1400C16__8S1400C15[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A3__8S1400C16__8S1400C15[2]),  2,8},
  {&(_tg__ZTV7S1400C2__8S1400C15[6]),  6,16},
  {&(_tg__ZTV7S1400C37S1400C2__A1__8S1400C15[6]),  6,15},
  {&(_tg__ZTV7S1400C87S1400C37S1400C2__A1__8S1400C15[3]),  3,8},
  {&(_tg__ZTV10S1400C7_nt__7S1400C87S1400C37S1400C2__A1__8S1400C15[3]),  3,4},
  {&(_tg__ZTV10S1400C7_nt__7S1400C37S1400C2__A1__8S1400C15[3]),  3,4},
  {&(_tg__ZTV7S1400C8__7S1400C37S1400C2__A1__8S1400C15[3]),  3,8},
  {&(_tg__ZTV8S1400C12__7S1400C37S1400C2__A1__8S1400C15[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__7S1400C37S1400C2__A1__8S1400C15[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C37S1400C2__A1__8S1400C15[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__7S1400C37S1400C2__A1__8S1400C15[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A2__7S1400C37S1400C2__A1__8S1400C15[2]),  2,8},
  {&(_tg__ZTV8S1400C10__A3__7S1400C37S1400C2__A1__8S1400C15[8]),  8,14},
  {&(_tg__ZTV7S1400C87S1400C2__A2__8S1400C15[3]),  3,8},
  {&(_tg__ZTV10S1400C7_nt__7S1400C87S1400C2__A2__8S1400C15[3]),  3,4},
  {&(_tg__ZTV10S1400C7_nt__7S1400C2__8S1400C15[3]),  3,4},
  {&(_tg__ZTV7S1400C87S1400C3__7S1400C2__8S1400C15[3]),  3,8},
  {&(_tg__ZTV8S1400C12__7S1400C2__8S1400C15[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__7S1400C2__8S1400C15[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C2__8S1400C15[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__7S1400C2__8S1400C15[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A2__7S1400C2__8S1400C15[2]),  2,8},
  {&(_tg__ZTV8S1400C10__A3__7S1400C2__8S1400C15[8]),  8,14},
  {&(_tg__ZTV7S1400C8__A1__7S1400C2__8S1400C15[3]),  3,8},
};
extern VTBL_ENTRY _ZTI8S1400C15[];
extern  VTBL_ENTRY _ZTV8S1400C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1400C15[];
static VTBL_ENTRY alt_thunk_names7[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C16D0Ev,_ZTv0_n36_N8S1400C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S1400C16D0Ev,_ZThn352_N8S1400C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C16D1Ev,_ZTv0_n36_N8S1400C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S1400C16D1Ev,_ZThn352_N8S1400C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S1400C16D0Ev,_ZTv0_n20_N8S1400C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S1400C16D0Ev,_ZThn268_N8S1400C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S1400C16D1Ev,_ZTv0_n20_N8S1400C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S1400C16D1Ev,_ZThn268_N8S1400C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S1400C16D0Ev,_ZTv0_n56_N8S1400C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S1400C16D0Ev,_ZThn8_N8S1400C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S1400C16D1Ev,_ZTv0_n56_N8S1400C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S1400C16D1Ev,_ZThn8_N8S1400C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S1400C12D0Ev,_ZThn84_N8S1400C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S1400C12D1Ev,_ZThn84_N8S1400C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S1400C3D0Ev,_ZThn344_N7S1400C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S1400C3D1Ev,_ZThn344_N7S1400C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1400C3D0Ev,_ZThn260_N7S1400C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1400C3D1Ev,_ZThn260_N7S1400C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C15D0Ev,_ZTv0_n36_N8S1400C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S1400C15D0Ev,_ZThn352_N8S1400C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C15D1Ev,_ZTv0_n36_N8S1400C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S1400C15D1Ev,_ZThn352_N8S1400C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S1400C15D0Ev,_ZTv0_n20_N8S1400C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S1400C15D0Ev,_ZThn268_N8S1400C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S1400C15D1Ev,_ZTv0_n20_N8S1400C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S1400C15D1Ev,_ZThn268_N8S1400C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S1400C15D0Ev,_ZTv0_n56_N8S1400C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn568_N8S1400C15D0Ev,_ZThn400_N8S1400C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S1400C15D0Ev,_ZThn8_N8S1400C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S1400C15D1Ev,_ZTv0_n56_N8S1400C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn568_N8S1400C15D1Ev,_ZThn400_N8S1400C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S1400C15D1Ev,_ZThn8_N8S1400C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1400C15 = {  "S1400C15", // class name
  bases_S1400C15, 29,
  &(vtc_S1400C15[0]), // expected_vtbl_contents
  &(vtt_S1400C15[0]), // expected_vtt_contents
  ABISELECT(960,712), // object size
  NSPAIRA(_ZTI8S1400C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S1400C15),245, //virtual function table var
  17, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1400C15),65, //virtual table table var
  29, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names7,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1400C1  : S1400C2 , S1400C14_nt , virtual S1400C15 {
  int s1400c1f0;
  __tsi64 s1400c1f1;
  int s1400c1f2;
  virtual void  v1(); // _ZN7S1400C12v1Ev
  virtual void  v2(); // _ZN7S1400C12v2Ev
  virtual void  v3(); // _ZN7S1400C12v3Ev
  ~S1400C1(); // tgen
  S1400C1(); // tgen
};
//SIG(1 S1400C1) C1{ BC2{ BC3{ BC4{ v4 v5 v6 v7 FC5{ v9} Fi FU6{ m FL[4] FL}[6]} VBC7{ v8 Fi} BC8{ BC5 BC9{ BC10{ v10 v11 v12 v13 v14 v15 Fp[4]} vd v16 v17 FL} VBC7 v18 v19 Fi FC11{}} VBC12{ BC7 BC13{ v20 v21 Fs:16 FL Fp[8]} BC5 VBC9 BC10 vd v22 v23 v24 Fi} VBC10 v25 v26 v27 Fi[2]} BC10 BC8 vd v28} BC14{ v29 v30 v31} VBC15{ VBC3 VBC16{ VBC10 BC17{ v32 v33} VBC3 vd v34 v35 v36 v37 v38} VBC2 v39 v40 v41 v42 Fp Fs:0} v1 v2 v3 Fi FL Fi}


void  S1400C1 ::v1(){vfunc_called(this, "_ZN7S1400C12v1Ev");}
void  S1400C1 ::v2(){vfunc_called(this, "_ZN7S1400C12v2Ev");}
void  S1400C1 ::v3(){vfunc_called(this, "_ZN7S1400C12v3Ev");}
S1400C1 ::~S1400C1(){ note_dtor("S1400C1", this);} // tgen
S1400C1 ::S1400C1(){ note_ctor("S1400C1", this);} // tgen

static void Test_S1400C1()
{
  extern Class_Descriptor cd_S1400C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(174,262)];
    init_test(&cd_S1400C1, buf);
    S1400C1 *dp, &lv = *(dp=new (buf) S1400C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1384,1044), "sizeof(S1400C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1400C1)");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C4*)(S1400C3*)(S1400C2*), 0, "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C3*)(S1400C2*), ABISELECT(424,332), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(424,332), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C8*)(S1400C2*), ABISELECT(424,332), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C3*), ABISELECT(424,332), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C8*)(S1400C3*), ABISELECT(424,332), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C3*)(S1400C2*), ABISELECT(424,332), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(424,332), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C8*)(S1400C2*), ABISELECT(424,332), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C5_nt*)(S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(216,204), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*)(S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(224,208), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C9*)(S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(224,208), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(216,204), "S1400C1");
    check_base_class_offset(lv, (S1400C7_nt*)(S1400C12*), ABISELECT(440,340), "S1400C1");
    check_base_class_offset(lv, (S1400C13*)(S1400C12*), ABISELECT(456,348), "S1400C1");
    check_base_class_offset(lv, (S1400C5_nt*)(S1400C12*), ABISELECT(544,396), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C9 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*), ABISELECT(600,424), "S1400C1");
    check_base_class_offset(lv, (S1400C9*)(S1400C12*), ABISELECT(600,424), "S1400C1");
    /*is_ambiguous_... S1400C12::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C12*), ABISELECT(552,400), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C12*)(S1400C3*)(S1400C2*), ABISELECT(440,340), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C12*)(S1400C3*), ABISELECT(440,340), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C12*)(S1400C3*)(S1400C2*), ABISELECT(440,340), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C3*)(S1400C2*), ABISELECT(648,452), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C3*), ABISELECT(648,452), "S1400C1");
    /*is_ambiguous_... S1400C16::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C16*), ABISELECT(648,452), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C3*)(S1400C2*), ABISELECT(648,452), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C3*)(S1400C2*), 0, "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C2*), ABISELECT(288,252), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C5_nt*)(S1400C8*)(S1400C2*), ABISELECT(328,272), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*)(S1400C8*)(S1400C2*), ABISELECT(336,276), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C9*)(S1400C8*)(S1400C2*), ABISELECT(336,276), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C8*)(S1400C2*), ABISELECT(328,272), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C2*), 0, "S1400C1");
    check_base_class_offset(lv, (S1400C14_nt*), ABISELECT(392,312), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C4*)(S1400C3*), ABISELECT(704,480), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C5_nt*)(S1400C8*)(S1400C3*), ABISELECT(920,684), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*)(S1400C8*)(S1400C3*), ABISELECT(928,688), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C9*)(S1400C8*)(S1400C3*), ABISELECT(928,688), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C8*)(S1400C3*), ABISELECT(920,684), "S1400C1");
    /*is_ambiguous_... S1400C15::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C3*)(S1400C15*), ABISELECT(704,480), "S1400C1");
    check_base_class_offset(lv, (S1400C3*)(S1400C16*), ABISELECT(704,480), "S1400C1");
    check_base_class_offset(lv, (S1400C17_nt*)(S1400C16*), ABISELECT(688,472), "S1400C1");
    check_base_class_offset(lv, (S1400C16*)(S1400C15*), ABISELECT(688,472), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C4*)(S1400C3*)(S1400C2*), ABISELECT(992,732), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C5_nt*)(S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(1208,936), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*)(S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(1216,940), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C9*)(S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(1216,940), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(1208,936), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C3*)(S1400C2*), ABISELECT(992,732), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C2*), ABISELECT(1280,984), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C5_nt*)(S1400C8*)(S1400C2*), ABISELECT(1320,1004), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*)(S1400C8*)(S1400C2*), ABISELECT(1328,1008), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C9*)(S1400C8*)(S1400C2*), ABISELECT(1328,1008), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C8*)(S1400C2*), ABISELECT(1320,1004), "S1400C1");
    check_base_class_offset(lv, (S1400C2*)(S1400C15*), ABISELECT(992,732), "S1400C1");
    check_base_class_offset(lv, (S1400C15*), ABISELECT(688,472), "S1400C1");
    check_field_offset(lv, s1400c1f0, ABISELECT(400,316), "S1400C1.s1400c1f0");
    check_field_offset(lv, s1400c1f1, ABISELECT(408,320), "S1400C1.s1400c1f1");
    check_field_offset(lv, s1400c1f2, ABISELECT(416,328), "S1400C1.s1400c1f2");
    test_class_info(&lv, &cd_S1400C1);
    dp->~S1400C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1400C1(Test_S1400C1, "S1400C1", ABISELECT(1384,1044));

#else // __cplusplus

extern void _ZN7S1400C1C1Ev();
extern void _ZN7S1400C1D1Ev();
Name_Map name_map_S1400C1[] = {
  NSPAIR(_ZN7S1400C1C1Ev),
  NSPAIR(_ZN7S1400C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1400C4;
extern VTBL_ENTRY _ZTI7S1400C4[];
extern  VTBL_ENTRY _ZTV7S1400C4[];
extern Class_Descriptor cd_S1400C7_nt;
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C8;
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
extern Class_Descriptor cd_S1400C7_nt;
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
extern Class_Descriptor cd_S1400C13;
extern VTBL_ENTRY _ZTI8S1400C13[];
extern  VTBL_ENTRY _ZTV8S1400C13[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C12;
extern VTBL_ENTRY _ZTI8S1400C12[];
extern  VTBL_ENTRY _ZTV8S1400C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1400C12[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C3;
extern VTBL_ENTRY _ZTI7S1400C3[];
extern  VTBL_ENTRY _ZTV7S1400C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C3[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C8;
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
extern Class_Descriptor cd_S1400C2;
extern VTBL_ENTRY _ZTI7S1400C2[];
extern  VTBL_ENTRY _ZTV7S1400C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C2[];
extern Class_Descriptor cd_S1400C14_nt;
extern VTBL_ENTRY _ZTI11S1400C14_nt[];
extern  VTBL_ENTRY _ZTV11S1400C14_nt[];
extern Class_Descriptor cd_S1400C4;
extern VTBL_ENTRY _ZTI7S1400C4[];
extern  VTBL_ENTRY _ZTV7S1400C4[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C8;
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
extern Class_Descriptor cd_S1400C3;
extern VTBL_ENTRY _ZTI7S1400C3[];
extern  VTBL_ENTRY _ZTV7S1400C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C3[];
extern Class_Descriptor cd_S1400C17_nt;
extern VTBL_ENTRY _ZTI11S1400C17_nt[];
extern  VTBL_ENTRY _ZTV11S1400C17_nt[];
extern Class_Descriptor cd_S1400C16;
extern VTBL_ENTRY _ZTI8S1400C16[];
extern  VTBL_ENTRY _ZTV8S1400C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1400C16[];
extern Class_Descriptor cd_S1400C4;
extern VTBL_ENTRY _ZTI7S1400C4[];
extern  VTBL_ENTRY _ZTV7S1400C4[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C8;
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
extern Class_Descriptor cd_S1400C3;
extern VTBL_ENTRY _ZTI7S1400C3[];
extern  VTBL_ENTRY _ZTV7S1400C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C3[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C8;
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
extern Class_Descriptor cd_S1400C2;
extern VTBL_ENTRY _ZTI7S1400C2[];
extern  VTBL_ENTRY _ZTV7S1400C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C2[];
extern Class_Descriptor cd_S1400C15;
extern VTBL_ENTRY _ZTI8S1400C15[];
extern  VTBL_ENTRY _ZTV8S1400C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1400C15[];
static Base_Class bases_S1400C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1400C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S1400C7_nt,    ABISELECT(424,332), //bcp->offset
    76, //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
    5, //immediately_derived
  0, 1},
  {&cd_S1400C5_nt,    ABISELECT(216,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
    32, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(224,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
    33, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(224,208), //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
    34, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1400C8,    ABISELECT(216,204), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1400C7_nt,    ABISELECT(440,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
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C13,    ABISELECT(456,348), //bcp->offset
    103, //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
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C5_nt,    ABISELECT(544,396), //bcp->offset
    107, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(600,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
    2, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(600,424), //bcp->offset
    118, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S1400C10,    ABISELECT(552,400), //bcp->offset
    110, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C12,    ABISELECT(440,340), //bcp->offset
    80, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1400C10,    ABISELECT(648,452), //bcp->offset
    139, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1400C3,    0, //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
    36, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(288,252), //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
    37, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S1400C5_nt,    ABISELECT(328,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
    38, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(336,276), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(336,276), //bcp->offset
    59, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S1400C8,    ABISELECT(328,272), //bcp->offset
    51, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S1400C2,    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
    42, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1400C14_nt,    ABISELECT(392,312), //bcp->offset
    71, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1400C4,    ABISELECT(704,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
    10, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S1400C5_nt,    ABISELECT(920,684), //bcp->offset
    -1, //bcp->virtual_function_table_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
    26, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(928,688), //bcp->offset
    -1, //bcp->virtual_function_table_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
    25, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(928,688), //bcp->offset
    229, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S1400C8,    ABISELECT(920,684), //bcp->offset
    221, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S1400C3,    ABISELECT(704,480), //bcp->offset
    187, //bcp->virtual_function_table_offset
    25, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S1400C17_nt,    ABISELECT(688,472), //bcp->offset
    -1, //bcp->virtual_function_table_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
    29, //immediately_derived
  0, 0},
  {&cd_S1400C16,    ABISELECT(688,472), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    42, //immediately_derived
  0, 1},
  {&cd_S1400C4,    ABISELECT(992,732), //bcp->offset
    -1, //bcp->virtual_function_table_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
    35, //immediately_derived
  0, 0},
  {&cd_S1400C5_nt,    ABISELECT(1208,936), //bcp->offset
    -1, //bcp->virtual_function_table_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
    34, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(1216,940), //bcp->offset
    -1, //bcp->virtual_function_table_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
    33, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(1216,940), //bcp->offset
    285, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S1400C8,    ABISELECT(1208,936), //bcp->offset
    277, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S1400C3,    ABISELECT(992,732), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    88, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(1280,984), //bcp->offset
    297, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S1400C5_nt,    ABISELECT(1320,1004), //bcp->offset
    -1, //bcp->virtual_function_table_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
    40, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(1328,1008), //bcp->offset
    -1, //bcp->virtual_function_table_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
    39, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(1328,1008), //bcp->offset
    313, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S1400C8,    ABISELECT(1320,1004), //bcp->offset
    305, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    99, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S1400C2,    ABISELECT(992,732), //bcp->offset
    241, //bcp->virtual_function_table_offset
    26, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    87, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    42, //immediately_derived
  0, 1},
  {&cd_S1400C15,    ABISELECT(688,472), //bcp->offset
    153, //bcp->virtual_function_table_offset
    21, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1400C1[];
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C1D1Ev();
extern void _ZN7S1400C1D0Ev();
extern void _ZN7S1400C23v28Ev();
extern void _ZN7S1400C12v1Ev();
extern void _ZN7S1400C12v2Ev();
extern void _ZN7S1400C12v3Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C1D1Ev,_ZThn204_N7S1400C1D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C1D0Ev,_ZThn204_N7S1400C1D0Ev)();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZThn224_N7S1400C1D1Ev,_ZThn208_N7S1400C1D1Ev)();
extern void ABISELECT(_ZThn224_N7S1400C1D0Ev,_ZThn208_N7S1400C1D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn328_N7S1400C1D1Ev,_ZThn272_N7S1400C1D1Ev)();
extern void ABISELECT(_ZThn328_N7S1400C1D0Ev,_ZThn272_N7S1400C1D0Ev)();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZThn336_N7S1400C1D1Ev,_ZThn276_N7S1400C1D1Ev)();
extern void ABISELECT(_ZThn336_N7S1400C1D0Ev,_ZThn276_N7S1400C1D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN11S1400C14_nt3v29Ev();
extern void _ZN11S1400C14_nt3v30Ev();
extern void _ZN11S1400C14_nt3v31Ev();
extern void _ZN10S1400C7_nt3v17Ev();
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C1D1Ev,_ZTv0_n20_N7S1400C1D1Ev)();
extern void ABISELECT(_ZThn440_N7S1400C1D1Ev,_ZThn340_N7S1400C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S1400C1D0Ev,_ZTv0_n20_N7S1400C1D0Ev)();
extern void ABISELECT(_ZThn440_N7S1400C1D0Ev,_ZThn340_N7S1400C1D0Ev)() __attribute__((weak));
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C1D1Ev,_ZTv0_n36_N7S1400C1D1Ev)();
extern void ABISELECT(_ZThn600_N7S1400C1D1Ev,_ZThn424_N7S1400C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1400C1D0Ev,_ZTv0_n36_N7S1400C1D0Ev)();
extern void ABISELECT(_ZThn600_N7S1400C1D0Ev,_ZThn424_N7S1400C1D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN11S1400C17_nt3v32Ev();
extern void _ZN11S1400C17_nt3v33Ev();
extern void ABISELECT(_ZTv0_n80_N7S1400C1D1Ev,_ZTv0_n40_N7S1400C1D1Ev)();
extern void ABISELECT(_ZThn688_N7S1400C1D1Ev,_ZThn472_N7S1400C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S1400C1D0Ev,_ZTv0_n40_N7S1400C1D0Ev)();
extern void ABISELECT(_ZThn688_N7S1400C1D0Ev,_ZThn472_N7S1400C1D0Ev)() __attribute__((weak));
extern void _ZN8S1400C163v34Ev();
extern void _ZN8S1400C163v35Ev();
extern void _ZN8S1400C163v36Ev();
extern void _ZN8S1400C163v37Ev();
extern void _ZN8S1400C163v38Ev();
extern void _ZN8S1400C153v39Ev();
extern void _ZN8S1400C153v40Ev();
extern void _ZN8S1400C153v41Ev();
extern void _ZN8S1400C153v42Ev();
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void ABISELECT(_ZTv0_n112_N7S1400C1D1Ev,_ZTv0_n56_N7S1400C1D1Ev)();
extern void ABISELECT(_ZThn704_N7S1400C1D1Ev,_ZThn480_N7S1400C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N7S1400C1D0Ev,_ZTv0_n56_N7S1400C1D0Ev)();
extern void ABISELECT(_ZThn704_N7S1400C1D0Ev,_ZThn480_N7S1400C1D0Ev)() __attribute__((weak));
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZTvn216_n112_N7S1400C1D1Ev,_ZTvn204_n56_N7S1400C1D1Ev)();
extern void ABISELECT(_ZTvn216_n112_N7S1400C1D0Ev,_ZTvn204_n56_N7S1400C1D0Ev)();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTvn224_n112_N7S1400C1D1Ev,_ZTvn208_n56_N7S1400C1D1Ev)();
extern void ABISELECT(_ZTvn224_n112_N7S1400C1D0Ev,_ZTvn208_n56_N7S1400C1D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void ABISELECT(_ZTv0_n112_N7S1400C1D1Ev,_ZTv0_n56_N7S1400C1D1Ev)();
extern void ABISELECT(_ZThn992_N7S1400C1D1Ev,_ZThn732_N7S1400C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N7S1400C1D0Ev,_ZTv0_n56_N7S1400C1D0Ev)();
extern void ABISELECT(_ZThn992_N7S1400C1D0Ev,_ZThn732_N7S1400C1D0Ev)() __attribute__((weak));
extern void _ZN7S1400C23v28Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZTvn216_n112_N7S1400C1D1Ev,_ZTvn204_n56_N7S1400C1D1Ev)();
extern void ABISELECT(_ZTvn216_n112_N7S1400C1D0Ev,_ZTvn204_n56_N7S1400C1D0Ev)();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTvn224_n112_N7S1400C1D1Ev,_ZTvn208_n56_N7S1400C1D1Ev)();
extern void ABISELECT(_ZTvn224_n112_N7S1400C1D0Ev,_ZTvn208_n56_N7S1400C1D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZTvn328_n112_N7S1400C1D1Ev,_ZTvn272_n56_N7S1400C1D1Ev)();
extern void ABISELECT(_ZTvn328_n112_N7S1400C1D0Ev,_ZTvn272_n56_N7S1400C1D0Ev)();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTvn336_n112_N7S1400C1D1Ev,_ZTvn276_n56_N7S1400C1D1Ev)();
extern void ABISELECT(_ZTvn336_n112_N7S1400C1D0Ev,_ZTvn276_n56_N7S1400C1D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY vtc_S1400C1[] = {
  ABISELECT(992,732),
  ABISELECT(688,472),
  ABISELECT(704,480),
  ABISELECT(688,472),
  ABISELECT(648,452),
  ABISELECT(600,424),
  ABISELECT(440,340),
  ABISELECT(424,332),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1400C23v28Ev,
  (VTBL_ENTRY)&_ZN7S1400C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1400C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1400C12v3Ev,
  ABISELECT(208,128),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C1D1Ev,_ZThn204_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C1D0Ev,_ZThn204_N7S1400C1D0Ev),
  ABISELECT(-224,-208),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S1400C1D1Ev,_ZThn208_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S1400C1D0Ev,_ZThn208_N7S1400C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  ABISELECT(-288,-252),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  ABISELECT(96,60),
  ABISELECT(-328,-272),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1400C1D1Ev,_ZThn272_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1400C1D0Ev,_ZThn272_N7S1400C1D0Ev),
  ABISELECT(-336,-276),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn336_N7S1400C1D1Ev,_ZThn276_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn336_N7S1400C1D0Ev,_ZThn276_N7S1400C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  ABISELECT(-392,-312),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN11S1400C14_nt3v29Ev,
  (VTBL_ENTRY)&_ZN11S1400C14_nt3v30Ev,
  (VTBL_ENTRY)&_ZN11S1400C14_nt3v31Ev,
  0,
  ABISELECT(-424,-332),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-440,-340),
  0,
  ABISELECT(160,84),
  ABISELECT(-440,-340),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C1D1Ev,_ZTv0_n20_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C1D0Ev,_ZTv0_n20_N7S1400C1D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
  ABISELECT(-456,-348),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
  ABISELECT(-544,-396),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  ABISELECT(-552,-400),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  0,
  0,
  ABISELECT(-600,-424),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-600,-424),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C1D1Ev,_ZTv0_n36_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C1D0Ev,_ZTv0_n36_N7S1400C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-648,-452),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  0,
  0,
  0,
  0,
  ABISELECT(304,260),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-688,-472),
  0,
  0,
  ABISELECT(-88,-48),
  ABISELECT(-248,-132),
  ABISELECT(-264,-140),
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  ABISELECT(-688,-472),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v33Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S1400C1D1Ev,_ZTv0_n40_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S1400C1D0Ev,_ZTv0_n40_N7S1400C1D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C163v34Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v35Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v36Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v37Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v38Ev,
  (VTBL_ENTRY)&_ZN8S1400C153v39Ev,
  (VTBL_ENTRY)&_ZN8S1400C153v40Ev,
  (VTBL_ENTRY)&_ZN8S1400C153v41Ev,
  (VTBL_ENTRY)&_ZN8S1400C153v42Ev,
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(-704,-480),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-104,-56),
  ABISELECT(-264,-140),
  ABISELECT(-280,-148),
  ABISELECT(-704,-480),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S1400C1D1Ev,_ZTv0_n56_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S1400C1D0Ev,_ZTv0_n56_N7S1400C1D0Ev),
  ABISELECT(-496,-352),
  ABISELECT(-920,-684),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N7S1400C1D1Ev,_ZTvn204_n56_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N7S1400C1D0Ev,_ZTvn204_n56_N7S1400C1D0Ev),
  ABISELECT(-928,-688),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N7S1400C1D1Ev,_ZTvn208_n56_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N7S1400C1D0Ev,_ZTvn208_n56_N7S1400C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  0,
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(-992,-732),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-344,-280),
  ABISELECT(-392,-308),
  ABISELECT(-552,-392),
  ABISELECT(-568,-400),
  ABISELECT(-992,-732),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S1400C1D1Ev,_ZTv0_n56_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S1400C1D0Ev,_ZTv0_n56_N7S1400C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C23v28Ev,
  ABISELECT(-784,-604),
  ABISELECT(-1208,-936),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N7S1400C1D1Ev,_ZTvn204_n56_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N7S1400C1D0Ev,_ZTvn204_n56_N7S1400C1D0Ev),
  ABISELECT(-1216,-940),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N7S1400C1D1Ev,_ZTvn208_n56_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N7S1400C1D0Ev,_ZTvn208_n56_N7S1400C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  ABISELECT(-1280,-984),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  ABISELECT(-896,-672),
  ABISELECT(-1320,-1004),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn328_n112_N7S1400C1D1Ev,_ZTvn272_n56_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn328_n112_N7S1400C1D0Ev,_ZTvn272_n56_N7S1400C1D0Ev),
  ABISELECT(-1328,-1008),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn336_n112_N7S1400C1D1Ev,_ZTvn276_n56_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn336_n112_N7S1400C1D0Ev,_ZTvn276_n56_N7S1400C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern VTBL_ENTRY _ZTV7S1400C1[];
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C2D1Ev();
extern void _ZN7S1400C2D0Ev();
extern void _ZN7S1400C23v28Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C2__A__7S1400C1[] = {
  ABISELECT(648,452),
  ABISELECT(600,424),
  ABISELECT(440,340),
  ABISELECT(424,332),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1400C23v28Ev,
};
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C3D1Ev();
extern void _ZN7S1400C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C37S1400C2__7S1400C1[] = {
  ABISELECT(648,452),
  ABISELECT(600,424),
  ABISELECT(440,340),
  ABISELECT(424,332),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D0Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C37S1400C2__7S1400C1[] = {
  ABISELECT(208,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C87S1400C37S1400C2__7S1400C1[] = {
  0,
  ABISELECT(-208,-128),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C37S1400C2__7S1400C1[] = {
  0,
  ABISELECT(-424,-332),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C8__7S1400C37S1400C2__7S1400C1[] = {
  ABISELECT(208,128),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn440_N7S1400C3D1Ev,_ZThn340_N7S1400C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev)();
extern void ABISELECT(_ZThn440_N7S1400C3D0Ev,_ZThn340_N7S1400C3D0Ev)() __attribute__((weak));
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C37S1400C2__7S1400C1[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-440,-340),
  0,
  ABISELECT(160,84),
  ABISELECT(-440,-340),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__7S1400C37S1400C2__7S1400C1[] = {
  ABISELECT(-456,-348),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C37S1400C2__7S1400C1[] = {
  ABISELECT(-544,-396),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn600_N7S1400C3D1Ev,_ZThn424_N7S1400C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev)();
extern void ABISELECT(_ZThn600_N7S1400C3D0Ev,_ZThn424_N7S1400C3D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__7S1400C37S1400C2__7S1400C1[] = {
  0,
  0,
  ABISELECT(-600,-424),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-600,-424),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A2__7S1400C37S1400C2__7S1400C1[] = {
  ABISELECT(-552,-400),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__A3__7S1400C37S1400C2__7S1400C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-648,-452),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C2__A1__7S1400C1[] = {
  ABISELECT(96,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C87S1400C2__A1__7S1400C1[] = {
  0,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C2__A__7S1400C1[] = {
  0,
  ABISELECT(-424,-332),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C2D1Ev,_ZThn204_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C2D0Ev,_ZThn204_N7S1400C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C3__7S1400C2__A__7S1400C1[] = {
  ABISELECT(208,128),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C2D1Ev,_ZThn204_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C2D0Ev,_ZThn204_N7S1400C2D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C2D1Ev,_ZTv0_n20_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn440_N7S1400C2D1Ev,_ZThn340_N7S1400C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S1400C2D0Ev,_ZTv0_n20_N7S1400C2D0Ev)();
extern void ABISELECT(_ZThn440_N7S1400C2D0Ev,_ZThn340_N7S1400C2D0Ev)() __attribute__((weak));
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C2__A__7S1400C1[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-440,-340),
  0,
  ABISELECT(160,84),
  ABISELECT(-440,-340),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C2D1Ev,_ZTv0_n20_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C2D0Ev,_ZTv0_n20_N7S1400C2D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__7S1400C2__A__7S1400C1[] = {
  ABISELECT(-456,-348),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C2__A__7S1400C1[] = {
  ABISELECT(-544,-396),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C2D1Ev,_ZTv0_n36_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn600_N7S1400C2D1Ev,_ZThn424_N7S1400C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1400C2D0Ev,_ZTv0_n36_N7S1400C2D0Ev)();
extern void ABISELECT(_ZThn600_N7S1400C2D0Ev,_ZThn424_N7S1400C2D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__7S1400C2__A__7S1400C1[] = {
  0,
  0,
  ABISELECT(-600,-424),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-600,-424),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C2D1Ev,_ZTv0_n36_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C2D0Ev,_ZTv0_n36_N7S1400C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A2__7S1400C2__A__7S1400C1[] = {
  ABISELECT(-552,-400),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__A3__7S1400C2__A__7S1400C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-648,-452),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn328_N7S1400C2D1Ev,_ZThn272_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn328_N7S1400C2D0Ev,_ZThn272_N7S1400C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C8__A1__7S1400C2__A__7S1400C1[] = {
  ABISELECT(96,60),
  ABISELECT(-328,-272),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1400C2D1Ev,_ZThn272_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1400C2D0Ev,_ZThn272_N7S1400C2D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void _ZN8S1400C12D1Ev();
extern void _ZN8S1400C12D0Ev();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C1[] = {
  ABISELECT(160,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN8S1400C12D1Ev,
  (VTBL_ENTRY)&_ZN8S1400C12D0Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev)();
extern void ABISELECT(_ZThn160_N8S1400C12D1Ev,_ZThn84_N8S1400C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev)();
extern void ABISELECT(_ZThn160_N8S1400C12D0Ev,_ZThn84_N8S1400C12D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__8S1400C12__7S1400C1[] = {
  0,
  0,
  ABISELECT(-160,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN11S1400C17_nt3v32Ev();
extern void _ZN11S1400C17_nt3v33Ev();
extern void ABISELECT(_ZTv0_n80_N8S1400C15D1Ev,_ZTv0_n40_N8S1400C15D1Ev)();
extern void _ZN8S1400C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S1400C15D0Ev,_ZTv0_n40_N8S1400C15D0Ev)();
extern void _ZN8S1400C15D0Ev() __attribute__((weak));
extern void _ZN8S1400C163v34Ev();
extern void _ZN8S1400C163v35Ev();
extern void _ZN8S1400C163v36Ev();
extern void _ZN8S1400C163v37Ev();
extern void _ZN8S1400C163v38Ev();
extern void _ZN8S1400C153v39Ev();
extern void _ZN8S1400C153v40Ev();
extern void _ZN8S1400C153v41Ev();
extern void _ZN8S1400C153v42Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C15__7S1400C1[] = {
  ABISELECT(304,260),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-48),
  ABISELECT(-248,-132),
  ABISELECT(-264,-140),
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v33Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S1400C15D1Ev,_ZTv0_n40_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S1400C15D0Ev,_ZTv0_n40_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C163v34Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v35Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v36Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v37Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v38Ev,
  (VTBL_ENTRY)&_ZN8S1400C153v39Ev,
  (VTBL_ENTRY)&_ZN8S1400C153v40Ev,
  (VTBL_ENTRY)&_ZN8S1400C153v41Ev,
  (VTBL_ENTRY)&_ZN8S1400C153v42Ev,
};
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void ABISELECT(_ZTv0_n112_N8S1400C15D1Ev,_ZTv0_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZThn16_N8S1400C15D1Ev,_ZThn8_N8S1400C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S1400C15D0Ev,_ZTv0_n56_N8S1400C15D0Ev)();
extern void ABISELECT(_ZThn16_N8S1400C15D0Ev,_ZThn8_N8S1400C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S1400C3__8S1400C15__7S1400C1[] = {
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-104,-56),
  ABISELECT(-264,-140),
  ABISELECT(-280,-148),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C15D1Ev,_ZTv0_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C15D0Ev,_ZTv0_n56_N8S1400C15D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__8S1400C15__7S1400C1[] = {
  0,
  ABISELECT(264,140),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZTvn216_n112_N8S1400C15D1Ev,_ZTvn204_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTvn216_n112_N8S1400C15D0Ev,_ZTvn204_n56_N8S1400C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C3__8S1400C15__7S1400C1[] = {
  ABISELECT(-496,-352),
  ABISELECT(-232,-212),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C15D1Ev,_ZTvn204_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C15D0Ev,_ZTvn204_n56_N8S1400C15D0Ev),
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTvn224_n112_N8S1400C15D1Ev,_ZTvn208_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTvn224_n112_N8S1400C15D0Ev,_ZTvn208_n56_N8S1400C15D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C97S1400C87S1400C3__8S1400C15__7S1400C1[] = {
  ABISELECT(-240,-216),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C15D1Ev,_ZTvn208_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C15D0Ev,_ZTvn208_n56_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N8S1400C15D1Ev,_ZTv0_n20_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S1400C15D0Ev,_ZTv0_n20_N8S1400C15D0Ev)();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__8S1400C15__7S1400C1[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(248,132),
  0,
  ABISELECT(160,84),
  ABISELECT(248,132),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S1400C15D1Ev,_ZTv0_n20_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S1400C15D0Ev,_ZTv0_n20_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__8S1400C15__7S1400C1[] = {
  ABISELECT(232,124),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__8S1400C15__7S1400C1[] = {
  ABISELECT(144,76),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N8S1400C15D1Ev,_ZTv0_n36_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTv0_n72_N8S1400C15D0Ev,_ZTv0_n36_N8S1400C15D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__8S1400C15__7S1400C1[] = {
  0,
  0,
  ABISELECT(88,48),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C15D1Ev,_ZTv0_n36_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C15D0Ev,_ZTv0_n36_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A2__8S1400C15__7S1400C1[] = {
  ABISELECT(136,72),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__A3__8S1400C15__7S1400C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void ABISELECT(_ZTv0_n112_N8S1400C15D1Ev,_ZTv0_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZThn304_N8S1400C15D1Ev,_ZThn260_N8S1400C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S1400C15D0Ev,_ZTv0_n56_N8S1400C15D0Ev)();
extern void ABISELECT(_ZThn304_N8S1400C15D0Ev,_ZThn260_N8S1400C15D0Ev)() __attribute__((weak));
extern void _ZN7S1400C23v28Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C2__8S1400C15__7S1400C1[] = {
  0,
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(-304,-260),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-344,-280),
  ABISELECT(-392,-308),
  ABISELECT(-552,-392),
  ABISELECT(-568,-400),
  ABISELECT(-304,-260),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C15D1Ev,_ZTv0_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C15D0Ev,_ZTv0_n56_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C23v28Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZTvn216_n112_N8S1400C15D1Ev,_ZTvn204_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTvn216_n112_N8S1400C15D0Ev,_ZTvn204_n56_N8S1400C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C37S1400C2__A1__8S1400C15__7S1400C1[] = {
  ABISELECT(-784,-604),
  ABISELECT(-520,-464),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C15D1Ev,_ZTvn204_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C15D0Ev,_ZTvn204_n56_N8S1400C15D0Ev),
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTvn224_n112_N8S1400C15D1Ev,_ZTvn208_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTvn224_n112_N8S1400C15D0Ev,_ZTvn208_n56_N8S1400C15D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C97S1400C87S1400C37S1400C2__A2__8S1400C15__7S1400C1[] = {
  ABISELECT(-528,-468),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C15D1Ev,_ZTvn208_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C15D0Ev,_ZTvn208_n56_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C107S1400C2__A5__8S1400C15__7S1400C1[] = {
  ABISELECT(-592,-512),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZTvn328_n112_N8S1400C15D1Ev,_ZTvn272_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTvn328_n112_N8S1400C15D0Ev,_ZTvn272_n56_N8S1400C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C2__A2__8S1400C15__7S1400C1[] = {
  ABISELECT(-896,-672),
  ABISELECT(-632,-532),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn328_n112_N8S1400C15D1Ev,_ZTvn272_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn328_n112_N8S1400C15D0Ev,_ZTvn272_n56_N8S1400C15D0Ev),
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTvn336_n112_N8S1400C15D1Ev,_ZTvn276_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTvn336_n112_N8S1400C15D0Ev,_ZTvn276_n56_N8S1400C15D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C97S1400C87S1400C2__A3__8S1400C15__7S1400C1[] = {
  ABISELECT(-640,-536),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn336_n112_N8S1400C15D1Ev,_ZTvn276_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn336_n112_N8S1400C15D0Ev,_ZTvn276_n56_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C3D1Ev();
extern void _ZN7S1400C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C3__A1__7S1400C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-104,-56),
  ABISELECT(-264,-140),
  ABISELECT(-280,-148),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D0Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C3__A2__7S1400C1[] = {
  ABISELECT(-496,-352),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C87S1400C3__A2__7S1400C1[] = {
  0,
  ABISELECT(496,352),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C3__A1__7S1400C1[] = {
  0,
  ABISELECT(280,148),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C8__7S1400C3__A1__7S1400C1[] = {
  ABISELECT(-496,-352),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev)();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C3__A1__7S1400C1[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(264,140),
  0,
  ABISELECT(160,84),
  ABISELECT(264,140),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__7S1400C3__A1__7S1400C1[] = {
  ABISELECT(248,132),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C3__A1__7S1400C1[] = {
  ABISELECT(160,84),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev)();
extern void ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__7S1400C3__A1__7S1400C1[] = {
  0,
  0,
  ABISELECT(104,56),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,56),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A2__7S1400C3__A1__7S1400C1[] = {
  ABISELECT(152,80),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__A3__7S1400C3__A1__7S1400C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN11S1400C17_nt3v32Ev();
extern void _ZN11S1400C17_nt3v33Ev();
extern void _ZN8S1400C16D1Ev();
extern void _ZN8S1400C16D0Ev();
extern void _ZN8S1400C163v34Ev();
extern void _ZN8S1400C163v35Ev();
extern void _ZN8S1400C163v36Ev();
extern void _ZN8S1400C163v37Ev();
extern void _ZN8S1400C163v38Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C16__7S1400C1[] = {
  ABISELECT(-88,-48),
  ABISELECT(-248,-132),
  ABISELECT(-264,-140),
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v33Ev,
  (VTBL_ENTRY)&_ZN8S1400C16D1Ev,
  (VTBL_ENTRY)&_ZN8S1400C16D0Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v34Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v35Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v36Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v37Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v38Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__8S1400C16__7S1400C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void ABISELECT(_ZTv0_n112_N8S1400C16D1Ev,_ZTv0_n56_N8S1400C16D1Ev)();
extern void ABISELECT(_ZThn16_N8S1400C16D1Ev,_ZThn8_N8S1400C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S1400C16D0Ev,_ZTv0_n56_N8S1400C16D0Ev)();
extern void ABISELECT(_ZThn16_N8S1400C16D0Ev,_ZThn8_N8S1400C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S1400C3__8S1400C16__7S1400C1[] = {
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-104,-56),
  ABISELECT(-264,-140),
  ABISELECT(-280,-148),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C16D1Ev,_ZTv0_n56_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C16D0Ev,_ZTv0_n56_N8S1400C16D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__8S1400C16__7S1400C1[] = {
  0,
  ABISELECT(264,140),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZTvn216_n112_N8S1400C16D1Ev,_ZTvn204_n56_N8S1400C16D1Ev)();
extern void ABISELECT(_ZTvn216_n112_N8S1400C16D0Ev,_ZTvn204_n56_N8S1400C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C3__8S1400C16__7S1400C1[] = {
  ABISELECT(-496,-352),
  ABISELECT(-232,-212),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C16D1Ev,_ZTvn204_n56_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C16D0Ev,_ZTvn204_n56_N8S1400C16D0Ev),
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTvn224_n112_N8S1400C16D1Ev,_ZTvn208_n56_N8S1400C16D1Ev)();
extern void ABISELECT(_ZTvn224_n112_N8S1400C16D0Ev,_ZTvn208_n56_N8S1400C16D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C97S1400C87S1400C3__8S1400C16__7S1400C1[] = {
  ABISELECT(-240,-216),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C16D1Ev,_ZTvn208_n56_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C16D0Ev,_ZTvn208_n56_N8S1400C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N8S1400C16D1Ev,_ZTv0_n20_N8S1400C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S1400C16D0Ev,_ZTv0_n20_N8S1400C16D0Ev)();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__8S1400C16__7S1400C1[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(248,132),
  0,
  ABISELECT(160,84),
  ABISELECT(248,132),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S1400C16D1Ev,_ZTv0_n20_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S1400C16D0Ev,_ZTv0_n20_N8S1400C16D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__8S1400C16__7S1400C1[] = {
  ABISELECT(232,124),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__8S1400C16__7S1400C1[] = {
  ABISELECT(144,76),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N8S1400C16D1Ev,_ZTv0_n36_N8S1400C16D1Ev)();
extern void ABISELECT(_ZTv0_n72_N8S1400C16D0Ev,_ZTv0_n36_N8S1400C16D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__8S1400C16__7S1400C1[] = {
  0,
  0,
  ABISELECT(88,48),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C16D1Ev,_ZTv0_n36_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C16D0Ev,_ZTv0_n36_N8S1400C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A3__8S1400C16__7S1400C1[] = {
  ABISELECT(136,72),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C2D1Ev();
extern void _ZN7S1400C2D0Ev();
extern void _ZN7S1400C23v28Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C2__A1__7S1400C1[] = {
  ABISELECT(-344,-280),
  ABISELECT(-392,-308),
  ABISELECT(-552,-392),
  ABISELECT(-568,-400),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1400C23v28Ev,
};
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C3D1Ev();
extern void _ZN7S1400C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C37S1400C2__A2__7S1400C1[] = {
  ABISELECT(-344,-280),
  ABISELECT(-392,-308),
  ABISELECT(-552,-392),
  ABISELECT(-568,-400),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D0Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C37S1400C2__A3__7S1400C1[] = {
  ABISELECT(-784,-604),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C87S1400C37S1400C2__A3__7S1400C1[] = {
  0,
  ABISELECT(784,604),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C37S1400C2__A2__7S1400C1[] = {
  0,
  ABISELECT(568,400),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C8__7S1400C37S1400C2__A2__7S1400C1[] = {
  ABISELECT(-784,-604),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev)();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C37S1400C2__A2__7S1400C1[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(552,392),
  0,
  ABISELECT(160,84),
  ABISELECT(552,392),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__7S1400C37S1400C2__A2__7S1400C1[] = {
  ABISELECT(536,384),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C37S1400C2__A2__7S1400C1[] = {
  ABISELECT(448,336),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev)();
extern void ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__7S1400C37S1400C2__A2__7S1400C1[] = {
  0,
  0,
  ABISELECT(392,308),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(392,308),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A2__7S1400C37S1400C2__A2__7S1400C1[] = {
  ABISELECT(440,332),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__A3__7S1400C37S1400C2__A2__7S1400C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(344,280),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C2__A4__7S1400C1[] = {
  ABISELECT(-896,-672),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C87S1400C2__A4__7S1400C1[] = {
  0,
  ABISELECT(896,672),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C2__A1__7S1400C1[] = {
  0,
  ABISELECT(568,400),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C2D1Ev,_ZThn204_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C2D0Ev,_ZThn204_N7S1400C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C3__7S1400C2__A1__7S1400C1[] = {
  ABISELECT(-784,-604),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C2D1Ev,_ZThn204_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C2D0Ev,_ZThn204_N7S1400C2D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C2D1Ev,_ZTv0_n20_N7S1400C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S1400C2D0Ev,_ZTv0_n20_N7S1400C2D0Ev)();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C2__A1__7S1400C1[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(552,392),
  0,
  ABISELECT(160,84),
  ABISELECT(552,392),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C2D1Ev,_ZTv0_n20_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C2D0Ev,_ZTv0_n20_N7S1400C2D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__7S1400C2__A1__7S1400C1[] = {
  ABISELECT(536,384),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C2__A1__7S1400C1[] = {
  ABISELECT(448,336),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C2D1Ev,_ZTv0_n36_N7S1400C2D1Ev)();
extern void ABISELECT(_ZTv0_n72_N7S1400C2D0Ev,_ZTv0_n36_N7S1400C2D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__7S1400C2__A1__7S1400C1[] = {
  0,
  0,
  ABISELECT(392,308),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(392,308),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C2D1Ev,_ZTv0_n36_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C2D0Ev,_ZTv0_n36_N7S1400C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A2__7S1400C2__A1__7S1400C1[] = {
  ABISELECT(440,332),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__A3__7S1400C2__A1__7S1400C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(344,280),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn328_N7S1400C2D1Ev,_ZThn272_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn328_N7S1400C2D0Ev,_ZThn272_N7S1400C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C8__A1__7S1400C2__A1__7S1400C1[] = {
  ABISELECT(-896,-672),
  ABISELECT(-328,-272),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1400C2D1Ev,_ZThn272_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1400C2D0Ev,_ZThn272_N7S1400C2D0Ev),
};
static  VTT_ENTRY vtt_S1400C1[] = {
  {&(_ZTV7S1400C1[10]),  10,325},
  {&(_tg__ZTV7S1400C2__A__7S1400C1[6]),  6,16},
  {&(_tg__ZTV7S1400C37S1400C2__7S1400C1[6]),  6,15},
  {&(_tg__ZTV7S1400C87S1400C37S1400C2__7S1400C1[3]),  3,8},
  {&(_tg__ZTV10S1400C7_nt__7S1400C87S1400C37S1400C2__7S1400C1[3]),  3,4},
  {&(_tg__ZTV10S1400C7_nt__7S1400C37S1400C2__7S1400C1[3]),  3,4},
  {&(_tg__ZTV7S1400C8__7S1400C37S1400C2__7S1400C1[3]),  3,8},
  {&(_tg__ZTV8S1400C12__7S1400C37S1400C2__7S1400C1[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__7S1400C37S1400C2__7S1400C1[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C37S1400C2__7S1400C1[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__7S1400C37S1400C2__7S1400C1[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A2__7S1400C37S1400C2__7S1400C1[2]),  2,8},
  {&(_tg__ZTV8S1400C10__A3__7S1400C37S1400C2__7S1400C1[8]),  8,14},
  {&(_tg__ZTV7S1400C87S1400C2__A1__7S1400C1[3]),  3,8},
  {&(_tg__ZTV10S1400C7_nt__7S1400C87S1400C2__A1__7S1400C1[3]),  3,4},
  {&(_tg__ZTV10S1400C7_nt__7S1400C2__A__7S1400C1[3]),  3,4},
  {&(_tg__ZTV7S1400C87S1400C3__7S1400C2__A__7S1400C1[3]),  3,8},
  {&(_tg__ZTV8S1400C12__7S1400C2__A__7S1400C1[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__7S1400C2__A__7S1400C1[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C2__A__7S1400C1[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__7S1400C2__A__7S1400C1[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A2__7S1400C2__A__7S1400C1[2]),  2,8},
  {&(_tg__ZTV8S1400C10__A3__7S1400C2__A__7S1400C1[8]),  8,14},
  {&(_tg__ZTV7S1400C8__A1__7S1400C2__A__7S1400C1[3]),  3,8},
  {&(_ZTV7S1400C1[79]),  79,325},
  {&(_ZTV7S1400C1[26]),  26,325},
  {&(_ZTV7S1400C1[97]),  97,325},
  {&(_ZTV7S1400C1[105]),  105,325},
  {&(_ZTV7S1400C1[109]),  109,325},
  {&(_ZTV7S1400C1[129]),  129,325},
  {&(_ZTV7S1400C1[112]),  112,325},
  {&(_ZTV7S1400C1[147]),  147,325},
  {&(_ZTV7S1400C1[54]),  54,325},
  {&(_ZTV7S1400C1[174]),  174,325},
  {&(_ZTV7S1400C1[212]),  212,325},
  {&(_ZTV7S1400C1[224]),  224,325},
  {&(_ZTV7S1400C1[231]),  231,325},
  {&(_ZTV7S1400C1[174]),  174,325},
  {&(_ZTV7S1400C1[267]),  267,325},
  {&(_ZTV7S1400C1[280]),  280,325},
  {&(_ZTV7S1400C1[287]),  287,325},
  {&(_ZTV7S1400C1[299]),  299,325},
  {&(_ZTV7S1400C1[308]),  308,325},
  {&(_ZTV7S1400C1[315]),  315,325},
  {&(_tg__ZTV8S1400C12__7S1400C1[3]),  3,9},
  {&(_tg__ZTV7S1400C9__8S1400C12__7S1400C1[11]),  11,21},
  {&(_tg__ZTV8S1400C15__7S1400C1[17]),  17,30},
  {&(_tg__ZTV7S1400C3__8S1400C15__7S1400C1[25]),  25,34},
  {&(_tg__ZTV10S1400C7_nt__8S1400C15__7S1400C1[3]),  3,4},
  {&(_tg__ZTV7S1400C87S1400C3__8S1400C15__7S1400C1[3]),  3,8},
  {&(_tg__ZTV7S1400C97S1400C87S1400C3__8S1400C15__7S1400C1[2]),  2,12},
  {&(_tg__ZTV8S1400C12__8S1400C15__7S1400C1[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__8S1400C15__7S1400C1[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__8S1400C15__7S1400C1[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__8S1400C15__7S1400C1[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A2__8S1400C15__7S1400C1[2]),  2,8},
  {&(_tg__ZTV8S1400C10__A3__8S1400C15__7S1400C1[8]),  8,14},
  {&(_tg__ZTV8S1400C15__7S1400C1[17]),  17,30},
  {&(_tg__ZTV7S1400C2__8S1400C15__7S1400C1[26]),  26,36},
  {&(_tg__ZTV7S1400C87S1400C37S1400C2__A1__8S1400C15__7S1400C1[3]),  3,8},
  {&(_tg__ZTV7S1400C97S1400C87S1400C37S1400C2__A2__8S1400C15__7S1400C1[2]),  2,12},
  {&(_tg__ZTV8S1400C107S1400C2__A5__8S1400C15__7S1400C1[2]),  2,8},
  {&(_tg__ZTV7S1400C87S1400C2__A2__8S1400C15__7S1400C1[3]),  3,8},
  {&(_tg__ZTV7S1400C97S1400C87S1400C2__A3__8S1400C15__7S1400C1[2]),  2,12},
  {&(_tg__ZTV7S1400C3__A1__7S1400C1[6]),  6,15},
  {&(_tg__ZTV7S1400C87S1400C3__A2__7S1400C1[3]),  3,8},
  {&(_tg__ZTV10S1400C7_nt__7S1400C87S1400C3__A2__7S1400C1[3]),  3,4},
  {&(_tg__ZTV10S1400C7_nt__7S1400C3__A1__7S1400C1[3]),  3,4},
  {&(_tg__ZTV7S1400C8__7S1400C3__A1__7S1400C1[3]),  3,8},
  {&(_tg__ZTV8S1400C12__7S1400C3__A1__7S1400C1[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__7S1400C3__A1__7S1400C1[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C3__A1__7S1400C1[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__7S1400C3__A1__7S1400C1[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A2__7S1400C3__A1__7S1400C1[2]),  2,8},
  {&(_tg__ZTV8S1400C10__A3__7S1400C3__A1__7S1400C1[8]),  8,14},
  {&(_tg__ZTV8S1400C16__7S1400C1[7]),  7,16},
  {&(_tg__ZTV8S1400C10__8S1400C16__7S1400C1[8]),  8,14},
  {&(_tg__ZTV7S1400C3__8S1400C16__7S1400C1[25]),  25,34},
  {&(_tg__ZTV10S1400C7_nt__8S1400C16__7S1400C1[3]),  3,4},
  {&(_tg__ZTV7S1400C87S1400C3__8S1400C16__7S1400C1[3]),  3,8},
  {&(_tg__ZTV7S1400C97S1400C87S1400C3__8S1400C16__7S1400C1[2]),  2,12},
  {&(_tg__ZTV8S1400C12__8S1400C16__7S1400C1[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__8S1400C16__7S1400C1[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__8S1400C16__7S1400C1[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__8S1400C16__7S1400C1[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A3__8S1400C16__7S1400C1[2]),  2,8},
  {&(_tg__ZTV7S1400C2__A1__7S1400C1[6]),  6,16},
  {&(_tg__ZTV7S1400C37S1400C2__A2__7S1400C1[6]),  6,15},
  {&(_tg__ZTV7S1400C87S1400C37S1400C2__A3__7S1400C1[3]),  3,8},
  {&(_tg__ZTV10S1400C7_nt__7S1400C87S1400C37S1400C2__A3__7S1400C1[3]),  3,4},
  {&(_tg__ZTV10S1400C7_nt__7S1400C37S1400C2__A2__7S1400C1[3]),  3,4},
  {&(_tg__ZTV7S1400C8__7S1400C37S1400C2__A2__7S1400C1[3]),  3,8},
  {&(_tg__ZTV8S1400C12__7S1400C37S1400C2__A2__7S1400C1[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__7S1400C37S1400C2__A2__7S1400C1[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C37S1400C2__A2__7S1400C1[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__7S1400C37S1400C2__A2__7S1400C1[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A2__7S1400C37S1400C2__A2__7S1400C1[2]),  2,8},
  {&(_tg__ZTV8S1400C10__A3__7S1400C37S1400C2__A2__7S1400C1[8]),  8,14},
  {&(_tg__ZTV7S1400C87S1400C2__A4__7S1400C1[3]),  3,8},
  {&(_tg__ZTV10S1400C7_nt__7S1400C87S1400C2__A4__7S1400C1[3]),  3,4},
  {&(_tg__ZTV10S1400C7_nt__7S1400C2__A1__7S1400C1[3]),  3,4},
  {&(_tg__ZTV7S1400C87S1400C3__7S1400C2__A1__7S1400C1[3]),  3,8},
  {&(_tg__ZTV8S1400C12__7S1400C2__A1__7S1400C1[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__7S1400C2__A1__7S1400C1[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C2__A1__7S1400C1[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__7S1400C2__A1__7S1400C1[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A2__7S1400C2__A1__7S1400C1[2]),  2,8},
  {&(_tg__ZTV8S1400C10__A3__7S1400C2__A1__7S1400C1[8]),  8,14},
  {&(_tg__ZTV7S1400C8__A1__7S1400C2__A1__7S1400C1[3]),  3,8},
};
extern VTBL_ENTRY _ZTI7S1400C1[];
extern  VTBL_ENTRY _ZTV7S1400C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C1[];
static VTBL_ENTRY alt_thunk_names8[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S1400C16D0Ev,_ZTv0_n56_N8S1400C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S1400C16D0Ev,_ZThn8_N8S1400C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S1400C16D1Ev,_ZTv0_n56_N8S1400C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S1400C16D1Ev,_ZThn8_N8S1400C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S1400C15D0Ev,_ZTv0_n56_N8S1400C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S1400C15D0Ev,_ZThn260_N8S1400C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S1400C15D0Ev,_ZThn8_N8S1400C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S1400C15D1Ev,_ZTv0_n56_N8S1400C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S1400C15D1Ev,_ZThn260_N8S1400C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S1400C15D1Ev,_ZThn8_N8S1400C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S1400C15D0Ev,_ZTv0_n40_N8S1400C15D0Ev), // 
  (VTBL_ENTRY)_ZN8S1400C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S1400C15D1Ev,_ZTv0_n40_N8S1400C15D1Ev), // 
  (VTBL_ENTRY)_ZN8S1400C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S1400C12D0Ev,_ZThn84_N8S1400C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S1400C12D1Ev,_ZThn84_N8S1400C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C2D0Ev,_ZTv0_n36_N7S1400C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn600_N7S1400C2D0Ev,_ZThn424_N7S1400C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C2D1Ev,_ZTv0_n36_N7S1400C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn600_N7S1400C2D1Ev,_ZThn424_N7S1400C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C2D0Ev,_ZTv0_n20_N7S1400C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1400C2D0Ev,_ZThn340_N7S1400C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C2D1Ev,_ZTv0_n20_N7S1400C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1400C2D1Ev,_ZThn340_N7S1400C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn600_N7S1400C3D0Ev,_ZThn424_N7S1400C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn600_N7S1400C3D1Ev,_ZThn424_N7S1400C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1400C3D0Ev,_ZThn340_N7S1400C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1400C3D1Ev,_ZThn340_N7S1400C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N7S1400C1D0Ev,_ZTv0_n56_N7S1400C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn992_N7S1400C1D0Ev,_ZThn732_N7S1400C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn704_N7S1400C1D0Ev,_ZThn480_N7S1400C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N7S1400C1D1Ev,_ZTv0_n56_N7S1400C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn992_N7S1400C1D1Ev,_ZThn732_N7S1400C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn704_N7S1400C1D1Ev,_ZThn480_N7S1400C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S1400C1D0Ev,_ZTv0_n40_N7S1400C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn688_N7S1400C1D0Ev,_ZThn472_N7S1400C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S1400C1D1Ev,_ZTv0_n40_N7S1400C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn688_N7S1400C1D1Ev,_ZThn472_N7S1400C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C1D0Ev,_ZTv0_n36_N7S1400C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn600_N7S1400C1D0Ev,_ZThn424_N7S1400C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C1D1Ev,_ZTv0_n36_N7S1400C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn600_N7S1400C1D1Ev,_ZThn424_N7S1400C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C1D0Ev,_ZTv0_n20_N7S1400C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1400C1D0Ev,_ZThn340_N7S1400C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C1D1Ev,_ZTv0_n20_N7S1400C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1400C1D1Ev,_ZThn340_N7S1400C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1400C1 = {  "S1400C1", // class name
  bases_S1400C1, 43,
  &(vtc_S1400C1[0]), // expected_vtbl_contents
  &(vtt_S1400C1[0]), // expected_vtt_contents
  ABISELECT(1384,1044), // object size
  NSPAIRA(_ZTI7S1400C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1400C1),325, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1400C1),109, //virtual table table var
  43, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names8,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2366C5_nt  {
  void *s2366c5f0;
  int s2366c5f1;
  ::S629C14 s2366c5f2;
  void  mf2366c5(); // _ZN10S2366C5_nt8mf2366c5Ev
};
//SIG(-1 S2366C5_nt) C1{ m Fp Fi FC2{ m}}


void  S2366C5_nt ::mf2366c5(){}

//skip512 S2366C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2366C4_nt  {
  ::S2366C5_nt s2366c4f0;
  int s2366c4f1[2];
  char s2366c4f2;
  virtual  ~S2366C4_nt(); // _ZN10S2366C4_ntD1Ev
  virtual void  v5(); // _ZN10S2366C4_nt2v5Ev
  virtual void  v6(); // _ZN10S2366C4_nt2v6Ev
  virtual void  v7(); // _ZN10S2366C4_nt2v7Ev
  S2366C4_nt(); // tgen
};
//SIG(-1 S2366C4_nt) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2366C4_nt ::~S2366C4_nt(){ note_dtor("S2366C4_nt", this);}
void  S2366C4_nt ::v5(){vfunc_called(this, "_ZN10S2366C4_nt2v5Ev");}
void  S2366C4_nt ::v6(){vfunc_called(this, "_ZN10S2366C4_nt2v6Ev");}
void  S2366C4_nt ::v7(){vfunc_called(this, "_ZN10S2366C4_nt2v7Ev");}
S2366C4_nt ::S2366C4_nt(){ note_ctor("S2366C4_nt", this);} // tgen

//skip512 S2366C4_nt

#else // __cplusplus

extern void _ZN10S2366C4_ntC1Ev();
extern void _ZN10S2366C4_ntD1Ev();
Name_Map name_map_S2366C4_nt[] = {
  NSPAIR(_ZN10S2366C4_ntC1Ev),
  NSPAIR(_ZN10S2366C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2366C4_nt[];
extern void _ZN10S2366C4_ntD1Ev();
extern void _ZN10S2366C4_ntD0Ev();
extern void _ZN10S2366C4_nt2v5Ev();
extern void _ZN10S2366C4_nt2v6Ev();
extern void _ZN10S2366C4_nt2v7Ev();
static  VTBL_ENTRY vtc_S2366C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2366C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2366C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S2366C4_nt[];
VTBL_ENTRY *P__ZTI10S2366C4_nt = _ZTI10S2366C4_nt; 
extern  VTBL_ENTRY _ZTV10S2366C4_nt[];
Class_Descriptor cd_S2366C4_nt = {  "S2366C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2366C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI10S2366C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2366C4_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  S2366C3_nt  : S2366C4_nt {
  void *s2366c3f0;
  virtual void  v8(); // _ZN10S2366C3_nt2v8Ev
  virtual void  v9(); // _ZN10S2366C3_nt2v9Ev
  ~S2366C3_nt(); // tgen
  S2366C3_nt(); // tgen
};
//SIG(-1 S2366C3_nt) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2366C3_nt ::v8(){vfunc_called(this, "_ZN10S2366C3_nt2v8Ev");}
void  S2366C3_nt ::v9(){vfunc_called(this, "_ZN10S2366C3_nt2v9Ev");}
S2366C3_nt ::~S2366C3_nt(){ note_dtor("S2366C3_nt", this);} // tgen
S2366C3_nt ::S2366C3_nt(){ note_ctor("S2366C3_nt", this);} // tgen

//skip512 S2366C3_nt

#else // __cplusplus

extern void _ZN10S2366C3_ntC1Ev();
extern void _ZN10S2366C3_ntD1Ev();
Name_Map name_map_S2366C3_nt[] = {
  NSPAIR(_ZN10S2366C3_ntC1Ev),
  NSPAIR(_ZN10S2366C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2366C4_nt;
extern VTBL_ENTRY _ZTI10S2366C4_nt[];
extern  VTBL_ENTRY _ZTV10S2366C4_nt[];
static Base_Class bases_S2366C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2366C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2366C3_nt[];
extern void _ZN10S2366C3_ntD1Ev();
extern void _ZN10S2366C3_ntD0Ev();
extern void _ZN10S2366C4_nt2v5Ev();
extern void _ZN10S2366C4_nt2v6Ev();
extern void _ZN10S2366C4_nt2v7Ev();
extern void _ZN10S2366C3_nt2v8Ev();
extern void _ZN10S2366C3_nt2v9Ev();
static  VTBL_ENTRY vtc_S2366C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2366C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S2366C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2366C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2366C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2366C3_nt2v9Ev,
};
extern VTBL_ENTRY _ZTI10S2366C3_nt[];
VTBL_ENTRY *P__ZTI10S2366C3_nt = _ZTI10S2366C3_nt; 
extern  VTBL_ENTRY _ZTV10S2366C3_nt[];
Class_Descriptor cd_S2366C3_nt = {  "S2366C3_nt", // class name
  bases_S2366C3_nt, 1,
  &(vtc_S2366C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S2366C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2366C3_nt),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2366C8_nt  {
  long s2366c8f0[4];
};
//SIG(-1 S2366C8_nt) C1{ Fl[4]}



//skip512 S2366C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2366C7_nt  {
  ::S2366C8_nt s2366c7f0;
  void  mf2366c7(); // _ZN10S2366C7_nt8mf2366c7Ev
};
//SIG(-1 S2366C7_nt) C1{ m FC2{ Fl[4]}}


void  S2366C7_nt ::mf2366c7(){}

//skip512 S2366C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2366C10_nt  {
  void *s2366c10f0;
  void  mf2366c10(); // _ZN11S2366C10_nt9mf2366c10Ev
};
//SIG(-1 S2366C10_nt) C1{ m Fp}


void  S2366C10_nt ::mf2366c10(){}

//skip512 S2366C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2366C9_nt  {
  ::S2366C5_nt s2366c9f0;
  ::S2366C10_nt s2366c9f1;
  int s2366c9f2[2];
  ::S2366C5_nt s2366c9f3;
  ::S2366C10_nt s2366c9f4;
  int s2366c9f5[2];
  void  mf2366c9(); // _ZN10S2366C9_nt8mf2366c9Ev
};
//SIG(-1 S2366C9_nt) C1{ m FC2{ m Fp Fi FC3{ m}} FC4{ m Fp} Fi[2] FC2 FC4 Fi[2]}


void  S2366C9_nt ::mf2366c9(){}

//skip512 S2366C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2366C14_nt  {
  int s2366c14f0[2];
  void  mf2366c14(); // _ZN11S2366C14_nt9mf2366c14Ev
};
//SIG(-1 S2366C14_nt) C1{ m Fi[2]}


void  S2366C14_nt ::mf2366c14(){}

//skip512 S2366C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2366C12_nt  {
  ::S1503C5_nt s2366c12f0;
  ::S2366C14_nt s2366c12f1;
  void  mf2366c12(); // _ZN11S2366C12_nt9mf2366c12Ev
};
//SIG(-1 S2366C12_nt) C1{ m FC2{ m Fi[2]} FC3{ m Fi[2]}}


void  S2366C12_nt ::mf2366c12(){}

//skip512 S2366C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2366C11_nt  {
  void *s2366c11f0[2];
  int s2366c11f1[2];
  void *s2366c11f2;
  __tsi64 s2366c11f3;
  void *s2366c11f4[9];
  short s2366c11f5;
  void *s2366c11f6[2];
  ::S2366C12_nt s2366c11f7;
  ::S2366C14_nt s2366c11f8;
  char s2366c11f9;
  int s2366c11f10[3];
  char s2366c11f11;
  int s2366c11f12[6];
  char s2366c11f13;
  void  mf2366c11(); // _ZN11S2366C11_nt9mf2366c11Ev
};
//SIG(-1 S2366C11_nt) C1{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC2{ m FC3{ m Fi[2]} FC4{ m Fi[2]}} FC4 Fc Fi[3] Fc Fi[6] Fc}


void  S2366C11_nt ::mf2366c11(){}

//skip512 S2366C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2366C15_nt  {
  int s2366c15f0[2];
  __tsi64 s2366c15f1;
  int s2366c15f2;
  void  mf2366c15(); // _ZN11S2366C15_nt9mf2366c15Ev
};
//SIG(-1 S2366C15_nt) C1{ m Fi[2] FL Fi}


void  S2366C15_nt ::mf2366c15(){}

//skip512 S2366C15_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2366C2  : S2366C3_nt {
  int s2366c2f0[4];
  void *s2366c2f1[4];
  int s2366c2f2[2];
  ::S2366C7_nt s2366c2f3;
  char s2366c2f4[2];
  ::S2366C9_nt s2366c2f5;
  void *s2366c2f6;
  ::S2366C11_nt s2366c2f7;
  ::S2366C11_nt s2366c2f8;
  ::S2366C15_nt s2366c2f9;
  ::S629C8_nt s2366c2f10;
  __tsi64 s2366c2f11[3];
  int s2366c2f12;
  __tsi64 s2366c2f13;
  ::S2366C5_nt s2366c2f14;
  __tsi64 s2366c2f15;
  virtual void  v10(); // _ZN7S2366C23v10Ev
  virtual void  v11(); // _ZN7S2366C23v11Ev
  virtual void  v12(); // _ZN7S2366C23v12Ev
  virtual void  v13(); // _ZN7S2366C23v13Ev
  virtual void  v14(); // _ZN7S2366C23v14Ev
  virtual void  v15(); // _ZN7S2366C23v15Ev
  ~S2366C2(); // tgen
  S2366C2(); // tgen
};
//SIG(-1 S2366C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v10 v11 Fp} v1 v2 v3 v4 v5 v6 Fi[4] Fp[4] Fi[2] FC6{ m FC7{ Fl[4]}} Fc[2] FC8{ m FC4 FC9{ m Fp} Fi[2] FC4 FC9 Fi[2]} Fp FC10{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC11{ m FC12{ m Fi[2]} FC13{ m Fi[2]}} FC13 Fc Fi[3] Fc Fi[6] Fc} FC10 FC14{ m Fi[2] FL Fi} FC15{ m} FL[3] Fi FL FC4 FL}


void  S2366C2 ::v10(){vfunc_called(this, "_ZN7S2366C23v10Ev");}
void  S2366C2 ::v11(){vfunc_called(this, "_ZN7S2366C23v11Ev");}
void  S2366C2 ::v12(){vfunc_called(this, "_ZN7S2366C23v12Ev");}
void  S2366C2 ::v13(){vfunc_called(this, "_ZN7S2366C23v13Ev");}
void  S2366C2 ::v14(){vfunc_called(this, "_ZN7S2366C23v14Ev");}
void  S2366C2 ::v15(){vfunc_called(this, "_ZN7S2366C23v15Ev");}
S2366C2 ::~S2366C2(){ note_dtor("S2366C2", this);} // tgen
S2366C2 ::S2366C2(){ note_ctor("S2366C2", this);} // tgen

static void Test_S2366C2()
{
  extern Class_Descriptor cd_S2366C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(92,131)];
    init_test(&cd_S2366C2, buf);
    S2366C2 *dp, &lv = *(dp=new (buf) S2366C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(728,520), "sizeof(S2366C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2366C2)");
    check_base_class_offset(lv, (S2366C4_nt*)(S2366C3_nt*), 0, "S2366C2");
    check_base_class_offset(lv, (S2366C3_nt*), 0, "S2366C2");
    check_field_offset(lv, s2366c2f0, ABISELECT(48,32), "S2366C2.s2366c2f0");
    check_field_offset(lv, s2366c2f1, ABISELECT(64,48), "S2366C2.s2366c2f1");
    check_field_offset(lv, s2366c2f2, ABISELECT(96,64), "S2366C2.s2366c2f2");
    check_field_offset(lv, s2366c2f3, ABISELECT(104,72), "S2366C2.s2366c2f3");
    check_field_offset(lv, s2366c2f4, ABISELECT(136,88), "S2366C2.s2366c2f4");
    check_field_offset(lv, s2366c2f5, ABISELECT(144,92), "S2366C2.s2366c2f5");
    check_field_offset(lv, s2366c2f6, ABISELECT(208,140), "S2366C2.s2366c2f6");
    check_field_offset(lv, s2366c2f7, ABISELECT(216,144), "S2366C2.s2366c2f7");
    check_field_offset(lv, s2366c2f8, ABISELECT(424,292), "S2366C2.s2366c2f8");
    check_field_offset(lv, s2366c2f9, ABISELECT(632,440), "S2366C2.s2366c2f9");
    check_field_offset(lv, s2366c2f10, ABISELECT(656,460), "S2366C2.s2366c2f10");
    check_field_offset(lv, s2366c2f11, ABISELECT(664,464), "S2366C2.s2366c2f11");
    check_field_offset(lv, s2366c2f12, ABISELECT(688,488), "S2366C2.s2366c2f12");
    check_field_offset(lv, s2366c2f13, ABISELECT(696,492), "S2366C2.s2366c2f13");
    check_field_offset(lv, s2366c2f14, ABISELECT(704,500), "S2366C2.s2366c2f14");
    check_field_offset(lv, s2366c2f15, ABISELECT(720,512), "S2366C2.s2366c2f15");
    test_class_info(&lv, &cd_S2366C2);
    dp->~S2366C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2366C2(Test_S2366C2, "S2366C2", ABISELECT(728,520));

#else // __cplusplus

extern void _ZN7S2366C2C1Ev();
extern void _ZN7S2366C2D1Ev();
Name_Map name_map_S2366C2[] = {
  NSPAIR(_ZN7S2366C2C1Ev),
  NSPAIR(_ZN7S2366C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2366C4_nt;
extern VTBL_ENTRY _ZTI10S2366C4_nt[];
extern  VTBL_ENTRY _ZTV10S2366C4_nt[];
extern Class_Descriptor cd_S2366C3_nt;
extern VTBL_ENTRY _ZTI10S2366C3_nt[];
extern  VTBL_ENTRY _ZTV10S2366C3_nt[];
static Base_Class bases_S2366C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2366C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2366C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2366C2[];
extern void _ZN7S2366C2D1Ev();
extern void _ZN7S2366C2D0Ev();
extern void _ZN10S2366C4_nt2v5Ev();
extern void _ZN10S2366C4_nt2v6Ev();
extern void _ZN10S2366C4_nt2v7Ev();
extern void _ZN10S2366C3_nt2v8Ev();
extern void _ZN10S2366C3_nt2v9Ev();
extern void _ZN7S2366C23v10Ev();
extern void _ZN7S2366C23v11Ev();
extern void _ZN7S2366C23v12Ev();
extern void _ZN7S2366C23v13Ev();
extern void _ZN7S2366C23v14Ev();
extern void _ZN7S2366C23v15Ev();
static  VTBL_ENTRY vtc_S2366C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2366C2[0]),
  (VTBL_ENTRY)&_ZN7S2366C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2366C2D0Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2366C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2366C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN7S2366C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2366C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2366C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2366C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2366C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2366C23v15Ev,
};
extern VTBL_ENTRY _ZTI7S2366C2[];
extern  VTBL_ENTRY _ZTV7S2366C2[];
Class_Descriptor cd_S2366C2 = {  "S2366C2", // class name
  bases_S2366C2, 2,
  &(vtc_S2366C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(728,520), // object size
  NSPAIRA(_ZTI7S2366C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2366C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2366C17_nt  {
  __tsi64 s2366c17f0;
  ::S2366C5_nt s2366c17f1;
  ::S2366C10_nt s2366c17f2;
  void *s2366c17f3;
  void  mf2366c17(); // _ZN11S2366C17_nt9mf2366c17Ev
};
//SIG(-1 S2366C17_nt) C1{ m FL FC2{ m Fp Fi FC3{ m}} FC4{ m Fp} Fp}


void  S2366C17_nt ::mf2366c17(){}

//skip512 S2366C17_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2366C19  {
  void *s2366c19f0;
  void  mf2366c19(); // _ZN8S2366C199mf2366c19Ev
};
//SIG(-1 S2366C19) C1{ m Fp}


void  S2366C19 ::mf2366c19(){}

static void Test_S2366C19()
{
  {
    init_simple_test("S2366C19");
    S2366C19 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2366C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2366C19)");
    check_field_offset(lv, s2366c19f0, 0, "S2366C19.s2366c19f0");
  }
}
static Arrange_To_Call_Me vS2366C19(Test_S2366C19, "S2366C19", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2366C1  : S2366C2 {
  ::S2366C17_nt s2366c1f0;
  void *s2366c1f1;
  ::S2366C19 s2366c1f2;
  void *s2366c1f3;
  virtual void  v1(); // _ZN7S2366C12v1Ev
  virtual void  v2(); // _ZN7S2366C12v2Ev
  virtual void  v3(); // _ZN7S2366C12v3Ev
  virtual void  v4(); // _ZN7S2366C12v4Ev
  ~S2366C1(); // tgen
  S2366C1(); // tgen
};
//SIG(1 S2366C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v8 v9 Fp} v10 v11 v12 v13 v14 v15 Fi[4] Fp[4] Fi[2] FC7{ m FC8{ Fl[4]}} Fc[2] FC9{ m FC5 FC10{ m Fp} Fi[2] FC5 FC10 Fi[2]} Fp FC11{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC12{ m FC13{ m Fi[2]} FC14{ m Fi[2]}} FC14 Fc Fi[3] Fc Fi[6] Fc} FC11 FC15{ m Fi[2] FL Fi} FC16{ m} FL[3] Fi FL FC5 FL} v1 v2 v3 v4 FC17{ m FL FC5 FC10 Fp} Fp FC18{ m Fp} Fp}


void  S2366C1 ::v1(){vfunc_called(this, "_ZN7S2366C12v1Ev");}
void  S2366C1 ::v2(){vfunc_called(this, "_ZN7S2366C12v2Ev");}
void  S2366C1 ::v3(){vfunc_called(this, "_ZN7S2366C12v3Ev");}
void  S2366C1 ::v4(){vfunc_called(this, "_ZN7S2366C12v4Ev");}
S2366C1 ::~S2366C1(){ note_dtor("S2366C1", this);} // tgen
S2366C1 ::S2366C1(){ note_ctor("S2366C1", this);} // tgen

static void Test_S2366C1()
{
  extern Class_Descriptor cd_S2366C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(100,141)];
    init_test(&cd_S2366C1, buf);
    S2366C1 *dp, &lv = *(dp=new (buf) S2366C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(792,560), "sizeof(S2366C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2366C1)");
    check_base_class_offset(lv, (S2366C4_nt*)(S2366C3_nt*)(S2366C2*), 0, "S2366C1");
    check_base_class_offset(lv, (S2366C3_nt*)(S2366C2*), 0, "S2366C1");
    check_base_class_offset(lv, (S2366C2*), 0, "S2366C1");
    check_field_offset(lv, s2366c1f0, ABISELECT(728,520), "S2366C1.s2366c1f0");
    check_field_offset(lv, s2366c1f1, ABISELECT(768,548), "S2366C1.s2366c1f1");
    check_field_offset(lv, s2366c1f2, ABISELECT(776,552), "S2366C1.s2366c1f2");
    check_field_offset(lv, s2366c1f3, ABISELECT(784,556), "S2366C1.s2366c1f3");
    test_class_info(&lv, &cd_S2366C1);
    dp->~S2366C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2366C1(Test_S2366C1, "S2366C1", ABISELECT(792,560));

#else // __cplusplus

extern void _ZN7S2366C1C1Ev();
extern void _ZN7S2366C1D1Ev();
Name_Map name_map_S2366C1[] = {
  NSPAIR(_ZN7S2366C1C1Ev),
  NSPAIR(_ZN7S2366C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2366C4_nt;
extern VTBL_ENTRY _ZTI10S2366C4_nt[];
extern  VTBL_ENTRY _ZTV10S2366C4_nt[];
extern Class_Descriptor cd_S2366C3_nt;
extern VTBL_ENTRY _ZTI10S2366C3_nt[];
extern  VTBL_ENTRY _ZTV10S2366C3_nt[];
extern Class_Descriptor cd_S2366C2;
extern VTBL_ENTRY _ZTI7S2366C2[];
extern  VTBL_ENTRY _ZTV7S2366C2[];
static Base_Class bases_S2366C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2366C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2366C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2366C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2366C1[];
extern void _ZN7S2366C1D1Ev();
extern void _ZN7S2366C1D0Ev();
extern void _ZN10S2366C4_nt2v5Ev();
extern void _ZN10S2366C4_nt2v6Ev();
extern void _ZN10S2366C4_nt2v7Ev();
extern void _ZN10S2366C3_nt2v8Ev();
extern void _ZN10S2366C3_nt2v9Ev();
extern void _ZN7S2366C23v10Ev();
extern void _ZN7S2366C23v11Ev();
extern void _ZN7S2366C23v12Ev();
extern void _ZN7S2366C23v13Ev();
extern void _ZN7S2366C23v14Ev();
extern void _ZN7S2366C23v15Ev();
extern void _ZN7S2366C12v1Ev();
extern void _ZN7S2366C12v2Ev();
extern void _ZN7S2366C12v3Ev();
extern void _ZN7S2366C12v4Ev();
static  VTBL_ENTRY vtc_S2366C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2366C1[0]),
  (VTBL_ENTRY)&_ZN7S2366C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2366C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2366C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2366C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN7S2366C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2366C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2366C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2366C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2366C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2366C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2366C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2366C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2366C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2366C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2366C1[];
extern  VTBL_ENTRY _ZTV7S2366C1[];
Class_Descriptor cd_S2366C1 = {  "S2366C1", // class name
  bases_S2366C1, 3,
  &(vtc_S2366C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(792,560), // object size
  NSPAIRA(_ZTI7S2366C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2366C1),19, //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  S863C5  {
  ::S2366C5_nt s863c5f0;
  int s863c5f1[2];
  char s863c5f2;
  virtual  ~S863C5(); // _ZN6S863C5D1Ev
  virtual void  v2(); // _ZN6S863C52v2Ev
  virtual void  v3(); // _ZN6S863C52v3Ev
  virtual void  v4(); // _ZN6S863C52v4Ev
  S863C5(); // tgen
};
//SIG(-1 S863C5) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S863C5 ::~S863C5(){ note_dtor("S863C5", this);}
void  S863C5 ::v2(){vfunc_called(this, "_ZN6S863C52v2Ev");}
void  S863C5 ::v3(){vfunc_called(this, "_ZN6S863C52v3Ev");}
void  S863C5 ::v4(){vfunc_called(this, "_ZN6S863C52v4Ev");}
S863C5 ::S863C5(){ note_ctor("S863C5", this);} // tgen

static void Test_S863C5()
{
  extern Class_Descriptor cd_S863C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S863C5, buf);
    S863C5 *dp, &lv = *(dp=new (buf) S863C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S863C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S863C5)");
    check_field_offset(lv, s863c5f0, ABISELECT(8,4), "S863C5.s863c5f0");
    check_field_offset(lv, s863c5f1, ABISELECT(24,16), "S863C5.s863c5f1");
    check_field_offset(lv, s863c5f2, ABISELECT(32,24), "S863C5.s863c5f2");
    test_class_info(&lv, &cd_S863C5);
    dp->~S863C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS863C5(Test_S863C5, "S863C5", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN6S863C5C1Ev();
extern void _ZN6S863C5D1Ev();
Name_Map name_map_S863C5[] = {
  NSPAIR(_ZN6S863C5C1Ev),
  NSPAIR(_ZN6S863C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S863C5[];
extern void _ZN6S863C5D1Ev();
extern void _ZN6S863C5D0Ev();
extern void _ZN6S863C52v2Ev();
extern void _ZN6S863C52v3Ev();
extern void _ZN6S863C52v4Ev();
static  VTBL_ENTRY vtc_S863C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S863C5[0]),
  (VTBL_ENTRY)&_ZN6S863C5D1Ev,
  (VTBL_ENTRY)&_ZN6S863C5D0Ev,
  (VTBL_ENTRY)&_ZN6S863C52v2Ev,
  (VTBL_ENTRY)&_ZN6S863C52v3Ev,
  (VTBL_ENTRY)&_ZN6S863C52v4Ev,
};
extern VTBL_ENTRY _ZTI6S863C5[];
extern  VTBL_ENTRY _ZTV6S863C5[];
Class_Descriptor cd_S863C5 = {  "S863C5", // class name
  0,0,//no base classes
  &(vtc_S863C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI6S863C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S863C5),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  S863C4  : S863C5 {
  void *s863c4f0;
  virtual void  v5(); // _ZN6S863C42v5Ev
  virtual void  v6(); // _ZN6S863C42v6Ev
  ~S863C4(); // tgen
  S863C4(); // tgen
};
//SIG(-1 S863C4) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S863C4 ::v5(){vfunc_called(this, "_ZN6S863C42v5Ev");}
void  S863C4 ::v6(){vfunc_called(this, "_ZN6S863C42v6Ev");}
S863C4 ::~S863C4(){ note_dtor("S863C4", this);} // tgen
S863C4 ::S863C4(){ note_ctor("S863C4", this);} // tgen

static void Test_S863C4()
{
  extern Class_Descriptor cd_S863C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S863C4, buf);
    S863C4 *dp, &lv = *(dp=new (buf) S863C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S863C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S863C4)");
    check_base_class_offset(lv, (S863C5*), 0, "S863C4");
    check_field_offset(lv, s863c4f0, ABISELECT(40,28), "S863C4.s863c4f0");
    test_class_info(&lv, &cd_S863C4);
    dp->~S863C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS863C4(Test_S863C4, "S863C4", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN6S863C4C1Ev();
extern void _ZN6S863C4D1Ev();
Name_Map name_map_S863C4[] = {
  NSPAIR(_ZN6S863C4C1Ev),
  NSPAIR(_ZN6S863C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S863C5;
extern VTBL_ENTRY _ZTI6S863C5[];
extern  VTBL_ENTRY _ZTV6S863C5[];
static Base_Class bases_S863C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S863C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S863C4[];
extern void _ZN6S863C4D1Ev();
extern void _ZN6S863C4D0Ev();
extern void _ZN6S863C52v2Ev();
extern void _ZN6S863C52v3Ev();
extern void _ZN6S863C52v4Ev();
extern void _ZN6S863C42v5Ev();
extern void _ZN6S863C42v6Ev();
static  VTBL_ENTRY vtc_S863C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S863C4[0]),
  (VTBL_ENTRY)&_ZN6S863C4D1Ev,
  (VTBL_ENTRY)&_ZN6S863C4D0Ev,
  (VTBL_ENTRY)&_ZN6S863C52v2Ev,
  (VTBL_ENTRY)&_ZN6S863C52v3Ev,
  (VTBL_ENTRY)&_ZN6S863C52v4Ev,
  (VTBL_ENTRY)&_ZN6S863C42v5Ev,
  (VTBL_ENTRY)&_ZN6S863C42v6Ev,
};
extern VTBL_ENTRY _ZTI6S863C4[];
extern  VTBL_ENTRY _ZTV6S863C4[];
Class_Descriptor cd_S863C4 = {  "S863C4", // class name
  bases_S863C4, 1,
  &(vtc_S863C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI6S863C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S863C4),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  S863C3  : S863C4 {
  int s863c3f0[4];
  void *s863c3f1[4];
  int s863c3f2[2];
  ::S2366C7_nt s863c3f3;
  char s863c3f4[2];
  ::S2366C9_nt s863c3f5;
  void *s863c3f6;
  ::S2366C11_nt s863c3f7;
  ::S2366C11_nt s863c3f8;
  ::S2366C15_nt s863c3f9;
  ::S629C14 s863c3f10;
  __tsi64 s863c3f11[3];
  int s863c3f12;
  __tsi64 s863c3f13;
  ::S2366C5_nt s863c3f14;
  __tsi64 s863c3f15;
  virtual void  v7(); // _ZN6S863C32v7Ev
  virtual void  v8(); // _ZN6S863C32v8Ev
  virtual void  v9(); // _ZN6S863C32v9Ev
  virtual void  v10(); // _ZN6S863C33v10Ev
  virtual void  v11(); // _ZN6S863C33v11Ev
  virtual void  v12(); // _ZN6S863C33v12Ev
  ~S863C3(); // tgen
  S863C3(); // tgen
};
//SIG(-1 S863C3) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v10 v11 Fp} v1 v2 v3 v4 v5 v6 Fi[4] Fp[4] Fi[2] FC6{ m FC7{ Fl[4]}} Fc[2] FC8{ m FC4 FC9{ m Fp} Fi[2] FC4 FC9 Fi[2]} Fp FC10{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC11{ m FC12{ m Fi[2]} FC13{ m Fi[2]}} FC13 Fc Fi[3] Fc Fi[6] Fc} FC10 FC14{ m Fi[2] FL Fi} FC5 FL[3] Fi FL FC4 FL}


void  S863C3 ::v7(){vfunc_called(this, "_ZN6S863C32v7Ev");}
void  S863C3 ::v8(){vfunc_called(this, "_ZN6S863C32v8Ev");}
void  S863C3 ::v9(){vfunc_called(this, "_ZN6S863C32v9Ev");}
void  S863C3 ::v10(){vfunc_called(this, "_ZN6S863C33v10Ev");}
void  S863C3 ::v11(){vfunc_called(this, "_ZN6S863C33v11Ev");}
void  S863C3 ::v12(){vfunc_called(this, "_ZN6S863C33v12Ev");}
S863C3 ::~S863C3(){ note_dtor("S863C3", this);} // tgen
S863C3 ::S863C3(){ note_ctor("S863C3", this);} // tgen

static void Test_S863C3()
{
  extern Class_Descriptor cd_S863C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(92,131)];
    init_test(&cd_S863C3, buf);
    S863C3 *dp, &lv = *(dp=new (buf) S863C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(728,520), "sizeof(S863C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S863C3)");
    check_base_class_offset(lv, (S863C5*)(S863C4*), 0, "S863C3");
    check_base_class_offset(lv, (S863C4*), 0, "S863C3");
    check_field_offset(lv, s863c3f0, ABISELECT(48,32), "S863C3.s863c3f0");
    check_field_offset(lv, s863c3f1, ABISELECT(64,48), "S863C3.s863c3f1");
    check_field_offset(lv, s863c3f2, ABISELECT(96,64), "S863C3.s863c3f2");
    check_field_offset(lv, s863c3f3, ABISELECT(104,72), "S863C3.s863c3f3");
    check_field_offset(lv, s863c3f4, ABISELECT(136,88), "S863C3.s863c3f4");
    check_field_offset(lv, s863c3f5, ABISELECT(144,92), "S863C3.s863c3f5");
    check_field_offset(lv, s863c3f6, ABISELECT(208,140), "S863C3.s863c3f6");
    check_field_offset(lv, s863c3f7, ABISELECT(216,144), "S863C3.s863c3f7");
    check_field_offset(lv, s863c3f8, ABISELECT(424,292), "S863C3.s863c3f8");
    check_field_offset(lv, s863c3f9, ABISELECT(632,440), "S863C3.s863c3f9");
    check_field_offset(lv, s863c3f10, ABISELECT(656,460), "S863C3.s863c3f10");
    check_field_offset(lv, s863c3f11, ABISELECT(664,464), "S863C3.s863c3f11");
    check_field_offset(lv, s863c3f12, ABISELECT(688,488), "S863C3.s863c3f12");
    check_field_offset(lv, s863c3f13, ABISELECT(696,492), "S863C3.s863c3f13");
    check_field_offset(lv, s863c3f14, ABISELECT(704,500), "S863C3.s863c3f14");
    check_field_offset(lv, s863c3f15, ABISELECT(720,512), "S863C3.s863c3f15");
    test_class_info(&lv, &cd_S863C3);
    dp->~S863C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS863C3(Test_S863C3, "S863C3", ABISELECT(728,520));

#else // __cplusplus

extern void _ZN6S863C3C1Ev();
extern void _ZN6S863C3D1Ev();
Name_Map name_map_S863C3[] = {
  NSPAIR(_ZN6S863C3C1Ev),
  NSPAIR(_ZN6S863C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S863C5;
extern VTBL_ENTRY _ZTI6S863C5[];
extern  VTBL_ENTRY _ZTV6S863C5[];
extern Class_Descriptor cd_S863C4;
extern VTBL_ENTRY _ZTI6S863C4[];
extern  VTBL_ENTRY _ZTV6S863C4[];
static Base_Class bases_S863C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S863C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S863C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S863C3[];
extern void _ZN6S863C3D1Ev();
extern void _ZN6S863C3D0Ev();
extern void _ZN6S863C52v2Ev();
extern void _ZN6S863C52v3Ev();
extern void _ZN6S863C52v4Ev();
extern void _ZN6S863C42v5Ev();
extern void _ZN6S863C42v6Ev();
extern void _ZN6S863C32v7Ev();
extern void _ZN6S863C32v8Ev();
extern void _ZN6S863C32v9Ev();
extern void _ZN6S863C33v10Ev();
extern void _ZN6S863C33v11Ev();
extern void _ZN6S863C33v12Ev();
static  VTBL_ENTRY vtc_S863C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S863C3[0]),
  (VTBL_ENTRY)&_ZN6S863C3D1Ev,
  (VTBL_ENTRY)&_ZN6S863C3D0Ev,
  (VTBL_ENTRY)&_ZN6S863C52v2Ev,
  (VTBL_ENTRY)&_ZN6S863C52v3Ev,
  (VTBL_ENTRY)&_ZN6S863C52v4Ev,
  (VTBL_ENTRY)&_ZN6S863C42v5Ev,
  (VTBL_ENTRY)&_ZN6S863C42v6Ev,
  (VTBL_ENTRY)&_ZN6S863C32v7Ev,
  (VTBL_ENTRY)&_ZN6S863C32v8Ev,
  (VTBL_ENTRY)&_ZN6S863C32v9Ev,
  (VTBL_ENTRY)&_ZN6S863C33v10Ev,
  (VTBL_ENTRY)&_ZN6S863C33v11Ev,
  (VTBL_ENTRY)&_ZN6S863C33v12Ev,
};
extern VTBL_ENTRY _ZTI6S863C3[];
extern  VTBL_ENTRY _ZTV6S863C3[];
Class_Descriptor cd_S863C3 = {  "S863C3", // class name
  bases_S863C3, 2,
  &(vtc_S863C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(728,520), // object size
  NSPAIRA(_ZTI6S863C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S863C3),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S863C2  : S863C3 {
  ::S2366C19 s863c2f0;
  void *s863c2f1;
  int s863c2f2;
  virtual void  v13(); // _ZN6S863C23v13Ev
  virtual void  v14(); // _ZN6S863C23v14Ev
  virtual void  v15(); // _ZN6S863C23v15Ev
  virtual void  v16(); // _ZN6S863C23v16Ev
  virtual void  v17(); // _ZN6S863C23v17Ev
  virtual void  v18(); // _ZN6S863C23v18Ev
  ~S863C2(); // tgen
  S863C2(); // tgen
};
//SIG(-1 S863C2) C1{ BC2{ BC3{ BC4{ vd v7 v8 v9 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v10 v11 Fp} v12 v13 v14 v15 v16 v17 Fi[4] Fp[4] Fi[2] FC7{ m FC8{ Fl[4]}} Fc[2] FC9{ m FC5 FC10{ m Fp} Fi[2] FC5 FC10 Fi[2]} Fp FC11{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC12{ m FC13{ m Fi[2]} FC14{ m Fi[2]}} FC14 Fc Fi[3] Fc Fi[6] Fc} FC11 FC15{ m Fi[2] FL Fi} FC6 FL[3] Fi FL FC5 FL} v1 v2 v3 v4 v5 v6 FC16{ m Fp} Fp Fi}


void  S863C2 ::v13(){vfunc_called(this, "_ZN6S863C23v13Ev");}
void  S863C2 ::v14(){vfunc_called(this, "_ZN6S863C23v14Ev");}
void  S863C2 ::v15(){vfunc_called(this, "_ZN6S863C23v15Ev");}
void  S863C2 ::v16(){vfunc_called(this, "_ZN6S863C23v16Ev");}
void  S863C2 ::v17(){vfunc_called(this, "_ZN6S863C23v17Ev");}
void  S863C2 ::v18(){vfunc_called(this, "_ZN6S863C23v18Ev");}
S863C2 ::~S863C2(){ note_dtor("S863C2", this);} // tgen
S863C2 ::S863C2(){ note_ctor("S863C2", this);} // tgen

static void Test_S863C2()
{
  extern Class_Descriptor cd_S863C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(95,134)];
    init_test(&cd_S863C2, buf);
    S863C2 *dp, &lv = *(dp=new (buf) S863C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(752,532), "sizeof(S863C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S863C2)");
    check_base_class_offset(lv, (S863C5*)(S863C4*)(S863C3*), 0, "S863C2");
    check_base_class_offset(lv, (S863C4*)(S863C3*), 0, "S863C2");
    check_base_class_offset(lv, (S863C3*), 0, "S863C2");
    check_field_offset(lv, s863c2f0, ABISELECT(728,520), "S863C2.s863c2f0");
    check_field_offset(lv, s863c2f1, ABISELECT(736,524), "S863C2.s863c2f1");
    check_field_offset(lv, s863c2f2, ABISELECT(744,528), "S863C2.s863c2f2");
    test_class_info(&lv, &cd_S863C2);
    dp->~S863C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS863C2(Test_S863C2, "S863C2", ABISELECT(752,532));

#else // __cplusplus

extern void _ZN6S863C2C1Ev();
extern void _ZN6S863C2D1Ev();
Name_Map name_map_S863C2[] = {
  NSPAIR(_ZN6S863C2C1Ev),
  NSPAIR(_ZN6S863C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S863C5;
extern VTBL_ENTRY _ZTI6S863C5[];
extern  VTBL_ENTRY _ZTV6S863C5[];
extern Class_Descriptor cd_S863C4;
extern VTBL_ENTRY _ZTI6S863C4[];
extern  VTBL_ENTRY _ZTV6S863C4[];
extern Class_Descriptor cd_S863C3;
extern VTBL_ENTRY _ZTI6S863C3[];
extern  VTBL_ENTRY _ZTV6S863C3[];
static Base_Class bases_S863C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S863C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S863C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S863C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S863C2[];
extern void _ZN6S863C2D1Ev();
extern void _ZN6S863C2D0Ev();
extern void _ZN6S863C52v2Ev();
extern void _ZN6S863C52v3Ev();
extern void _ZN6S863C52v4Ev();
extern void _ZN6S863C42v5Ev();
extern void _ZN6S863C42v6Ev();
extern void _ZN6S863C32v7Ev();
extern void _ZN6S863C32v8Ev();
extern void _ZN6S863C32v9Ev();
extern void _ZN6S863C33v10Ev();
extern void _ZN6S863C33v11Ev();
extern void _ZN6S863C33v12Ev();
extern void _ZN6S863C23v13Ev();
extern void _ZN6S863C23v14Ev();
extern void _ZN6S863C23v15Ev();
extern void _ZN6S863C23v16Ev();
extern void _ZN6S863C23v17Ev();
extern void _ZN6S863C23v18Ev();
static  VTBL_ENTRY vtc_S863C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S863C2[0]),
  (VTBL_ENTRY)&_ZN6S863C2D1Ev,
  (VTBL_ENTRY)&_ZN6S863C2D0Ev,
  (VTBL_ENTRY)&_ZN6S863C52v2Ev,
  (VTBL_ENTRY)&_ZN6S863C52v3Ev,
  (VTBL_ENTRY)&_ZN6S863C52v4Ev,
  (VTBL_ENTRY)&_ZN6S863C42v5Ev,
  (VTBL_ENTRY)&_ZN6S863C42v6Ev,
  (VTBL_ENTRY)&_ZN6S863C32v7Ev,
  (VTBL_ENTRY)&_ZN6S863C32v8Ev,
  (VTBL_ENTRY)&_ZN6S863C32v9Ev,
  (VTBL_ENTRY)&_ZN6S863C33v10Ev,
  (VTBL_ENTRY)&_ZN6S863C33v11Ev,
  (VTBL_ENTRY)&_ZN6S863C33v12Ev,
  (VTBL_ENTRY)&_ZN6S863C23v13Ev,
  (VTBL_ENTRY)&_ZN6S863C23v14Ev,
  (VTBL_ENTRY)&_ZN6S863C23v15Ev,
  (VTBL_ENTRY)&_ZN6S863C23v16Ev,
  (VTBL_ENTRY)&_ZN6S863C23v17Ev,
  (VTBL_ENTRY)&_ZN6S863C23v18Ev,
};
extern VTBL_ENTRY _ZTI6S863C2[];
extern  VTBL_ENTRY _ZTV6S863C2[];
Class_Descriptor cd_S863C2 = {  "S863C2", // class name
  bases_S863C2, 3,
  &(vtc_S863C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(752,532), // object size
  NSPAIRA(_ZTI6S863C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S863C2),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  S863C1  : S863C2 {
  __tsi64 s863c1f0;
  virtual void  v1(); // _ZN6S863C12v1Ev
  ~S863C1(); // tgen
  S863C1(); // tgen
};
//SIG(1 S863C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v2 v3 v4 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} v5 v6 Fp} v7 v8 v9 v10 v11 v12 Fi[4] Fp[4] Fi[2] FC8{ m FC9{ Fl[4]}} Fc[2] FC10{ m FC6 FC11{ m Fp} Fi[2] FC6 FC11 Fi[2]} Fp FC12{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC13{ m FC14{ m Fi[2]} FC15{ m Fi[2]}} FC15 Fc Fi[3] Fc Fi[6] Fc} FC12 FC16{ m Fi[2] FL Fi} FC7 FL[3] Fi FL FC6 FL} v13 v14 v15 v16 v17 v18 FC17{ m Fp} Fp Fi} v1 FL}


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

static void Test_S863C1()
{
  extern Class_Descriptor cd_S863C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(96,136)];
    init_test(&cd_S863C1, buf);
    S863C1 *dp, &lv = *(dp=new (buf) S863C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(760,540), "sizeof(S863C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S863C1)");
    check_base_class_offset(lv, (S863C5*)(S863C4*)(S863C3*)(S863C2*), 0, "S863C1");
    check_base_class_offset(lv, (S863C4*)(S863C3*)(S863C2*), 0, "S863C1");
    check_base_class_offset(lv, (S863C3*)(S863C2*), 0, "S863C1");
    check_base_class_offset(lv, (S863C2*), 0, "S863C1");
    check_field_offset(lv, s863c1f0, ABISELECT(752,532), "S863C1.s863c1f0");
    test_class_info(&lv, &cd_S863C1);
    dp->~S863C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS863C1(Test_S863C1, "S863C1", ABISELECT(760,540));

#else // __cplusplus

extern void _ZN6S863C1C1Ev();
extern void _ZN6S863C1D1Ev();
Name_Map name_map_S863C1[] = {
  NSPAIR(_ZN6S863C1C1Ev),
  NSPAIR(_ZN6S863C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S863C5;
extern VTBL_ENTRY _ZTI6S863C5[];
extern  VTBL_ENTRY _ZTV6S863C5[];
extern Class_Descriptor cd_S863C4;
extern VTBL_ENTRY _ZTI6S863C4[];
extern  VTBL_ENTRY _ZTV6S863C4[];
extern Class_Descriptor cd_S863C3;
extern VTBL_ENTRY _ZTI6S863C3[];
extern  VTBL_ENTRY _ZTV6S863C3[];
extern Class_Descriptor cd_S863C2;
extern VTBL_ENTRY _ZTI6S863C2[];
extern  VTBL_ENTRY _ZTV6S863C2[];
static Base_Class bases_S863C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S863C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S863C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S863C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S863C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S863C1[];
extern void _ZN6S863C1D1Ev();
extern void _ZN6S863C1D0Ev();
extern void _ZN6S863C52v2Ev();
extern void _ZN6S863C52v3Ev();
extern void _ZN6S863C52v4Ev();
extern void _ZN6S863C42v5Ev();
extern void _ZN6S863C42v6Ev();
extern void _ZN6S863C32v7Ev();
extern void _ZN6S863C32v8Ev();
extern void _ZN6S863C32v9Ev();
extern void _ZN6S863C33v10Ev();
extern void _ZN6S863C33v11Ev();
extern void _ZN6S863C33v12Ev();
extern void _ZN6S863C23v13Ev();
extern void _ZN6S863C23v14Ev();
extern void _ZN6S863C23v15Ev();
extern void _ZN6S863C23v16Ev();
extern void _ZN6S863C23v17Ev();
extern void _ZN6S863C23v18Ev();
extern void _ZN6S863C12v1Ev();
static  VTBL_ENTRY vtc_S863C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S863C1[0]),
  (VTBL_ENTRY)&_ZN6S863C1D1Ev,
  (VTBL_ENTRY)&_ZN6S863C1D0Ev,
  (VTBL_ENTRY)&_ZN6S863C52v2Ev,
  (VTBL_ENTRY)&_ZN6S863C52v3Ev,
  (VTBL_ENTRY)&_ZN6S863C52v4Ev,
  (VTBL_ENTRY)&_ZN6S863C42v5Ev,
  (VTBL_ENTRY)&_ZN6S863C42v6Ev,
  (VTBL_ENTRY)&_ZN6S863C32v7Ev,
  (VTBL_ENTRY)&_ZN6S863C32v8Ev,
  (VTBL_ENTRY)&_ZN6S863C32v9Ev,
  (VTBL_ENTRY)&_ZN6S863C33v10Ev,
  (VTBL_ENTRY)&_ZN6S863C33v11Ev,
  (VTBL_ENTRY)&_ZN6S863C33v12Ev,
  (VTBL_ENTRY)&_ZN6S863C23v13Ev,
  (VTBL_ENTRY)&_ZN6S863C23v14Ev,
  (VTBL_ENTRY)&_ZN6S863C23v15Ev,
  (VTBL_ENTRY)&_ZN6S863C23v16Ev,
  (VTBL_ENTRY)&_ZN6S863C23v17Ev,
  (VTBL_ENTRY)&_ZN6S863C23v18Ev,
  (VTBL_ENTRY)&_ZN6S863C12v1Ev,
};
extern VTBL_ENTRY _ZTI6S863C1[];
extern  VTBL_ENTRY _ZTV6S863C1[];
Class_Descriptor cd_S863C1 = {  "S863C1", // class name
  bases_S863C1, 4,
  &(vtc_S863C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(760,540), // object size
  NSPAIRA(_ZTI6S863C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S863C1),22, //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  S3552C4  : virtual S20677C3 {
  long double s3552c4f0;
  int s3552c4f1;
  ::S20677C3 s3552c4f2;
  ::S20677C3 s3552c4f3;
  ~S3552C4(); // tgen
  S3552C4(); // tgen
};
//SIG(-1 S3552C4) C1{ VBC2{ m Fp FL[4] Fs} FD Fi FC2 FC2}


S3552C4 ::~S3552C4(){ note_dtor("S3552C4", this);} // tgen
S3552C4 ::S3552C4(){ note_ctor("S3552C4", this);} // tgen

static void Test_S3552C4()
{
  extern Class_Descriptor cd_S3552C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,36)];
    init_test(&cd_S3552C4, buf);
    S3552C4 *dp, &lv = *(dp=new (buf) S3552C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S3552C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3552C4)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(136,100), "S3552C4");
    check_field_offset(lv, s3552c4f0, ABISELECT(16,4), "S3552C4.s3552c4f0");
    check_field_offset(lv, s3552c4f1, ABISELECT(32,16), "S3552C4.s3552c4f1");
    check_field_offset(lv, s3552c4f2, ABISELECT(40,20), "S3552C4.s3552c4f2");
    check_field_offset(lv, s3552c4f3, ABISELECT(88,60), "S3552C4.s3552c4f3");
    test_class_info(&lv, &cd_S3552C4);
    dp->~S3552C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3552C4(Test_S3552C4, "S3552C4", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN7S3552C4C1Ev();
extern void _ZN7S3552C4D1Ev();
Name_Map name_map_S3552C4[] = {
  NSPAIR(_ZN7S3552C4C1Ev),
  NSPAIR(_ZN7S3552C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S3552C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(136,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3552C4[];
static  VTBL_ENTRY vtc_S3552C4[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C4[0]),
};
extern VTBL_ENTRY _ZTV7S3552C4[];
static  VTT_ENTRY vtt_S3552C4[] = {
  {&(_ZTV7S3552C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3552C4[];
extern  VTBL_ENTRY _ZTV7S3552C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C4[];
Class_Descriptor cd_S3552C4 = {  "S3552C4", // class name
  bases_S3552C4, 1,
  &(vtc_S3552C4[0]), // expected_vtbl_contents
  &(vtt_S3552C4[0]), // expected_vtt_contents
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI7S3552C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3552C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3552C4),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  S3552C7  : virtual S20677C3 , S3552C4 {
  short s3552c7f0;
  __tsi64 s3552c7f1;
  char s3552c7f2;
  int s3552c7f3[2];
  ::S3552C4 s3552c7f4;
  void *s3552c7f5;
  __tsi64 s3552c7f6;
  int s3552c7f7;
  __tsi64 s3552c7f8;
  int s3552c7f9;
  virtual void  v1(); // _ZN7S3552C72v1Ev
  virtual void  v2(); // _ZN7S3552C72v2Ev
  virtual void  v3(); // _ZN7S3552C72v3Ev
  ~S3552C7(); // tgen
  S3552C7(); // tgen
};
//SIG(-1 S3552C7) C1{ VBC2{ m Fp FL[4] Fs} BC3{ VBC2 FD Fi FC2 FC2} v1 v2 v3 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi}


void  S3552C7 ::v1(){vfunc_called(this, "_ZN7S3552C72v1Ev");}
void  S3552C7 ::v2(){vfunc_called(this, "_ZN7S3552C72v2Ev");}
void  S3552C7 ::v3(){vfunc_called(this, "_ZN7S3552C72v3Ev");}
S3552C7 ::~S3552C7(){ note_dtor("S3552C7", this);} // tgen
S3552C7 ::S3552C7(){ note_ctor("S3552C7", this);} // tgen

static void Test_S3552C7()
{
  extern Class_Descriptor cd_S3552C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,84)];
    init_test(&cd_S3552C7, buf);
    S3552C7 *dp, &lv = *(dp=new (buf) S3552C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,332), "sizeof(S3552C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3552C7)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(408,292), "S3552C7");
    check_base_class_offset(lv, (S20677C3*)(S3552C4*), ABISELECT(408,292), "S3552C7");
    check_base_class_offset(lv, (S3552C4*), 0, "S3552C7");
    check_field_offset(lv, s3552c7f0, ABISELECT(136,100), "S3552C7.s3552c7f0");
    check_field_offset(lv, s3552c7f1, ABISELECT(144,104), "S3552C7.s3552c7f1");
    check_field_offset(lv, s3552c7f2, ABISELECT(152,112), "S3552C7.s3552c7f2");
    check_field_offset(lv, s3552c7f3, ABISELECT(156,116), "S3552C7.s3552c7f3");
    check_field_offset(lv, s3552c7f4, ABISELECT(176,124), "S3552C7.s3552c7f4");
    check_field_offset(lv, s3552c7f5, ABISELECT(368,264), "S3552C7.s3552c7f5");
    check_field_offset(lv, s3552c7f6, ABISELECT(376,268), "S3552C7.s3552c7f6");
    check_field_offset(lv, s3552c7f7, ABISELECT(384,276), "S3552C7.s3552c7f7");
    check_field_offset(lv, s3552c7f8, ABISELECT(392,280), "S3552C7.s3552c7f8");
    check_field_offset(lv, s3552c7f9, ABISELECT(400,288), "S3552C7.s3552c7f9");
    test_class_info(&lv, &cd_S3552C7);
    dp->~S3552C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3552C7(Test_S3552C7, "S3552C7", ABISELECT(464,332));

#else // __cplusplus

extern void _ZN7S3552C7C1Ev();
extern void _ZN7S3552C7D1Ev();
Name_Map name_map_S3552C7[] = {
  NSPAIR(_ZN7S3552C7C1Ev),
  NSPAIR(_ZN7S3552C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3552C4;
extern VTBL_ENTRY _ZTI7S3552C4[];
extern  VTBL_ENTRY _ZTV7S3552C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C4[];
static Base_Class bases_S3552C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(408,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
    -1, //immediately_derived
  1, 1},
  {&cd_S3552C4,    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 _ZTI7S3552C7[];
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY vtc_S3552C7[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C7[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
extern VTBL_ENTRY _ZTV7S3552C7[];
static  VTBL_ENTRY _tg__ZTV7S3552C4__7S3552C7[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C4[0]),
};
static  VTT_ENTRY vtt_S3552C7[] = {
  {&(_ZTV7S3552C7[3]),  3,6},
  {&(_tg__ZTV7S3552C4__7S3552C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3552C7[];
extern  VTBL_ENTRY _ZTV7S3552C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C7[];
Class_Descriptor cd_S3552C7 = {  "S3552C7", // class name
  bases_S3552C7, 2,
  &(vtc_S3552C7[0]), // expected_vtbl_contents
  &(vtt_S3552C7[0]), // expected_vtt_contents
  ABISELECT(464,332), // object size
  NSPAIRA(_ZTI7S3552C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3552C7),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3552C7),2, //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  S3552C8  : virtual S20677C3 , virtual S3552C7 {
  __tsi64 s3552c8f0;
  ::S20677C6_nt s3552c8f1;
  void *s3552c8f2;
  char s3552c8f3[2];
  ::S20677C3 s3552c8f4;
  long s3552c8f5;
  ::S20677C6_nt s3552c8f6;
  virtual void  v4(); // _ZN7S3552C82v4Ev
  virtual void  v5(); // _ZN7S3552C82v5Ev
  virtual void  v6(); // _ZN7S3552C82v6Ev
  ~S3552C8(); // tgen
  S3552C8(); // tgen
};
//SIG(-1 S3552C8) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 BC4{ VBC2 FD Fi FC2 FC2} v4 v5 v6 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} v1 v2 v3 FL FC5{} Fp Fc[2] FC2 Fl FC5}


void  S3552C8 ::v4(){vfunc_called(this, "_ZN7S3552C82v4Ev");}
void  S3552C8 ::v5(){vfunc_called(this, "_ZN7S3552C82v5Ev");}
void  S3552C8 ::v6(){vfunc_called(this, "_ZN7S3552C82v6Ev");}
S3552C8 ::~S3552C8(){ note_dtor("S3552C8", this);} // tgen
S3552C8 ::S3552C8(){ note_ctor("S3552C8", this);} // tgen

static void Test_S3552C8()
{
  extern Class_Descriptor cd_S3552C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,102)];
    init_test(&cd_S3552C8, buf);
    S3552C8 *dp, &lv = *(dp=new (buf) S3552C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,404), "sizeof(S3552C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3552C8)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(104,72), "S3552C8");
    check_base_class_offset(lv, (S20677C3*)(S3552C7*), ABISELECT(104,72), "S3552C8");
    check_base_class_offset(lv, (S20677C3*)(S3552C4*)(S3552C7*), ABISELECT(104,72), "S3552C8");
    check_base_class_offset(lv, (S3552C4*)(S3552C7*), ABISELECT(160,112), "S3552C8");
    check_base_class_offset(lv, (S3552C7*), ABISELECT(160,112), "S3552C8");
    check_field_offset(lv, s3552c8f0, ABISELECT(8,4), "S3552C8.s3552c8f0");
    check_field_offset(lv, s3552c8f1, ABISELECT(16,12), "S3552C8.s3552c8f1");
    check_field_offset(lv, s3552c8f2, ABISELECT(24,16), "S3552C8.s3552c8f2");
    check_field_offset(lv, s3552c8f3, ABISELECT(32,20), "S3552C8.s3552c8f3");
    check_field_offset(lv, s3552c8f4, ABISELECT(40,24), "S3552C8.s3552c8f4");
    check_field_offset(lv, s3552c8f5, ABISELECT(88,64), "S3552C8.s3552c8f5");
    check_field_offset(lv, s3552c8f6, ABISELECT(96,68), "S3552C8.s3552c8f6");
    test_class_info(&lv, &cd_S3552C8);
    dp->~S3552C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3552C8(Test_S3552C8, "S3552C8", ABISELECT(576,404));

#else // __cplusplus

extern void _ZN7S3552C8C1Ev();
extern void _ZN7S3552C8D1Ev();
Name_Map name_map_S3552C8[] = {
  NSPAIR(_ZN7S3552C8C1Ev),
  NSPAIR(_ZN7S3552C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3552C4;
extern VTBL_ENTRY _ZTI7S3552C4[];
extern  VTBL_ENTRY _ZTV7S3552C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C4[];
extern Class_Descriptor cd_S3552C7;
extern VTBL_ENTRY _ZTI7S3552C7[];
extern  VTBL_ENTRY _ZTV7S3552C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C7[];
static Base_Class bases_S3552C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(104,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
    -1, //immediately_derived
  1, 1},
  {&cd_S3552C4,    ABISELECT(160,112), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3552C7,    ABISELECT(160,112), //bcp->offset
    7, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3552C8[];
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY vtc_S3552C8[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C8[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI7S3552C8[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
extern VTBL_ENTRY _ZTV7S3552C8[];
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C8[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C7[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C47S3552C7__7S3552C8[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C4[0]),
};
static  VTT_ENTRY vtt_S3552C8[] = {
  {&(_ZTV7S3552C8[4]),  4,16},
  {&(_ZTV7S3552C8[13]),  13,16},
  {&(_tg__ZTV7S3552C7__7S3552C8[3]),  3,6},
  {&(_tg__ZTV7S3552C47S3552C7__7S3552C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3552C8[];
extern  VTBL_ENTRY _ZTV7S3552C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C8[];
Class_Descriptor cd_S3552C8 = {  "S3552C8", // class name
  bases_S3552C8, 3,
  &(vtc_S3552C8[0]), // expected_vtbl_contents
  &(vtt_S3552C8[0]), // expected_vtt_contents
  ABISELECT(576,404), // object size
  NSPAIRA(_ZTI7S3552C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3552C8),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3552C8),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  S3552C10  : virtual S20677C3 , virtual S3552C4 {
  int s3552c10f0;
  ::S3552C4 s3552c10f1;
  __tsi64 s3552c10f2;
  int s3552c10f3;
  void *s3552c10f4;
  virtual void  v7(); // _ZN8S3552C102v7Ev
  virtual void  v8(); // _ZN8S3552C102v8Ev
  ~S3552C10(); // tgen
  S3552C10(); // tgen
};
//SIG(-1 S3552C10) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 FD Fi FC2 FC2} v1 v2 Fi FC3 FL Fi Fp}


void  S3552C10 ::v7(){vfunc_called(this, "_ZN8S3552C102v7Ev");}
void  S3552C10 ::v8(){vfunc_called(this, "_ZN8S3552C102v8Ev");}
S3552C10 ::~S3552C10(){ note_dtor("S3552C10", this);} // tgen
S3552C10 ::S3552C10(){ note_ctor("S3552C10", this);} // tgen

static void Test_S3552C10()
{
  extern Class_Descriptor cd_S3552C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,77)];
    init_test(&cd_S3552C10, buf);
    S3552C10 *dp, &lv = *(dp=new (buf) S3552C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,304), "sizeof(S3552C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3552C10)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(232,164), "S3552C10");
    check_base_class_offset(lv, (S20677C3*)(S3552C4*), ABISELECT(232,164), "S3552C10");
    check_base_class_offset(lv, (S3552C4*), ABISELECT(288,204), "S3552C10");
    check_field_offset(lv, s3552c10f0, ABISELECT(8,4), "S3552C10.s3552c10f0");
    check_field_offset(lv, s3552c10f1, ABISELECT(16,8), "S3552C10.s3552c10f1");
    check_field_offset(lv, s3552c10f2, ABISELECT(208,148), "S3552C10.s3552c10f2");
    check_field_offset(lv, s3552c10f3, ABISELECT(216,156), "S3552C10.s3552c10f3");
    check_field_offset(lv, s3552c10f4, ABISELECT(224,160), "S3552C10.s3552c10f4");
    test_class_info(&lv, &cd_S3552C10);
    dp->~S3552C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3552C10(Test_S3552C10, "S3552C10", ABISELECT(432,304));

#else // __cplusplus

extern void _ZN8S3552C10C1Ev();
extern void _ZN8S3552C10D1Ev();
Name_Map name_map_S3552C10[] = {
  NSPAIR(_ZN8S3552C10C1Ev),
  NSPAIR(_ZN8S3552C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3552C4;
extern VTBL_ENTRY _ZTI7S3552C4[];
extern  VTBL_ENTRY _ZTV7S3552C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C4[];
static Base_Class bases_S3552C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(232,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_S3552C4,    ABISELECT(288,204), //bcp->offset
    6, //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 _ZTI8S3552C10[];
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY vtc_S3552C10[] = {
  ABISELECT(288,204),
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
  ABISELECT(-56,-40),
  ABISELECT(-288,-204),
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
};
extern VTBL_ENTRY _ZTV8S3552C10[];
static  VTBL_ENTRY _tg__ZTV7S3552C4__8S3552C10[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C4[0]),
};
static  VTT_ENTRY vtt_S3552C10[] = {
  {&(_ZTV8S3552C10[4]),  4,9},
  {&(_ZTV8S3552C10[9]),  9,9},
  {&(_tg__ZTV7S3552C4__8S3552C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S3552C10[];
extern  VTBL_ENTRY _ZTV8S3552C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3552C10[];
Class_Descriptor cd_S3552C10 = {  "S3552C10", // class name
  bases_S3552C10, 2,
  &(vtc_S3552C10[0]), // expected_vtbl_contents
  &(vtt_S3552C10[0]), // expected_vtt_contents
  ABISELECT(432,304), // object size
  NSPAIRA(_ZTI8S3552C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3552C10),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3552C10),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  S3552C6  : virtual S3552C7 , virtual S3552C8 , virtual S3552C10 {
  ::S20677C6_nt s3552c6f0;
  ::S20677C6_nt s3552c6f1;
  int s3552c6f2;
  ::S3552C4 s3552c6f3;
  ::S20677C6_nt s3552c6f4;
  ::S20677C6_nt s3552c6f5;
  ::S21008C9 s3552c6f6;
  ::S3552C8 s3552c6f7;
  void *s3552c6f8;
  ::S20677C6_nt s3552c6f9;
  virtual void  v9(); // _ZN7S3552C62v9Ev
  virtual void  v10(); // _ZN7S3552C63v10Ev
  ~S3552C6(); // tgen
  S3552C6(); // tgen
};
//SIG(-1 S3552C6) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} BC4{ VBC3 FD Fi FC3 FC3} v3 v4 v5 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC5{ VBC3 VBC2 v6 v7 v8 FL FC6{} Fp Fc[2] FC3 Fl FC6} VBC7{ VBC3 VBC4 v9 v10 Fi FC4 FL Fi Fp} v1 v2 FC6 FC6 Fi FC4 FC6 FC6 FC8{ v11 FC6 FC9{ VBC3 FD Fi FC3 FC3} FC6 FL FC6 Fp FC6 Fp[2] FC6} FC5 Fp FC6}


void  S3552C6 ::v9(){vfunc_called(this, "_ZN7S3552C62v9Ev");}
void  S3552C6 ::v10(){vfunc_called(this, "_ZN7S3552C63v10Ev");}
S3552C6 ::~S3552C6(){ note_dtor("S3552C6", this);} // tgen
S3552C6 ::S3552C6(){ note_ctor("S3552C6", this);} // tgen

static void Test_S3552C6()
{
  extern Class_Descriptor cd_S3552C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(128,356)];
    init_test(&cd_S3552C6, buf);
    S3552C6 *dp, &lv = *(dp=new (buf) S3552C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2032,1420), "sizeof(S3552C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3552C6)");
    check_base_class_offset(lv, (S20677C3*)(S3552C7*), ABISELECT(1496,1044), "S3552C6");
    check_base_class_offset(lv, (S20677C3*)(S3552C4*)(S3552C7*), ABISELECT(1496,1044), "S3552C6");
    check_base_class_offset(lv, (S20677C3*)(S3552C8*), ABISELECT(1496,1044), "S3552C6");
    check_base_class_offset(lv, (S20677C3*)(S3552C10*), ABISELECT(1496,1044), "S3552C6");
    /*is_ambiguous_... S3552C6::S3552C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3552C4*), ABISELECT(1496,1044), "S3552C6");
    check_base_class_offset(lv, (S3552C4*)(S3552C7*), ABISELECT(1088,752), "S3552C6");
    check_base_class_offset(lv, (S3552C7*), ABISELECT(1088,752), "S3552C6");
    check_base_class_offset(lv, (S3552C7*)(S3552C8*), ABISELECT(1088,752), "S3552C6");
    check_base_class_offset(lv, (S3552C8*), ABISELECT(1544,1084), "S3552C6");
    check_base_class_offset(lv, (S3552C4*)(S3552C10*), ABISELECT(1888,1320), "S3552C6");
    check_base_class_offset(lv, (S3552C10*), ABISELECT(1648,1156), "S3552C6");
    check_field_offset(lv, s3552c6f0, ABISELECT(8,4), "S3552C6.s3552c6f0");
    check_field_offset(lv, s3552c6f1, ABISELECT(9,5), "S3552C6.s3552c6f1");
    check_field_offset(lv, s3552c6f2, ABISELECT(12,8), "S3552C6.s3552c6f2");
    check_field_offset(lv, s3552c6f3, ABISELECT(16,12), "S3552C6.s3552c6f3");
    check_field_offset(lv, s3552c6f4, ABISELECT(208,152), "S3552C6.s3552c6f4");
    check_field_offset(lv, s3552c6f5, ABISELECT(209,153), "S3552C6.s3552c6f5");
    check_field_offset(lv, s3552c6f6, ABISELECT(224,156), "S3552C6.s3552c6f6");
    check_field_offset(lv, s3552c6f7, ABISELECT(496,340), "S3552C6.s3552c6f7");
    check_field_offset(lv, s3552c6f8, ABISELECT(1072,744), "S3552C6.s3552c6f8");
    check_field_offset(lv, s3552c6f9, ABISELECT(1080,748), "S3552C6.s3552c6f9");
    test_class_info(&lv, &cd_S3552C6);
    dp->~S3552C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3552C6(Test_S3552C6, "S3552C6", ABISELECT(2032,1420));

#else // __cplusplus

extern void _ZN7S3552C6C1Ev();
extern void _ZN7S3552C6D1Ev();
Name_Map name_map_S3552C6[] = {
  NSPAIR(_ZN7S3552C6C1Ev),
  NSPAIR(_ZN7S3552C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3552C4;
extern VTBL_ENTRY _ZTI7S3552C4[];
extern  VTBL_ENTRY _ZTV7S3552C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C4[];
extern Class_Descriptor cd_S3552C7;
extern VTBL_ENTRY _ZTI7S3552C7[];
extern  VTBL_ENTRY _ZTV7S3552C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C7[];
extern Class_Descriptor cd_S3552C8;
extern VTBL_ENTRY _ZTI7S3552C8[];
extern  VTBL_ENTRY _ZTV7S3552C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C8[];
extern Class_Descriptor cd_S3552C4;
extern VTBL_ENTRY _ZTI7S3552C4[];
extern  VTBL_ENTRY _ZTV7S3552C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C4[];
extern Class_Descriptor cd_S3552C10;
extern VTBL_ENTRY _ZTI8S3552C10[];
extern  VTBL_ENTRY _ZTV8S3552C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3552C10[];
static Base_Class bases_S3552C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1496,1044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3552C4,    ABISELECT(1088,752), //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_S3552C7,    ABISELECT(1088,752), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3552C8,    ABISELECT(1544,1084), //bcp->offset
    18, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3552C4,    ABISELECT(1888,1320), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3552C10,    ABISELECT(1648,1156), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3552C6[];
extern void _ZN7S3552C62v9Ev();
extern void _ZN7S3552C63v10Ev();
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY vtc_S3552C6[] = {
  ABISELECT(1888,1320),
  ABISELECT(1648,1156),
  ABISELECT(1544,1084),
  ABISELECT(1496,1044),
  ABISELECT(1088,752),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN7S3552C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3552C63v10Ev,
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-1544,-1084),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-1648,-1156),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
  ABISELECT(-392,-276),
  ABISELECT(-1888,-1320),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
};
extern VTBL_ENTRY _ZTV7S3552C6[];
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C6[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C7[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C47S3552C7__7S3552C6[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C4[0]),
};
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C8__7S3552C6[] = {
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C8[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C8__7S3552C6[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(456,332),
  (VTBL_ENTRY)&(_ZTI7S3552C8[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__7S3552C6[] = {
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  0,
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__8S3552C10__7S3552C6[] = {
  ABISELECT(-392,-276),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__A1__7S3552C6[] = {
  ABISELECT(-392,-276),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C4[0]),
};
static  VTT_ENTRY vtt_S3552C6[] = {
  {&(_ZTV7S3552C6[7]),  7,39},
  {&(_ZTV7S3552C6[15]),  15,39},
  {&(_ZTV7S3552C6[25]),  25,39},
  {&(_ZTV7S3552C6[34]),  34,39},
  {&(_ZTV7S3552C6[39]),  39,39},
  {&(_tg__ZTV7S3552C7__7S3552C6[3]),  3,6},
  {&(_tg__ZTV7S3552C47S3552C7__7S3552C6[3]),  3,3},
  {&(_tg__ZTV7S3552C8__7S3552C6[4]),  4,7},
  {&(_tg__ZTV7S3552C7__7S3552C8__7S3552C6[6]),  6,9},
  {&(_tg__ZTV8S3552C10__7S3552C6[4]),  4,6},
  {&(_tg__ZTV7S3552C4__8S3552C10__7S3552C6[3]),  3,3},
  {&(_tg__ZTV7S3552C4__A1__7S3552C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3552C6[];
extern  VTBL_ENTRY _ZTV7S3552C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C6[];
Class_Descriptor cd_S3552C6 = {  "S3552C6", // class name
  bases_S3552C6, 6,
  &(vtc_S3552C6[0]), // expected_vtbl_contents
  &(vtt_S3552C6[0]), // expected_vtt_contents
  ABISELECT(2032,1420), // object size
  NSPAIRA(_ZTI7S3552C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3552C6),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3552C6),12, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3552C3  : virtual S3552C4 , S3552C6 , S3552C10 {
  int s3552c3f0;
  char s3552c3f1:2;
  ::S20677C6_nt s3552c3f2;
  int s3552c3f3;
  ~S3552C3(); // tgen
  S3552C3(); // tgen
};
//SIG(-1 S3552C3) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} FD Fi FC3 FC3} BC4{ VBC5{ VBC3 BC2 v1 v2 v3 Fs FL Fc Fi[2] FC2 Fp FL Fi FL Fi} VBC6{ VBC3 VBC5 v4 v5 v6 FL FC7{} Fp Fc[2] FC3 Fl FC7} VBC8{ VBC3 VBC2 v7 v8 Fi FC2 FL Fi Fp} v9 v10 FC7 FC7 Fi FC2 FC7 FC7 FC9{ v11 FC7 FC10{ VBC3 FD Fi FC3 FC3} FC7 FL FC7 Fp FC7 Fp[2] FC7} FC6 Fp FC7} BC8 Fi Fc:2 FC7 Fi}


S3552C3 ::~S3552C3(){ note_dtor("S3552C3", this);} // tgen
S3552C3 ::S3552C3(){ note_ctor("S3552C3", this);} // tgen

static void Test_S3552C3()
{
  extern Class_Descriptor cd_S3552C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(144,400)];
    init_test(&cd_S3552C3, buf);
    S3552C3 *dp, &lv = *(dp=new (buf) S3552C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2288,1596), "sizeof(S3552C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3552C3)");
    /*is_ambiguous_... S3552C3::S3552C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3552C4*), ABISELECT(1480,1028), "S3552C3");
    check_base_class_offset(lv, (S20677C3*)(S3552C7*), ABISELECT(1480,1028), "S3552C3");
    check_base_class_offset(lv, (S20677C3*)(S3552C4*)(S3552C7*), ABISELECT(1480,1028), "S3552C3");
    check_base_class_offset(lv, (S20677C3*)(S3552C8*), ABISELECT(1480,1028), "S3552C3");
    /*is_ambiguous_... S3552C3::S3552C10 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3552C10*), ABISELECT(1480,1028), "S3552C3");
    /*is_ambiguous_... S3552C3::S3552C10 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3552C10*), ABISELECT(1480,1028), "S3552C3");
    /*is_ambiguous_... S3552C3::S3552C4 */ AMB_check_base_class_offset(lv, (S3552C4*), ABISELECT(1344,928), "S3552C3");
    /*is_ambiguous_... S3552C3::S3552C10 */ AMB_check_base_class_offset(lv, (S3552C4*)(S3552C10*), ABISELECT(1344,928), "S3552C3");
    /*is_ambiguous_... S3552C3::S3552C10 */ AMB_check_base_class_offset(lv, (S3552C4*)(S3552C10*), ABISELECT(1344,928), "S3552C3");
    check_base_class_offset(lv, (S3552C4*)(S3552C7*), ABISELECT(1536,1068), "S3552C3");
    check_base_class_offset(lv, (S3552C7*)(S3552C6*), ABISELECT(1536,1068), "S3552C3");
    check_base_class_offset(lv, (S3552C7*)(S3552C8*), ABISELECT(1536,1068), "S3552C3");
    check_base_class_offset(lv, (S3552C8*)(S3552C6*), ABISELECT(1944,1360), "S3552C3");
    check_base_class_offset(lv, (S3552C10*)(S3552C6*), ABISELECT(2048,1432), "S3552C3");
    check_base_class_offset(lv, (S3552C6*), 0, "S3552C3");
    /*is_ambiguous_... S3552C3::S3552C10 */ AMB_check_base_class_offset(lv, (S3552C10*), ABISELECT(1088,752), "S3552C3");
    check_field_offset(lv, s3552c3f0, ABISELECT(1320,916), "S3552C3.s3552c3f0");
    set_bf_and_test(lv, s3552c3f1, ABISELECT(1324,920), 0, 2, 1, "S3552C3");
    set_bf_and_test(lv, s3552c3f1, ABISELECT(1324,920), 0, 2, hide_sll(1LL<<1), "S3552C3");
    check_field_offset(lv, s3552c3f2, ABISELECT(1325,921), "S3552C3.s3552c3f2");
    check_field_offset(lv, s3552c3f3, ABISELECT(1328,924), "S3552C3.s3552c3f3");
    test_class_info(&lv, &cd_S3552C3);
    dp->~S3552C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3552C3(Test_S3552C3, "S3552C3", ABISELECT(2288,1596));

#else // __cplusplus

extern void _ZN7S3552C3C1Ev();
extern void _ZN7S3552C3D1Ev();
Name_Map name_map_S3552C3[] = {
  NSPAIR(_ZN7S3552C3C1Ev),
  NSPAIR(_ZN7S3552C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3552C4;
extern VTBL_ENTRY _ZTI7S3552C4[];
extern  VTBL_ENTRY _ZTV7S3552C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C4[];
extern Class_Descriptor cd_S3552C4;
extern VTBL_ENTRY _ZTI7S3552C4[];
extern  VTBL_ENTRY _ZTV7S3552C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C4[];
extern Class_Descriptor cd_S3552C7;
extern VTBL_ENTRY _ZTI7S3552C7[];
extern  VTBL_ENTRY _ZTV7S3552C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C7[];
extern Class_Descriptor cd_S3552C8;
extern VTBL_ENTRY _ZTI7S3552C8[];
extern  VTBL_ENTRY _ZTV7S3552C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C8[];
extern Class_Descriptor cd_S3552C10;
extern VTBL_ENTRY _ZTI8S3552C10[];
extern  VTBL_ENTRY _ZTV8S3552C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3552C10[];
extern Class_Descriptor cd_S3552C6;
extern VTBL_ENTRY _ZTI7S3552C6[];
extern  VTBL_ENTRY _ZTV7S3552C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C6[];
extern Class_Descriptor cd_S3552C10;
extern VTBL_ENTRY _ZTI8S3552C10[];
extern  VTBL_ENTRY _ZTV8S3552C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3552C10[];
static Base_Class bases_S3552C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1480,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
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3552C4,    ABISELECT(1344,928), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3552C4,    ABISELECT(1536,1068), //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
    3, //immediately_derived
  0, 0},
  {&cd_S3552C7,    ABISELECT(1536,1068), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3552C8,    ABISELECT(1944,1360), //bcp->offset
    27, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3552C10,    ABISELECT(2048,1432), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3552C6,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3552C10,    ABISELECT(1088,752), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3552C3[];
extern void _ZN7S3552C62v9Ev();
extern void _ZN7S3552C63v10Ev();
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY vtc_S3552C3[] = {
  ABISELECT(1344,928),
  ABISELECT(2048,1432),
  ABISELECT(1944,1360),
  ABISELECT(1480,1028),
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN7S3552C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3552C63v10Ev,
  ABISELECT(256,176),
  ABISELECT(392,276),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
  ABISELECT(136,100),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-1944,-1360),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2048,-1432),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
extern VTBL_ENTRY _ZTV7S3552C3[];
extern void _ZN7S3552C62v9Ev();
extern void _ZN7S3552C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C6__7S3552C3[] = {
  ABISELECT(1344,928),
  ABISELECT(2048,1432),
  ABISELECT(1944,1360),
  ABISELECT(1480,1028),
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN7S3552C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3552C63v10Ev,
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C6__7S3552C3[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C8__7S3552C6__7S3552C3[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-1944,-1360),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__7S3552C6__7S3552C3[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2048,-1432),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__A1__7S3552C6__7S3552C3[] = {
  ABISELECT(136,100),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__A__7S3552C3[] = {
  ABISELECT(256,176),
  ABISELECT(392,276),
  0,
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__8S3552C10__A__7S3552C3[] = {
  ABISELECT(136,100),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__7S3552C3[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C4[0]),
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C3[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C7[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C47S3552C7__A1__7S3552C3[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C4[0]),
};
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C8__7S3552C3[] = {
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C8[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C8__7S3552C3[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI7S3552C8[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__7S3552C3[] = {
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  0,
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__8S3552C10__7S3552C3[] = {
  ABISELECT(136,100),
  ABISELECT(704,504),
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
};
static  VTT_ENTRY vtt_S3552C3[] = {
  {&(_ZTV7S3552C3[7]),  7,45},
  {&(_tg__ZTV7S3552C6__7S3552C3[7]),  7,9},
  {&(_tg__ZTV7S3552C7__7S3552C6__7S3552C3[6]),  6,9},
  {&(_tg__ZTV7S3552C8__7S3552C6__7S3552C3[7]),  7,10},
  {&(_tg__ZTV8S3552C10__7S3552C6__7S3552C3[6]),  6,8},
  {&(_tg__ZTV7S3552C4__A1__7S3552C6__7S3552C3[3]),  3,3},
  {&(_tg__ZTV8S3552C10__A__7S3552C3[4]),  4,6},
  {&(_tg__ZTV7S3552C4__8S3552C10__A__7S3552C3[3]),  3,3},
  {&(_ZTV7S3552C3[18]),  18,45},
  {&(_ZTV7S3552C3[24]),  24,45},
  {&(_ZTV7S3552C3[34]),  34,45},
  {&(_ZTV7S3552C3[43]),  43,45},
  {&(_ZTV7S3552C3[13]),  13,45},
  {&(_tg__ZTV7S3552C4__7S3552C3[3]),  3,3},
  {&(_tg__ZTV7S3552C7__7S3552C3[3]),  3,6},
  {&(_tg__ZTV7S3552C47S3552C7__A1__7S3552C3[3]),  3,3},
  {&(_tg__ZTV7S3552C8__7S3552C3[4]),  4,7},
  {&(_tg__ZTV7S3552C7__7S3552C8__7S3552C3[6]),  6,9},
  {&(_tg__ZTV8S3552C10__7S3552C3[4]),  4,6},
  {&(_tg__ZTV7S3552C4__8S3552C10__7S3552C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3552C3[];
extern  VTBL_ENTRY _ZTV7S3552C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C3[];
Class_Descriptor cd_S3552C3 = {  "S3552C3", // class name
  bases_S3552C3, 8,
  &(vtc_S3552C3[0]), // expected_vtbl_contents
  &(vtt_S3552C3[0]), // expected_vtt_contents
  ABISELECT(2288,1596), // object size
  NSPAIRA(_ZTI7S3552C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3552C3),45, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3552C3),20, //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  S3552C2  : S3552C3 {
  int s3552c2f0;
  ::S20677C6_nt s3552c2f1;
  short s3552c2f2;
  __tsi64 s3552c2f3;
  ::S3552C4 s3552c2f4;
  __tsi64 s3552c2f5;
  virtual void  v11(); // _ZN7S3552C23v11Ev
  ~S3552C2(); // tgen
  S3552C2(); // tgen
};
//SIG(-1 S3552C2) C1{ BC2{ VBC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} BC5{ VBC6{ VBC4 BC3 v2 v3 v4 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi} VBC7{ VBC4 VBC6 v5 v6 v7 FL FC8{} Fp Fc[2] FC4 Fl FC8} VBC9{ VBC4 VBC3 v8 v9 Fi FC3 FL Fi Fp} v10 v11 FC8 FC8 Fi FC3 FC8 FC8 FC10{ v12 FC8 FC11{ VBC4 FD Fi FC4 FC4} FC8 FL FC8 Fp FC8 Fp[2] FC8} FC7 Fp FC8} BC9 Fi Fc:2 FC8 Fi} v1 Fi FC8 Fs FL FC3 FL}


void  S3552C2 ::v11(){vfunc_called(this, "_ZN7S3552C23v11Ev");}
S3552C2 ::~S3552C2(){ note_dtor("S3552C2", this);} // tgen
S3552C2 ::S3552C2(){ note_ctor("S3552C2", this);} // tgen

static void Test_S3552C2()
{
  extern Class_Descriptor cd_S3552C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(158,441)];
    init_test(&cd_S3552C2, buf);
    S3552C2 *dp, &lv = *(dp=new (buf) S3552C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2512,1760), "sizeof(S3552C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3552C2)");
    /*is_ambiguous_... S3552C2::S3552C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3552C4*), ABISELECT(1704,1192), "S3552C2");
    check_base_class_offset(lv, (S20677C3*)(S3552C7*), ABISELECT(1704,1192), "S3552C2");
    check_base_class_offset(lv, (S20677C3*)(S3552C4*)(S3552C7*), ABISELECT(1704,1192), "S3552C2");
    check_base_class_offset(lv, (S20677C3*)(S3552C8*), ABISELECT(1704,1192), "S3552C2");
    /*is_ambiguous_... S3552C2::S3552C10 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3552C10*), ABISELECT(1704,1192), "S3552C2");
    /*is_ambiguous_... S3552C3::S3552C10 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3552C10*)(S3552C3*), ABISELECT(1704,1192), "S3552C2");
    /*is_ambiguous_... S3552C3::S3552C4 */ AMB_check_base_class_offset(lv, (S3552C4*)(S3552C3*), ABISELECT(1568,1092), "S3552C2");
    /*is_ambiguous_... S3552C2::S3552C10 */ AMB_check_base_class_offset(lv, (S3552C4*)(S3552C10*), ABISELECT(1568,1092), "S3552C2");
    /*is_ambiguous_... S3552C3::S3552C10 */ AMB_check_base_class_offset(lv, (S3552C4*)(S3552C10*)(S3552C3*), ABISELECT(1568,1092), "S3552C2");
    check_base_class_offset(lv, (S3552C4*)(S3552C7*), ABISELECT(1760,1232), "S3552C2");
    check_base_class_offset(lv, (S3552C7*)(S3552C6*)(S3552C3*), ABISELECT(1760,1232), "S3552C2");
    check_base_class_offset(lv, (S3552C7*)(S3552C8*), ABISELECT(1760,1232), "S3552C2");
    check_base_class_offset(lv, (S3552C8*)(S3552C6*)(S3552C3*), ABISELECT(2168,1524), "S3552C2");
    check_base_class_offset(lv, (S3552C10*)(S3552C6*)(S3552C3*), ABISELECT(2272,1596), "S3552C2");
    check_base_class_offset(lv, (S3552C6*)(S3552C3*), 0, "S3552C2");
    /*is_ambiguous_... S3552C3::S3552C10 */ AMB_check_base_class_offset(lv, (S3552C10*)(S3552C3*), ABISELECT(1088,752), "S3552C2");
    check_base_class_offset(lv, (S3552C3*), 0, "S3552C2");
    check_field_offset(lv, s3552c2f0, ABISELECT(1332,928), "S3552C2.s3552c2f0");
    check_field_offset(lv, s3552c2f1, ABISELECT(1336,932), "S3552C2.s3552c2f1");
    check_field_offset(lv, s3552c2f2, ABISELECT(1338,934), "S3552C2.s3552c2f2");
    check_field_offset(lv, s3552c2f3, ABISELECT(1344,936), "S3552C2.s3552c2f3");
    check_field_offset(lv, s3552c2f4, ABISELECT(1360,944), "S3552C2.s3552c2f4");
    check_field_offset(lv, s3552c2f5, ABISELECT(1552,1084), "S3552C2.s3552c2f5");
    test_class_info(&lv, &cd_S3552C2);
    dp->~S3552C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3552C2(Test_S3552C2, "S3552C2", ABISELECT(2512,1760));

#else // __cplusplus

extern void _ZN7S3552C2C1Ev();
extern void _ZN7S3552C2D1Ev();
Name_Map name_map_S3552C2[] = {
  NSPAIR(_ZN7S3552C2C1Ev),
  NSPAIR(_ZN7S3552C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3552C4;
extern VTBL_ENTRY _ZTI7S3552C4[];
extern  VTBL_ENTRY _ZTV7S3552C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C4[];
extern Class_Descriptor cd_S3552C4;
extern VTBL_ENTRY _ZTI7S3552C4[];
extern  VTBL_ENTRY _ZTV7S3552C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C4[];
extern Class_Descriptor cd_S3552C7;
extern VTBL_ENTRY _ZTI7S3552C7[];
extern  VTBL_ENTRY _ZTV7S3552C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C7[];
extern Class_Descriptor cd_S3552C8;
extern VTBL_ENTRY _ZTI7S3552C8[];
extern  VTBL_ENTRY _ZTV7S3552C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C8[];
extern Class_Descriptor cd_S3552C10;
extern VTBL_ENTRY _ZTI8S3552C10[];
extern  VTBL_ENTRY _ZTV8S3552C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3552C10[];
extern Class_Descriptor cd_S3552C6;
extern VTBL_ENTRY _ZTI7S3552C6[];
extern  VTBL_ENTRY _ZTV7S3552C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C6[];
extern Class_Descriptor cd_S3552C10;
extern VTBL_ENTRY _ZTI8S3552C10[];
extern  VTBL_ENTRY _ZTV8S3552C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3552C10[];
extern Class_Descriptor cd_S3552C3;
extern VTBL_ENTRY _ZTI7S3552C3[];
extern  VTBL_ENTRY _ZTV7S3552C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C3[];
static Base_Class bases_S3552C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1704,1192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3552C4,    ABISELECT(1568,1092), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3552C4,    ABISELECT(1760,1232), //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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3552C7,    ABISELECT(1760,1232), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3552C8,    ABISELECT(2168,1524), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3552C10,    ABISELECT(2272,1596), //bcp->offset
    38, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3552C6,    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
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3552C10,    ABISELECT(1088,752), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3552C3,    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 _ZTI7S3552C2[];
extern void _ZN7S3552C62v9Ev();
extern void _ZN7S3552C63v10Ev();
extern void _ZN7S3552C23v11Ev();
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY vtc_S3552C2[] = {
  ABISELECT(1568,1092),
  ABISELECT(2272,1596),
  ABISELECT(2168,1524),
  ABISELECT(1704,1192),
  ABISELECT(1760,1232),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C2[0]),
  (VTBL_ENTRY)&_ZN7S3552C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3552C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3552C23v11Ev,
  ABISELECT(480,340),
  ABISELECT(616,440),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3552C2[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
  ABISELECT(136,100),
  ABISELECT(-1568,-1092),
  (VTBL_ENTRY)&(_ZTI7S3552C2[0]),
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1760,-1232),
  (VTBL_ENTRY)&(_ZTI7S3552C2[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-2168,-1524),
  (VTBL_ENTRY)&(_ZTI7S3552C2[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2272,-1596),
  (VTBL_ENTRY)&(_ZTI7S3552C2[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
extern VTBL_ENTRY _ZTV7S3552C2[];
extern void _ZN7S3552C62v9Ev();
extern void _ZN7S3552C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C3__7S3552C2[] = {
  ABISELECT(1568,1092),
  ABISELECT(2272,1596),
  ABISELECT(2168,1524),
  ABISELECT(1704,1192),
  ABISELECT(1760,1232),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN7S3552C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3552C63v10Ev,
};
extern void _ZN7S3552C62v9Ev();
extern void _ZN7S3552C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C67S3552C3__7S3552C2[] = {
  ABISELECT(1568,1092),
  ABISELECT(2272,1596),
  ABISELECT(2168,1524),
  ABISELECT(1704,1192),
  ABISELECT(1760,1232),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN7S3552C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3552C63v10Ev,
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C67S3552C3__7S3552C2[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1760,-1232),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C8__7S3552C67S3552C3__7S3552C2[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-2168,-1524),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__7S3552C67S3552C3__7S3552C2[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2272,-1596),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__A1__7S3552C67S3552C3__7S3552C2[] = {
  ABISELECT(136,100),
  ABISELECT(-1568,-1092),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C107S3552C3__A1__7S3552C2[] = {
  ABISELECT(480,340),
  ABISELECT(616,440),
  0,
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__8S3552C107S3552C3__A1__7S3552C2[] = {
  ABISELECT(136,100),
  ABISELECT(-480,-340),
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__7S3552C3__7S3552C2[] = {
  ABISELECT(136,100),
  ABISELECT(-1568,-1092),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C3__7S3552C2[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1760,-1232),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C8__7S3552C3__7S3552C2[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-2168,-1524),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__7S3552C3__7S3552C2[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2272,-1596),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__A__7S3552C3__7S3552C2[] = {
  ABISELECT(480,340),
  ABISELECT(616,440),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__7S3552C2[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C4[0]),
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C7[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C47S3552C7__A1__7S3552C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C4[0]),
};
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C8__7S3552C2[] = {
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C8[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C8__7S3552C2[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI7S3552C8[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__7S3552C2[] = {
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  0,
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__8S3552C10__7S3552C2[] = {
  ABISELECT(136,100),
  ABISELECT(704,504),
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
};
static  VTT_ENTRY vtt_S3552C2[] = {
  {&(_ZTV7S3552C2[7]),  7,46},
  {&(_tg__ZTV7S3552C3__7S3552C2[7]),  7,9},
  {&(_tg__ZTV7S3552C67S3552C3__7S3552C2[7]),  7,9},
  {&(_tg__ZTV7S3552C7__7S3552C67S3552C3__7S3552C2[6]),  6,9},
  {&(_tg__ZTV7S3552C8__7S3552C67S3552C3__7S3552C2[7]),  7,10},
  {&(_tg__ZTV8S3552C10__7S3552C67S3552C3__7S3552C2[6]),  6,8},
  {&(_tg__ZTV7S3552C4__A1__7S3552C67S3552C3__7S3552C2[3]),  3,3},
  {&(_tg__ZTV8S3552C107S3552C3__A1__7S3552C2[4]),  4,6},
  {&(_tg__ZTV7S3552C4__8S3552C107S3552C3__A1__7S3552C2[3]),  3,3},
  {&(_tg__ZTV7S3552C4__7S3552C3__7S3552C2[3]),  3,3},
  {&(_tg__ZTV7S3552C7__7S3552C3__7S3552C2[6]),  6,9},
  {&(_tg__ZTV7S3552C8__7S3552C3__7S3552C2[7]),  7,10},
  {&(_tg__ZTV8S3552C10__7S3552C3__7S3552C2[6]),  6,8},
  {&(_tg__ZTV8S3552C10__A__7S3552C3__7S3552C2[4]),  4,6},
  {&(_ZTV7S3552C2[19]),  19,46},
  {&(_ZTV7S3552C2[25]),  25,46},
  {&(_ZTV7S3552C2[35]),  35,46},
  {&(_ZTV7S3552C2[44]),  44,46},
  {&(_ZTV7S3552C2[14]),  14,46},
  {&(_tg__ZTV7S3552C4__7S3552C2[3]),  3,3},
  {&(_tg__ZTV7S3552C7__7S3552C2[3]),  3,6},
  {&(_tg__ZTV7S3552C47S3552C7__A1__7S3552C2[3]),  3,3},
  {&(_tg__ZTV7S3552C8__7S3552C2[4]),  4,7},
  {&(_tg__ZTV7S3552C7__7S3552C8__7S3552C2[6]),  6,9},
  {&(_tg__ZTV8S3552C10__7S3552C2[4]),  4,6},
  {&(_tg__ZTV7S3552C4__8S3552C10__7S3552C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3552C2[];
extern  VTBL_ENTRY _ZTV7S3552C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C2[];
Class_Descriptor cd_S3552C2 = {  "S3552C2", // class name
  bases_S3552C2, 9,
  &(vtc_S3552C2[0]), // expected_vtbl_contents
  &(vtt_S3552C2[0]), // expected_vtt_contents
  ABISELECT(2512,1760), // object size
  NSPAIRA(_ZTI7S3552C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3552C2),46, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3552C2),26, //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  S3552C1  : S3552C2 {
  short s3552c1f0;
  void *s3552c1f1;
  __tsi64 s3552c1f2;
  int s3552c1f3[8];
  ::S20677C3 s3552c1f4;
  int s3552c1f5;
  __tsi64 s3552c1f6[2];
  int s3552c1f7;
  void *s3552c1f8;
  ::S3552C6 s3552c1f9;
  ~S3552C1(); // tgen
  S3552C1(); // tgen
};
//SIG(1 S3552C1) C1{ BC2{ BC3{ VBC4{ VBC5{ m Fp FL[4] Fs} FD Fi FC5 FC5} BC6{ VBC7{ VBC5 BC4 v1 v2 v3 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC8{ VBC5 VBC7 v4 v5 v6 FL FC9{} Fp Fc[2] FC5 Fl FC9} VBC10{ VBC5 VBC4 v7 v8 Fi FC4 FL Fi Fp} v9 v10 FC9 FC9 Fi FC4 FC9 FC9 FC11{ v12 FC9 FC12{ VBC5 FD Fi FC5 FC5} FC9 FL FC9 Fp FC9 Fp[2] FC9} FC8 Fp FC9} BC10 Fi Fc:2 FC9 Fi} v11 Fi FC9 Fs FL FC4 FL} Fs Fp FL Fi[8] FC5 Fi FL[2] Fi Fp FC6}


S3552C1 ::~S3552C1(){ note_dtor("S3552C1", this);} // tgen
S3552C1 ::S3552C1(){ note_ctor("S3552C1", this);} // tgen

static void Test_S3552C1()
{
  extern Class_Descriptor cd_S3552C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(294,825)];
    init_test(&cd_S3552C1, buf);
    S3552C1 *dp, &lv = *(dp=new (buf) S3552C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4688,3296), "sizeof(S3552C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3552C1)");
    /*is_ambiguous_... S3552C1::S3552C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3552C4*), ABISELECT(3880,2728), "S3552C1");
    check_base_class_offset(lv, (S20677C3*)(S3552C7*), ABISELECT(3880,2728), "S3552C1");
    check_base_class_offset(lv, (S20677C3*)(S3552C4*)(S3552C7*), ABISELECT(3880,2728), "S3552C1");
    check_base_class_offset(lv, (S20677C3*)(S3552C8*), ABISELECT(3880,2728), "S3552C1");
    /*is_ambiguous_... S3552C1::S3552C10 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3552C10*), ABISELECT(3880,2728), "S3552C1");
    /*is_ambiguous_... S3552C3::S3552C10 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3552C10*)(S3552C3*)(S3552C2*), ABISELECT(3880,2728), "S3552C1");
    /*is_ambiguous_... S3552C3::S3552C4 */ AMB_check_base_class_offset(lv, (S3552C4*)(S3552C3*)(S3552C2*), ABISELECT(3744,2628), "S3552C1");
    /*is_ambiguous_... S3552C1::S3552C10 */ AMB_check_base_class_offset(lv, (S3552C4*)(S3552C10*), ABISELECT(3744,2628), "S3552C1");
    /*is_ambiguous_... S3552C3::S3552C10 */ AMB_check_base_class_offset(lv, (S3552C4*)(S3552C10*)(S3552C3*)(S3552C2*), ABISELECT(3744,2628), "S3552C1");
    check_base_class_offset(lv, (S3552C4*)(S3552C7*), ABISELECT(3936,2768), "S3552C1");
    check_base_class_offset(lv, (S3552C7*)(S3552C6*)(S3552C3*)(S3552C2*), ABISELECT(3936,2768), "S3552C1");
    check_base_class_offset(lv, (S3552C7*)(S3552C8*), ABISELECT(3936,2768), "S3552C1");
    check_base_class_offset(lv, (S3552C8*)(S3552C6*)(S3552C3*)(S3552C2*), ABISELECT(4344,3060), "S3552C1");
    check_base_class_offset(lv, (S3552C10*)(S3552C6*)(S3552C3*)(S3552C2*), ABISELECT(4448,3132), "S3552C1");
    check_base_class_offset(lv, (S3552C6*)(S3552C3*)(S3552C2*), 0, "S3552C1");
    /*is_ambiguous_... S3552C3::S3552C10 */ AMB_check_base_class_offset(lv, (S3552C10*)(S3552C3*)(S3552C2*), ABISELECT(1088,752), "S3552C1");
    check_base_class_offset(lv, (S3552C3*)(S3552C2*), 0, "S3552C1");
    check_base_class_offset(lv, (S3552C2*), 0, "S3552C1");
    check_field_offset(lv, s3552c1f0, ABISELECT(1560,1092), "S3552C1.s3552c1f0");
    check_field_offset(lv, s3552c1f1, ABISELECT(1568,1096), "S3552C1.s3552c1f1");
    check_field_offset(lv, s3552c1f2, ABISELECT(1576,1100), "S3552C1.s3552c1f2");
    check_field_offset(lv, s3552c1f3, ABISELECT(1584,1108), "S3552C1.s3552c1f3");
    check_field_offset(lv, s3552c1f4, ABISELECT(1616,1140), "S3552C1.s3552c1f4");
    check_field_offset(lv, s3552c1f5, ABISELECT(1664,1180), "S3552C1.s3552c1f5");
    check_field_offset(lv, s3552c1f6, ABISELECT(1672,1184), "S3552C1.s3552c1f6");
    check_field_offset(lv, s3552c1f7, ABISELECT(1688,1200), "S3552C1.s3552c1f7");
    check_field_offset(lv, s3552c1f8, ABISELECT(1696,1204), "S3552C1.s3552c1f8");
    check_field_offset(lv, s3552c1f9, ABISELECT(1712,1208), "S3552C1.s3552c1f9");
    test_class_info(&lv, &cd_S3552C1);
    dp->~S3552C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3552C1(Test_S3552C1, "S3552C1", ABISELECT(4688,3296));

#else // __cplusplus

extern void _ZN7S3552C1C1Ev();
extern void _ZN7S3552C1D1Ev();
Name_Map name_map_S3552C1[] = {
  NSPAIR(_ZN7S3552C1C1Ev),
  NSPAIR(_ZN7S3552C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3552C4;
extern VTBL_ENTRY _ZTI7S3552C4[];
extern  VTBL_ENTRY _ZTV7S3552C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C4[];
extern Class_Descriptor cd_S3552C4;
extern VTBL_ENTRY _ZTI7S3552C4[];
extern  VTBL_ENTRY _ZTV7S3552C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C4[];
extern Class_Descriptor cd_S3552C7;
extern VTBL_ENTRY _ZTI7S3552C7[];
extern  VTBL_ENTRY _ZTV7S3552C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C7[];
extern Class_Descriptor cd_S3552C8;
extern VTBL_ENTRY _ZTI7S3552C8[];
extern  VTBL_ENTRY _ZTV7S3552C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C8[];
extern Class_Descriptor cd_S3552C10;
extern VTBL_ENTRY _ZTI8S3552C10[];
extern  VTBL_ENTRY _ZTV8S3552C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3552C10[];
extern Class_Descriptor cd_S3552C6;
extern VTBL_ENTRY _ZTI7S3552C6[];
extern  VTBL_ENTRY _ZTV7S3552C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C6[];
extern Class_Descriptor cd_S3552C10;
extern VTBL_ENTRY _ZTI8S3552C10[];
extern  VTBL_ENTRY _ZTV8S3552C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3552C10[];
extern Class_Descriptor cd_S3552C3;
extern VTBL_ENTRY _ZTI7S3552C3[];
extern  VTBL_ENTRY _ZTV7S3552C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C3[];
extern Class_Descriptor cd_S3552C2;
extern VTBL_ENTRY _ZTI7S3552C2[];
extern  VTBL_ENTRY _ZTV7S3552C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C2[];
static Base_Class bases_S3552C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(3880,2728), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3552C4,    ABISELECT(3744,2628), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3552C4,    ABISELECT(3936,2768), //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
    3, //immediately_derived
  0, 0},
  {&cd_S3552C7,    ABISELECT(3936,2768), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3552C8,    ABISELECT(4344,3060), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3552C10,    ABISELECT(4448,3132), //bcp->offset
    38, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3552C6,    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
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3552C10,    ABISELECT(1088,752), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3552C3,    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
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3552C2,    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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3552C1[];
extern void _ZN7S3552C62v9Ev();
extern void _ZN7S3552C63v10Ev();
extern void _ZN7S3552C23v11Ev();
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY vtc_S3552C1[] = {
  ABISELECT(3744,2628),
  ABISELECT(4448,3132),
  ABISELECT(4344,3060),
  ABISELECT(3880,2728),
  ABISELECT(3936,2768),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C1[0]),
  (VTBL_ENTRY)&_ZN7S3552C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3552C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3552C23v11Ev,
  ABISELECT(2656,1876),
  ABISELECT(2792,1976),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3552C1[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
  ABISELECT(136,100),
  ABISELECT(-3744,-2628),
  (VTBL_ENTRY)&(_ZTI7S3552C1[0]),
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3936,-2768),
  (VTBL_ENTRY)&(_ZTI7S3552C1[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-4344,-3060),
  (VTBL_ENTRY)&(_ZTI7S3552C1[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-4448,-3132),
  (VTBL_ENTRY)&(_ZTI7S3552C1[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
extern VTBL_ENTRY _ZTV7S3552C1[];
extern void _ZN7S3552C62v9Ev();
extern void _ZN7S3552C63v10Ev();
extern void _ZN7S3552C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C2__7S3552C1[] = {
  ABISELECT(3744,2628),
  ABISELECT(4448,3132),
  ABISELECT(4344,3060),
  ABISELECT(3880,2728),
  ABISELECT(3936,2768),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C2[0]),
  (VTBL_ENTRY)&_ZN7S3552C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3552C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3552C23v11Ev,
};
extern void _ZN7S3552C62v9Ev();
extern void _ZN7S3552C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C37S3552C2__7S3552C1[] = {
  ABISELECT(3744,2628),
  ABISELECT(4448,3132),
  ABISELECT(4344,3060),
  ABISELECT(3880,2728),
  ABISELECT(3936,2768),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN7S3552C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3552C63v10Ev,
};
extern void _ZN7S3552C62v9Ev();
extern void _ZN7S3552C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C67S3552C37S3552C2__7S3552C1[] = {
  ABISELECT(3744,2628),
  ABISELECT(4448,3132),
  ABISELECT(4344,3060),
  ABISELECT(3880,2728),
  ABISELECT(3936,2768),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN7S3552C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3552C63v10Ev,
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C67S3552C37S3552C2__7S3552C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3936,-2768),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C8__7S3552C67S3552C37S3552C2__7S3552C1[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-4344,-3060),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__7S3552C67S3552C37S3552C2__7S3552C1[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-4448,-3132),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__A1__7S3552C67S3552C37S3552C2__7S3552C1[] = {
  ABISELECT(136,100),
  ABISELECT(-3744,-2628),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C107S3552C37S3552C2__A1__7S3552C1[] = {
  ABISELECT(2656,1876),
  ABISELECT(2792,1976),
  0,
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__8S3552C107S3552C37S3552C2__A1__7S3552C1[] = {
  ABISELECT(136,100),
  ABISELECT(-2656,-1876),
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__7S3552C37S3552C2__7S3552C1[] = {
  ABISELECT(136,100),
  ABISELECT(-3744,-2628),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C37S3552C2__7S3552C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3936,-2768),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C8__7S3552C37S3552C2__7S3552C1[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-4344,-3060),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__7S3552C37S3552C2__7S3552C1[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-4448,-3132),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__A__7S3552C37S3552C2__7S3552C1[] = {
  ABISELECT(2656,1876),
  ABISELECT(2792,1976),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__7S3552C2__7S3552C1[] = {
  ABISELECT(136,100),
  ABISELECT(-3744,-2628),
  (VTBL_ENTRY)&(_ZTI7S3552C2[0]),
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C2__7S3552C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3936,-2768),
  (VTBL_ENTRY)&(_ZTI7S3552C2[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C8__7S3552C2__7S3552C1[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-4344,-3060),
  (VTBL_ENTRY)&(_ZTI7S3552C2[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__7S3552C2__7S3552C1[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-4448,-3132),
  (VTBL_ENTRY)&(_ZTI7S3552C2[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C107S3552C3__A1__7S3552C2__7S3552C1[] = {
  ABISELECT(2656,1876),
  ABISELECT(2792,1976),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3552C2[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__7S3552C1[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C4[0]),
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C7[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C47S3552C7__A1__7S3552C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C4[0]),
};
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C8__7S3552C1[] = {
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C8[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C8__7S3552C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI7S3552C8[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__7S3552C1[] = {
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  0,
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__8S3552C10__7S3552C1[] = {
  ABISELECT(136,100),
  ABISELECT(704,504),
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
};
static  VTT_ENTRY vtt_S3552C1[] = {
  {&(_ZTV7S3552C1[7]),  7,46},
  {&(_tg__ZTV7S3552C2__7S3552C1[7]),  7,10},
  {&(_tg__ZTV7S3552C37S3552C2__7S3552C1[7]),  7,9},
  {&(_tg__ZTV7S3552C67S3552C37S3552C2__7S3552C1[7]),  7,9},
  {&(_tg__ZTV7S3552C7__7S3552C67S3552C37S3552C2__7S3552C1[6]),  6,9},
  {&(_tg__ZTV7S3552C8__7S3552C67S3552C37S3552C2__7S3552C1[7]),  7,10},
  {&(_tg__ZTV8S3552C10__7S3552C67S3552C37S3552C2__7S3552C1[6]),  6,8},
  {&(_tg__ZTV7S3552C4__A1__7S3552C67S3552C37S3552C2__7S3552C1[3]),  3,3},
  {&(_tg__ZTV8S3552C107S3552C37S3552C2__A1__7S3552C1[4]),  4,6},
  {&(_tg__ZTV7S3552C4__8S3552C107S3552C37S3552C2__A1__7S3552C1[3]),  3,3},
  {&(_tg__ZTV7S3552C4__7S3552C37S3552C2__7S3552C1[3]),  3,3},
  {&(_tg__ZTV7S3552C7__7S3552C37S3552C2__7S3552C1[6]),  6,9},
  {&(_tg__ZTV7S3552C8__7S3552C37S3552C2__7S3552C1[7]),  7,10},
  {&(_tg__ZTV8S3552C10__7S3552C37S3552C2__7S3552C1[6]),  6,8},
  {&(_tg__ZTV8S3552C10__A__7S3552C37S3552C2__7S3552C1[4]),  4,6},
  {&(_tg__ZTV7S3552C4__7S3552C2__7S3552C1[3]),  3,3},
  {&(_tg__ZTV7S3552C7__7S3552C2__7S3552C1[6]),  6,9},
  {&(_tg__ZTV7S3552C8__7S3552C2__7S3552C1[7]),  7,10},
  {&(_tg__ZTV8S3552C10__7S3552C2__7S3552C1[6]),  6,8},
  {&(_tg__ZTV8S3552C107S3552C3__A1__7S3552C2__7S3552C1[4]),  4,6},
  {&(_ZTV7S3552C1[19]),  19,46},
  {&(_ZTV7S3552C1[25]),  25,46},
  {&(_ZTV7S3552C1[35]),  35,46},
  {&(_ZTV7S3552C1[44]),  44,46},
  {&(_ZTV7S3552C1[14]),  14,46},
  {&(_tg__ZTV7S3552C4__7S3552C1[3]),  3,3},
  {&(_tg__ZTV7S3552C7__7S3552C1[3]),  3,6},
  {&(_tg__ZTV7S3552C47S3552C7__A1__7S3552C1[3]),  3,3},
  {&(_tg__ZTV7S3552C8__7S3552C1[4]),  4,7},
  {&(_tg__ZTV7S3552C7__7S3552C8__7S3552C1[6]),  6,9},
  {&(_tg__ZTV8S3552C10__7S3552C1[4]),  4,6},
  {&(_tg__ZTV7S3552C4__8S3552C10__7S3552C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3552C1[];
extern  VTBL_ENTRY _ZTV7S3552C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C1[];
Class_Descriptor cd_S3552C1 = {  "S3552C1", // class name
  bases_S3552C1, 10,
  &(vtc_S3552C1[0]), // expected_vtbl_contents
  &(vtt_S3552C1[0]), // expected_vtt_contents
  ABISELECT(4688,3296), // object size
  NSPAIRA(_ZTI7S3552C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3552C1),46, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3552C1),32, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3551C4  : virtual S20677C3 {
  long double s3551c4f0;
  int s3551c4f1;
  ::S20677C3 s3551c4f2;
  ::S20677C3 s3551c4f3;
  ~S3551C4(); // tgen
  S3551C4(); // tgen
};
//SIG(-1 S3551C4) C1{ VBC2{ m Fp FL[4] Fs} FD Fi FC2 FC2}


S3551C4 ::~S3551C4(){ note_dtor("S3551C4", this);} // tgen
S3551C4 ::S3551C4(){ note_ctor("S3551C4", this);} // tgen

static void Test_S3551C4()
{
  extern Class_Descriptor cd_S3551C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,36)];
    init_test(&cd_S3551C4, buf);
    S3551C4 *dp, &lv = *(dp=new (buf) S3551C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S3551C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3551C4)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(136,100), "S3551C4");
    check_field_offset(lv, s3551c4f0, ABISELECT(16,4), "S3551C4.s3551c4f0");
    check_field_offset(lv, s3551c4f1, ABISELECT(32,16), "S3551C4.s3551c4f1");
    check_field_offset(lv, s3551c4f2, ABISELECT(40,20), "S3551C4.s3551c4f2");
    check_field_offset(lv, s3551c4f3, ABISELECT(88,60), "S3551C4.s3551c4f3");
    test_class_info(&lv, &cd_S3551C4);
    dp->~S3551C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3551C4(Test_S3551C4, "S3551C4", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN7S3551C4C1Ev();
extern void _ZN7S3551C4D1Ev();
Name_Map name_map_S3551C4[] = {
  NSPAIR(_ZN7S3551C4C1Ev),
  NSPAIR(_ZN7S3551C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S3551C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(136,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3551C4[];
static  VTBL_ENTRY vtc_S3551C4[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C4[0]),
};
extern VTBL_ENTRY _ZTV7S3551C4[];
static  VTT_ENTRY vtt_S3551C4[] = {
  {&(_ZTV7S3551C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3551C4[];
extern  VTBL_ENTRY _ZTV7S3551C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C4[];
Class_Descriptor cd_S3551C4 = {  "S3551C4", // class name
  bases_S3551C4, 1,
  &(vtc_S3551C4[0]), // expected_vtbl_contents
  &(vtt_S3551C4[0]), // expected_vtt_contents
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI7S3551C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3551C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3551C4),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  S3551C7  : virtual S20677C3 , S3551C4 {
  short s3551c7f0;
  __tsi64 s3551c7f1;
  char s3551c7f2;
  int s3551c7f3[2];
  ::S3551C4 s3551c7f4;
  void *s3551c7f5;
  __tsi64 s3551c7f6;
  int s3551c7f7;
  __tsi64 s3551c7f8;
  int s3551c7f9;
  virtual void  v1(); // _ZN7S3551C72v1Ev
  virtual void  v2(); // _ZN7S3551C72v2Ev
  virtual void  v3(); // _ZN7S3551C72v3Ev
  ~S3551C7(); // tgen
  S3551C7(); // tgen
};
//SIG(-1 S3551C7) C1{ VBC2{ m Fp FL[4] Fs} BC3{ VBC2 FD Fi FC2 FC2} v1 v2 v3 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi}


void  S3551C7 ::v1(){vfunc_called(this, "_ZN7S3551C72v1Ev");}
void  S3551C7 ::v2(){vfunc_called(this, "_ZN7S3551C72v2Ev");}
void  S3551C7 ::v3(){vfunc_called(this, "_ZN7S3551C72v3Ev");}
S3551C7 ::~S3551C7(){ note_dtor("S3551C7", this);} // tgen
S3551C7 ::S3551C7(){ note_ctor("S3551C7", this);} // tgen

static void Test_S3551C7()
{
  extern Class_Descriptor cd_S3551C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,84)];
    init_test(&cd_S3551C7, buf);
    S3551C7 *dp, &lv = *(dp=new (buf) S3551C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,332), "sizeof(S3551C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3551C7)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(408,292), "S3551C7");
    check_base_class_offset(lv, (S20677C3*)(S3551C4*), ABISELECT(408,292), "S3551C7");
    check_base_class_offset(lv, (S3551C4*), 0, "S3551C7");
    check_field_offset(lv, s3551c7f0, ABISELECT(136,100), "S3551C7.s3551c7f0");
    check_field_offset(lv, s3551c7f1, ABISELECT(144,104), "S3551C7.s3551c7f1");
    check_field_offset(lv, s3551c7f2, ABISELECT(152,112), "S3551C7.s3551c7f2");
    check_field_offset(lv, s3551c7f3, ABISELECT(156,116), "S3551C7.s3551c7f3");
    check_field_offset(lv, s3551c7f4, ABISELECT(176,124), "S3551C7.s3551c7f4");
    check_field_offset(lv, s3551c7f5, ABISELECT(368,264), "S3551C7.s3551c7f5");
    check_field_offset(lv, s3551c7f6, ABISELECT(376,268), "S3551C7.s3551c7f6");
    check_field_offset(lv, s3551c7f7, ABISELECT(384,276), "S3551C7.s3551c7f7");
    check_field_offset(lv, s3551c7f8, ABISELECT(392,280), "S3551C7.s3551c7f8");
    check_field_offset(lv, s3551c7f9, ABISELECT(400,288), "S3551C7.s3551c7f9");
    test_class_info(&lv, &cd_S3551C7);
    dp->~S3551C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3551C7(Test_S3551C7, "S3551C7", ABISELECT(464,332));

#else // __cplusplus

extern void _ZN7S3551C7C1Ev();
extern void _ZN7S3551C7D1Ev();
Name_Map name_map_S3551C7[] = {
  NSPAIR(_ZN7S3551C7C1Ev),
  NSPAIR(_ZN7S3551C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3551C4;
extern VTBL_ENTRY _ZTI7S3551C4[];
extern  VTBL_ENTRY _ZTV7S3551C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C4[];
static Base_Class bases_S3551C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(408,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
    -1, //immediately_derived
  1, 1},
  {&cd_S3551C4,    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 _ZTI7S3551C7[];
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY vtc_S3551C7[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C7[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
extern VTBL_ENTRY _ZTV7S3551C7[];
static  VTBL_ENTRY _tg__ZTV7S3551C4__7S3551C7[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C4[0]),
};
static  VTT_ENTRY vtt_S3551C7[] = {
  {&(_ZTV7S3551C7[3]),  3,6},
  {&(_tg__ZTV7S3551C4__7S3551C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3551C7[];
extern  VTBL_ENTRY _ZTV7S3551C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C7[];
Class_Descriptor cd_S3551C7 = {  "S3551C7", // class name
  bases_S3551C7, 2,
  &(vtc_S3551C7[0]), // expected_vtbl_contents
  &(vtt_S3551C7[0]), // expected_vtt_contents
  ABISELECT(464,332), // object size
  NSPAIRA(_ZTI7S3551C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3551C7),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3551C7),2, //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  S3551C8  : virtual S20677C3 , virtual S3551C7 {
  __tsi64 s3551c8f0;
  ::S20677C6_nt s3551c8f1;
  void *s3551c8f2;
  char s3551c8f3[2];
  ::S20677C3 s3551c8f4;
  long s3551c8f5;
  ::S20677C6_nt s3551c8f6;
  virtual void  v4(); // _ZN7S3551C82v4Ev
  virtual void  v5(); // _ZN7S3551C82v5Ev
  virtual void  v6(); // _ZN7S3551C82v6Ev
  ~S3551C8(); // tgen
  S3551C8(); // tgen
};
//SIG(-1 S3551C8) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 BC4{ VBC2 FD Fi FC2 FC2} v4 v5 v6 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} v1 v2 v3 FL FC5{} Fp Fc[2] FC2 Fl FC5}


void  S3551C8 ::v4(){vfunc_called(this, "_ZN7S3551C82v4Ev");}
void  S3551C8 ::v5(){vfunc_called(this, "_ZN7S3551C82v5Ev");}
void  S3551C8 ::v6(){vfunc_called(this, "_ZN7S3551C82v6Ev");}
S3551C8 ::~S3551C8(){ note_dtor("S3551C8", this);} // tgen
S3551C8 ::S3551C8(){ note_ctor("S3551C8", this);} // tgen

static void Test_S3551C8()
{
  extern Class_Descriptor cd_S3551C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,102)];
    init_test(&cd_S3551C8, buf);
    S3551C8 *dp, &lv = *(dp=new (buf) S3551C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,404), "sizeof(S3551C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3551C8)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(104,72), "S3551C8");
    check_base_class_offset(lv, (S20677C3*)(S3551C7*), ABISELECT(104,72), "S3551C8");
    check_base_class_offset(lv, (S20677C3*)(S3551C4*)(S3551C7*), ABISELECT(104,72), "S3551C8");
    check_base_class_offset(lv, (S3551C4*)(S3551C7*), ABISELECT(160,112), "S3551C8");
    check_base_class_offset(lv, (S3551C7*), ABISELECT(160,112), "S3551C8");
    check_field_offset(lv, s3551c8f0, ABISELECT(8,4), "S3551C8.s3551c8f0");
    check_field_offset(lv, s3551c8f1, ABISELECT(16,12), "S3551C8.s3551c8f1");
    check_field_offset(lv, s3551c8f2, ABISELECT(24,16), "S3551C8.s3551c8f2");
    check_field_offset(lv, s3551c8f3, ABISELECT(32,20), "S3551C8.s3551c8f3");
    check_field_offset(lv, s3551c8f4, ABISELECT(40,24), "S3551C8.s3551c8f4");
    check_field_offset(lv, s3551c8f5, ABISELECT(88,64), "S3551C8.s3551c8f5");
    check_field_offset(lv, s3551c8f6, ABISELECT(96,68), "S3551C8.s3551c8f6");
    test_class_info(&lv, &cd_S3551C8);
    dp->~S3551C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3551C8(Test_S3551C8, "S3551C8", ABISELECT(576,404));

#else // __cplusplus

extern void _ZN7S3551C8C1Ev();
extern void _ZN7S3551C8D1Ev();
Name_Map name_map_S3551C8[] = {
  NSPAIR(_ZN7S3551C8C1Ev),
  NSPAIR(_ZN7S3551C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3551C4;
extern VTBL_ENTRY _ZTI7S3551C4[];
extern  VTBL_ENTRY _ZTV7S3551C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C4[];
extern Class_Descriptor cd_S3551C7;
extern VTBL_ENTRY _ZTI7S3551C7[];
extern  VTBL_ENTRY _ZTV7S3551C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C7[];
static Base_Class bases_S3551C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(104,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
    -1, //immediately_derived
  1, 1},
  {&cd_S3551C4,    ABISELECT(160,112), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3551C7,    ABISELECT(160,112), //bcp->offset
    7, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3551C8[];
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY vtc_S3551C8[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C8[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI7S3551C8[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
extern VTBL_ENTRY _ZTV7S3551C8[];
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C8[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C7[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C47S3551C7__7S3551C8[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C4[0]),
};
static  VTT_ENTRY vtt_S3551C8[] = {
  {&(_ZTV7S3551C8[4]),  4,16},
  {&(_ZTV7S3551C8[13]),  13,16},
  {&(_tg__ZTV7S3551C7__7S3551C8[3]),  3,6},
  {&(_tg__ZTV7S3551C47S3551C7__7S3551C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3551C8[];
extern  VTBL_ENTRY _ZTV7S3551C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C8[];
Class_Descriptor cd_S3551C8 = {  "S3551C8", // class name
  bases_S3551C8, 3,
  &(vtc_S3551C8[0]), // expected_vtbl_contents
  &(vtt_S3551C8[0]), // expected_vtt_contents
  ABISELECT(576,404), // object size
  NSPAIRA(_ZTI7S3551C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3551C8),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3551C8),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  S3551C10  : virtual S20677C3 , virtual S3551C4 {
  int s3551c10f0;
  ::S3551C4 s3551c10f1;
  __tsi64 s3551c10f2;
  int s3551c10f3;
  void *s3551c10f4;
  virtual void  v7(); // _ZN8S3551C102v7Ev
  virtual void  v8(); // _ZN8S3551C102v8Ev
  ~S3551C10(); // tgen
  S3551C10(); // tgen
};
//SIG(-1 S3551C10) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 FD Fi FC2 FC2} v1 v2 Fi FC3 FL Fi Fp}


void  S3551C10 ::v7(){vfunc_called(this, "_ZN8S3551C102v7Ev");}
void  S3551C10 ::v8(){vfunc_called(this, "_ZN8S3551C102v8Ev");}
S3551C10 ::~S3551C10(){ note_dtor("S3551C10", this);} // tgen
S3551C10 ::S3551C10(){ note_ctor("S3551C10", this);} // tgen

static void Test_S3551C10()
{
  extern Class_Descriptor cd_S3551C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,77)];
    init_test(&cd_S3551C10, buf);
    S3551C10 *dp, &lv = *(dp=new (buf) S3551C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,304), "sizeof(S3551C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3551C10)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(232,164), "S3551C10");
    check_base_class_offset(lv, (S20677C3*)(S3551C4*), ABISELECT(232,164), "S3551C10");
    check_base_class_offset(lv, (S3551C4*), ABISELECT(288,204), "S3551C10");
    check_field_offset(lv, s3551c10f0, ABISELECT(8,4), "S3551C10.s3551c10f0");
    check_field_offset(lv, s3551c10f1, ABISELECT(16,8), "S3551C10.s3551c10f1");
    check_field_offset(lv, s3551c10f2, ABISELECT(208,148), "S3551C10.s3551c10f2");
    check_field_offset(lv, s3551c10f3, ABISELECT(216,156), "S3551C10.s3551c10f3");
    check_field_offset(lv, s3551c10f4, ABISELECT(224,160), "S3551C10.s3551c10f4");
    test_class_info(&lv, &cd_S3551C10);
    dp->~S3551C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3551C10(Test_S3551C10, "S3551C10", ABISELECT(432,304));

#else // __cplusplus

extern void _ZN8S3551C10C1Ev();
extern void _ZN8S3551C10D1Ev();
Name_Map name_map_S3551C10[] = {
  NSPAIR(_ZN8S3551C10C1Ev),
  NSPAIR(_ZN8S3551C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3551C4;
extern VTBL_ENTRY _ZTI7S3551C4[];
extern  VTBL_ENTRY _ZTV7S3551C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C4[];
static Base_Class bases_S3551C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(232,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_S3551C4,    ABISELECT(288,204), //bcp->offset
    6, //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 _ZTI8S3551C10[];
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY vtc_S3551C10[] = {
  ABISELECT(288,204),
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
  ABISELECT(-56,-40),
  ABISELECT(-288,-204),
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
};
extern VTBL_ENTRY _ZTV8S3551C10[];
static  VTBL_ENTRY _tg__ZTV7S3551C4__8S3551C10[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C4[0]),
};
static  VTT_ENTRY vtt_S3551C10[] = {
  {&(_ZTV8S3551C10[4]),  4,9},
  {&(_ZTV8S3551C10[9]),  9,9},
  {&(_tg__ZTV7S3551C4__8S3551C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S3551C10[];
extern  VTBL_ENTRY _ZTV8S3551C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3551C10[];
Class_Descriptor cd_S3551C10 = {  "S3551C10", // class name
  bases_S3551C10, 2,
  &(vtc_S3551C10[0]), // expected_vtbl_contents
  &(vtt_S3551C10[0]), // expected_vtt_contents
  ABISELECT(432,304), // object size
  NSPAIRA(_ZTI8S3551C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3551C10),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3551C10),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  S3551C6  : virtual S3551C7 , virtual S3551C8 , virtual S3551C10 {
  ::S20677C6_nt s3551c6f0;
  ::S20677C6_nt s3551c6f1;
  int s3551c6f2;
  ::S3551C4 s3551c6f3;
  ::S20677C6_nt s3551c6f4;
  ::S20677C6_nt s3551c6f5;
  ::S21008C9 s3551c6f6;
  ::S3551C8 s3551c6f7;
  void *s3551c6f8;
  ::S20677C6_nt s3551c6f9;
  virtual void  v9(); // _ZN7S3551C62v9Ev
  virtual void  v10(); // _ZN7S3551C63v10Ev
  ~S3551C6(); // tgen
  S3551C6(); // tgen
};
//SIG(-1 S3551C6) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} BC4{ VBC3 FD Fi FC3 FC3} v3 v4 v5 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC5{ VBC3 VBC2 v6 v7 v8 FL FC6{} Fp Fc[2] FC3 Fl FC6} VBC7{ VBC3 VBC4 v9 v10 Fi FC4 FL Fi Fp} v1 v2 FC6 FC6 Fi FC4 FC6 FC6 FC8{ v11 FC6 FC9{ VBC3 FD Fi FC3 FC3} FC6 FL FC6 Fp FC6 Fp[2] FC6} FC5 Fp FC6}


void  S3551C6 ::v9(){vfunc_called(this, "_ZN7S3551C62v9Ev");}
void  S3551C6 ::v10(){vfunc_called(this, "_ZN7S3551C63v10Ev");}
S3551C6 ::~S3551C6(){ note_dtor("S3551C6", this);} // tgen
S3551C6 ::S3551C6(){ note_ctor("S3551C6", this);} // tgen

static void Test_S3551C6()
{
  extern Class_Descriptor cd_S3551C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(128,356)];
    init_test(&cd_S3551C6, buf);
    S3551C6 *dp, &lv = *(dp=new (buf) S3551C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2032,1420), "sizeof(S3551C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3551C6)");
    check_base_class_offset(lv, (S20677C3*)(S3551C7*), ABISELECT(1496,1044), "S3551C6");
    check_base_class_offset(lv, (S20677C3*)(S3551C4*)(S3551C7*), ABISELECT(1496,1044), "S3551C6");
    check_base_class_offset(lv, (S20677C3*)(S3551C8*), ABISELECT(1496,1044), "S3551C6");
    check_base_class_offset(lv, (S20677C3*)(S3551C10*), ABISELECT(1496,1044), "S3551C6");
    /*is_ambiguous_... S3551C6::S3551C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3551C4*), ABISELECT(1496,1044), "S3551C6");
    check_base_class_offset(lv, (S3551C4*)(S3551C7*), ABISELECT(1088,752), "S3551C6");
    check_base_class_offset(lv, (S3551C7*), ABISELECT(1088,752), "S3551C6");
    check_base_class_offset(lv, (S3551C7*)(S3551C8*), ABISELECT(1088,752), "S3551C6");
    check_base_class_offset(lv, (S3551C8*), ABISELECT(1544,1084), "S3551C6");
    check_base_class_offset(lv, (S3551C4*)(S3551C10*), ABISELECT(1888,1320), "S3551C6");
    check_base_class_offset(lv, (S3551C10*), ABISELECT(1648,1156), "S3551C6");
    check_field_offset(lv, s3551c6f0, ABISELECT(8,4), "S3551C6.s3551c6f0");
    check_field_offset(lv, s3551c6f1, ABISELECT(9,5), "S3551C6.s3551c6f1");
    check_field_offset(lv, s3551c6f2, ABISELECT(12,8), "S3551C6.s3551c6f2");
    check_field_offset(lv, s3551c6f3, ABISELECT(16,12), "S3551C6.s3551c6f3");
    check_field_offset(lv, s3551c6f4, ABISELECT(208,152), "S3551C6.s3551c6f4");
    check_field_offset(lv, s3551c6f5, ABISELECT(209,153), "S3551C6.s3551c6f5");
    check_field_offset(lv, s3551c6f6, ABISELECT(224,156), "S3551C6.s3551c6f6");
    check_field_offset(lv, s3551c6f7, ABISELECT(496,340), "S3551C6.s3551c6f7");
    check_field_offset(lv, s3551c6f8, ABISELECT(1072,744), "S3551C6.s3551c6f8");
    check_field_offset(lv, s3551c6f9, ABISELECT(1080,748), "S3551C6.s3551c6f9");
    test_class_info(&lv, &cd_S3551C6);
    dp->~S3551C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3551C6(Test_S3551C6, "S3551C6", ABISELECT(2032,1420));

#else // __cplusplus

extern void _ZN7S3551C6C1Ev();
extern void _ZN7S3551C6D1Ev();
Name_Map name_map_S3551C6[] = {
  NSPAIR(_ZN7S3551C6C1Ev),
  NSPAIR(_ZN7S3551C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3551C4;
extern VTBL_ENTRY _ZTI7S3551C4[];
extern  VTBL_ENTRY _ZTV7S3551C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C4[];
extern Class_Descriptor cd_S3551C7;
extern VTBL_ENTRY _ZTI7S3551C7[];
extern  VTBL_ENTRY _ZTV7S3551C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C7[];
extern Class_Descriptor cd_S3551C8;
extern VTBL_ENTRY _ZTI7S3551C8[];
extern  VTBL_ENTRY _ZTV7S3551C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C8[];
extern Class_Descriptor cd_S3551C4;
extern VTBL_ENTRY _ZTI7S3551C4[];
extern  VTBL_ENTRY _ZTV7S3551C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C4[];
extern Class_Descriptor cd_S3551C10;
extern VTBL_ENTRY _ZTI8S3551C10[];
extern  VTBL_ENTRY _ZTV8S3551C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3551C10[];
static Base_Class bases_S3551C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1496,1044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3551C4,    ABISELECT(1088,752), //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_S3551C7,    ABISELECT(1088,752), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3551C8,    ABISELECT(1544,1084), //bcp->offset
    18, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3551C4,    ABISELECT(1888,1320), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3551C10,    ABISELECT(1648,1156), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3551C6[];
extern void _ZN7S3551C62v9Ev();
extern void _ZN7S3551C63v10Ev();
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY vtc_S3551C6[] = {
  ABISELECT(1888,1320),
  ABISELECT(1648,1156),
  ABISELECT(1544,1084),
  ABISELECT(1496,1044),
  ABISELECT(1088,752),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN7S3551C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3551C63v10Ev,
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-1544,-1084),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-1648,-1156),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
  ABISELECT(-392,-276),
  ABISELECT(-1888,-1320),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
};
extern VTBL_ENTRY _ZTV7S3551C6[];
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C6[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C7[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C47S3551C7__7S3551C6[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C4[0]),
};
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C8__7S3551C6[] = {
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C8[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C8__7S3551C6[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(456,332),
  (VTBL_ENTRY)&(_ZTI7S3551C8[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__7S3551C6[] = {
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  0,
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__8S3551C10__7S3551C6[] = {
  ABISELECT(-392,-276),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__A1__7S3551C6[] = {
  ABISELECT(-392,-276),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C4[0]),
};
static  VTT_ENTRY vtt_S3551C6[] = {
  {&(_ZTV7S3551C6[7]),  7,39},
  {&(_ZTV7S3551C6[15]),  15,39},
  {&(_ZTV7S3551C6[25]),  25,39},
  {&(_ZTV7S3551C6[34]),  34,39},
  {&(_ZTV7S3551C6[39]),  39,39},
  {&(_tg__ZTV7S3551C7__7S3551C6[3]),  3,6},
  {&(_tg__ZTV7S3551C47S3551C7__7S3551C6[3]),  3,3},
  {&(_tg__ZTV7S3551C8__7S3551C6[4]),  4,7},
  {&(_tg__ZTV7S3551C7__7S3551C8__7S3551C6[6]),  6,9},
  {&(_tg__ZTV8S3551C10__7S3551C6[4]),  4,6},
  {&(_tg__ZTV7S3551C4__8S3551C10__7S3551C6[3]),  3,3},
  {&(_tg__ZTV7S3551C4__A1__7S3551C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3551C6[];
extern  VTBL_ENTRY _ZTV7S3551C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C6[];
Class_Descriptor cd_S3551C6 = {  "S3551C6", // class name
  bases_S3551C6, 6,
  &(vtc_S3551C6[0]), // expected_vtbl_contents
  &(vtt_S3551C6[0]), // expected_vtt_contents
  ABISELECT(2032,1420), // object size
  NSPAIRA(_ZTI7S3551C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3551C6),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3551C6),12, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3551C3  : virtual S3551C4 , S3551C6 , S3551C10 {
  int s3551c3f0;
  char s3551c3f1:2;
  ::S20677C6_nt s3551c3f2;
  int s3551c3f3;
  ~S3551C3(); // tgen
  S3551C3(); // tgen
};
//SIG(-1 S3551C3) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} FD Fi FC3 FC3} BC4{ VBC5{ VBC3 BC2 v1 v2 v3 Fs FL Fc Fi[2] FC2 Fp FL Fi FL Fi} VBC6{ VBC3 VBC5 v4 v5 v6 FL FC7{} Fp Fc[2] FC3 Fl FC7} VBC8{ VBC3 VBC2 v7 v8 Fi FC2 FL Fi Fp} v9 v10 FC7 FC7 Fi FC2 FC7 FC7 FC9{ v11 FC7 FC10{ VBC3 FD Fi FC3 FC3} FC7 FL FC7 Fp FC7 Fp[2] FC7} FC6 Fp FC7} BC8 Fi Fc:2 FC7 Fi}


S3551C3 ::~S3551C3(){ note_dtor("S3551C3", this);} // tgen
S3551C3 ::S3551C3(){ note_ctor("S3551C3", this);} // tgen

static void Test_S3551C3()
{
  extern Class_Descriptor cd_S3551C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(144,400)];
    init_test(&cd_S3551C3, buf);
    S3551C3 *dp, &lv = *(dp=new (buf) S3551C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2288,1596), "sizeof(S3551C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3551C3)");
    /*is_ambiguous_... S3551C3::S3551C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3551C4*), ABISELECT(1480,1028), "S3551C3");
    check_base_class_offset(lv, (S20677C3*)(S3551C7*), ABISELECT(1480,1028), "S3551C3");
    check_base_class_offset(lv, (S20677C3*)(S3551C4*)(S3551C7*), ABISELECT(1480,1028), "S3551C3");
    check_base_class_offset(lv, (S20677C3*)(S3551C8*), ABISELECT(1480,1028), "S3551C3");
    /*is_ambiguous_... S3551C3::S3551C10 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3551C10*), ABISELECT(1480,1028), "S3551C3");
    /*is_ambiguous_... S3551C3::S3551C10 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3551C10*), ABISELECT(1480,1028), "S3551C3");
    /*is_ambiguous_... S3551C3::S3551C4 */ AMB_check_base_class_offset(lv, (S3551C4*), ABISELECT(1344,928), "S3551C3");
    /*is_ambiguous_... S3551C3::S3551C10 */ AMB_check_base_class_offset(lv, (S3551C4*)(S3551C10*), ABISELECT(1344,928), "S3551C3");
    /*is_ambiguous_... S3551C3::S3551C10 */ AMB_check_base_class_offset(lv, (S3551C4*)(S3551C10*), ABISELECT(1344,928), "S3551C3");
    check_base_class_offset(lv, (S3551C4*)(S3551C7*), ABISELECT(1536,1068), "S3551C3");
    check_base_class_offset(lv, (S3551C7*)(S3551C6*), ABISELECT(1536,1068), "S3551C3");
    check_base_class_offset(lv, (S3551C7*)(S3551C8*), ABISELECT(1536,1068), "S3551C3");
    check_base_class_offset(lv, (S3551C8*)(S3551C6*), ABISELECT(1944,1360), "S3551C3");
    check_base_class_offset(lv, (S3551C10*)(S3551C6*), ABISELECT(2048,1432), "S3551C3");
    check_base_class_offset(lv, (S3551C6*), 0, "S3551C3");
    /*is_ambiguous_... S3551C3::S3551C10 */ AMB_check_base_class_offset(lv, (S3551C10*), ABISELECT(1088,752), "S3551C3");
    check_field_offset(lv, s3551c3f0, ABISELECT(1320,916), "S3551C3.s3551c3f0");
    set_bf_and_test(lv, s3551c3f1, ABISELECT(1324,920), 0, 2, 1, "S3551C3");
    set_bf_and_test(lv, s3551c3f1, ABISELECT(1324,920), 0, 2, hide_sll(1LL<<1), "S3551C3");
    check_field_offset(lv, s3551c3f2, ABISELECT(1325,921), "S3551C3.s3551c3f2");
    check_field_offset(lv, s3551c3f3, ABISELECT(1328,924), "S3551C3.s3551c3f3");
    test_class_info(&lv, &cd_S3551C3);
    dp->~S3551C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3551C3(Test_S3551C3, "S3551C3", ABISELECT(2288,1596));

#else // __cplusplus

extern void _ZN7S3551C3C1Ev();
extern void _ZN7S3551C3D1Ev();
Name_Map name_map_S3551C3[] = {
  NSPAIR(_ZN7S3551C3C1Ev),
  NSPAIR(_ZN7S3551C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3551C4;
extern VTBL_ENTRY _ZTI7S3551C4[];
extern  VTBL_ENTRY _ZTV7S3551C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C4[];
extern Class_Descriptor cd_S3551C4;
extern VTBL_ENTRY _ZTI7S3551C4[];
extern  VTBL_ENTRY _ZTV7S3551C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C4[];
extern Class_Descriptor cd_S3551C7;
extern VTBL_ENTRY _ZTI7S3551C7[];
extern  VTBL_ENTRY _ZTV7S3551C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C7[];
extern Class_Descriptor cd_S3551C8;
extern VTBL_ENTRY _ZTI7S3551C8[];
extern  VTBL_ENTRY _ZTV7S3551C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C8[];
extern Class_Descriptor cd_S3551C10;
extern VTBL_ENTRY _ZTI8S3551C10[];
extern  VTBL_ENTRY _ZTV8S3551C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3551C10[];
extern Class_Descriptor cd_S3551C6;
extern VTBL_ENTRY _ZTI7S3551C6[];
extern  VTBL_ENTRY _ZTV7S3551C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C6[];
extern Class_Descriptor cd_S3551C10;
extern VTBL_ENTRY _ZTI8S3551C10[];
extern  VTBL_ENTRY _ZTV8S3551C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3551C10[];
static Base_Class bases_S3551C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1480,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
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3551C4,    ABISELECT(1344,928), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3551C4,    ABISELECT(1536,1068), //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
    3, //immediately_derived
  0, 0},
  {&cd_S3551C7,    ABISELECT(1536,1068), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3551C8,    ABISELECT(1944,1360), //bcp->offset
    27, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3551C10,    ABISELECT(2048,1432), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3551C6,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3551C10,    ABISELECT(1088,752), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3551C3[];
extern void _ZN7S3551C62v9Ev();
extern void _ZN7S3551C63v10Ev();
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY vtc_S3551C3[] = {
  ABISELECT(1344,928),
  ABISELECT(2048,1432),
  ABISELECT(1944,1360),
  ABISELECT(1480,1028),
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN7S3551C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3551C63v10Ev,
  ABISELECT(256,176),
  ABISELECT(392,276),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
  ABISELECT(136,100),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-1944,-1360),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2048,-1432),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
extern VTBL_ENTRY _ZTV7S3551C3[];
extern void _ZN7S3551C62v9Ev();
extern void _ZN7S3551C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C6__7S3551C3[] = {
  ABISELECT(1344,928),
  ABISELECT(2048,1432),
  ABISELECT(1944,1360),
  ABISELECT(1480,1028),
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN7S3551C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3551C63v10Ev,
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C6__7S3551C3[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C8__7S3551C6__7S3551C3[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-1944,-1360),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__7S3551C6__7S3551C3[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2048,-1432),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__A1__7S3551C6__7S3551C3[] = {
  ABISELECT(136,100),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__A__7S3551C3[] = {
  ABISELECT(256,176),
  ABISELECT(392,276),
  0,
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__8S3551C10__A__7S3551C3[] = {
  ABISELECT(136,100),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__7S3551C3[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C4[0]),
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C3[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C7[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C47S3551C7__A1__7S3551C3[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C4[0]),
};
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C8__7S3551C3[] = {
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C8[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C8__7S3551C3[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI7S3551C8[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__7S3551C3[] = {
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  0,
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__8S3551C10__7S3551C3[] = {
  ABISELECT(136,100),
  ABISELECT(704,504),
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
};
static  VTT_ENTRY vtt_S3551C3[] = {
  {&(_ZTV7S3551C3[7]),  7,45},
  {&(_tg__ZTV7S3551C6__7S3551C3[7]),  7,9},
  {&(_tg__ZTV7S3551C7__7S3551C6__7S3551C3[6]),  6,9},
  {&(_tg__ZTV7S3551C8__7S3551C6__7S3551C3[7]),  7,10},
  {&(_tg__ZTV8S3551C10__7S3551C6__7S3551C3[6]),  6,8},
  {&(_tg__ZTV7S3551C4__A1__7S3551C6__7S3551C3[3]),  3,3},
  {&(_tg__ZTV8S3551C10__A__7S3551C3[4]),  4,6},
  {&(_tg__ZTV7S3551C4__8S3551C10__A__7S3551C3[3]),  3,3},
  {&(_ZTV7S3551C3[18]),  18,45},
  {&(_ZTV7S3551C3[24]),  24,45},
  {&(_ZTV7S3551C3[34]),  34,45},
  {&(_ZTV7S3551C3[43]),  43,45},
  {&(_ZTV7S3551C3[13]),  13,45},
  {&(_tg__ZTV7S3551C4__7S3551C3[3]),  3,3},
  {&(_tg__ZTV7S3551C7__7S3551C3[3]),  3,6},
  {&(_tg__ZTV7S3551C47S3551C7__A1__7S3551C3[3]),  3,3},
  {&(_tg__ZTV7S3551C8__7S3551C3[4]),  4,7},
  {&(_tg__ZTV7S3551C7__7S3551C8__7S3551C3[6]),  6,9},
  {&(_tg__ZTV8S3551C10__7S3551C3[4]),  4,6},
  {&(_tg__ZTV7S3551C4__8S3551C10__7S3551C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3551C3[];
extern  VTBL_ENTRY _ZTV7S3551C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C3[];
Class_Descriptor cd_S3551C3 = {  "S3551C3", // class name
  bases_S3551C3, 8,
  &(vtc_S3551C3[0]), // expected_vtbl_contents
  &(vtt_S3551C3[0]), // expected_vtt_contents
  ABISELECT(2288,1596), // object size
  NSPAIRA(_ZTI7S3551C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3551C3),45, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3551C3),20, //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  S3551C2  : S3551C3 {
  int s3551c2f0;
  ::S20677C6_nt s3551c2f1;
  short s3551c2f2;
  long s3551c2f3;
  ::S3551C4 s3551c2f4;
  long s3551c2f5;
  virtual void  v11(); // _ZN7S3551C23v11Ev
  ~S3551C2(); // tgen
  S3551C2(); // tgen
};
//SIG(-1 S3551C2) C1{ BC2{ VBC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} BC5{ VBC6{ VBC4 BC3 v2 v3 v4 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi} VBC7{ VBC4 VBC6 v5 v6 v7 FL FC8{} Fp Fc[2] FC4 Fl FC8} VBC9{ VBC4 VBC3 v8 v9 Fi FC3 FL Fi Fp} v10 v11 FC8 FC8 Fi FC3 FC8 FC8 FC10{ v12 FC8 FC11{ VBC4 FD Fi FC4 FC4} FC8 FL FC8 Fp FC8 Fp[2] FC8} FC7 Fp FC8} BC9 Fi Fc:2 FC8 Fi} v1 Fi FC8 Fs Fl FC3 Fl}


void  S3551C2 ::v11(){vfunc_called(this, "_ZN7S3551C23v11Ev");}
S3551C2 ::~S3551C2(){ note_dtor("S3551C2", this);} // tgen
S3551C2 ::S3551C2(){ note_ctor("S3551C2", this);} // tgen

static void Test_S3551C2()
{
  extern Class_Descriptor cd_S3551C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(158,439)];
    init_test(&cd_S3551C2, buf);
    S3551C2 *dp, &lv = *(dp=new (buf) S3551C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2512,1752), "sizeof(S3551C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3551C2)");
    /*is_ambiguous_... S3551C2::S3551C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3551C4*), ABISELECT(1704,1184), "S3551C2");
    check_base_class_offset(lv, (S20677C3*)(S3551C7*), ABISELECT(1704,1184), "S3551C2");
    check_base_class_offset(lv, (S20677C3*)(S3551C4*)(S3551C7*), ABISELECT(1704,1184), "S3551C2");
    check_base_class_offset(lv, (S20677C3*)(S3551C8*), ABISELECT(1704,1184), "S3551C2");
    /*is_ambiguous_... S3551C2::S3551C10 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3551C10*), ABISELECT(1704,1184), "S3551C2");
    /*is_ambiguous_... S3551C3::S3551C10 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3551C10*)(S3551C3*), ABISELECT(1704,1184), "S3551C2");
    /*is_ambiguous_... S3551C3::S3551C4 */ AMB_check_base_class_offset(lv, (S3551C4*)(S3551C3*), ABISELECT(1568,1084), "S3551C2");
    /*is_ambiguous_... S3551C2::S3551C10 */ AMB_check_base_class_offset(lv, (S3551C4*)(S3551C10*), ABISELECT(1568,1084), "S3551C2");
    /*is_ambiguous_... S3551C3::S3551C10 */ AMB_check_base_class_offset(lv, (S3551C4*)(S3551C10*)(S3551C3*), ABISELECT(1568,1084), "S3551C2");
    check_base_class_offset(lv, (S3551C4*)(S3551C7*), ABISELECT(1760,1224), "S3551C2");
    check_base_class_offset(lv, (S3551C7*)(S3551C6*)(S3551C3*), ABISELECT(1760,1224), "S3551C2");
    check_base_class_offset(lv, (S3551C7*)(S3551C8*), ABISELECT(1760,1224), "S3551C2");
    check_base_class_offset(lv, (S3551C8*)(S3551C6*)(S3551C3*), ABISELECT(2168,1516), "S3551C2");
    check_base_class_offset(lv, (S3551C10*)(S3551C6*)(S3551C3*), ABISELECT(2272,1588), "S3551C2");
    check_base_class_offset(lv, (S3551C6*)(S3551C3*), 0, "S3551C2");
    /*is_ambiguous_... S3551C3::S3551C10 */ AMB_check_base_class_offset(lv, (S3551C10*)(S3551C3*), ABISELECT(1088,752), "S3551C2");
    check_base_class_offset(lv, (S3551C3*), 0, "S3551C2");
    check_field_offset(lv, s3551c2f0, ABISELECT(1332,928), "S3551C2.s3551c2f0");
    check_field_offset(lv, s3551c2f1, ABISELECT(1336,932), "S3551C2.s3551c2f1");
    check_field_offset(lv, s3551c2f2, ABISELECT(1338,934), "S3551C2.s3551c2f2");
    check_field_offset(lv, s3551c2f3, ABISELECT(1344,936), "S3551C2.s3551c2f3");
    check_field_offset(lv, s3551c2f4, ABISELECT(1360,940), "S3551C2.s3551c2f4");
    check_field_offset(lv, s3551c2f5, ABISELECT(1552,1080), "S3551C2.s3551c2f5");
    test_class_info(&lv, &cd_S3551C2);
    dp->~S3551C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3551C2(Test_S3551C2, "S3551C2", ABISELECT(2512,1752));

#else // __cplusplus

extern void _ZN7S3551C2C1Ev();
extern void _ZN7S3551C2D1Ev();
Name_Map name_map_S3551C2[] = {
  NSPAIR(_ZN7S3551C2C1Ev),
  NSPAIR(_ZN7S3551C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3551C4;
extern VTBL_ENTRY _ZTI7S3551C4[];
extern  VTBL_ENTRY _ZTV7S3551C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C4[];
extern Class_Descriptor cd_S3551C4;
extern VTBL_ENTRY _ZTI7S3551C4[];
extern  VTBL_ENTRY _ZTV7S3551C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C4[];
extern Class_Descriptor cd_S3551C7;
extern VTBL_ENTRY _ZTI7S3551C7[];
extern  VTBL_ENTRY _ZTV7S3551C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C7[];
extern Class_Descriptor cd_S3551C8;
extern VTBL_ENTRY _ZTI7S3551C8[];
extern  VTBL_ENTRY _ZTV7S3551C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C8[];
extern Class_Descriptor cd_S3551C10;
extern VTBL_ENTRY _ZTI8S3551C10[];
extern  VTBL_ENTRY _ZTV8S3551C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3551C10[];
extern Class_Descriptor cd_S3551C6;
extern VTBL_ENTRY _ZTI7S3551C6[];
extern  VTBL_ENTRY _ZTV7S3551C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C6[];
extern Class_Descriptor cd_S3551C10;
extern VTBL_ENTRY _ZTI8S3551C10[];
extern  VTBL_ENTRY _ZTV8S3551C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3551C10[];
extern Class_Descriptor cd_S3551C3;
extern VTBL_ENTRY _ZTI7S3551C3[];
extern  VTBL_ENTRY _ZTV7S3551C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C3[];
static Base_Class bases_S3551C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1704,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
    1, //immediately_derived
  0, 1},
  {&cd_S3551C4,    ABISELECT(1568,1084), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3551C4,    ABISELECT(1760,1224), //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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3551C7,    ABISELECT(1760,1224), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3551C8,    ABISELECT(2168,1516), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3551C10,    ABISELECT(2272,1588), //bcp->offset
    38, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3551C6,    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
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3551C10,    ABISELECT(1088,752), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3551C3,    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 _ZTI7S3551C2[];
extern void _ZN7S3551C62v9Ev();
extern void _ZN7S3551C63v10Ev();
extern void _ZN7S3551C23v11Ev();
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY vtc_S3551C2[] = {
  ABISELECT(1568,1084),
  ABISELECT(2272,1588),
  ABISELECT(2168,1516),
  ABISELECT(1704,1184),
  ABISELECT(1760,1224),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C2[0]),
  (VTBL_ENTRY)&_ZN7S3551C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3551C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3551C23v11Ev,
  ABISELECT(480,332),
  ABISELECT(616,432),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3551C2[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
  ABISELECT(136,100),
  ABISELECT(-1568,-1084),
  (VTBL_ENTRY)&(_ZTI7S3551C2[0]),
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1760,-1224),
  (VTBL_ENTRY)&(_ZTI7S3551C2[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-2168,-1516),
  (VTBL_ENTRY)&(_ZTI7S3551C2[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2272,-1588),
  (VTBL_ENTRY)&(_ZTI7S3551C2[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
extern VTBL_ENTRY _ZTV7S3551C2[];
extern void _ZN7S3551C62v9Ev();
extern void _ZN7S3551C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C3__7S3551C2[] = {
  ABISELECT(1568,1084),
  ABISELECT(2272,1588),
  ABISELECT(2168,1516),
  ABISELECT(1704,1184),
  ABISELECT(1760,1224),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN7S3551C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3551C63v10Ev,
};
extern void _ZN7S3551C62v9Ev();
extern void _ZN7S3551C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C67S3551C3__7S3551C2[] = {
  ABISELECT(1568,1084),
  ABISELECT(2272,1588),
  ABISELECT(2168,1516),
  ABISELECT(1704,1184),
  ABISELECT(1760,1224),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN7S3551C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3551C63v10Ev,
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C67S3551C3__7S3551C2[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1760,-1224),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C8__7S3551C67S3551C3__7S3551C2[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-2168,-1516),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__7S3551C67S3551C3__7S3551C2[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2272,-1588),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__A1__7S3551C67S3551C3__7S3551C2[] = {
  ABISELECT(136,100),
  ABISELECT(-1568,-1084),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C107S3551C3__A1__7S3551C2[] = {
  ABISELECT(480,332),
  ABISELECT(616,432),
  0,
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__8S3551C107S3551C3__A1__7S3551C2[] = {
  ABISELECT(136,100),
  ABISELECT(-480,-332),
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__7S3551C3__7S3551C2[] = {
  ABISELECT(136,100),
  ABISELECT(-1568,-1084),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C3__7S3551C2[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1760,-1224),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C8__7S3551C3__7S3551C2[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-2168,-1516),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__7S3551C3__7S3551C2[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2272,-1588),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__A__7S3551C3__7S3551C2[] = {
  ABISELECT(480,332),
  ABISELECT(616,432),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__7S3551C2[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C4[0]),
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C7[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C47S3551C7__A1__7S3551C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C4[0]),
};
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C8__7S3551C2[] = {
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C8[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C8__7S3551C2[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI7S3551C8[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__7S3551C2[] = {
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  0,
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__8S3551C10__7S3551C2[] = {
  ABISELECT(136,100),
  ABISELECT(704,504),
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
};
static  VTT_ENTRY vtt_S3551C2[] = {
  {&(_ZTV7S3551C2[7]),  7,46},
  {&(_tg__ZTV7S3551C3__7S3551C2[7]),  7,9},
  {&(_tg__ZTV7S3551C67S3551C3__7S3551C2[7]),  7,9},
  {&(_tg__ZTV7S3551C7__7S3551C67S3551C3__7S3551C2[6]),  6,9},
  {&(_tg__ZTV7S3551C8__7S3551C67S3551C3__7S3551C2[7]),  7,10},
  {&(_tg__ZTV8S3551C10__7S3551C67S3551C3__7S3551C2[6]),  6,8},
  {&(_tg__ZTV7S3551C4__A1__7S3551C67S3551C3__7S3551C2[3]),  3,3},
  {&(_tg__ZTV8S3551C107S3551C3__A1__7S3551C2[4]),  4,6},
  {&(_tg__ZTV7S3551C4__8S3551C107S3551C3__A1__7S3551C2[3]),  3,3},
  {&(_tg__ZTV7S3551C4__7S3551C3__7S3551C2[3]),  3,3},
  {&(_tg__ZTV7S3551C7__7S3551C3__7S3551C2[6]),  6,9},
  {&(_tg__ZTV7S3551C8__7S3551C3__7S3551C2[7]),  7,10},
  {&(_tg__ZTV8S3551C10__7S3551C3__7S3551C2[6]),  6,8},
  {&(_tg__ZTV8S3551C10__A__7S3551C3__7S3551C2[4]),  4,6},
  {&(_ZTV7S3551C2[19]),  19,46},
  {&(_ZTV7S3551C2[25]),  25,46},
  {&(_ZTV7S3551C2[35]),  35,46},
  {&(_ZTV7S3551C2[44]),  44,46},
  {&(_ZTV7S3551C2[14]),  14,46},
  {&(_tg__ZTV7S3551C4__7S3551C2[3]),  3,3},
  {&(_tg__ZTV7S3551C7__7S3551C2[3]),  3,6},
  {&(_tg__ZTV7S3551C47S3551C7__A1__7S3551C2[3]),  3,3},
  {&(_tg__ZTV7S3551C8__7S3551C2[4]),  4,7},
  {&(_tg__ZTV7S3551C7__7S3551C8__7S3551C2[6]),  6,9},
  {&(_tg__ZTV8S3551C10__7S3551C2[4]),  4,6},
  {&(_tg__ZTV7S3551C4__8S3551C10__7S3551C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3551C2[];
extern  VTBL_ENTRY _ZTV7S3551C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C2[];
Class_Descriptor cd_S3551C2 = {  "S3551C2", // class name
  bases_S3551C2, 9,
  &(vtc_S3551C2[0]), // expected_vtbl_contents
  &(vtt_S3551C2[0]), // expected_vtt_contents
  ABISELECT(2512,1752), // object size
  NSPAIRA(_ZTI7S3551C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3551C2),46, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3551C2),26, //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  S3551C1  : S3551C2 {
  short s3551c1f0;
  void *s3551c1f1;
  __tsi64 s3551c1f2;
  int s3551c1f3[8];
  ::S20677C3 s3551c1f4;
  int s3551c1f5;
  __tsi64 s3551c1f6;
  long s3551c1f7;
  int s3551c1f8;
  void *s3551c1f9;
  ::S3551C6 s3551c1f10;
  ~S3551C1(); // tgen
  S3551C1(); // tgen
};
//SIG(1 S3551C1) C1{ BC2{ BC3{ VBC4{ VBC5{ m Fp FL[4] Fs} FD Fi FC5 FC5} BC6{ VBC7{ VBC5 BC4 v1 v2 v3 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC8{ VBC5 VBC7 v4 v5 v6 FL FC9{} Fp Fc[2] FC5 Fl FC9} VBC10{ VBC5 VBC4 v7 v8 Fi FC4 FL Fi Fp} v9 v10 FC9 FC9 Fi FC4 FC9 FC9 FC11{ v12 FC9 FC12{ VBC5 FD Fi FC5 FC5} FC9 FL FC9 Fp FC9 Fp[2] FC9} FC8 Fp FC9} BC10 Fi Fc:2 FC9 Fi} v11 Fi FC9 Fs Fl FC4 Fl} Fs Fp FL Fi[8] FC5 Fi FL Fl Fi Fp FC6}


S3551C1 ::~S3551C1(){ note_dtor("S3551C1", this);} // tgen
S3551C1 ::S3551C1(){ note_ctor("S3551C1", this);} // tgen

static void Test_S3551C1()
{
  extern Class_Descriptor cd_S3551C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(294,822)];
    init_test(&cd_S3551C1, buf);
    S3551C1 *dp, &lv = *(dp=new (buf) S3551C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4688,3284), "sizeof(S3551C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3551C1)");
    /*is_ambiguous_... S3551C1::S3551C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3551C4*), ABISELECT(3880,2716), "S3551C1");
    check_base_class_offset(lv, (S20677C3*)(S3551C7*), ABISELECT(3880,2716), "S3551C1");
    check_base_class_offset(lv, (S20677C3*)(S3551C4*)(S3551C7*), ABISELECT(3880,2716), "S3551C1");
    check_base_class_offset(lv, (S20677C3*)(S3551C8*), ABISELECT(3880,2716), "S3551C1");
    /*is_ambiguous_... S3551C1::S3551C10 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3551C10*), ABISELECT(3880,2716), "S3551C1");
    /*is_ambiguous_... S3551C3::S3551C10 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3551C10*)(S3551C3*)(S3551C2*), ABISELECT(3880,2716), "S3551C1");
    /*is_ambiguous_... S3551C3::S3551C4 */ AMB_check_base_class_offset(lv, (S3551C4*)(S3551C3*)(S3551C2*), ABISELECT(3744,2616), "S3551C1");
    /*is_ambiguous_... S3551C1::S3551C10 */ AMB_check_base_class_offset(lv, (S3551C4*)(S3551C10*), ABISELECT(3744,2616), "S3551C1");
    /*is_ambiguous_... S3551C3::S3551C10 */ AMB_check_base_class_offset(lv, (S3551C4*)(S3551C10*)(S3551C3*)(S3551C2*), ABISELECT(3744,2616), "S3551C1");
    check_base_class_offset(lv, (S3551C4*)(S3551C7*), ABISELECT(3936,2756), "S3551C1");
    check_base_class_offset(lv, (S3551C7*)(S3551C6*)(S3551C3*)(S3551C2*), ABISELECT(3936,2756), "S3551C1");
    check_base_class_offset(lv, (S3551C7*)(S3551C8*), ABISELECT(3936,2756), "S3551C1");
    check_base_class_offset(lv, (S3551C8*)(S3551C6*)(S3551C3*)(S3551C2*), ABISELECT(4344,3048), "S3551C1");
    check_base_class_offset(lv, (S3551C10*)(S3551C6*)(S3551C3*)(S3551C2*), ABISELECT(4448,3120), "S3551C1");
    check_base_class_offset(lv, (S3551C6*)(S3551C3*)(S3551C2*), 0, "S3551C1");
    /*is_ambiguous_... S3551C3::S3551C10 */ AMB_check_base_class_offset(lv, (S3551C10*)(S3551C3*)(S3551C2*), ABISELECT(1088,752), "S3551C1");
    check_base_class_offset(lv, (S3551C3*)(S3551C2*), 0, "S3551C1");
    check_base_class_offset(lv, (S3551C2*), 0, "S3551C1");
    check_field_offset(lv, s3551c1f0, ABISELECT(1560,1084), "S3551C1.s3551c1f0");
    check_field_offset(lv, s3551c1f1, ABISELECT(1568,1088), "S3551C1.s3551c1f1");
    check_field_offset(lv, s3551c1f2, ABISELECT(1576,1092), "S3551C1.s3551c1f2");
    check_field_offset(lv, s3551c1f3, ABISELECT(1584,1100), "S3551C1.s3551c1f3");
    check_field_offset(lv, s3551c1f4, ABISELECT(1616,1132), "S3551C1.s3551c1f4");
    check_field_offset(lv, s3551c1f5, ABISELECT(1664,1172), "S3551C1.s3551c1f5");
    check_field_offset(lv, s3551c1f6, ABISELECT(1672,1176), "S3551C1.s3551c1f6");
    check_field_offset(lv, s3551c1f7, ABISELECT(1680,1184), "S3551C1.s3551c1f7");
    check_field_offset(lv, s3551c1f8, ABISELECT(1688,1188), "S3551C1.s3551c1f8");
    check_field_offset(lv, s3551c1f9, ABISELECT(1696,1192), "S3551C1.s3551c1f9");
    check_field_offset(lv, s3551c1f10, ABISELECT(1712,1196), "S3551C1.s3551c1f10");
    test_class_info(&lv, &cd_S3551C1);
    dp->~S3551C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3551C1(Test_S3551C1, "S3551C1", ABISELECT(4688,3284));

#else // __cplusplus

extern void _ZN7S3551C1C1Ev();
extern void _ZN7S3551C1D1Ev();
Name_Map name_map_S3551C1[] = {
  NSPAIR(_ZN7S3551C1C1Ev),
  NSPAIR(_ZN7S3551C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3551C4;
extern VTBL_ENTRY _ZTI7S3551C4[];
extern  VTBL_ENTRY _ZTV7S3551C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C4[];
extern Class_Descriptor cd_S3551C4;
extern VTBL_ENTRY _ZTI7S3551C4[];
extern  VTBL_ENTRY _ZTV7S3551C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C4[];
extern Class_Descriptor cd_S3551C7;
extern VTBL_ENTRY _ZTI7S3551C7[];
extern  VTBL_ENTRY _ZTV7S3551C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C7[];
extern Class_Descriptor cd_S3551C8;
extern VTBL_ENTRY _ZTI7S3551C8[];
extern  VTBL_ENTRY _ZTV7S3551C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C8[];
extern Class_Descriptor cd_S3551C10;
extern VTBL_ENTRY _ZTI8S3551C10[];
extern  VTBL_ENTRY _ZTV8S3551C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3551C10[];
extern Class_Descriptor cd_S3551C6;
extern VTBL_ENTRY _ZTI7S3551C6[];
extern  VTBL_ENTRY _ZTV7S3551C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C6[];
extern Class_Descriptor cd_S3551C10;
extern VTBL_ENTRY _ZTI8S3551C10[];
extern  VTBL_ENTRY _ZTV8S3551C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3551C10[];
extern Class_Descriptor cd_S3551C3;
extern VTBL_ENTRY _ZTI7S3551C3[];
extern  VTBL_ENTRY _ZTV7S3551C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C3[];
extern Class_Descriptor cd_S3551C2;
extern VTBL_ENTRY _ZTI7S3551C2[];
extern  VTBL_ENTRY _ZTV7S3551C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C2[];
static Base_Class bases_S3551C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(3880,2716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3551C4,    ABISELECT(3744,2616), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3551C4,    ABISELECT(3936,2756), //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
    3, //immediately_derived
  0, 0},
  {&cd_S3551C7,    ABISELECT(3936,2756), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3551C8,    ABISELECT(4344,3048), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3551C10,    ABISELECT(4448,3120), //bcp->offset
    38, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3551C6,    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
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3551C10,    ABISELECT(1088,752), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3551C3,    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
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3551C2,    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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3551C1[];
extern void _ZN7S3551C62v9Ev();
extern void _ZN7S3551C63v10Ev();
extern void _ZN7S3551C23v11Ev();
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY vtc_S3551C1[] = {
  ABISELECT(3744,2616),
  ABISELECT(4448,3120),
  ABISELECT(4344,3048),
  ABISELECT(3880,2716),
  ABISELECT(3936,2756),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C1[0]),
  (VTBL_ENTRY)&_ZN7S3551C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3551C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3551C23v11Ev,
  ABISELECT(2656,1864),
  ABISELECT(2792,1964),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3551C1[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
  ABISELECT(136,100),
  ABISELECT(-3744,-2616),
  (VTBL_ENTRY)&(_ZTI7S3551C1[0]),
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3936,-2756),
  (VTBL_ENTRY)&(_ZTI7S3551C1[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-4344,-3048),
  (VTBL_ENTRY)&(_ZTI7S3551C1[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-4448,-3120),
  (VTBL_ENTRY)&(_ZTI7S3551C1[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
extern VTBL_ENTRY _ZTV7S3551C1[];
extern void _ZN7S3551C62v9Ev();
extern void _ZN7S3551C63v10Ev();
extern void _ZN7S3551C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C2__7S3551C1[] = {
  ABISELECT(3744,2616),
  ABISELECT(4448,3120),
  ABISELECT(4344,3048),
  ABISELECT(3880,2716),
  ABISELECT(3936,2756),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C2[0]),
  (VTBL_ENTRY)&_ZN7S3551C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3551C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3551C23v11Ev,
};
extern void _ZN7S3551C62v9Ev();
extern void _ZN7S3551C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C37S3551C2__7S3551C1[] = {
  ABISELECT(3744,2616),
  ABISELECT(4448,3120),
  ABISELECT(4344,3048),
  ABISELECT(3880,2716),
  ABISELECT(3936,2756),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN7S3551C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3551C63v10Ev,
};
extern void _ZN7S3551C62v9Ev();
extern void _ZN7S3551C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C67S3551C37S3551C2__7S3551C1[] = {
  ABISELECT(3744,2616),
  ABISELECT(4448,3120),
  ABISELECT(4344,3048),
  ABISELECT(3880,2716),
  ABISELECT(3936,2756),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN7S3551C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3551C63v10Ev,
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C67S3551C37S3551C2__7S3551C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3936,-2756),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C8__7S3551C67S3551C37S3551C2__7S3551C1[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-4344,-3048),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__7S3551C67S3551C37S3551C2__7S3551C1[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-4448,-3120),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__A1__7S3551C67S3551C37S3551C2__7S3551C1[] = {
  ABISELECT(136,100),
  ABISELECT(-3744,-2616),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C107S3551C37S3551C2__A1__7S3551C1[] = {
  ABISELECT(2656,1864),
  ABISELECT(2792,1964),
  0,
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__8S3551C107S3551C37S3551C2__A1__7S3551C1[] = {
  ABISELECT(136,100),
  ABISELECT(-2656,-1864),
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__7S3551C37S3551C2__7S3551C1[] = {
  ABISELECT(136,100),
  ABISELECT(-3744,-2616),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C37S3551C2__7S3551C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3936,-2756),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C8__7S3551C37S3551C2__7S3551C1[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-4344,-3048),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__7S3551C37S3551C2__7S3551C1[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-4448,-3120),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__A__7S3551C37S3551C2__7S3551C1[] = {
  ABISELECT(2656,1864),
  ABISELECT(2792,1964),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__7S3551C2__7S3551C1[] = {
  ABISELECT(136,100),
  ABISELECT(-3744,-2616),
  (VTBL_ENTRY)&(_ZTI7S3551C2[0]),
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C2__7S3551C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3936,-2756),
  (VTBL_ENTRY)&(_ZTI7S3551C2[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C8__7S3551C2__7S3551C1[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-4344,-3048),
  (VTBL_ENTRY)&(_ZTI7S3551C2[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__7S3551C2__7S3551C1[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-4448,-3120),
  (VTBL_ENTRY)&(_ZTI7S3551C2[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C107S3551C3__A1__7S3551C2__7S3551C1[] = {
  ABISELECT(2656,1864),
  ABISELECT(2792,1964),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3551C2[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__7S3551C1[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C4[0]),
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C7[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C47S3551C7__A1__7S3551C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C4[0]),
};
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C8__7S3551C1[] = {
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C8[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C8__7S3551C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI7S3551C8[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__7S3551C1[] = {
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  0,
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__8S3551C10__7S3551C1[] = {
  ABISELECT(136,100),
  ABISELECT(704,504),
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
};
static  VTT_ENTRY vtt_S3551C1[] = {
  {&(_ZTV7S3551C1[7]),  7,46},
  {&(_tg__ZTV7S3551C2__7S3551C1[7]),  7,10},
  {&(_tg__ZTV7S3551C37S3551C2__7S3551C1[7]),  7,9},
  {&(_tg__ZTV7S3551C67S3551C37S3551C2__7S3551C1[7]),  7,9},
  {&(_tg__ZTV7S3551C7__7S3551C67S3551C37S3551C2__7S3551C1[6]),  6,9},
  {&(_tg__ZTV7S3551C8__7S3551C67S3551C37S3551C2__7S3551C1[7]),  7,10},
  {&(_tg__ZTV8S3551C10__7S3551C67S3551C37S3551C2__7S3551C1[6]),  6,8},
  {&(_tg__ZTV7S3551C4__A1__7S3551C67S3551C37S3551C2__7S3551C1[3]),  3,3},
  {&(_tg__ZTV8S3551C107S3551C37S3551C2__A1__7S3551C1[4]),  4,6},
  {&(_tg__ZTV7S3551C4__8S3551C107S3551C37S3551C2__A1__7S3551C1[3]),  3,3},
  {&(_tg__ZTV7S3551C4__7S3551C37S3551C2__7S3551C1[3]),  3,3},
  {&(_tg__ZTV7S3551C7__7S3551C37S3551C2__7S3551C1[6]),  6,9},
  {&(_tg__ZTV7S3551C8__7S3551C37S3551C2__7S3551C1[7]),  7,10},
  {&(_tg__ZTV8S3551C10__7S3551C37S3551C2__7S3551C1[6]),  6,8},
  {&(_tg__ZTV8S3551C10__A__7S3551C37S3551C2__7S3551C1[4]),  4,6},
  {&(_tg__ZTV7S3551C4__7S3551C2__7S3551C1[3]),  3,3},
  {&(_tg__ZTV7S3551C7__7S3551C2__7S3551C1[6]),  6,9},
  {&(_tg__ZTV7S3551C8__7S3551C2__7S3551C1[7]),  7,10},
  {&(_tg__ZTV8S3551C10__7S3551C2__7S3551C1[6]),  6,8},
  {&(_tg__ZTV8S3551C107S3551C3__A1__7S3551C2__7S3551C1[4]),  4,6},
  {&(_ZTV7S3551C1[19]),  19,46},
  {&(_ZTV7S3551C1[25]),  25,46},
  {&(_ZTV7S3551C1[35]),  35,46},
  {&(_ZTV7S3551C1[44]),  44,46},
  {&(_ZTV7S3551C1[14]),  14,46},
  {&(_tg__ZTV7S3551C4__7S3551C1[3]),  3,3},
  {&(_tg__ZTV7S3551C7__7S3551C1[3]),  3,6},
  {&(_tg__ZTV7S3551C47S3551C7__A1__7S3551C1[3]),  3,3},
  {&(_tg__ZTV7S3551C8__7S3551C1[4]),  4,7},
  {&(_tg__ZTV7S3551C7__7S3551C8__7S3551C1[6]),  6,9},
  {&(_tg__ZTV8S3551C10__7S3551C1[4]),  4,6},
  {&(_tg__ZTV7S3551C4__8S3551C10__7S3551C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3551C1[];
extern  VTBL_ENTRY _ZTV7S3551C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C1[];
Class_Descriptor cd_S3551C1 = {  "S3551C1", // class name
  bases_S3551C1, 10,
  &(vtc_S3551C1[0]), // expected_vtbl_contents
  &(vtt_S3551C1[0]), // expected_vtt_contents
  ABISELECT(4688,3284), // object size
  NSPAIRA(_ZTI7S3551C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3551C1),46, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3551C1),32, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6705C2  {
  virtual void  v3(); // _ZN7S6705C22v3Ev
  virtual void  v4(); // _ZN7S6705C22v4Ev
  virtual void  v5(); // _ZN7S6705C22v5Ev
  ~S6705C2(); // tgen
  S6705C2(); // tgen
};
//SIG(-1 S6705C2) C1{ v1 v2 v3}


void  S6705C2 ::v3(){vfunc_called(this, "_ZN7S6705C22v3Ev");}
void  S6705C2 ::v4(){vfunc_called(this, "_ZN7S6705C22v4Ev");}
void  S6705C2 ::v5(){vfunc_called(this, "_ZN7S6705C22v5Ev");}
S6705C2 ::~S6705C2(){ note_dtor("S6705C2", this);} // tgen
S6705C2 ::S6705C2(){ note_ctor("S6705C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6705C2C1Ev();
extern void _ZN7S6705C2D1Ev();
Name_Map name_map_S6705C2[] = {
  NSPAIR(_ZN7S6705C2C1Ev),
  NSPAIR(_ZN7S6705C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6705C2[];
extern void _ZN7S6705C22v3Ev();
extern void _ZN7S6705C22v4Ev();
extern void _ZN7S6705C22v5Ev();
static  VTBL_ENTRY vtc_S6705C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C2[0]),
  (VTBL_ENTRY)&_ZN7S6705C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6705C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6705C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S6705C2[];
extern  VTBL_ENTRY _ZTV7S6705C2[];
Class_Descriptor cd_S6705C2 = {  "S6705C2", // class name
  0,0,//no base classes
  &(vtc_S6705C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6705C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6705C2),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  S6705C4  {
  void *s6705c4f0[4];
  virtual void  v6(); // _ZN7S6705C42v6Ev
  virtual void  v7(); // _ZN7S6705C42v7Ev
  virtual void  v8(); // _ZN7S6705C42v8Ev
  virtual void  v9(); // _ZN7S6705C42v9Ev
  virtual void  v10(); // _ZN7S6705C43v10Ev
  virtual void  v11(); // _ZN7S6705C43v11Ev
  ~S6705C4(); // tgen
  S6705C4(); // tgen
};
//SIG(-1 S6705C4) C1{ v1 v2 v3 v4 v5 v6 Fp[4]}


void  S6705C4 ::v6(){vfunc_called(this, "_ZN7S6705C42v6Ev");}
void  S6705C4 ::v7(){vfunc_called(this, "_ZN7S6705C42v7Ev");}
void  S6705C4 ::v8(){vfunc_called(this, "_ZN7S6705C42v8Ev");}
void  S6705C4 ::v9(){vfunc_called(this, "_ZN7S6705C42v9Ev");}
void  S6705C4 ::v10(){vfunc_called(this, "_ZN7S6705C43v10Ev");}
void  S6705C4 ::v11(){vfunc_called(this, "_ZN7S6705C43v11Ev");}
S6705C4 ::~S6705C4(){ note_dtor("S6705C4", this);} // tgen
S6705C4 ::S6705C4(){ note_ctor("S6705C4", this);} // tgen

static void Test_S6705C4()
{
  extern Class_Descriptor cd_S6705C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S6705C4, buf);
    S6705C4 *dp, &lv = *(dp=new (buf) S6705C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S6705C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C4)");
    check_field_offset(lv, s6705c4f0, ABISELECT(8,4), "S6705C4.s6705c4f0");
    test_class_info(&lv, &cd_S6705C4);
    dp->~S6705C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C4(Test_S6705C4, "S6705C4", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S6705C4C1Ev();
extern void _ZN7S6705C4D1Ev();
Name_Map name_map_S6705C4[] = {
  NSPAIR(_ZN7S6705C4C1Ev),
  NSPAIR(_ZN7S6705C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6705C4[];
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
static  VTBL_ENTRY vtc_S6705C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C4[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
};
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
Class_Descriptor cd_S6705C4 = {  "S6705C4", // class name
  0,0,//no base classes
  &(vtc_S6705C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S6705C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6705C4),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  S6705C3  : S6705C4 {
  __tsi64 s6705c3f0;
  virtual  ~S6705C3(); // _ZN7S6705C3D1Ev
  virtual void  v12(); // _ZN7S6705C33v12Ev
  virtual void  v13(); // _ZN7S6705C33v13Ev
  S6705C3(); // tgen
};
//SIG(-1 S6705C3) C1{ BC2{ v3 v4 v5 v6 v7 v8 Fp[4]} vd v1 v2 FL}


 S6705C3 ::~S6705C3(){ note_dtor("S6705C3", this);}
void  S6705C3 ::v12(){vfunc_called(this, "_ZN7S6705C33v12Ev");}
void  S6705C3 ::v13(){vfunc_called(this, "_ZN7S6705C33v13Ev");}
S6705C3 ::S6705C3(){ note_ctor("S6705C3", this);} // tgen

static void Test_S6705C3()
{
  extern Class_Descriptor cd_S6705C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S6705C3, buf);
    S6705C3 *dp, &lv = *(dp=new (buf) S6705C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S6705C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C3)");
    check_base_class_offset(lv, (S6705C4*), 0, "S6705C3");
    check_field_offset(lv, s6705c3f0, ABISELECT(40,20), "S6705C3.s6705c3f0");
    test_class_info(&lv, &cd_S6705C3);
    dp->~S6705C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C3(Test_S6705C3, "S6705C3", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S6705C3C1Ev();
extern void _ZN7S6705C3D1Ev();
Name_Map name_map_S6705C3[] = {
  NSPAIR(_ZN7S6705C3C1Ev),
  NSPAIR(_ZN7S6705C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
static Base_Class bases_S6705C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6705C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6705C3[];
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN7S6705C3D1Ev();
extern void _ZN7S6705C3D0Ev();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY vtc_S6705C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C3[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&_ZN7S6705C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
Class_Descriptor cd_S6705C3 = {  "S6705C3", // class name
  bases_S6705C3, 1,
  &(vtc_S6705C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S6705C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6705C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6705C8  {
  int s6705c8f0;
  virtual void  v14(); // _ZN7S6705C83v14Ev
  ~S6705C8(); // tgen
  S6705C8(); // tgen
};
//SIG(-1 S6705C8) C1{ v1 Fi}


void  S6705C8 ::v14(){vfunc_called(this, "_ZN7S6705C83v14Ev");}
S6705C8 ::~S6705C8(){ note_dtor("S6705C8", this);} // tgen
S6705C8 ::S6705C8(){ note_ctor("S6705C8", this);} // tgen

static void Test_S6705C8()
{
  extern Class_Descriptor cd_S6705C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6705C8, buf);
    S6705C8 *dp, &lv = *(dp=new (buf) S6705C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6705C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C8)");
    check_field_offset(lv, s6705c8f0, ABISELECT(8,4), "S6705C8.s6705c8f0");
    test_class_info(&lv, &cd_S6705C8);
    dp->~S6705C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C8(Test_S6705C8, "S6705C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6705C8C1Ev();
extern void _ZN7S6705C8D1Ev();
Name_Map name_map_S6705C8[] = {
  NSPAIR(_ZN7S6705C8C1Ev),
  NSPAIR(_ZN7S6705C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6705C8[];
extern void _ZN7S6705C83v14Ev();
static  VTBL_ENTRY vtc_S6705C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C8[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
};
extern VTBL_ENTRY _ZTI7S6705C8[];
extern  VTBL_ENTRY _ZTV7S6705C8[];
Class_Descriptor cd_S6705C8 = {  "S6705C8", // class name
  0,0,//no base classes
  &(vtc_S6705C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6705C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6705C8),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6705C9  {
  short s6705c9f0:16;
  __tsi64 s6705c9f1;
  void *s6705c9f2[8];
  virtual void  v15(); // _ZN7S6705C93v15Ev
  virtual void  v16(); // _ZN7S6705C93v16Ev
  ~S6705C9(); // tgen
  S6705C9(); // tgen
};
//SIG(-1 S6705C9) C1{ v1 v2 Fs:16 FL Fp[8]}


void  S6705C9 ::v15(){vfunc_called(this, "_ZN7S6705C93v15Ev");}
void  S6705C9 ::v16(){vfunc_called(this, "_ZN7S6705C93v16Ev");}
S6705C9 ::~S6705C9(){ note_dtor("S6705C9", this);} // tgen
S6705C9 ::S6705C9(){ note_ctor("S6705C9", this);} // tgen

static void Test_S6705C9()
{
  extern Class_Descriptor cd_S6705C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S6705C9, buf);
    S6705C9 *dp, &lv = *(dp=new (buf) S6705C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S6705C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C9)");
    set_bf_and_test(lv, s6705c9f0, ABISELECT(8,4), 0, 16, 1, "S6705C9");
    set_bf_and_test(lv, s6705c9f0, ABISELECT(8,4), 0, 16, hide_sll(1LL<<15), "S6705C9");
    check_field_offset(lv, s6705c9f1, ABISELECT(16,8), "S6705C9.s6705c9f1");
    check_field_offset(lv, s6705c9f2, ABISELECT(24,16), "S6705C9.s6705c9f2");
    test_class_info(&lv, &cd_S6705C9);
    dp->~S6705C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C9(Test_S6705C9, "S6705C9", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN7S6705C9C1Ev();
extern void _ZN7S6705C9D1Ev();
Name_Map name_map_S6705C9[] = {
  NSPAIR(_ZN7S6705C9C1Ev),
  NSPAIR(_ZN7S6705C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6705C9[];
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
static  VTBL_ENTRY vtc_S6705C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C9[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
};
extern VTBL_ENTRY _ZTI7S6705C9[];
extern  VTBL_ENTRY _ZTV7S6705C9[];
Class_Descriptor cd_S6705C9 = {  "S6705C9", // class name
  0,0,//no base classes
  &(vtc_S6705C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI7S6705C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6705C9),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  S6705C10  {
  virtual void  v17(); // _ZN8S6705C103v17Ev
  ~S6705C10(); // tgen
  S6705C10(); // tgen
};
//SIG(-1 S6705C10) C1{ v1}


void  S6705C10 ::v17(){vfunc_called(this, "_ZN8S6705C103v17Ev");}
S6705C10 ::~S6705C10(){ note_dtor("S6705C10", this);} // tgen
S6705C10 ::S6705C10(){ note_ctor("S6705C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S6705C10C1Ev();
extern void _ZN8S6705C10D1Ev();
Name_Map name_map_S6705C10[] = {
  NSPAIR(_ZN8S6705C10C1Ev),
  NSPAIR(_ZN8S6705C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S6705C10[];
extern void _ZN8S6705C103v17Ev();
static  VTBL_ENTRY vtc_S6705C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6705C10[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
};
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
Class_Descriptor cd_S6705C10 = {  "S6705C10", // class name
  0,0,//no base classes
  &(vtc_S6705C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S6705C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S6705C10),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6705C7  : S6705C8 , S6705C9 , S6705C10 , virtual S6705C3 , S6705C4 {
  int s6705c7f0;
  virtual  ~S6705C7(); // _ZN7S6705C7D2Ev
  virtual void  v18(); // _ZN7S6705C73v18Ev
  virtual void  v19(); // _ZN7S6705C73v19Ev
  virtual void  v20(); // _ZN7S6705C73v20Ev
  S6705C7(); // tgen
};
//SIG(-1 S6705C7) C1{ BC2{ v4 Fi} BC3{ v5 v6 Fs:16 FL Fp[8]} BC4{ v7} VBC5{ BC6{ v8 v9 v10 v11 v12 v13 Fp[4]} vd v14 v15 FL} BC6 vd v1 v2 v3 Fi}


 S6705C7 ::~S6705C7(){ note_dtor("S6705C7", this);}
void  S6705C7 ::v18(){vfunc_called(this, "_ZN7S6705C73v18Ev");}
void  S6705C7 ::v19(){vfunc_called(this, "_ZN7S6705C73v19Ev");}
void  S6705C7 ::v20(){vfunc_called(this, "_ZN7S6705C73v20Ev");}
S6705C7 ::S6705C7(){ note_ctor("S6705C7", this);} // tgen

static void Test_S6705C7()
{
  extern Class_Descriptor cd_S6705C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,29)];
    init_test(&cd_S6705C7, buf);
    S6705C7 *dp, &lv = *(dp=new (buf) S6705C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,112), "sizeof(S6705C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C7)");
    check_base_class_offset(lv, (S6705C8*), 0, "S6705C7");
    check_base_class_offset(lv, (S6705C9*), ABISELECT(16,8), "S6705C7");
    check_base_class_offset(lv, (S6705C10*), ABISELECT(104,56), "S6705C7");
    check_base_class_offset(lv, (S6705C4*)(S6705C3*), ABISELECT(160,84), "S6705C7");
    check_base_class_offset(lv, (S6705C3*), ABISELECT(160,84), "S6705C7");
    /*is_ambiguous_... S6705C7::S6705C4 */ AMB_check_base_class_offset(lv, (S6705C4*), ABISELECT(112,60), "S6705C7");
    check_field_offset(lv, s6705c7f0, ABISELECT(152,80), "S6705C7.s6705c7f0");
    test_class_info(&lv, &cd_S6705C7);
    dp->~S6705C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C7(Test_S6705C7, "S6705C7", ABISELECT(208,112));

#else // __cplusplus

extern void _ZN7S6705C7C1Ev();
extern void _ZN7S6705C7D2Ev();
Name_Map name_map_S6705C7[] = {
  NSPAIR(_ZN7S6705C7C1Ev),
  NSPAIR(_ZN7S6705C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6705C8;
extern VTBL_ENTRY _ZTI7S6705C8[];
extern  VTBL_ENTRY _ZTV7S6705C8[];
extern Class_Descriptor cd_S6705C9;
extern VTBL_ENTRY _ZTI7S6705C9[];
extern  VTBL_ENTRY _ZTV7S6705C9[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
static Base_Class bases_S6705C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6705C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6705C9,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6705C10,    ABISELECT(104,56), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6705C4,    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
    4, //immediately_derived
  0, 0},
  {&cd_S6705C3,    ABISELECT(160,84), //bcp->offset
    24, //bcp->virtual_function_table_offset
    11, //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_S6705C4,    ABISELECT(112,60), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6705C7[];
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C7D1Ev();
extern void _ZN7S6705C7D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
extern void _ZN8S6705C103v17Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev)();
extern void ABISELECT(_ZThn160_N7S6705C7D1Ev,_ZThn84_N7S6705C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev)();
extern void ABISELECT(_ZThn160_N7S6705C7D0Ev,_ZThn84_N7S6705C7D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY vtc_S6705C7[] = {
  ABISELECT(160,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  0,
  0,
  ABISELECT(-160,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern VTBL_ENTRY _ZTV7S6705C7[];
static  VTT_ENTRY vtt_S6705C7[] = {
  {&(_ZTV7S6705C7[3]),  3,45},
  {&(_ZTV7S6705C7[35]),  35,45},
};
extern VTBL_ENTRY _ZTI7S6705C7[];
extern  VTBL_ENTRY _ZTV7S6705C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C7[];
static VTBL_ENTRY alt_thunk_names9[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S6705C7D0Ev,_ZThn84_N7S6705C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S6705C7D1Ev,_ZThn84_N7S6705C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6705C7 = {  "S6705C7", // class name
  bases_S6705C7, 6,
  &(vtc_S6705C7[0]), // expected_vtbl_contents
  &(vtt_S6705C7[0]), // expected_vtt_contents
  ABISELECT(208,112), // object size
  NSPAIRA(_ZTI7S6705C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6705C7),45, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6705C7),2, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names9,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6705C6  : S6705C7 {
  int s6705c6f0[7];
  virtual void  v21(); // _ZN7S6705C63v21Ev
  virtual void  v22(); // _ZN7S6705C63v22Ev
  virtual void  v23(); // _ZN7S6705C63v23Ev
  virtual void  v24(); // _ZN7S6705C63v24Ev
  ~S6705C6(); // tgen
  S6705C6(); // tgen
};
//SIG(-1 S6705C6) C1{ BC2{ BC3{ v5 Fi} BC4{ v6 v7 Fs:16 FL Fp[8]} BC5{ v8} VBC6{ BC7{ v9 v10 v11 v12 v13 v14 Fp[4]} vd v15 v16 FL} BC7 vd v17 v18 v19 Fi} v1 v2 v3 v4 Fi[7]}


void  S6705C6 ::v21(){vfunc_called(this, "_ZN7S6705C63v21Ev");}
void  S6705C6 ::v22(){vfunc_called(this, "_ZN7S6705C63v22Ev");}
void  S6705C6 ::v23(){vfunc_called(this, "_ZN7S6705C63v23Ev");}
void  S6705C6 ::v24(){vfunc_called(this, "_ZN7S6705C63v24Ev");}
S6705C6 ::~S6705C6(){ note_dtor("S6705C6", this);} // tgen
S6705C6 ::S6705C6(){ note_ctor("S6705C6", this);} // tgen

static void Test_S6705C6()
{
  extern Class_Descriptor cd_S6705C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,36)];
    init_test(&cd_S6705C6, buf);
    S6705C6 *dp, &lv = *(dp=new (buf) S6705C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,140), "sizeof(S6705C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C6)");
    check_base_class_offset(lv, (S6705C8*)(S6705C7*), 0, "S6705C6");
    check_base_class_offset(lv, (S6705C9*)(S6705C7*), ABISELECT(16,8), "S6705C6");
    check_base_class_offset(lv, (S6705C10*)(S6705C7*), ABISELECT(104,56), "S6705C6");
    check_base_class_offset(lv, (S6705C4*)(S6705C3*), ABISELECT(184,112), "S6705C6");
    check_base_class_offset(lv, (S6705C3*)(S6705C7*), ABISELECT(184,112), "S6705C6");
    /*is_ambiguous_... S6705C7::S6705C4 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C7*), ABISELECT(112,60), "S6705C6");
    check_base_class_offset(lv, (S6705C7*), 0, "S6705C6");
    check_field_offset(lv, s6705c6f0, ABISELECT(156,84), "S6705C6.s6705c6f0");
    test_class_info(&lv, &cd_S6705C6);
    dp->~S6705C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C6(Test_S6705C6, "S6705C6", ABISELECT(232,140));

#else // __cplusplus

extern void _ZN7S6705C6C1Ev();
extern void _ZN7S6705C6D1Ev();
Name_Map name_map_S6705C6[] = {
  NSPAIR(_ZN7S6705C6C1Ev),
  NSPAIR(_ZN7S6705C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6705C8;
extern VTBL_ENTRY _ZTI7S6705C8[];
extern  VTBL_ENTRY _ZTV7S6705C8[];
extern Class_Descriptor cd_S6705C9;
extern VTBL_ENTRY _ZTI7S6705C9[];
extern  VTBL_ENTRY _ZTV7S6705C9[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C7;
extern VTBL_ENTRY _ZTI7S6705C7[];
extern  VTBL_ENTRY _ZTV7S6705C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C7[];
static Base_Class bases_S6705C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6705C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6705C9,    ABISELECT(16,8), //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
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6705C10,    ABISELECT(104,56), //bcp->offset
    17, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S6705C4,    ABISELECT(184,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
    4, //immediately_derived
  0, 0},
  {&cd_S6705C3,    ABISELECT(184,112), //bcp->offset
    28, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S6705C4,    ABISELECT(112,60), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6705C7,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6705C6[];
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C6D1Ev();
extern void _ZN7S6705C6D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C63v21Ev();
extern void _ZN7S6705C63v22Ev();
extern void _ZN7S6705C63v23Ev();
extern void _ZN7S6705C63v24Ev();
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
extern void _ZN8S6705C103v17Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev)();
extern void ABISELECT(_ZThn184_N7S6705C6D1Ev,_ZThn112_N7S6705C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev)();
extern void ABISELECT(_ZThn184_N7S6705C6D0Ev,_ZThn112_N7S6705C6D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY vtc_S6705C6[] = {
  ABISELECT(184,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C6D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v24Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  0,
  0,
  ABISELECT(-184,-112),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-112),
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern VTBL_ENTRY _ZTV7S6705C6[];
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C7D1Ev();
extern void _ZN7S6705C7D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C7__7S6705C6[] = {
  ABISELECT(184,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev)();
extern void ABISELECT(_ZThn184_N7S6705C7D1Ev,_ZThn112_N7S6705C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev)();
extern void ABISELECT(_ZThn184_N7S6705C7D0Ev,_ZThn112_N7S6705C7D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C7__7S6705C6[] = {
  0,
  0,
  ABISELECT(-184,-112),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-112),
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
static  VTT_ENTRY vtt_S6705C6[] = {
  {&(_ZTV7S6705C6[3]),  3,49},
  {&(_tg__ZTV7S6705C7__7S6705C6[3]),  3,9},
  {&(_tg__ZTV7S6705C3__7S6705C7__7S6705C6[11]),  11,21},
  {&(_ZTV7S6705C6[39]),  39,49},
};
extern VTBL_ENTRY _ZTI7S6705C6[];
extern  VTBL_ENTRY _ZTV7S6705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C6[];
static VTBL_ENTRY alt_thunk_names10[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C7D0Ev,_ZThn112_N7S6705C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C7D1Ev,_ZThn112_N7S6705C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C6D0Ev,_ZThn112_N7S6705C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C6D1Ev,_ZThn112_N7S6705C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6705C6 = {  "S6705C6", // class name
  bases_S6705C6, 7,
  &(vtc_S6705C6[0]), // expected_vtbl_contents
  &(vtt_S6705C6[0]), // expected_vtt_contents
  ABISELECT(232,140), // object size
  NSPAIRA(_ZTI7S6705C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6705C6),49, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6705C6),4, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names10,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6705C12  {
  ::S6705C10 s6705c12f0;
  int s6705c12f1;
  ::S1400C6 s6705c12f2[6];
  virtual void  v25(); // _ZN8S6705C123v25Ev
  virtual void  v26(); // _ZN8S6705C123v26Ev
  virtual void  v27(); // _ZN8S6705C123v27Ev
  virtual void  v28(); // _ZN8S6705C123v28Ev
  ~S6705C12(); // tgen
  S6705C12(); // tgen
};
//SIG(-1 S6705C12) C1{ v1 v2 v3 v4 FC2{ v5} Fi FU3{ m FL[4] FL}[6]}


void  S6705C12 ::v25(){vfunc_called(this, "_ZN8S6705C123v25Ev");}
void  S6705C12 ::v26(){vfunc_called(this, "_ZN8S6705C123v26Ev");}
void  S6705C12 ::v27(){vfunc_called(this, "_ZN8S6705C123v27Ev");}
void  S6705C12 ::v28(){vfunc_called(this, "_ZN8S6705C123v28Ev");}
S6705C12 ::~S6705C12(){ note_dtor("S6705C12", this);} // tgen
S6705C12 ::S6705C12(){ note_ctor("S6705C12", this);} // tgen

static void Test_S6705C12()
{
  extern Class_Descriptor cd_S6705C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,52)];
    init_test(&cd_S6705C12, buf);
    S6705C12 *dp, &lv = *(dp=new (buf) S6705C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,204), "sizeof(S6705C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C12)");
    check_field_offset(lv, s6705c12f0, ABISELECT(8,4), "S6705C12.s6705c12f0");
    check_field_offset(lv, s6705c12f1, ABISELECT(16,8), "S6705C12.s6705c12f1");
    check_field_offset(lv, s6705c12f2, ABISELECT(24,12), "S6705C12.s6705c12f2");
    test_class_info(&lv, &cd_S6705C12);
    dp->~S6705C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C12(Test_S6705C12, "S6705C12", ABISELECT(216,204));

#else // __cplusplus

extern void _ZN8S6705C12C1Ev();
extern void _ZN8S6705C12D1Ev();
Name_Map name_map_S6705C12[] = {
  NSPAIR(_ZN8S6705C12C1Ev),
  NSPAIR(_ZN8S6705C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S6705C12[];
extern void _ZN8S6705C123v25Ev();
extern void _ZN8S6705C123v26Ev();
extern void _ZN8S6705C123v27Ev();
extern void _ZN8S6705C123v28Ev();
static  VTBL_ENTRY vtc_S6705C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6705C12[0]),
  (VTBL_ENTRY)&_ZN8S6705C123v25Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v26Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v27Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v28Ev,
};
extern VTBL_ENTRY _ZTI8S6705C12[];
extern  VTBL_ENTRY _ZTV8S6705C12[];
Class_Descriptor cd_S6705C12 = {  "S6705C12", // class name
  0,0,//no base classes
  &(vtc_S6705C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,204), // object size
  NSPAIRA(_ZTI8S6705C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S6705C12),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  S6705C11  : virtual S6705C7 , virtual S6705C12 , S6705C3 , S6705C10 {
  virtual void  v29(); // _ZN8S6705C113v29Ev
  virtual void  v30(); // _ZN8S6705C113v30Ev
  virtual void  v31(); // _ZN8S6705C113v31Ev
  ~S6705C11(); // tgen
  S6705C11(); // tgen
};
//SIG(-1 S6705C11) C1{ VBC2{ BC3{ v4 Fi} BC4{ v5 v6 Fs:16 FL Fp[8]} BC5{ v7} VBC6{ BC7{ v8 v9 v10 v11 v12 v13 Fp[4]} vd v14 v15 FL} BC7 vd v16 v17 v18 Fi} VBC8{ v19 v20 v21 v22 FC5 Fi FU9{ m FL[4] FL}[6]} BC6 BC5 v1 v2 v3}


void  S6705C11 ::v29(){vfunc_called(this, "_ZN8S6705C113v29Ev");}
void  S6705C11 ::v30(){vfunc_called(this, "_ZN8S6705C113v30Ev");}
void  S6705C11 ::v31(){vfunc_called(this, "_ZN8S6705C113v31Ev");}
S6705C11 ::~S6705C11(){ note_dtor("S6705C11", this);} // tgen
S6705C11 ::S6705C11(){ note_ctor("S6705C11", this);} // tgen

static void Test_S6705C11()
{
  extern Class_Descriptor cd_S6705C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(61,88)];
    init_test(&cd_S6705C11, buf);
    S6705C11 *dp, &lv = *(dp=new (buf) S6705C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(480,348), "sizeof(S6705C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C11)");
    check_base_class_offset(lv, (S6705C8*)(S6705C7*), ABISELECT(56,32), "S6705C11");
    check_base_class_offset(lv, (S6705C9*)(S6705C7*), ABISELECT(72,40), "S6705C11");
    check_base_class_offset(lv, (S6705C10*)(S6705C7*), ABISELECT(160,88), "S6705C11");
    /*is_ambiguous_... S6705C11::S6705C3 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C3*), ABISELECT(216,116), "S6705C11");
    check_base_class_offset(lv, (S6705C3*)(S6705C7*), ABISELECT(216,116), "S6705C11");
    /*is_ambiguous_... S6705C7::S6705C4 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C7*), ABISELECT(168,92), "S6705C11");
    check_base_class_offset(lv, (S6705C7*), ABISELECT(56,32), "S6705C11");
    check_base_class_offset(lv, (S6705C12*), ABISELECT(264,144), "S6705C11");
    /*is_ambiguous_... S6705C11::S6705C3 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C3*), 0, "S6705C11");
    /*is_ambiguous_... S6705C11::S6705C3 */ AMB_check_base_class_offset(lv, (S6705C3*), 0, "S6705C11");
    /*is_ambiguous_... S6705C11::S6705C10 */ AMB_check_base_class_offset(lv, (S6705C10*), ABISELECT(48,28), "S6705C11");
    test_class_info(&lv, &cd_S6705C11);
    dp->~S6705C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C11(Test_S6705C11, "S6705C11", ABISELECT(480,348));

#else // __cplusplus

extern void _ZN8S6705C11C1Ev();
extern void _ZN8S6705C11D1Ev();
Name_Map name_map_S6705C11[] = {
  NSPAIR(_ZN8S6705C11C1Ev),
  NSPAIR(_ZN8S6705C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6705C8;
extern VTBL_ENTRY _ZTI7S6705C8[];
extern  VTBL_ENTRY _ZTV7S6705C8[];
extern Class_Descriptor cd_S6705C9;
extern VTBL_ENTRY _ZTI7S6705C9[];
extern  VTBL_ENTRY _ZTV7S6705C9[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C7;
extern VTBL_ENTRY _ZTI7S6705C7[];
extern  VTBL_ENTRY _ZTV7S6705C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C7[];
extern Class_Descriptor cd_S6705C12;
extern VTBL_ENTRY _ZTI8S6705C12[];
extern  VTBL_ENTRY _ZTV8S6705C12[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
static Base_Class bases_S6705C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6705C8,    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
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6705C9,    ABISELECT(72,40), //bcp->offset
    44, //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
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6705C10,    ABISELECT(160,88), //bcp->offset
    48, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6705C4,    ABISELECT(216,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
    4, //immediately_derived
  0, 0},
  {&cd_S6705C3,    ABISELECT(216,116), //bcp->offset
    59, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S6705C4,    ABISELECT(168,92), //bcp->offset
    51, //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
    6, //immediately_derived
  0, 0},
  {&cd_S6705C7,    ABISELECT(56,32), //bcp->offset
    21, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6705C12,    ABISELECT(264,144), //bcp->offset
    80, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6705C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6705C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6705C10,    ABISELECT(48,28), //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
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6705C11[];
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN8S6705C11D1Ev();
extern void _ZN8S6705C11D0Ev();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN8S6705C113v29Ev();
extern void _ZN8S6705C113v30Ev();
extern void _ZN8S6705C113v31Ev();
extern void _ZN8S6705C103v17Ev();
extern void _ZN7S6705C83v14Ev();
extern void ABISELECT(_ZTv0_n40_N8S6705C11D1Ev,_ZTv0_n20_N8S6705C11D1Ev)();
extern void ABISELECT(_ZThn56_N8S6705C11D1Ev,_ZThn32_N8S6705C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6705C11D0Ev,_ZTv0_n20_N8S6705C11D0Ev)();
extern void ABISELECT(_ZThn56_N8S6705C11D0Ev,_ZThn32_N8S6705C11D0Ev)() __attribute__((weak));
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
extern void _ZN8S6705C103v17Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N8S6705C11D1Ev,_ZTv0_n36_N8S6705C11D1Ev)();
extern void ABISELECT(_ZThn216_N8S6705C11D1Ev,_ZThn116_N8S6705C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S6705C11D0Ev,_ZTv0_n36_N8S6705C11D0Ev)();
extern void ABISELECT(_ZThn216_N8S6705C11D0Ev,_ZThn116_N8S6705C11D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN8S6705C123v25Ev();
extern void _ZN8S6705C123v26Ev();
extern void _ZN8S6705C123v27Ev();
extern void _ZN8S6705C123v28Ev();
static  VTBL_ENTRY vtc_S6705C11[] = {
  ABISELECT(264,144),
  ABISELECT(216,116),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&_ZN8S6705C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6705C11D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v29Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v30Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v31Ev,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-56,-32),
  0,
  ABISELECT(160,84),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6705C11D1Ev,_ZTv0_n20_N8S6705C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6705C11D0Ev,_ZTv0_n20_N8S6705C11D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
  ABISELECT(-168,-92),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  0,
  0,
  ABISELECT(-216,-116),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-116),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6705C11D1Ev,_ZTv0_n36_N8S6705C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6705C11D0Ev,_ZTv0_n36_N8S6705C11D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-264,-144),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN8S6705C123v25Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v26Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v27Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v28Ev,
};
extern VTBL_ENTRY _ZTV8S6705C11[];
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C7D1Ev();
extern void _ZN7S6705C7D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C7__8S6705C11[] = {
  ABISELECT(160,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev)();
extern void ABISELECT(_ZThn160_N7S6705C7D1Ev,_ZThn84_N7S6705C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev)();
extern void ABISELECT(_ZThn160_N7S6705C7D0Ev,_ZThn84_N7S6705C7D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C7__8S6705C11[] = {
  0,
  0,
  ABISELECT(-160,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
static  VTT_ENTRY vtt_S6705C11[] = {
  {&(_ZTV8S6705C11[5]),  5,90},
  {&(_ZTV8S6705C11[38]),  38,90},
  {&(_ZTV8S6705C11[46]),  46,90},
  {&(_ZTV8S6705C11[50]),  50,90},
  {&(_ZTV8S6705C11[70]),  70,90},
  {&(_ZTV8S6705C11[53]),  53,90},
  {&(_ZTV8S6705C11[86]),  86,90},
  {&(_tg__ZTV7S6705C7__8S6705C11[3]),  3,9},
  {&(_tg__ZTV7S6705C3__7S6705C7__8S6705C11[11]),  11,21},
};
extern VTBL_ENTRY _ZTI8S6705C11[];
extern  VTBL_ENTRY _ZTV8S6705C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6705C11[];
static VTBL_ENTRY alt_thunk_names11[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S6705C7D0Ev,_ZThn84_N7S6705C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S6705C7D1Ev,_ZThn84_N7S6705C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6705C11D0Ev,_ZTv0_n36_N8S6705C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S6705C11D0Ev,_ZThn116_N8S6705C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6705C11D1Ev,_ZTv0_n36_N8S6705C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S6705C11D1Ev,_ZThn116_N8S6705C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6705C11D0Ev,_ZTv0_n20_N8S6705C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S6705C11D0Ev,_ZThn32_N8S6705C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6705C11D1Ev,_ZTv0_n20_N8S6705C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S6705C11D1Ev,_ZThn32_N8S6705C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6705C11 = {  "S6705C11", // class name
  bases_S6705C11, 11,
  &(vtc_S6705C11[0]), // expected_vtbl_contents
  &(vtt_S6705C11[0]), // expected_vtt_contents
  ABISELECT(480,348), // object size
  NSPAIRA(_ZTI8S6705C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S6705C11),90, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6705C11),9, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names11,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6705C5  : virtual S6705C6 , S6705C11 {
  virtual  ~S6705C5(); // _ZN7S6705C5D2Ev
  virtual void  v32(); // _ZN7S6705C53v32Ev
  virtual void  v33(); // _ZN7S6705C53v33Ev
  virtual void  v34(); // _ZN7S6705C53v34Ev
  virtual void  v35(); // _ZN7S6705C53v35Ev
  virtual void  v36(); // _ZN7S6705C53v36Ev
  virtual void  v37(); // _ZN7S6705C53v37Ev
  S6705C5(); // tgen
};
//SIG(-1 S6705C5) C1{ VBC2{ BC3{ BC4{ v7 Fi} BC5{ v8 v9 Fs:16 FL Fp[8]} BC6{ v10} VBC7{ BC8{ v11 v12 v13 v14 v15 v16 Fp[4]} vd v17 v18 FL} BC8 vd v19 v20 v21 Fi} v22 v23 v24 v25 Fi[7]} BC9{ VBC3 VBC10{ v26 v27 v28 v29 FC6 Fi FU11{ m FL[4] FL}[6]} BC7 BC6 v30 v31 v32} vd v1 v2 v3 v4 v5 v6}


 S6705C5 ::~S6705C5(){ note_dtor("S6705C5", this);}
void  S6705C5 ::v32(){vfunc_called(this, "_ZN7S6705C53v32Ev");}
void  S6705C5 ::v33(){vfunc_called(this, "_ZN7S6705C53v33Ev");}
void  S6705C5 ::v34(){vfunc_called(this, "_ZN7S6705C53v34Ev");}
void  S6705C5 ::v35(){vfunc_called(this, "_ZN7S6705C53v35Ev");}
void  S6705C5 ::v36(){vfunc_called(this, "_ZN7S6705C53v36Ev");}
void  S6705C5 ::v37(){vfunc_called(this, "_ZN7S6705C53v37Ev");}
S6705C5 ::S6705C5(){ note_ctor("S6705C5", this);} // tgen

static void Test_S6705C5()
{
  extern Class_Descriptor cd_S6705C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(84,116)];
    init_test(&cd_S6705C5, buf);
    S6705C5 *dp, &lv = *(dp=new (buf) S6705C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(664,460), "sizeof(S6705C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C5)");
    check_base_class_offset(lv, (S6705C8*)(S6705C7*)(S6705C6*), ABISELECT(56,32), "S6705C5");
    check_base_class_offset(lv, (S6705C9*)(S6705C7*)(S6705C6*), ABISELECT(72,40), "S6705C5");
    check_base_class_offset(lv, (S6705C10*)(S6705C7*)(S6705C6*), ABISELECT(160,88), "S6705C5");
    /*is_ambiguous_... S6705C5::S6705C3 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C3*), ABISELECT(240,144), "S6705C5");
    check_base_class_offset(lv, (S6705C3*)(S6705C7*)(S6705C6*), ABISELECT(240,144), "S6705C5");
    /*is_ambiguous_... S6705C5::S6705C7 */ AMB_check_base_class_offset(lv, (S6705C3*)(S6705C7*), ABISELECT(240,144), "S6705C5");
    /*is_ambiguous_... S6705C7::S6705C4 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C7*)(S6705C6*), ABISELECT(168,92), "S6705C5");
    check_base_class_offset(lv, (S6705C7*)(S6705C6*), ABISELECT(56,32), "S6705C5");
    check_base_class_offset(lv, (S6705C6*), ABISELECT(56,32), "S6705C5");
    /*is_ambiguous_... S6705C5::S6705C7 */ AMB_check_base_class_offset(lv, (S6705C8*)(S6705C7*), ABISELECT(288,172), "S6705C5");
    /*is_ambiguous_... S6705C5::S6705C7 */ AMB_check_base_class_offset(lv, (S6705C9*)(S6705C7*), ABISELECT(304,180), "S6705C5");
    /*is_ambiguous_... S6705C5::S6705C7 */ AMB_check_base_class_offset(lv, (S6705C10*)(S6705C7*), ABISELECT(392,228), "S6705C5");
    /*is_ambiguous_... S6705C5::S6705C7 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C7*), ABISELECT(400,232), "S6705C5");
    check_base_class_offset(lv, (S6705C7*)(S6705C11*), ABISELECT(288,172), "S6705C5");
    check_base_class_offset(lv, (S6705C12*)(S6705C11*), ABISELECT(448,256), "S6705C5");
    /*is_ambiguous_... S6705C11::S6705C3 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C3*)(S6705C11*), 0, "S6705C5");
    /*is_ambiguous_... S6705C11::S6705C3 */ AMB_check_base_class_offset(lv, (S6705C3*)(S6705C11*), 0, "S6705C5");
    /*is_ambiguous_... S6705C11::S6705C10 */ AMB_check_base_class_offset(lv, (S6705C10*)(S6705C11*), ABISELECT(48,28), "S6705C5");
    check_base_class_offset(lv, (S6705C11*), 0, "S6705C5");
    test_class_info(&lv, &cd_S6705C5);
    dp->~S6705C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C5(Test_S6705C5, "S6705C5", ABISELECT(664,460));

#else // __cplusplus

extern void _ZN7S6705C5C1Ev();
extern void _ZN7S6705C5D2Ev();
Name_Map name_map_S6705C5[] = {
  NSPAIR(_ZN7S6705C5C1Ev),
  NSPAIR(_ZN7S6705C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6705C8;
extern VTBL_ENTRY _ZTI7S6705C8[];
extern  VTBL_ENTRY _ZTV7S6705C8[];
extern Class_Descriptor cd_S6705C9;
extern VTBL_ENTRY _ZTI7S6705C9[];
extern  VTBL_ENTRY _ZTV7S6705C9[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C7;
extern VTBL_ENTRY _ZTI7S6705C7[];
extern  VTBL_ENTRY _ZTV7S6705C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C7[];
extern Class_Descriptor cd_S6705C6;
extern VTBL_ENTRY _ZTI7S6705C6[];
extern  VTBL_ENTRY _ZTV7S6705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C6[];
extern Class_Descriptor cd_S6705C8;
extern VTBL_ENTRY _ZTI7S6705C8[];
extern  VTBL_ENTRY _ZTV7S6705C8[];
extern Class_Descriptor cd_S6705C9;
extern VTBL_ENTRY _ZTI7S6705C9[];
extern  VTBL_ENTRY _ZTV7S6705C9[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C7;
extern VTBL_ENTRY _ZTI7S6705C7[];
extern  VTBL_ENTRY _ZTV7S6705C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C7[];
extern Class_Descriptor cd_S6705C12;
extern VTBL_ENTRY _ZTI8S6705C12[];
extern  VTBL_ENTRY _ZTV8S6705C12[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
extern Class_Descriptor cd_S6705C11;
extern VTBL_ENTRY _ZTI8S6705C11[];
extern  VTBL_ENTRY _ZTV8S6705C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6705C11[];
static Base_Class bases_S6705C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6705C8,    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
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6705C9,    ABISELECT(72,40), //bcp->offset
    59, //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
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6705C10,    ABISELECT(160,88), //bcp->offset
    63, //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
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6705C4,    ABISELECT(240,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
    4, //immediately_derived
  0, 0},
  {&cd_S6705C3,    ABISELECT(240,144), //bcp->offset
    74, //bcp->virtual_function_table_offset
    11, //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
    6, //immediately_derived
  0, 1},
  {&cd_S6705C4,    ABISELECT(168,92), //bcp->offset
    66, //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6705C7,    ABISELECT(56,32), //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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6705C6,    ABISELECT(56,32), //bcp->offset
    28, //bcp->virtual_function_table_offset
    21, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6705C8,    ABISELECT(288,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
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6705C9,    ABISELECT(304,180), //bcp->offset
    118, //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
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6705C10,    ABISELECT(392,228), //bcp->offset
    122, //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
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6705C4,    ABISELECT(400,232), //bcp->offset
    125, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6705C7,    ABISELECT(288,172), //bcp->offset
    95, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S6705C12,    ABISELECT(448,256), //bcp->offset
    133, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S6705C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6705C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    17, //immediately_derived
  0, 0},
  {&cd_S6705C10,    ABISELECT(48,28), //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
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6705C11,    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
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6705C5[];
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN7S6705C5D1Ev();
extern void _ZN7S6705C5D0Ev();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN8S6705C113v29Ev();
extern void _ZN8S6705C113v30Ev();
extern void _ZN8S6705C113v31Ev();
extern void _ZN7S6705C53v32Ev();
extern void _ZN7S6705C53v33Ev();
extern void _ZN7S6705C53v34Ev();
extern void _ZN7S6705C53v35Ev();
extern void _ZN7S6705C53v36Ev();
extern void _ZN7S6705C53v37Ev();
extern void _ZN8S6705C103v17Ev();
extern void _ZN7S6705C83v14Ev();
extern void ABISELECT(_ZTv0_n40_N7S6705C5D1Ev,_ZTv0_n20_N7S6705C5D1Ev)();
extern void ABISELECT(_ZThn56_N7S6705C5D1Ev,_ZThn32_N7S6705C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6705C5D0Ev,_ZTv0_n20_N7S6705C5D0Ev)();
extern void ABISELECT(_ZThn56_N7S6705C5D0Ev,_ZThn32_N7S6705C5D0Ev)() __attribute__((weak));
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C63v21Ev();
extern void _ZN7S6705C63v22Ev();
extern void _ZN7S6705C63v23Ev();
extern void _ZN7S6705C63v24Ev();
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
extern void _ZN8S6705C103v17Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C5D1Ev,_ZTv0_n36_N7S6705C5D1Ev)();
extern void ABISELECT(_ZThn240_N7S6705C5D1Ev,_ZThn144_N7S6705C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C5D0Ev,_ZTv0_n36_N7S6705C5D0Ev)();
extern void ABISELECT(_ZThn240_N7S6705C5D0Ev,_ZThn144_N7S6705C5D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN7S6705C83v14Ev();
extern void ABISELECT(_ZTv0_n40_N7S6705C5D1Ev,_ZTv0_n20_N7S6705C5D1Ev)();
extern void ABISELECT(_ZThn288_N7S6705C5D1Ev,_ZThn172_N7S6705C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6705C5D0Ev,_ZTv0_n20_N7S6705C5D0Ev)();
extern void ABISELECT(_ZThn288_N7S6705C5D0Ev,_ZThn172_N7S6705C5D0Ev)() __attribute__((weak));
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
extern void _ZN8S6705C103v17Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN8S6705C123v25Ev();
extern void _ZN8S6705C123v26Ev();
extern void _ZN8S6705C123v27Ev();
extern void _ZN8S6705C123v28Ev();
static  VTBL_ENTRY vtc_S6705C5[] = {
  ABISELECT(56,32),
  ABISELECT(448,256),
  ABISELECT(240,144),
  ABISELECT(288,172),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&_ZN7S6705C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v29Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v30Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v31Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v32Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v33Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v34Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v35Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v36Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v37Ev,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
  0,
  0,
  0,
  0,
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-56,-32),
  0,
  ABISELECT(184,112),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6705C5D1Ev,_ZTv0_n20_N7S6705C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6705C5D0Ev,_ZTv0_n20_N7S6705C5D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v24Ev,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
  ABISELECT(-168,-92),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  0,
  0,
  ABISELECT(-240,-144),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C5D1Ev,_ZTv0_n36_N7S6705C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C5D0Ev,_ZTv0_n36_N7S6705C5D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-288,-172),
  0,
  ABISELECT(-48,-28),
  ABISELECT(-288,-172),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6705C5D1Ev,_ZTv0_n20_N7S6705C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6705C5D0Ev,_ZTv0_n20_N7S6705C5D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
  ABISELECT(-392,-228),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
  ABISELECT(-400,-232),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-448,-256),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN8S6705C123v25Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v26Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v27Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v28Ev,
};
extern VTBL_ENTRY _ZTV7S6705C5[];
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN8S6705C11D1Ev();
extern void _ZN8S6705C11D0Ev();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN8S6705C113v29Ev();
extern void _ZN8S6705C113v30Ev();
extern void _ZN8S6705C113v31Ev();
static  VTBL_ENTRY _tg__ZTV8S6705C11__7S6705C5[] = {
  ABISELECT(448,256),
  ABISELECT(240,144),
  ABISELECT(288,172),
  0,
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&_ZN8S6705C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6705C11D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v29Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v30Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v31Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void ABISELECT(_ZTv0_n40_N8S6705C11D1Ev,_ZTv0_n20_N8S6705C11D1Ev)();
extern void ABISELECT(_ZThn288_N8S6705C11D1Ev,_ZThn172_N8S6705C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6705C11D0Ev,_ZTv0_n20_N8S6705C11D0Ev)();
extern void ABISELECT(_ZThn288_N8S6705C11D0Ev,_ZThn172_N8S6705C11D0Ev)() __attribute__((weak));
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C7__8S6705C11__7S6705C5[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-288,-172),
  0,
  ABISELECT(-48,-28),
  ABISELECT(-288,-172),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6705C11D1Ev,_ZTv0_n20_N8S6705C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6705C11D0Ev,_ZTv0_n20_N8S6705C11D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
};
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C97S6705C7__8S6705C11__7S6705C5[] = {
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
};
extern void _ZN8S6705C103v17Ev();
static  VTBL_ENTRY _tg__ZTV8S6705C107S6705C7__8S6705C11__7S6705C5[] = {
  ABISELECT(-392,-228),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N8S6705C11D1Ev,_ZTv0_n36_N8S6705C11D1Ev)();
extern void ABISELECT(_ZThn240_N8S6705C11D1Ev,_ZThn144_N8S6705C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S6705C11D0Ev,_ZTv0_n36_N8S6705C11D0Ev)();
extern void ABISELECT(_ZThn240_N8S6705C11D0Ev,_ZThn144_N8S6705C11D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__8S6705C11__7S6705C5[] = {
  0,
  0,
  ABISELECT(-240,-144),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6705C11D1Ev,_ZTv0_n36_N8S6705C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6705C11D0Ev,_ZTv0_n36_N8S6705C11D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C47S6705C7__A1__8S6705C11__7S6705C5[] = {
  ABISELECT(-400,-232),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
};
extern void _ZN8S6705C123v25Ev();
extern void _ZN8S6705C123v26Ev();
extern void _ZN8S6705C123v27Ev();
extern void _ZN8S6705C123v28Ev();
static  VTBL_ENTRY _tg__ZTV8S6705C12__8S6705C11__7S6705C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-448,-256),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN8S6705C123v25Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v26Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v27Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v28Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C6D1Ev();
extern void _ZN7S6705C6D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C63v21Ev();
extern void _ZN7S6705C63v22Ev();
extern void _ZN7S6705C63v23Ev();
extern void _ZN7S6705C63v24Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C6__7S6705C5[] = {
  ABISELECT(184,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C6D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v24Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C7D1Ev();
extern void _ZN7S6705C7D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C77S6705C6__7S6705C5[] = {
  ABISELECT(184,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev)();
extern void ABISELECT(_ZThn184_N7S6705C7D1Ev,_ZThn112_N7S6705C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev)();
extern void ABISELECT(_ZThn184_N7S6705C7D0Ev,_ZThn112_N7S6705C7D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C77S6705C6__7S6705C5[] = {
  0,
  0,
  ABISELECT(-184,-112),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-112),
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev)();
extern void ABISELECT(_ZThn184_N7S6705C6D1Ev,_ZThn112_N7S6705C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev)();
extern void ABISELECT(_ZThn184_N7S6705C6D0Ev,_ZThn112_N7S6705C6D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C6__7S6705C5[] = {
  0,
  0,
  ABISELECT(-184,-112),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-112),
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C7D1Ev();
extern void _ZN7S6705C7D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C7__A1__7S6705C5[] = {
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev)();
extern void ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev)();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C7__A1__7S6705C5[] = {
  0,
  0,
  ABISELECT(48,28),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
static  VTT_ENTRY vtt_S6705C5[] = {
  {&(_ZTV7S6705C5[6]),  6,143},
  {&(_tg__ZTV8S6705C11__7S6705C5[5]),  5,18},
  {&(_tg__ZTV7S6705C7__8S6705C11__7S6705C5[17]),  17,23},
  {&(_tg__ZTV7S6705C97S6705C7__8S6705C11__7S6705C5[2]),  2,4},
  {&(_tg__ZTV8S6705C107S6705C7__8S6705C11__7S6705C5[2]),  2,3},
  {&(_tg__ZTV7S6705C3__8S6705C11__7S6705C5[11]),  11,21},
  {&(_tg__ZTV7S6705C47S6705C7__A1__8S6705C11__7S6705C5[2]),  2,8},
  {&(_tg__ZTV8S6705C12__8S6705C11__7S6705C5[6]),  6,10},
  {&(_ZTV7S6705C5[49]),  49,143},
  {&(_ZTV7S6705C5[61]),  61,143},
  {&(_ZTV7S6705C5[65]),  65,143},
  {&(_ZTV7S6705C5[85]),  85,143},
  {&(_ZTV7S6705C5[68]),  68,143},
  {&(_ZTV7S6705C5[112]),  112,143},
  {&(_ZTV7S6705C5[120]),  120,143},
  {&(_ZTV7S6705C5[124]),  124,143},
  {&(_ZTV7S6705C5[127]),  127,143},
  {&(_ZTV7S6705C5[139]),  139,143},
  {&(_tg__ZTV7S6705C6__7S6705C5[3]),  3,13},
  {&(_tg__ZTV7S6705C77S6705C6__7S6705C5[3]),  3,9},
  {&(_tg__ZTV7S6705C3__7S6705C77S6705C6__7S6705C5[11]),  11,21},
  {&(_tg__ZTV7S6705C3__7S6705C6__7S6705C5[11]),  11,21},
  {&(_tg__ZTV7S6705C7__A1__7S6705C5[3]),  3,9},
  {&(_tg__ZTV7S6705C3__7S6705C7__A1__7S6705C5[11]),  11,21},
};
extern VTBL_ENTRY _ZTI7S6705C5[];
extern  VTBL_ENTRY _ZTV7S6705C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C5[];
static VTBL_ENTRY alt_thunk_names12[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C6D0Ev,_ZThn112_N7S6705C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C6D1Ev,_ZThn112_N7S6705C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C7D0Ev,_ZThn112_N7S6705C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C7D1Ev,_ZThn112_N7S6705C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6705C11D0Ev,_ZTv0_n36_N8S6705C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S6705C11D0Ev,_ZThn144_N8S6705C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6705C11D1Ev,_ZTv0_n36_N8S6705C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S6705C11D1Ev,_ZThn144_N8S6705C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6705C11D0Ev,_ZTv0_n20_N8S6705C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S6705C11D0Ev,_ZThn172_N8S6705C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6705C11D1Ev,_ZTv0_n20_N8S6705C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S6705C11D1Ev,_ZThn172_N8S6705C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C5D0Ev,_ZTv0_n36_N7S6705C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S6705C5D0Ev,_ZThn144_N7S6705C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C5D1Ev,_ZTv0_n36_N7S6705C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S6705C5D1Ev,_ZThn144_N7S6705C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6705C5D0Ev,_ZTv0_n20_N7S6705C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S6705C5D0Ev,_ZThn172_N7S6705C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S6705C5D0Ev,_ZThn32_N7S6705C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6705C5D1Ev,_ZTv0_n20_N7S6705C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S6705C5D1Ev,_ZThn172_N7S6705C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S6705C5D1Ev,_ZThn32_N7S6705C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6705C5 = {  "S6705C5", // class name
  bases_S6705C5, 18,
  &(vtc_S6705C5[0]), // expected_vtbl_contents
  &(vtt_S6705C5[0]), // expected_vtt_contents
  ABISELECT(664,460), // object size
  NSPAIRA(_ZTI7S6705C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6705C5),143, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6705C5),24, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names12,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6705C15  : S6705C3 {
  virtual void  v38(); // _ZN8S6705C153v38Ev
  virtual void  v39(); // _ZN8S6705C153v39Ev
  virtual void  v40(); // _ZN8S6705C153v40Ev
  virtual void  v41(); // _ZN8S6705C153v41Ev
  virtual void  v42(); // _ZN8S6705C153v42Ev
  virtual void  v43(); // _ZN8S6705C153v43Ev
  virtual void  v44(); // _ZN8S6705C153v44Ev
  ~S6705C15(); // tgen
  S6705C15(); // tgen
};
//SIG(-1 S6705C15) C1{ BC2{ BC3{ v8 v9 v10 v11 v12 v13 Fp[4]} vd v14 v15 FL} v1 v2 v3 v4 v5 v6 v7}


void  S6705C15 ::v38(){vfunc_called(this, "_ZN8S6705C153v38Ev");}
void  S6705C15 ::v39(){vfunc_called(this, "_ZN8S6705C153v39Ev");}
void  S6705C15 ::v40(){vfunc_called(this, "_ZN8S6705C153v40Ev");}
void  S6705C15 ::v41(){vfunc_called(this, "_ZN8S6705C153v41Ev");}
void  S6705C15 ::v42(){vfunc_called(this, "_ZN8S6705C153v42Ev");}
void  S6705C15 ::v43(){vfunc_called(this, "_ZN8S6705C153v43Ev");}
void  S6705C15 ::v44(){vfunc_called(this, "_ZN8S6705C153v44Ev");}
S6705C15 ::~S6705C15(){ note_dtor("S6705C15", this);} // tgen
S6705C15 ::S6705C15(){ note_ctor("S6705C15", this);} // tgen

static void Test_S6705C15()
{
  extern Class_Descriptor cd_S6705C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S6705C15, buf);
    S6705C15 *dp, &lv = *(dp=new (buf) S6705C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S6705C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C15)");
    check_base_class_offset(lv, (S6705C4*)(S6705C3*), 0, "S6705C15");
    check_base_class_offset(lv, (S6705C3*), 0, "S6705C15");
    test_class_info(&lv, &cd_S6705C15);
    dp->~S6705C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C15(Test_S6705C15, "S6705C15", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S6705C15C1Ev();
extern void _ZN8S6705C15D1Ev();
Name_Map name_map_S6705C15[] = {
  NSPAIR(_ZN8S6705C15C1Ev),
  NSPAIR(_ZN8S6705C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
static Base_Class bases_S6705C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6705C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S6705C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S6705C15[];
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN8S6705C15D1Ev();
extern void _ZN8S6705C15D0Ev();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN8S6705C153v38Ev();
extern void _ZN8S6705C153v39Ev();
extern void _ZN8S6705C153v40Ev();
extern void _ZN8S6705C153v41Ev();
extern void _ZN8S6705C153v42Ev();
extern void _ZN8S6705C153v43Ev();
extern void _ZN8S6705C153v44Ev();
static  VTBL_ENTRY vtc_S6705C15[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6705C15[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&_ZN8S6705C15D1Ev,
  (VTBL_ENTRY)&_ZN8S6705C15D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v38Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v39Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v40Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v41Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v42Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v43Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v44Ev,
};
extern VTBL_ENTRY _ZTI8S6705C15[];
extern  VTBL_ENTRY _ZTV8S6705C15[];
Class_Descriptor cd_S6705C15 = {  "S6705C15", // class name
  bases_S6705C15, 2,
  &(vtc_S6705C15[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S6705C15),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S6705C15),19, //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  S6705C14  : S6705C15 , S6705C6 {
  virtual void  v45(); // _ZN8S6705C143v45Ev
  virtual void  v46(); // _ZN8S6705C143v46Ev
  virtual void  v47(); // _ZN8S6705C143v47Ev
  virtual void  v48(); // _ZN8S6705C143v48Ev
  virtual void  v49(); // _ZN8S6705C143v49Ev
  ~S6705C14(); // tgen
  S6705C14(); // tgen
};
//SIG(-1 S6705C14) C1{ BC2{ BC3{ BC4{ v6 v7 v8 v9 v10 v11 Fp[4]} vd v12 v13 FL} v14 v15 v16 v17 v18 v19 v20} BC5{ BC6{ BC7{ v21 Fi} BC8{ v22 v23 Fs:16 FL Fp[8]} BC9{ v24} VBC3 BC4 vd v25 v26 v27 Fi} v28 v29 v30 v31 Fi[7]} v1 v2 v3 v4 v5}


void  S6705C14 ::v45(){vfunc_called(this, "_ZN8S6705C143v45Ev");}
void  S6705C14 ::v46(){vfunc_called(this, "_ZN8S6705C143v46Ev");}
void  S6705C14 ::v47(){vfunc_called(this, "_ZN8S6705C143v47Ev");}
void  S6705C14 ::v48(){vfunc_called(this, "_ZN8S6705C143v48Ev");}
void  S6705C14 ::v49(){vfunc_called(this, "_ZN8S6705C143v49Ev");}
S6705C14 ::~S6705C14(){ note_dtor("S6705C14", this);} // tgen
S6705C14 ::S6705C14(){ note_ctor("S6705C14", this);} // tgen

static void Test_S6705C14()
{
  extern Class_Descriptor cd_S6705C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,43)];
    init_test(&cd_S6705C14, buf);
    S6705C14 *dp, &lv = *(dp=new (buf) S6705C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,168), "sizeof(S6705C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C14)");
    check_base_class_offset(lv, (S6705C4*)(S6705C3*)(S6705C15*), 0, "S6705C14");
    check_base_class_offset(lv, (S6705C3*)(S6705C15*), 0, "S6705C14");
    check_base_class_offset(lv, (S6705C15*), 0, "S6705C14");
    check_base_class_offset(lv, (S6705C8*)(S6705C7*)(S6705C6*), ABISELECT(48,28), "S6705C14");
    check_base_class_offset(lv, (S6705C9*)(S6705C7*)(S6705C6*), ABISELECT(64,36), "S6705C14");
    check_base_class_offset(lv, (S6705C10*)(S6705C7*)(S6705C6*), ABISELECT(152,84), "S6705C14");
    /*is_ambiguous_... S6705C14::S6705C3 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C3*), ABISELECT(232,140), "S6705C14");
    check_base_class_offset(lv, (S6705C3*)(S6705C7*)(S6705C6*), ABISELECT(232,140), "S6705C14");
    /*is_ambiguous_... S6705C7::S6705C4 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C7*)(S6705C6*), ABISELECT(160,88), "S6705C14");
    check_base_class_offset(lv, (S6705C7*)(S6705C6*), ABISELECT(48,28), "S6705C14");
    check_base_class_offset(lv, (S6705C6*), ABISELECT(48,28), "S6705C14");
    test_class_info(&lv, &cd_S6705C14);
    dp->~S6705C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C14(Test_S6705C14, "S6705C14", ABISELECT(280,168));

#else // __cplusplus

extern void _ZN8S6705C14C1Ev();
extern void _ZN8S6705C14D1Ev();
Name_Map name_map_S6705C14[] = {
  NSPAIR(_ZN8S6705C14C1Ev),
  NSPAIR(_ZN8S6705C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
extern Class_Descriptor cd_S6705C15;
extern VTBL_ENTRY _ZTI8S6705C15[];
extern  VTBL_ENTRY _ZTV8S6705C15[];
extern Class_Descriptor cd_S6705C8;
extern VTBL_ENTRY _ZTI7S6705C8[];
extern  VTBL_ENTRY _ZTV7S6705C8[];
extern Class_Descriptor cd_S6705C9;
extern VTBL_ENTRY _ZTI7S6705C9[];
extern  VTBL_ENTRY _ZTV7S6705C9[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C7;
extern VTBL_ENTRY _ZTI7S6705C7[];
extern  VTBL_ENTRY _ZTV7S6705C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C7[];
extern Class_Descriptor cd_S6705C6;
extern VTBL_ENTRY _ZTI7S6705C6[];
extern  VTBL_ENTRY _ZTV7S6705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C6[];
static Base_Class bases_S6705C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6705C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S6705C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S6705C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6705C8,    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
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6705C9,    ABISELECT(64,36), //bcp->offset
    38, //bcp->virtual_function_table_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_S6705C10,    ABISELECT(152,84), //bcp->offset
    42, //bcp->virtual_function_table_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_S6705C4,    ABISELECT(232,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
    7, //immediately_derived
  0, 0},
  {&cd_S6705C3,    ABISELECT(232,140), //bcp->offset
    53, //bcp->virtual_function_table_offset
    11, //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
    9, //immediately_derived
  0, 1},
  {&cd_S6705C4,    ABISELECT(160,88), //bcp->offset
    45, //bcp->virtual_function_table_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_S6705C7,    ABISELECT(48,28), //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
    10, //immediately_derived
  0, 0},
  {&cd_S6705C6,    ABISELECT(48,28), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //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 _ZTI8S6705C14[];
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN8S6705C14D1Ev();
extern void _ZN8S6705C14D0Ev();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN8S6705C153v38Ev();
extern void _ZN8S6705C153v39Ev();
extern void _ZN8S6705C153v40Ev();
extern void _ZN8S6705C153v41Ev();
extern void _ZN8S6705C153v42Ev();
extern void _ZN8S6705C153v43Ev();
extern void _ZN8S6705C153v44Ev();
extern void _ZN8S6705C143v45Ev();
extern void _ZN8S6705C143v46Ev();
extern void _ZN8S6705C143v47Ev();
extern void _ZN8S6705C143v48Ev();
extern void _ZN8S6705C143v49Ev();
extern void _ZN7S6705C83v14Ev();
extern void ABISELECT(_ZThn48_N8S6705C14D1Ev,_ZThn28_N8S6705C14D1Ev)();
extern void ABISELECT(_ZThn48_N8S6705C14D0Ev,_ZThn28_N8S6705C14D0Ev)();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C63v21Ev();
extern void _ZN7S6705C63v22Ev();
extern void _ZN7S6705C63v23Ev();
extern void _ZN7S6705C63v24Ev();
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
extern void _ZN8S6705C103v17Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N8S6705C14D1Ev,_ZTv0_n36_N8S6705C14D1Ev)();
extern void ABISELECT(_ZThn232_N8S6705C14D1Ev,_ZThn140_N8S6705C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S6705C14D0Ev,_ZTv0_n36_N8S6705C14D0Ev)();
extern void ABISELECT(_ZThn232_N8S6705C14D0Ev,_ZThn140_N8S6705C14D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY vtc_S6705C14[] = {
  ABISELECT(232,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S6705C14[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&_ZN8S6705C14D1Ev,
  (VTBL_ENTRY)&_ZN8S6705C14D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v38Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v39Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v40Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v41Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v42Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v43Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v44Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v45Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v46Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v47Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v48Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v49Ev,
  ABISELECT(184,112),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S6705C14[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S6705C14D1Ev,_ZThn28_N8S6705C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S6705C14D0Ev,_ZThn28_N8S6705C14D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v24Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S6705C14[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI8S6705C14[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S6705C14[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  0,
  0,
  ABISELECT(-232,-140),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-232,-140),
  (VTBL_ENTRY)&(_ZTI8S6705C14[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6705C14D1Ev,_ZTv0_n36_N8S6705C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6705C14D0Ev,_ZTv0_n36_N8S6705C14D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern VTBL_ENTRY _ZTV8S6705C14[];
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C6D1Ev();
extern void _ZN7S6705C6D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C63v21Ev();
extern void _ZN7S6705C63v22Ev();
extern void _ZN7S6705C63v23Ev();
extern void _ZN7S6705C63v24Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C6__8S6705C14[] = {
  ABISELECT(184,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C6D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v24Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C7D1Ev();
extern void _ZN7S6705C7D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C77S6705C6__8S6705C14[] = {
  ABISELECT(184,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev)();
extern void ABISELECT(_ZThn184_N7S6705C7D1Ev,_ZThn112_N7S6705C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev)();
extern void ABISELECT(_ZThn184_N7S6705C7D0Ev,_ZThn112_N7S6705C7D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C77S6705C6__8S6705C14[] = {
  0,
  0,
  ABISELECT(-184,-112),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-112),
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev)();
extern void ABISELECT(_ZThn184_N7S6705C6D1Ev,_ZThn112_N7S6705C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev)();
extern void ABISELECT(_ZThn184_N7S6705C6D0Ev,_ZThn112_N7S6705C6D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C6__8S6705C14[] = {
  0,
  0,
  ABISELECT(-184,-112),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-112),
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
static  VTT_ENTRY vtt_S6705C14[] = {
  {&(_ZTV8S6705C14[3]),  3,74},
  {&(_tg__ZTV7S6705C6__8S6705C14[3]),  3,13},
  {&(_tg__ZTV7S6705C77S6705C6__8S6705C14[3]),  3,9},
  {&(_tg__ZTV7S6705C3__7S6705C77S6705C6__8S6705C14[11]),  11,21},
  {&(_tg__ZTV7S6705C3__7S6705C6__8S6705C14[11]),  11,21},
  {&(_ZTV8S6705C14[28]),  28,74},
  {&(_ZTV8S6705C14[64]),  64,74},
};
extern VTBL_ENTRY _ZTI8S6705C14[];
extern  VTBL_ENTRY _ZTV8S6705C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6705C14[];
static VTBL_ENTRY alt_thunk_names13[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C6D0Ev,_ZThn112_N7S6705C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C6D1Ev,_ZThn112_N7S6705C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C7D0Ev,_ZThn112_N7S6705C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C7D1Ev,_ZThn112_N7S6705C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6705C14D0Ev,_ZTv0_n36_N8S6705C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S6705C14D0Ev,_ZThn140_N8S6705C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6705C14D1Ev,_ZTv0_n36_N8S6705C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S6705C14D1Ev,_ZThn140_N8S6705C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6705C14 = {  "S6705C14", // class name
  bases_S6705C14, 11,
  &(vtc_S6705C14[0]), // expected_vtbl_contents
  &(vtt_S6705C14[0]), // expected_vtt_contents
  ABISELECT(280,168), // object size
  NSPAIRA(_ZTI8S6705C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6705C14),74, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6705C14),7, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names13,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6705C1  : S6705C2 , S6705C3 , virtual S6705C5 , virtual S6705C14 , virtual S6705C10 {
  int s6705c1f0;
  virtual void  v1(); // _ZN7S6705C12v1Ev
  virtual void  v2(); // _ZN7S6705C12v2Ev
  ~S6705C1(); // tgen
  S6705C1(); // tgen
};
//SIG(1 S6705C1) C1{ BC2{ v3 v4 v5} BC3{ BC4{ v6 v7 v8 v9 v10 v11 Fp[4]} vd v12 v13 FL} VBC5{ VBC6{ BC7{ BC8{ v14 Fi} BC9{ v15 v16 Fs:16 FL Fp[8]} BC10{ v17} VBC3 BC4 vd v18 v19 v20 Fi} v21 v22 v23 v24 Fi[7]} BC11{ VBC7 VBC12{ v25 v26 v27 v28 FC10 Fi FU13{ m FL[4] FL}[6]} BC3 BC10 v29 v30 v31} vd v32 v33 v34 v35 v36 v37} VBC14{ BC15{ BC3 v38 v39 v40 v41 v42 v43 v44} BC6 v45 v46 v47 v48 v49} VBC10 v1 v2 Fi}


void  S6705C1 ::v1(){vfunc_called(this, "_ZN7S6705C12v1Ev");}
void  S6705C1 ::v2(){vfunc_called(this, "_ZN7S6705C12v2Ev");}
S6705C1 ::~S6705C1(){ note_dtor("S6705C1", this);} // tgen
S6705C1 ::S6705C1(){ note_ctor("S6705C1", this);} // tgen

static void Test_S6705C1()
{
  extern Class_Descriptor cd_S6705C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(122,161)];
    init_test(&cd_S6705C1, buf);
    S6705C1 *dp, &lv = *(dp=new (buf) S6705C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(968,640), "sizeof(S6705C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C1)");
    check_base_class_offset(lv, (S6705C2*), 0, "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C3 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C3*), ABISELECT(8,4), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C3 */ AMB_check_base_class_offset(lv, (S6705C3*), ABISELECT(8,4), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C6 */ AMB_check_base_class_offset(lv, (S6705C8*)(S6705C7*)(S6705C6*), ABISELECT(120,68), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C6 */ AMB_check_base_class_offset(lv, (S6705C9*)(S6705C7*)(S6705C6*), ABISELECT(136,76), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C6 */ AMB_check_base_class_offset(lv, (S6705C10*)(S6705C7*)(S6705C6*), ABISELECT(224,124), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C3 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C3*), ABISELECT(304,180), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C6 */ AMB_check_base_class_offset(lv, (S6705C3*)(S6705C7*)(S6705C6*), ABISELECT(304,180), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C7 */ AMB_check_base_class_offset(lv, (S6705C3*)(S6705C7*), ABISELECT(304,180), "S6705C1");
    check_base_class_offset(lv, (S6705C3*)(S6705C7*)(S6705C6*)(S6705C14*), ABISELECT(304,180), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C6 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C7*)(S6705C6*), ABISELECT(232,128), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C6 */ AMB_check_base_class_offset(lv, (S6705C7*)(S6705C6*), ABISELECT(120,68), "S6705C1");
    check_base_class_offset(lv, (S6705C6*)(S6705C5*), ABISELECT(120,68), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C7 */ AMB_check_base_class_offset(lv, (S6705C8*)(S6705C7*), ABISELECT(352,208), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C7 */ AMB_check_base_class_offset(lv, (S6705C9*)(S6705C7*), ABISELECT(368,216), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C7 */ AMB_check_base_class_offset(lv, (S6705C10*)(S6705C7*), ABISELECT(456,264), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C7 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C7*), ABISELECT(464,268), "S6705C1");
    check_base_class_offset(lv, (S6705C7*)(S6705C11*)(S6705C5*), ABISELECT(352,208), "S6705C1");
    check_base_class_offset(lv, (S6705C12*)(S6705C11*)(S6705C5*), ABISELECT(512,292), "S6705C1");
    /*is_ambiguous_... S6705C11::S6705C3 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C3*)(S6705C11*)(S6705C5*), ABISELECT(64,36), "S6705C1");
    /*is_ambiguous_... S6705C11::S6705C3 */ AMB_check_base_class_offset(lv, (S6705C3*)(S6705C11*)(S6705C5*), ABISELECT(64,36), "S6705C1");
    /*is_ambiguous_... S6705C11::S6705C10 */ AMB_check_base_class_offset(lv, (S6705C10*)(S6705C11*)(S6705C5*), ABISELECT(112,64), "S6705C1");
    check_base_class_offset(lv, (S6705C11*)(S6705C5*), ABISELECT(64,36), "S6705C1");
    check_base_class_offset(lv, (S6705C5*), ABISELECT(64,36), "S6705C1");
    check_base_class_offset(lv, (S6705C4*)(S6705C3*)(S6705C15*)(S6705C14*), ABISELECT(728,496), "S6705C1");
    check_base_class_offset(lv, (S6705C3*)(S6705C15*)(S6705C14*), ABISELECT(728,496), "S6705C1");
    check_base_class_offset(lv, (S6705C15*)(S6705C14*), ABISELECT(728,496), "S6705C1");
    check_base_class_offset(lv, (S6705C8*)(S6705C7*)(S6705C6*)(S6705C14*), ABISELECT(776,524), "S6705C1");
    check_base_class_offset(lv, (S6705C9*)(S6705C7*)(S6705C6*)(S6705C14*), ABISELECT(792,532), "S6705C1");
    check_base_class_offset(lv, (S6705C10*)(S6705C7*)(S6705C6*)(S6705C14*), ABISELECT(880,580), "S6705C1");
    /*is_ambiguous_... S6705C7::S6705C4 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C7*)(S6705C6*)(S6705C14*), ABISELECT(888,584), "S6705C1");
    check_base_class_offset(lv, (S6705C7*)(S6705C6*)(S6705C14*), ABISELECT(776,524), "S6705C1");
    check_base_class_offset(lv, (S6705C6*)(S6705C14*), ABISELECT(776,524), "S6705C1");
    check_base_class_offset(lv, (S6705C14*), ABISELECT(728,496), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C10 */ AMB_check_base_class_offset(lv, (S6705C10*), ABISELECT(960,636), "S6705C1");
    check_field_offset(lv, s6705c1f0, ABISELECT(56,32), "S6705C1.s6705c1f0");
    test_class_info(&lv, &cd_S6705C1);
    dp->~S6705C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C1(Test_S6705C1, "S6705C1", ABISELECT(968,640));

#else // __cplusplus

extern void _ZN7S6705C1C1Ev();
extern void _ZN7S6705C1D1Ev();
Name_Map name_map_S6705C1[] = {
  NSPAIR(_ZN7S6705C1C1Ev),
  NSPAIR(_ZN7S6705C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6705C2;
extern VTBL_ENTRY _ZTI7S6705C2[];
extern  VTBL_ENTRY _ZTV7S6705C2[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
extern Class_Descriptor cd_S6705C8;
extern VTBL_ENTRY _ZTI7S6705C8[];
extern  VTBL_ENTRY _ZTV7S6705C8[];
extern Class_Descriptor cd_S6705C9;
extern VTBL_ENTRY _ZTI7S6705C9[];
extern  VTBL_ENTRY _ZTV7S6705C9[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C7;
extern VTBL_ENTRY _ZTI7S6705C7[];
extern  VTBL_ENTRY _ZTV7S6705C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C7[];
extern Class_Descriptor cd_S6705C6;
extern VTBL_ENTRY _ZTI7S6705C6[];
extern  VTBL_ENTRY _ZTV7S6705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C6[];
extern Class_Descriptor cd_S6705C8;
extern VTBL_ENTRY _ZTI7S6705C8[];
extern  VTBL_ENTRY _ZTV7S6705C8[];
extern Class_Descriptor cd_S6705C9;
extern VTBL_ENTRY _ZTI7S6705C9[];
extern  VTBL_ENTRY _ZTV7S6705C9[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C7;
extern VTBL_ENTRY _ZTI7S6705C7[];
extern  VTBL_ENTRY _ZTV7S6705C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C7[];
extern Class_Descriptor cd_S6705C12;
extern VTBL_ENTRY _ZTI8S6705C12[];
extern  VTBL_ENTRY _ZTV8S6705C12[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
extern Class_Descriptor cd_S6705C11;
extern VTBL_ENTRY _ZTI8S6705C11[];
extern  VTBL_ENTRY _ZTV8S6705C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6705C11[];
extern Class_Descriptor cd_S6705C5;
extern VTBL_ENTRY _ZTI7S6705C5[];
extern  VTBL_ENTRY _ZTV7S6705C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C5[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
extern Class_Descriptor cd_S6705C15;
extern VTBL_ENTRY _ZTI8S6705C15[];
extern  VTBL_ENTRY _ZTV8S6705C15[];
extern Class_Descriptor cd_S6705C8;
extern VTBL_ENTRY _ZTI7S6705C8[];
extern  VTBL_ENTRY _ZTV7S6705C8[];
extern Class_Descriptor cd_S6705C9;
extern VTBL_ENTRY _ZTI7S6705C9[];
extern  VTBL_ENTRY _ZTV7S6705C9[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C7;
extern VTBL_ENTRY _ZTI7S6705C7[];
extern  VTBL_ENTRY _ZTV7S6705C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C7[];
extern Class_Descriptor cd_S6705C6;
extern VTBL_ENTRY _ZTI7S6705C6[];
extern  VTBL_ENTRY _ZTV7S6705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C6[];
extern Class_Descriptor cd_S6705C14;
extern VTBL_ENTRY _ZTI8S6705C14[];
extern  VTBL_ENTRY _ZTV8S6705C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6705C14[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
static Base_Class bases_S6705C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6705C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {&cd_S6705C4,    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
    32, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6705C3,    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
    33, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6705C8,    ABISELECT(120,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
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6705C9,    ABISELECT(136,76), //bcp->offset
    106, //bcp->virtual_function_table_offset
    2, //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
    9, //immediately_derived
  0, 0},
  {&cd_S6705C10,    ABISELECT(224,124), //bcp->offset
    110, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6705C4,    ABISELECT(304,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
    7, //immediately_derived
  0, 0},
  {&cd_S6705C3,    ABISELECT(304,180), //bcp->offset
    121, //bcp->virtual_function_table_offset
    11, //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
    9, //immediately_derived
  0, 1},
  {&cd_S6705C4,    ABISELECT(232,128), //bcp->offset
    113, //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
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6705C7,    ABISELECT(120,68), //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
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6705C6,    ABISELECT(120,68), //bcp->offset
    75, //bcp->virtual_function_table_offset
    21, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S6705C8,    ABISELECT(352,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
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6705C9,    ABISELECT(368,216), //bcp->offset
    165, //bcp->virtual_function_table_offset
    2, //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
    15, //immediately_derived
  0, 0},
  {&cd_S6705C10,    ABISELECT(456,264), //bcp->offset
    169, //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
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6705C4,    ABISELECT(464,268), //bcp->offset
    172, //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
    12, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6705C7,    ABISELECT(352,208), //bcp->offset
    142, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S6705C12,    ABISELECT(512,292), //bcp->offset
    180, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S6705C4,    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
    15, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S6705C3,    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
    16, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6705C10,    ABISELECT(112,64), //bcp->offset
    72, //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
    17, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6705C11,    ABISELECT(64,36), //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
    18, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6705C5,    ABISELECT(64,36), //bcp->offset
    28, //bcp->virtual_function_table_offset
    25, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6705C4,    ABISELECT(728,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
    20, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S6705C3,    ABISELECT(728,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
    21, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S6705C15,    ABISELECT(728,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
    22, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S6705C8,    ABISELECT(776,524), //bcp->offset
    -1, //bcp->virtual_function_table_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
    29, //immediately_derived
  0, 0},
  {&cd_S6705C9,    ABISELECT(792,532), //bcp->offset
    260, //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
    24, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S6705C10,    ABISELECT(880,580), //bcp->offset
    264, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S6705C4,    ABISELECT(888,584), //bcp->offset
    267, //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
    26, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S6705C7,    ABISELECT(776,524), //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
    27, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S6705C6,    ABISELECT(776,524), //bcp->offset
    247, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S6705C14,    ABISELECT(728,496), //bcp->offset
    190, //bcp->virtual_function_table_offset
    35, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6705C10,    ABISELECT(960,636), //bcp->offset
    275, //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
    30, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6705C1[];
extern void _ZN7S6705C22v3Ev();
extern void _ZN7S6705C22v4Ev();
extern void _ZN7S6705C22v5Ev();
extern void _ZN7S6705C12v1Ev();
extern void _ZN7S6705C12v2Ev();
extern void _ZN7S6705C1D1Ev();
extern void _ZN7S6705C1D0Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZThn8_N7S6705C1D1Ev,_ZThn4_N7S6705C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S6705C1D0Ev,_ZThn4_N7S6705C1D0Ev)();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n104_N7S6705C1D1Ev,_ZTv0_n52_N7S6705C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S6705C1D1Ev,_ZThn36_N7S6705C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S6705C1D0Ev,_ZTv0_n52_N7S6705C1D0Ev)();
extern void ABISELECT(_ZThn64_N7S6705C1D0Ev,_ZThn36_N7S6705C1D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN8S6705C113v29Ev();
extern void _ZN8S6705C113v30Ev();
extern void _ZN8S6705C113v31Ev();
extern void _ZN7S6705C53v32Ev();
extern void _ZN7S6705C53v33Ev();
extern void _ZN7S6705C53v34Ev();
extern void _ZN7S6705C53v35Ev();
extern void _ZN7S6705C53v36Ev();
extern void _ZN7S6705C53v37Ev();
extern void _ZN8S6705C103v17Ev();
extern void _ZN7S6705C83v14Ev();
extern void ABISELECT(_ZTv0_n40_N7S6705C1D1Ev,_ZTv0_n20_N7S6705C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S6705C1D1Ev,_ZThn68_N7S6705C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6705C1D0Ev,_ZTv0_n20_N7S6705C1D0Ev)();
extern void ABISELECT(_ZThn120_N7S6705C1D0Ev,_ZThn68_N7S6705C1D0Ev)() __attribute__((weak));
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C63v21Ev();
extern void _ZN7S6705C63v22Ev();
extern void _ZN7S6705C63v23Ev();
extern void _ZN7S6705C63v24Ev();
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
extern void _ZN8S6705C103v17Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C1D1Ev,_ZTv0_n36_N7S6705C1D1Ev)();
extern void ABISELECT(_ZThn304_N7S6705C1D1Ev,_ZThn180_N7S6705C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C1D0Ev,_ZTv0_n36_N7S6705C1D0Ev)();
extern void ABISELECT(_ZThn304_N7S6705C1D0Ev,_ZThn180_N7S6705C1D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN7S6705C83v14Ev();
extern void ABISELECT(_ZTv0_n40_N7S6705C1D1Ev,_ZTv0_n20_N7S6705C1D1Ev)();
extern void ABISELECT(_ZThn352_N7S6705C1D1Ev,_ZThn208_N7S6705C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6705C1D0Ev,_ZTv0_n20_N7S6705C1D0Ev)();
extern void ABISELECT(_ZThn352_N7S6705C1D0Ev,_ZThn208_N7S6705C1D0Ev)() __attribute__((weak));
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
extern void _ZN8S6705C103v17Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN8S6705C123v25Ev();
extern void _ZN8S6705C123v26Ev();
extern void _ZN8S6705C123v27Ev();
extern void _ZN8S6705C123v28Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n80_N7S6705C1D1Ev,_ZTv0_n40_N7S6705C1D1Ev)();
extern void ABISELECT(_ZThn728_N7S6705C1D1Ev,_ZThn496_N7S6705C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S6705C1D0Ev,_ZTv0_n40_N7S6705C1D0Ev)();
extern void ABISELECT(_ZThn728_N7S6705C1D0Ev,_ZThn496_N7S6705C1D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN8S6705C153v38Ev();
extern void _ZN8S6705C153v39Ev();
extern void _ZN8S6705C153v40Ev();
extern void _ZN8S6705C153v41Ev();
extern void _ZN8S6705C153v42Ev();
extern void _ZN8S6705C153v43Ev();
extern void _ZN8S6705C153v44Ev();
extern void _ZN8S6705C143v45Ev();
extern void _ZN8S6705C143v46Ev();
extern void _ZN8S6705C143v47Ev();
extern void _ZN8S6705C143v48Ev();
extern void _ZN8S6705C143v49Ev();
extern void _ZN7S6705C83v14Ev();
extern void ABISELECT(_ZTvn48_n80_N7S6705C1D1Ev,_ZTvn28_n40_N7S6705C1D1Ev)();
extern void ABISELECT(_ZTvn48_n80_N7S6705C1D0Ev,_ZTvn28_n40_N7S6705C1D0Ev)();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C63v21Ev();
extern void _ZN7S6705C63v22Ev();
extern void _ZN7S6705C63v23Ev();
extern void _ZN7S6705C63v24Ev();
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
extern void _ZN8S6705C103v17Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN8S6705C103v17Ev();
static  VTBL_ENTRY vtc_S6705C1[] = {
  ABISELECT(960,636),
  ABISELECT(728,496),
  ABISELECT(512,292),
  ABISELECT(352,208),
  ABISELECT(304,180),
  ABISELECT(120,68),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6705C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6705C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6705C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6705C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6705C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C1D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S6705C1D1Ev,_ZThn4_N7S6705C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S6705C1D0Ev,_ZThn4_N7S6705C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,28),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,32),
  ABISELECT(448,256),
  ABISELECT(240,144),
  ABISELECT(288,172),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S6705C1D1Ev,_ZTv0_n52_N7S6705C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S6705C1D0Ev,_ZTv0_n52_N7S6705C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v29Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v30Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v31Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v32Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v33Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v34Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v35Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v36Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v37Ev,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
  0,
  0,
  0,
  0,
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-120,-68),
  0,
  ABISELECT(184,112),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6705C1D1Ev,_ZTv0_n20_N7S6705C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6705C1D0Ev,_ZTv0_n20_N7S6705C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v24Ev,
  ABISELECT(-136,-76),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
  ABISELECT(-224,-124),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
  ABISELECT(-232,-128),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  0,
  0,
  ABISELECT(-304,-180),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C1D1Ev,_ZTv0_n36_N7S6705C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C1D0Ev,_ZTv0_n36_N7S6705C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-352,-208),
  0,
  ABISELECT(-48,-28),
  ABISELECT(-352,-208),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6705C1D1Ev,_ZTv0_n20_N7S6705C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6705C1D0Ev,_ZTv0_n20_N7S6705C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  ABISELECT(-368,-216),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
  ABISELECT(-456,-264),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
  ABISELECT(-464,-268),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-512,-292),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN8S6705C123v25Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v26Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v27Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v28Ev,
  ABISELECT(48,28),
  ABISELECT(48,28),
  ABISELECT(48,28),
  ABISELECT(48,28),
  ABISELECT(152,84),
  ABISELECT(64,36),
  ABISELECT(64,36),
  ABISELECT(48,28),
  ABISELECT(48,28),
  ABISELECT(48,28),
  ABISELECT(48,28),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-728,-496),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-424,-316),
  ABISELECT(-728,-496),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S6705C1D1Ev,_ZTv0_n40_N7S6705C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S6705C1D0Ev,_ZTv0_n40_N7S6705C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v38Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v39Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v40Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v41Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v42Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v43Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v44Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v45Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v46Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v47Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v48Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v49Ev,
  ABISELECT(-472,-344),
  ABISELECT(-776,-524),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n80_N7S6705C1D1Ev,_ZTvn28_n40_N7S6705C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n80_N7S6705C1D0Ev,_ZTvn28_n40_N7S6705C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v24Ev,
  ABISELECT(-792,-532),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
  ABISELECT(-880,-580),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
  ABISELECT(-888,-584),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  0,
  ABISELECT(-960,-636),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
};
extern VTBL_ENTRY _ZTV7S6705C1[];
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN7S6705C5D1Ev();
extern void _ZN7S6705C5D0Ev();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN8S6705C113v29Ev();
extern void _ZN8S6705C113v30Ev();
extern void _ZN8S6705C113v31Ev();
extern void _ZN7S6705C53v32Ev();
extern void _ZN7S6705C53v33Ev();
extern void _ZN7S6705C53v34Ev();
extern void _ZN7S6705C53v35Ev();
extern void _ZN7S6705C53v36Ev();
extern void _ZN7S6705C53v37Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C5__7S6705C1[] = {
  ABISELECT(56,32),
  ABISELECT(448,256),
  ABISELECT(240,144),
  ABISELECT(288,172),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&_ZN7S6705C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v29Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v30Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v31Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v32Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v33Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v34Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v35Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v36Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v37Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN8S6705C11D1Ev();
extern void _ZN8S6705C11D0Ev();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN8S6705C113v29Ev();
extern void _ZN8S6705C113v30Ev();
extern void _ZN8S6705C113v31Ev();
static  VTBL_ENTRY _tg__ZTV8S6705C117S6705C5__7S6705C1[] = {
  ABISELECT(448,256),
  ABISELECT(240,144),
  ABISELECT(288,172),
  0,
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&_ZN8S6705C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6705C11D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v29Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v30Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v31Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void ABISELECT(_ZTv0_n40_N8S6705C11D1Ev,_ZTv0_n20_N8S6705C11D1Ev)();
extern void ABISELECT(_ZThn288_N8S6705C11D1Ev,_ZThn172_N8S6705C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6705C11D0Ev,_ZTv0_n20_N8S6705C11D0Ev)();
extern void ABISELECT(_ZThn288_N8S6705C11D0Ev,_ZThn172_N8S6705C11D0Ev)() __attribute__((weak));
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C7__8S6705C117S6705C5__7S6705C1[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-288,-172),
  0,
  ABISELECT(-48,-28),
  ABISELECT(-288,-172),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6705C11D1Ev,_ZTv0_n20_N8S6705C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6705C11D0Ev,_ZTv0_n20_N8S6705C11D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
};
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C97S6705C7__8S6705C117S6705C5__7S6705C1[] = {
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
};
extern void _ZN8S6705C103v17Ev();
static  VTBL_ENTRY _tg__ZTV8S6705C107S6705C7__8S6705C117S6705C5__7S6705C1[] = {
  ABISELECT(-392,-228),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N8S6705C11D1Ev,_ZTv0_n36_N8S6705C11D1Ev)();
extern void ABISELECT(_ZThn240_N8S6705C11D1Ev,_ZThn144_N8S6705C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S6705C11D0Ev,_ZTv0_n36_N8S6705C11D0Ev)();
extern void ABISELECT(_ZThn240_N8S6705C11D0Ev,_ZThn144_N8S6705C11D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__8S6705C117S6705C5__7S6705C1[] = {
  0,
  0,
  ABISELECT(-240,-144),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6705C11D1Ev,_ZTv0_n36_N8S6705C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6705C11D0Ev,_ZTv0_n36_N8S6705C11D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C47S6705C7__A1__8S6705C117S6705C5__7S6705C1[] = {
  ABISELECT(-400,-232),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
};
extern void _ZN8S6705C123v25Ev();
extern void _ZN8S6705C123v26Ev();
extern void _ZN8S6705C123v27Ev();
extern void _ZN8S6705C123v28Ev();
static  VTBL_ENTRY _tg__ZTV8S6705C12__8S6705C117S6705C5__7S6705C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-448,-256),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN8S6705C123v25Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v26Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v27Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v28Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void ABISELECT(_ZTv0_n40_N7S6705C5D1Ev,_ZTv0_n20_N7S6705C5D1Ev)();
extern void ABISELECT(_ZThn56_N7S6705C5D1Ev,_ZThn32_N7S6705C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6705C5D0Ev,_ZTv0_n20_N7S6705C5D0Ev)();
extern void ABISELECT(_ZThn56_N7S6705C5D0Ev,_ZThn32_N7S6705C5D0Ev)() __attribute__((weak));
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C63v21Ev();
extern void _ZN7S6705C63v22Ev();
extern void _ZN7S6705C63v23Ev();
extern void _ZN7S6705C63v24Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C6__7S6705C5__7S6705C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-56,-32),
  0,
  ABISELECT(184,112),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6705C5D1Ev,_ZTv0_n20_N7S6705C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6705C5D0Ev,_ZTv0_n20_N7S6705C5D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v24Ev,
};
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C97S6705C77S6705C6__7S6705C5__7S6705C1[] = {
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
};
extern void _ZN8S6705C103v17Ev();
static  VTBL_ENTRY _tg__ZTV8S6705C107S6705C77S6705C6__7S6705C5__7S6705C1[] = {
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C5D1Ev,_ZTv0_n36_N7S6705C5D1Ev)();
extern void ABISELECT(_ZThn240_N7S6705C5D1Ev,_ZThn144_N7S6705C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C5D0Ev,_ZTv0_n36_N7S6705C5D0Ev)();
extern void ABISELECT(_ZThn240_N7S6705C5D0Ev,_ZThn144_N7S6705C5D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C5__7S6705C1[] = {
  0,
  0,
  ABISELECT(-240,-144),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C5D1Ev,_ZTv0_n36_N7S6705C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C5D0Ev,_ZTv0_n36_N7S6705C5D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C47S6705C77S6705C6__A1__7S6705C5__7S6705C1[] = {
  ABISELECT(-168,-92),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void ABISELECT(_ZTv0_n40_N7S6705C5D1Ev,_ZTv0_n20_N7S6705C5D1Ev)();
extern void ABISELECT(_ZThn288_N7S6705C5D1Ev,_ZThn172_N7S6705C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6705C5D0Ev,_ZTv0_n20_N7S6705C5D0Ev)();
extern void ABISELECT(_ZThn288_N7S6705C5D0Ev,_ZThn172_N7S6705C5D0Ev)() __attribute__((weak));
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C7__A1__7S6705C5__7S6705C1[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-288,-172),
  0,
  ABISELECT(-48,-28),
  ABISELECT(-288,-172),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6705C5D1Ev,_ZTv0_n20_N7S6705C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6705C5D0Ev,_ZTv0_n20_N7S6705C5D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
};
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C97S6705C7__A1__7S6705C5__7S6705C1[] = {
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
};
extern void _ZN8S6705C103v17Ev();
static  VTBL_ENTRY _tg__ZTV8S6705C107S6705C7__A1__7S6705C5__7S6705C1[] = {
  ABISELECT(-392,-228),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C47S6705C7__A2__7S6705C5__7S6705C1[] = {
  ABISELECT(-400,-232),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
};
extern void _ZN8S6705C123v25Ev();
extern void _ZN8S6705C123v26Ev();
extern void _ZN8S6705C123v27Ev();
extern void _ZN8S6705C123v28Ev();
static  VTBL_ENTRY _tg__ZTV8S6705C12__7S6705C5__7S6705C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-448,-256),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN8S6705C123v25Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v26Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v27Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v28Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C6D1Ev();
extern void _ZN7S6705C6D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C63v21Ev();
extern void _ZN7S6705C63v22Ev();
extern void _ZN7S6705C63v23Ev();
extern void _ZN7S6705C63v24Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C6__7S6705C1[] = {
  ABISELECT(184,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C6D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v24Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C7D1Ev();
extern void _ZN7S6705C7D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C77S6705C6__7S6705C1[] = {
  ABISELECT(184,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev)();
extern void ABISELECT(_ZThn184_N7S6705C7D1Ev,_ZThn112_N7S6705C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev)();
extern void ABISELECT(_ZThn184_N7S6705C7D0Ev,_ZThn112_N7S6705C7D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C77S6705C6__7S6705C1[] = {
  0,
  0,
  ABISELECT(-184,-112),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-112),
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev)();
extern void ABISELECT(_ZThn184_N7S6705C6D1Ev,_ZThn112_N7S6705C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev)();
extern void ABISELECT(_ZThn184_N7S6705C6D0Ev,_ZThn112_N7S6705C6D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C6__7S6705C1[] = {
  0,
  0,
  ABISELECT(-184,-112),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-112),
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C7D1Ev();
extern void _ZN7S6705C7D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C7__A1__7S6705C1[] = {
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev)();
extern void ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev)();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C7__A1__7S6705C1[] = {
  0,
  0,
  ABISELECT(48,28),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN8S6705C14D1Ev();
extern void _ZN8S6705C14D0Ev();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN8S6705C153v38Ev();
extern void _ZN8S6705C153v39Ev();
extern void _ZN8S6705C153v40Ev();
extern void _ZN8S6705C153v41Ev();
extern void _ZN8S6705C153v42Ev();
extern void _ZN8S6705C153v43Ev();
extern void _ZN8S6705C153v44Ev();
extern void _ZN8S6705C143v45Ev();
extern void _ZN8S6705C143v46Ev();
extern void _ZN8S6705C143v47Ev();
extern void _ZN8S6705C143v48Ev();
extern void _ZN8S6705C143v49Ev();
static  VTBL_ENTRY _tg__ZTV8S6705C14__7S6705C1[] = {
  ABISELECT(-424,-316),
  0,
  (VTBL_ENTRY)&(_ZTI8S6705C14[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&_ZN8S6705C14D1Ev,
  (VTBL_ENTRY)&_ZN8S6705C14D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v38Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v39Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v40Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v41Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v42Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v43Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v44Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v45Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v46Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v47Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v48Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v49Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C6D1Ev();
extern void _ZN7S6705C6D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C63v21Ev();
extern void _ZN7S6705C63v22Ev();
extern void _ZN7S6705C63v23Ev();
extern void _ZN7S6705C63v24Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C68S6705C14__A1__7S6705C1[] = {
  ABISELECT(-472,-344),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C6D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v24Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C7D1Ev();
extern void _ZN7S6705C7D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C77S6705C68S6705C14__A2__7S6705C1[] = {
  ABISELECT(-472,-344),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev)();
extern void ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev)();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C77S6705C68S6705C14__A2__7S6705C1[] = {
  0,
  0,
  ABISELECT(472,344),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(472,344),
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev)();
extern void ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev)();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C68S6705C14__A1__7S6705C1[] = {
  0,
  0,
  ABISELECT(472,344),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(472,344),
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void ABISELECT(_ZThn48_N8S6705C14D1Ev,_ZThn28_N8S6705C14D1Ev)();
extern void ABISELECT(_ZThn48_N8S6705C14D0Ev,_ZThn28_N8S6705C14D0Ev)();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C63v21Ev();
extern void _ZN7S6705C63v22Ev();
extern void _ZN7S6705C63v23Ev();
extern void _ZN7S6705C63v24Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C6__8S6705C14__7S6705C1[] = {
  ABISELECT(-472,-344),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S6705C14[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S6705C14D1Ev,_ZThn28_N8S6705C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S6705C14D0Ev,_ZThn28_N8S6705C14D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v24Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N8S6705C14D1Ev,_ZTv0_n36_N8S6705C14D1Ev)();
extern void ABISELECT(_ZTv0_n72_N8S6705C14D0Ev,_ZTv0_n36_N8S6705C14D0Ev)();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__A1__8S6705C14__7S6705C1[] = {
  0,
  0,
  ABISELECT(424,316),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(424,316),
  (VTBL_ENTRY)&(_ZTI8S6705C14[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6705C14D1Ev,_ZTv0_n36_N8S6705C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6705C14D0Ev,_ZTv0_n36_N8S6705C14D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
static  VTT_ENTRY vtt_S6705C1[] = {
  {&(_ZTV7S6705C1[9]),  9,279},
  {&(_ZTV7S6705C1[53]),  53,279},
  {&(_ZTV7S6705C1[96]),  96,279},
  {&(_ZTV7S6705C1[108]),  108,279},
  {&(_ZTV7S6705C1[112]),  112,279},
  {&(_ZTV7S6705C1[132]),  132,279},
  {&(_ZTV7S6705C1[115]),  115,279},
  {&(_ZTV7S6705C1[159]),  159,279},
  {&(_ZTV7S6705C1[167]),  167,279},
  {&(_ZTV7S6705C1[171]),  171,279},
  {&(_ZTV7S6705C1[174]),  174,279},
  {&(_ZTV7S6705C1[186]),  186,279},
  {&(_ZTV7S6705C1[74]),  74,279},
  {&(_ZTV7S6705C1[225]),  225,279},
  {&(_ZTV7S6705C1[250]),  250,279},
  {&(_ZTV7S6705C1[262]),  262,279},
  {&(_ZTV7S6705C1[266]),  266,279},
  {&(_ZTV7S6705C1[269]),  269,279},
  {&(_ZTV7S6705C1[278]),  278,279},
  {&(_tg__ZTV7S6705C5__7S6705C1[6]),  6,25},
  {&(_tg__ZTV8S6705C117S6705C5__7S6705C1[5]),  5,18},
  {&(_tg__ZTV7S6705C7__8S6705C117S6705C5__7S6705C1[17]),  17,23},
  {&(_tg__ZTV7S6705C97S6705C7__8S6705C117S6705C5__7S6705C1[2]),  2,4},
  {&(_tg__ZTV8S6705C107S6705C7__8S6705C117S6705C5__7S6705C1[2]),  2,3},
  {&(_tg__ZTV7S6705C3__8S6705C117S6705C5__7S6705C1[11]),  11,21},
  {&(_tg__ZTV7S6705C47S6705C7__A1__8S6705C117S6705C5__7S6705C1[2]),  2,8},
  {&(_tg__ZTV8S6705C12__8S6705C117S6705C5__7S6705C1[6]),  6,10},
  {&(_tg__ZTV7S6705C6__7S6705C5__7S6705C1[21]),  21,31},
  {&(_tg__ZTV7S6705C97S6705C77S6705C6__7S6705C5__7S6705C1[2]),  2,4},
  {&(_tg__ZTV8S6705C107S6705C77S6705C6__7S6705C5__7S6705C1[2]),  2,3},
  {&(_tg__ZTV7S6705C3__7S6705C5__7S6705C1[11]),  11,21},
  {&(_tg__ZTV7S6705C47S6705C77S6705C6__A1__7S6705C5__7S6705C1[2]),  2,8},
  {&(_tg__ZTV7S6705C7__A1__7S6705C5__7S6705C1[17]),  17,23},
  {&(_tg__ZTV7S6705C97S6705C7__A1__7S6705C5__7S6705C1[2]),  2,4},
  {&(_tg__ZTV8S6705C107S6705C7__A1__7S6705C5__7S6705C1[2]),  2,3},
  {&(_tg__ZTV7S6705C47S6705C7__A2__7S6705C5__7S6705C1[2]),  2,8},
  {&(_tg__ZTV8S6705C12__7S6705C5__7S6705C1[6]),  6,10},
  {&(_tg__ZTV7S6705C6__7S6705C1[3]),  3,13},
  {&(_tg__ZTV7S6705C77S6705C6__7S6705C1[3]),  3,9},
  {&(_tg__ZTV7S6705C3__7S6705C77S6705C6__7S6705C1[11]),  11,21},
  {&(_tg__ZTV7S6705C3__7S6705C6__7S6705C1[11]),  11,21},
  {&(_tg__ZTV7S6705C7__A1__7S6705C1[3]),  3,9},
  {&(_tg__ZTV7S6705C3__7S6705C7__A1__7S6705C1[11]),  11,21},
  {&(_tg__ZTV8S6705C14__7S6705C1[3]),  3,25},
  {&(_tg__ZTV7S6705C68S6705C14__A1__7S6705C1[3]),  3,13},
  {&(_tg__ZTV7S6705C77S6705C68S6705C14__A2__7S6705C1[3]),  3,9},
  {&(_tg__ZTV7S6705C3__7S6705C77S6705C68S6705C14__A2__7S6705C1[11]),  11,21},
  {&(_tg__ZTV7S6705C3__7S6705C68S6705C14__A1__7S6705C1[11]),  11,21},
  {&(_tg__ZTV7S6705C6__8S6705C14__7S6705C1[3]),  3,13},
  {&(_tg__ZTV7S6705C3__A1__8S6705C14__7S6705C1[11]),  11,21},
};
extern VTBL_ENTRY _ZTI7S6705C1[];
extern  VTBL_ENTRY _ZTV7S6705C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C1[];
static VTBL_ENTRY alt_thunk_names14[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C6D0Ev,_ZThn112_N7S6705C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C6D1Ev,_ZThn112_N7S6705C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C7D0Ev,_ZThn112_N7S6705C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C7D1Ev,_ZThn112_N7S6705C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C5D0Ev,_ZTv0_n36_N7S6705C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S6705C5D0Ev,_ZThn144_N7S6705C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C5D1Ev,_ZTv0_n36_N7S6705C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S6705C5D1Ev,_ZThn144_N7S6705C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6705C5D0Ev,_ZTv0_n20_N7S6705C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S6705C5D0Ev,_ZThn172_N7S6705C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S6705C5D0Ev,_ZThn32_N7S6705C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6705C5D1Ev,_ZTv0_n20_N7S6705C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S6705C5D1Ev,_ZThn172_N7S6705C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S6705C5D1Ev,_ZThn32_N7S6705C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6705C11D0Ev,_ZTv0_n36_N8S6705C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S6705C11D0Ev,_ZThn144_N8S6705C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6705C11D1Ev,_ZTv0_n36_N8S6705C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S6705C11D1Ev,_ZThn144_N8S6705C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6705C11D0Ev,_ZTv0_n20_N8S6705C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S6705C11D0Ev,_ZThn172_N8S6705C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6705C11D1Ev,_ZTv0_n20_N8S6705C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S6705C11D1Ev,_ZThn172_N8S6705C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S6705C1D0Ev,_ZTv0_n40_N7S6705C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn728_N7S6705C1D0Ev,_ZThn496_N7S6705C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S6705C1D1Ev,_ZTv0_n40_N7S6705C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn728_N7S6705C1D1Ev,_ZThn496_N7S6705C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C1D0Ev,_ZTv0_n36_N7S6705C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S6705C1D0Ev,_ZThn180_N7S6705C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C1D1Ev,_ZTv0_n36_N7S6705C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S6705C1D1Ev,_ZThn180_N7S6705C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6705C1D0Ev,_ZTv0_n20_N7S6705C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S6705C1D0Ev,_ZThn208_N7S6705C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S6705C1D0Ev,_ZThn68_N7S6705C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6705C1D1Ev,_ZTv0_n20_N7S6705C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S6705C1D1Ev,_ZThn208_N7S6705C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S6705C1D1Ev,_ZThn68_N7S6705C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S6705C1D0Ev,_ZTv0_n52_N7S6705C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6705C1D0Ev,_ZThn36_N7S6705C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S6705C1D1Ev,_ZTv0_n52_N7S6705C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6705C1D1Ev,_ZThn36_N7S6705C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6705C1 = {  "S6705C1", // class name
  bases_S6705C1, 33,
  &(vtc_S6705C1[0]), // expected_vtbl_contents
  &(vtt_S6705C1[0]), // expected_vtt_contents
  ABISELECT(968,640), // object size
  NSPAIRA(_ZTI7S6705C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6705C1),279, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6705C1),50, //virtual table table var
  33, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names14,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7059C2  {
  int s7059c2f0;
  __tsi64 s7059c2f1;
  void *s7059c2f2[4];
  int s7059c2f3[2];
  void *s7059c2f4;
  ::S2366C14_nt s7059c2f5;
  void *s7059c2f6[2];
  virtual  ~S7059C2(); // _ZN7S7059C2D1Ev
  virtual void  v6(); // _ZN7S7059C22v6Ev
  virtual void  v7(); // _ZN7S7059C22v7Ev
  virtual void  v8(); // _ZN7S7059C22v8Ev
  virtual void  v9(); // _ZN7S7059C22v9Ev
  virtual void  v10(); // _ZN7S7059C23v10Ev
  virtual void  v11(); // _ZN7S7059C23v11Ev
  virtual void  v12(); // _ZN7S7059C23v12Ev
  virtual void  v13(); // _ZN7S7059C23v13Ev
  virtual void  v14(); // _ZN7S7059C23v14Ev
  virtual void  v15(); // _ZN7S7059C23v15Ev
  virtual void  v16(); // _ZN7S7059C23v16Ev
  virtual void  v17(); // _ZN7S7059C23v17Ev
  virtual void  v18(); // _ZN7S7059C23v18Ev
  virtual void  v19(); // _ZN7S7059C23v19Ev
  virtual void  v20(); // _ZN7S7059C23v20Ev
  virtual void  v21(); // _ZN7S7059C23v21Ev
  virtual void  v22(); // _ZN7S7059C23v22Ev
  virtual void  v23(); // _ZN7S7059C23v23Ev
  virtual void  v24(); // _ZN7S7059C23v24Ev
  virtual void  v25(); // _ZN7S7059C23v25Ev
  virtual void  v26(); // _ZN7S7059C23v26Ev
  virtual void  v27(); // _ZN7S7059C23v27Ev
  virtual void  v28(); // _ZN7S7059C23v28Ev
  virtual void  v29(); // _ZN7S7059C23v29Ev
  virtual void  v30(); // _ZN7S7059C23v30Ev
  virtual void  v31(); // _ZN7S7059C23v31Ev
  virtual void  v32(); // _ZN7S7059C23v32Ev
  virtual void  v33(); // _ZN7S7059C23v33Ev
  virtual void  v34(); // _ZN7S7059C23v34Ev
  virtual void  v35(); // _ZN7S7059C23v35Ev
  virtual void  v36(); // _ZN7S7059C23v36Ev
  virtual void  v37(); // _ZN7S7059C23v37Ev
  virtual void  v38(); // _ZN7S7059C23v38Ev
  virtual void  v39(); // _ZN7S7059C23v39Ev
  virtual void  v40(); // _ZN7S7059C23v40Ev
  virtual void  v41(); // _ZN7S7059C23v41Ev
  virtual void  v42(); // _ZN7S7059C23v42Ev
  virtual void  v43(); // _ZN7S7059C23v43Ev
  virtual void  v44(); // _ZN7S7059C23v44Ev
  virtual void  v45(); // _ZN7S7059C23v45Ev
  virtual void  v46(); // _ZN7S7059C23v46Ev
  virtual void  v47(); // _ZN7S7059C23v47Ev
  virtual void  v48(); // _ZN7S7059C23v48Ev
  virtual void  v49(); // _ZN7S7059C23v49Ev
  virtual void  v50(); // _ZN7S7059C23v50Ev
  virtual void  v51(); // _ZN7S7059C23v51Ev
  virtual void  v52(); // _ZN7S7059C23v52Ev
  virtual void  v53(); // _ZN7S7059C23v53Ev
  virtual void  v54(); // _ZN7S7059C23v54Ev
  virtual void  v55(); // _ZN7S7059C23v55Ev
  virtual void  v56(); // _ZN7S7059C23v56Ev
  virtual void  v57(); // _ZN7S7059C23v57Ev
  virtual void  v58(); // _ZN7S7059C23v58Ev
  virtual void  v59(); // _ZN7S7059C23v59Ev
  virtual void  v60(); // _ZN7S7059C23v60Ev
  virtual void  v61(); // _ZN7S7059C23v61Ev
  virtual void  v62(); // _ZN7S7059C23v62Ev
  virtual void  v63(); // _ZN7S7059C23v63Ev
  virtual void  v64(); // _ZN7S7059C23v64Ev
  virtual void  v65(); // _ZN7S7059C23v65Ev
  virtual void  v66(); // _ZN7S7059C23v66Ev
  virtual void  v67(); // _ZN7S7059C23v67Ev
  virtual void  v68(); // _ZN7S7059C23v68Ev
  virtual void  v69(); // _ZN7S7059C23v69Ev
  S7059C2(); // tgen
};
//SIG(-1 S7059C2) 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]}


 S7059C2 ::~S7059C2(){ note_dtor("S7059C2", this);}
void  S7059C2 ::v6(){vfunc_called(this, "_ZN7S7059C22v6Ev");}
void  S7059C2 ::v7(){vfunc_called(this, "_ZN7S7059C22v7Ev");}
void  S7059C2 ::v8(){vfunc_called(this, "_ZN7S7059C22v8Ev");}
void  S7059C2 ::v9(){vfunc_called(this, "_ZN7S7059C22v9Ev");}
void  S7059C2 ::v10(){vfunc_called(this, "_ZN7S7059C23v10Ev");}
void  S7059C2 ::v11(){vfunc_called(this, "_ZN7S7059C23v11Ev");}
void  S7059C2 ::v12(){vfunc_called(this, "_ZN7S7059C23v12Ev");}
void  S7059C2 ::v13(){vfunc_called(this, "_ZN7S7059C23v13Ev");}
void  S7059C2 ::v14(){vfunc_called(this, "_ZN7S7059C23v14Ev");}
void  S7059C2 ::v15(){vfunc_called(this, "_ZN7S7059C23v15Ev");}
void  S7059C2 ::v16(){vfunc_called(this, "_ZN7S7059C23v16Ev");}
void  S7059C2 ::v17(){vfunc_called(this, "_ZN7S7059C23v17Ev");}
void  S7059C2 ::v18(){vfunc_called(this, "_ZN7S7059C23v18Ev");}
void  S7059C2 ::v19(){vfunc_called(this, "_ZN7S7059C23v19Ev");}
void  S7059C2 ::v20(){vfunc_called(this, "_ZN7S7059C23v20Ev");}
void  S7059C2 ::v21(){vfunc_called(this, "_ZN7S7059C23v21Ev");}
void  S7059C2 ::v22(){vfunc_called(this, "_ZN7S7059C23v22Ev");}
void  S7059C2 ::v23(){vfunc_called(this, "_ZN7S7059C23v23Ev");}
void  S7059C2 ::v24(){vfunc_called(this, "_ZN7S7059C23v24Ev");}
void  S7059C2 ::v25(){vfunc_called(this, "_ZN7S7059C23v25Ev");}
void  S7059C2 ::v26(){vfunc_called(this, "_ZN7S7059C23v26Ev");}
void  S7059C2 ::v27(){vfunc_called(this, "_ZN7S7059C23v27Ev");}
void  S7059C2 ::v28(){vfunc_called(this, "_ZN7S7059C23v28Ev");}
void  S7059C2 ::v29(){vfunc_called(this, "_ZN7S7059C23v29Ev");}
void  S7059C2 ::v30(){vfunc_called(this, "_ZN7S7059C23v30Ev");}
void  S7059C2 ::v31(){vfunc_called(this, "_ZN7S7059C23v31Ev");}
void  S7059C2 ::v32(){vfunc_called(this, "_ZN7S7059C23v32Ev");}
void  S7059C2 ::v33(){vfunc_called(this, "_ZN7S7059C23v33Ev");}
void  S7059C2 ::v34(){vfunc_called(this, "_ZN7S7059C23v34Ev");}
void  S7059C2 ::v35(){vfunc_called(this, "_ZN7S7059C23v35Ev");}
void  S7059C2 ::v36(){vfunc_called(this, "_ZN7S7059C23v36Ev");}
void  S7059C2 ::v37(){vfunc_called(this, "_ZN7S7059C23v37Ev");}
void  S7059C2 ::v38(){vfunc_called(this, "_ZN7S7059C23v38Ev");}
void  S7059C2 ::v39(){vfunc_called(this, "_ZN7S7059C23v39Ev");}
void  S7059C2 ::v40(){vfunc_called(this, "_ZN7S7059C23v40Ev");}
void  S7059C2 ::v41(){vfunc_called(this, "_ZN7S7059C23v41Ev");}
void  S7059C2 ::v42(){vfunc_called(this, "_ZN7S7059C23v42Ev");}
void  S7059C2 ::v43(){vfunc_called(this, "_ZN7S7059C23v43Ev");}
void  S7059C2 ::v44(){vfunc_called(this, "_ZN7S7059C23v44Ev");}
void  S7059C2 ::v45(){vfunc_called(this, "_ZN7S7059C23v45Ev");}
void  S7059C2 ::v46(){vfunc_called(this, "_ZN7S7059C23v46Ev");}
void  S7059C2 ::v47(){vfunc_called(this, "_ZN7S7059C23v47Ev");}
void  S7059C2 ::v48(){vfunc_called(this, "_ZN7S7059C23v48Ev");}
void  S7059C2 ::v49(){vfunc_called(this, "_ZN7S7059C23v49Ev");}
void  S7059C2 ::v50(){vfunc_called(this, "_ZN7S7059C23v50Ev");}
void  S7059C2 ::v51(){vfunc_called(this, "_ZN7S7059C23v51Ev");}
void  S7059C2 ::v52(){vfunc_called(this, "_ZN7S7059C23v52Ev");}
void  S7059C2 ::v53(){vfunc_called(this, "_ZN7S7059C23v53Ev");}
void  S7059C2 ::v54(){vfunc_called(this, "_ZN7S7059C23v54Ev");}
void  S7059C2 ::v55(){vfunc_called(this, "_ZN7S7059C23v55Ev");}
void  S7059C2 ::v56(){vfunc_called(this, "_ZN7S7059C23v56Ev");}
void  S7059C2 ::v57(){vfunc_called(this, "_ZN7S7059C23v57Ev");}
void  S7059C2 ::v58(){vfunc_called(this, "_ZN7S7059C23v58Ev");}
void  S7059C2 ::v59(){vfunc_called(this, "_ZN7S7059C23v59Ev");}
void  S7059C2 ::v60(){vfunc_called(this, "_ZN7S7059C23v60Ev");}
void  S7059C2 ::v61(){vfunc_called(this, "_ZN7S7059C23v61Ev");}
void  S7059C2 ::v62(){vfunc_called(this, "_ZN7S7059C23v62Ev");}
void  S7059C2 ::v63(){vfunc_called(this, "_ZN7S7059C23v63Ev");}
void  S7059C2 ::v64(){vfunc_called(this, "_ZN7S7059C23v64Ev");}
void  S7059C2 ::v65(){vfunc_called(this, "_ZN7S7059C23v65Ev");}
void  S7059C2 ::v66(){vfunc_called(this, "_ZN7S7059C23v66Ev");}
void  S7059C2 ::v67(){vfunc_called(this, "_ZN7S7059C23v67Ev");}
void  S7059C2 ::v68(){vfunc_called(this, "_ZN7S7059C23v68Ev");}
void  S7059C2 ::v69(){vfunc_called(this, "_ZN7S7059C23v69Ev");}
S7059C2 ::S7059C2(){ note_ctor("S7059C2", this);} // tgen

static void Test_S7059C2()
{
  extern Class_Descriptor cd_S7059C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S7059C2, buf);
    S7059C2 *dp, &lv = *(dp=new (buf) S7059C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S7059C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7059C2)");
    check_field_offset(lv, s7059c2f0, ABISELECT(8,4), "S7059C2.s7059c2f0");
    check_field_offset(lv, s7059c2f1, ABISELECT(16,8), "S7059C2.s7059c2f1");
    check_field_offset(lv, s7059c2f2, ABISELECT(24,16), "S7059C2.s7059c2f2");
    check_field_offset(lv, s7059c2f3, ABISELECT(56,32), "S7059C2.s7059c2f3");
    check_field_offset(lv, s7059c2f4, ABISELECT(64,40), "S7059C2.s7059c2f4");
    check_field_offset(lv, s7059c2f5, ABISELECT(72,44), "S7059C2.s7059c2f5");
    check_field_offset(lv, s7059c2f6, ABISELECT(80,52), "S7059C2.s7059c2f6");
    test_class_info(&lv, &cd_S7059C2);
    dp->~S7059C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7059C2(Test_S7059C2, "S7059C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S7059C2C1Ev();
extern void _ZN7S7059C2D1Ev();
Name_Map name_map_S7059C2[] = {
  NSPAIR(_ZN7S7059C2C1Ev),
  NSPAIR(_ZN7S7059C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7059C2[];
extern void _ZN7S7059C2D1Ev();
extern void _ZN7S7059C2D0Ev();
extern void _ZN7S7059C22v6Ev();
extern void _ZN7S7059C22v7Ev();
extern void _ZN7S7059C22v8Ev();
extern void _ZN7S7059C22v9Ev();
extern void _ZN7S7059C23v10Ev();
extern void _ZN7S7059C23v11Ev();
extern void _ZN7S7059C23v12Ev();
extern void _ZN7S7059C23v13Ev();
extern void _ZN7S7059C23v14Ev();
extern void _ZN7S7059C23v15Ev();
extern void _ZN7S7059C23v16Ev();
extern void _ZN7S7059C23v17Ev();
extern void _ZN7S7059C23v18Ev();
extern void _ZN7S7059C23v19Ev();
extern void _ZN7S7059C23v20Ev();
extern void _ZN7S7059C23v21Ev();
extern void _ZN7S7059C23v22Ev();
extern void _ZN7S7059C23v23Ev();
extern void _ZN7S7059C23v24Ev();
extern void _ZN7S7059C23v25Ev();
extern void _ZN7S7059C23v26Ev();
extern void _ZN7S7059C23v27Ev();
extern void _ZN7S7059C23v28Ev();
extern void _ZN7S7059C23v29Ev();
extern void _ZN7S7059C23v30Ev();
extern void _ZN7S7059C23v31Ev();
extern void _ZN7S7059C23v32Ev();
extern void _ZN7S7059C23v33Ev();
extern void _ZN7S7059C23v34Ev();
extern void _ZN7S7059C23v35Ev();
extern void _ZN7S7059C23v36Ev();
extern void _ZN7S7059C23v37Ev();
extern void _ZN7S7059C23v38Ev();
extern void _ZN7S7059C23v39Ev();
extern void _ZN7S7059C23v40Ev();
extern void _ZN7S7059C23v41Ev();
extern void _ZN7S7059C23v42Ev();
extern void _ZN7S7059C23v43Ev();
extern void _ZN7S7059C23v44Ev();
extern void _ZN7S7059C23v45Ev();
extern void _ZN7S7059C23v46Ev();
extern void _ZN7S7059C23v47Ev();
extern void _ZN7S7059C23v48Ev();
extern void _ZN7S7059C23v49Ev();
extern void _ZN7S7059C23v50Ev();
extern void _ZN7S7059C23v51Ev();
extern void _ZN7S7059C23v52Ev();
extern void _ZN7S7059C23v53Ev();
extern void _ZN7S7059C23v54Ev();
extern void _ZN7S7059C23v55Ev();
extern void _ZN7S7059C23v56Ev();
extern void _ZN7S7059C23v57Ev();
extern void _ZN7S7059C23v58Ev();
extern void _ZN7S7059C23v59Ev();
extern void _ZN7S7059C23v60Ev();
extern void _ZN7S7059C23v61Ev();
extern void _ZN7S7059C23v62Ev();
extern void _ZN7S7059C23v63Ev();
extern void _ZN7S7059C23v64Ev();
extern void _ZN7S7059C23v65Ev();
extern void _ZN7S7059C23v66Ev();
extern void _ZN7S7059C23v67Ev();
extern void _ZN7S7059C23v68Ev();
extern void _ZN7S7059C23v69Ev();
static  VTBL_ENTRY vtc_S7059C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7059C2[0]),
  (VTBL_ENTRY)&_ZN7S7059C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7059C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7059C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7059C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7059C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7059C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v27Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v28Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v29Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v30Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v31Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v32Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v33Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v34Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v35Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v36Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v37Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v38Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v39Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v40Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v41Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v42Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v43Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v44Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v45Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v46Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v47Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v48Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v49Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v50Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v51Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v52Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v53Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v54Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v55Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v56Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v57Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v58Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v59Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v60Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v61Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v62Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v63Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v64Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v65Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v66Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v67Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v68Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v69Ev,
};
extern VTBL_ENTRY _ZTI7S7059C2[];
extern  VTBL_ENTRY _ZTV7S7059C2[];
Class_Descriptor cd_S7059C2 = {  "S7059C2", // class name
  0,0,//no base classes
  &(vtc_S7059C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S7059C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7059C2),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  S7059C1  : S7059C2 {
  ::S1503C29 s7059c1f0;
  virtual  ~S7059C1(); // _ZN7S7059C1D1Ev
  virtual void  v1(); // _ZN7S7059C12v1Ev
  virtual void  v2(); // _ZN7S7059C12v2Ev
  virtual void  v3(); // _ZN7S7059C12v3Ev
  virtual void  v4(); // _ZN7S7059C12v4Ev
  virtual void  v5(); // _ZN7S7059C12v5Ev
  S7059C1(); // tgen
};
//SIG(1 S7059C1) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 FC4{ BC5{ m Fp Fi[2]}}}


 S7059C1 ::~S7059C1(){ note_dtor("S7059C1", this);}
void  S7059C1 ::v1(){vfunc_called(this, "_ZN7S7059C12v1Ev");}
void  S7059C1 ::v2(){vfunc_called(this, "_ZN7S7059C12v2Ev");}
void  S7059C1 ::v3(){vfunc_called(this, "_ZN7S7059C12v3Ev");}
void  S7059C1 ::v4(){vfunc_called(this, "_ZN7S7059C12v4Ev");}
void  S7059C1 ::v5(){vfunc_called(this, "_ZN7S7059C12v5Ev");}
S7059C1 ::S7059C1(){ note_ctor("S7059C1", this);} // tgen

static void Test_S7059C1()
{
  extern Class_Descriptor cd_S7059C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S7059C1, buf);
    S7059C1 *dp, &lv = *(dp=new (buf) S7059C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S7059C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7059C1)");
    check_base_class_offset(lv, (S7059C2*), 0, "S7059C1");
    check_field_offset(lv, s7059c1f0, ABISELECT(96,60), "S7059C1.s7059c1f0");
    test_class_info(&lv, &cd_S7059C1);
    dp->~S7059C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7059C1(Test_S7059C1, "S7059C1", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN7S7059C1C1Ev();
extern void _ZN7S7059C1D1Ev();
Name_Map name_map_S7059C1[] = {
  NSPAIR(_ZN7S7059C1C1Ev),
  NSPAIR(_ZN7S7059C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7059C2;
extern VTBL_ENTRY _ZTI7S7059C2[];
extern  VTBL_ENTRY _ZTV7S7059C2[];
static Base_Class bases_S7059C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7059C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7059C1[];
extern void _ZN7S7059C1D1Ev();
extern void _ZN7S7059C1D0Ev();
extern void _ZN7S7059C22v6Ev();
extern void _ZN7S7059C22v7Ev();
extern void _ZN7S7059C22v8Ev();
extern void _ZN7S7059C22v9Ev();
extern void _ZN7S7059C23v10Ev();
extern void _ZN7S7059C23v11Ev();
extern void _ZN7S7059C23v12Ev();
extern void _ZN7S7059C23v13Ev();
extern void _ZN7S7059C23v14Ev();
extern void _ZN7S7059C23v15Ev();
extern void _ZN7S7059C23v16Ev();
extern void _ZN7S7059C23v17Ev();
extern void _ZN7S7059C23v18Ev();
extern void _ZN7S7059C23v19Ev();
extern void _ZN7S7059C23v20Ev();
extern void _ZN7S7059C23v21Ev();
extern void _ZN7S7059C23v22Ev();
extern void _ZN7S7059C23v23Ev();
extern void _ZN7S7059C23v24Ev();
extern void _ZN7S7059C23v25Ev();
extern void _ZN7S7059C23v26Ev();
extern void _ZN7S7059C23v27Ev();
extern void _ZN7S7059C23v28Ev();
extern void _ZN7S7059C23v29Ev();
extern void _ZN7S7059C23v30Ev();
extern void _ZN7S7059C23v31Ev();
extern void _ZN7S7059C23v32Ev();
extern void _ZN7S7059C23v33Ev();
extern void _ZN7S7059C23v34Ev();
extern void _ZN7S7059C23v35Ev();
extern void _ZN7S7059C23v36Ev();
extern void _ZN7S7059C23v37Ev();
extern void _ZN7S7059C23v38Ev();
extern void _ZN7S7059C23v39Ev();
extern void _ZN7S7059C23v40Ev();
extern void _ZN7S7059C23v41Ev();
extern void _ZN7S7059C23v42Ev();
extern void _ZN7S7059C23v43Ev();
extern void _ZN7S7059C23v44Ev();
extern void _ZN7S7059C23v45Ev();
extern void _ZN7S7059C23v46Ev();
extern void _ZN7S7059C23v47Ev();
extern void _ZN7S7059C23v48Ev();
extern void _ZN7S7059C23v49Ev();
extern void _ZN7S7059C23v50Ev();
extern void _ZN7S7059C23v51Ev();
extern void _ZN7S7059C23v52Ev();
extern void _ZN7S7059C23v53Ev();
extern void _ZN7S7059C23v54Ev();
extern void _ZN7S7059C23v55Ev();
extern void _ZN7S7059C23v56Ev();
extern void _ZN7S7059C23v57Ev();
extern void _ZN7S7059C23v58Ev();
extern void _ZN7S7059C23v59Ev();
extern void _ZN7S7059C23v60Ev();
extern void _ZN7S7059C23v61Ev();
extern void _ZN7S7059C23v62Ev();
extern void _ZN7S7059C23v63Ev();
extern void _ZN7S7059C23v64Ev();
extern void _ZN7S7059C23v65Ev();
extern void _ZN7S7059C23v66Ev();
extern void _ZN7S7059C23v67Ev();
extern void _ZN7S7059C23v68Ev();
extern void _ZN7S7059C23v69Ev();
extern void _ZN7S7059C12v1Ev();
extern void _ZN7S7059C12v2Ev();
extern void _ZN7S7059C12v3Ev();
extern void _ZN7S7059C12v4Ev();
extern void _ZN7S7059C12v5Ev();
static  VTBL_ENTRY vtc_S7059C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7059C1[0]),
  (VTBL_ENTRY)&_ZN7S7059C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7059C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7059C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7059C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7059C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7059C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v27Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v28Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v29Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v30Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v31Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v32Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v33Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v34Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v35Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v36Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v37Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v38Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v39Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v40Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v41Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v42Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v43Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v44Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v45Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v46Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v47Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v48Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v49Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v50Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v51Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v52Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v53Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v54Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v55Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v56Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v57Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v58Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v59Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v60Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v61Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v62Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v63Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v64Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v65Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v66Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v67Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v68Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v69Ev,
  (VTBL_ENTRY)&_ZN7S7059C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7059C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7059C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7059C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7059C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S7059C1[];
extern  VTBL_ENTRY _ZTV7S7059C1[];
Class_Descriptor cd_S7059C1 = {  "S7059C1", // class name
  bases_S7059C1, 1,
  &(vtc_S7059C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI7S7059C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7059C1),73, //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  S19934C2  {
  short s19934c2f0;
  __tsi64 s19934c2f1[4];
  void *s19934c2f2;
  char s19934c2f3;
  void *s19934c2f4;
  __tsi64 s19934c2f5;
  int s19934c2f6[10];
  virtual void  v1(); // _ZN8S19934C22v1Ev
  ~S19934C2(); // tgen
  S19934C2(); // tgen
};
//SIG(-1 S19934C2) C1{ v1 Fs FL[4] Fp Fc Fp FL Fi[10]}


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

static void Test_S19934C2()
{
  extern Class_Descriptor cd_S19934C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,26)];
    init_test(&cd_S19934C2, buf);
    S19934C2 *dp, &lv = *(dp=new (buf) S19934C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,100), "sizeof(S19934C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19934C2)");
    check_field_offset(lv, s19934c2f0, ABISELECT(8,4), "S19934C2.s19934c2f0");
    check_field_offset(lv, s19934c2f1, ABISELECT(16,8), "S19934C2.s19934c2f1");
    check_field_offset(lv, s19934c2f2, ABISELECT(48,40), "S19934C2.s19934c2f2");
    check_field_offset(lv, s19934c2f3, ABISELECT(56,44), "S19934C2.s19934c2f3");
    check_field_offset(lv, s19934c2f4, ABISELECT(64,48), "S19934C2.s19934c2f4");
    check_field_offset(lv, s19934c2f5, ABISELECT(72,52), "S19934C2.s19934c2f5");
    check_field_offset(lv, s19934c2f6, ABISELECT(80,60), "S19934C2.s19934c2f6");
    test_class_info(&lv, &cd_S19934C2);
    dp->~S19934C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19934C2(Test_S19934C2, "S19934C2", ABISELECT(120,100));

#else // __cplusplus

extern void _ZN8S19934C2C1Ev();
extern void _ZN8S19934C2D1Ev();
Name_Map name_map_S19934C2[] = {
  NSPAIR(_ZN8S19934C2C1Ev),
  NSPAIR(_ZN8S19934C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19934C2[];
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY vtc_S19934C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C2[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
Class_Descriptor cd_S19934C2 = {  "S19934C2", // class name
  0,0,//no base classes
  &(vtc_S19934C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,100), // object size
  NSPAIRA(_ZTI8S19934C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19934C2),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19934C6  : virtual S19934C2 {
  ::S19934C2 s19934c6f0[8];
  int s19934c6f1;
  char s19934c6f2;
  ::S19934C2 s19934c6f3;
  int s19934c6f4;
  ~S19934C6(); // tgen
  S19934C6(); // tgen
};
//SIG(-1 S19934C6) C1{ VBC2{ v1 Fs FL[4] Fp Fc Fp FL Fi[10]} FC2[8] Fi Fc FC2 Fi}


S19934C6 ::~S19934C6(){ note_dtor("S19934C6", this);} // tgen
S19934C6 ::S19934C6(){ note_ctor("S19934C6", this);} // tgen

static void Test_S19934C6()
{
  extern Class_Descriptor cd_S19934C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(154,255)];
    init_test(&cd_S19934C6, buf);
    S19934C6 *dp, &lv = *(dp=new (buf) S19934C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1224,1016), "sizeof(S19934C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19934C6)");
    check_base_class_offset(lv, (S19934C2*), ABISELECT(1104,916), "S19934C6");
    check_field_offset(lv, s19934c6f0, ABISELECT(8,4), "S19934C6.s19934c6f0");
    check_field_offset(lv, s19934c6f1, ABISELECT(968,804), "S19934C6.s19934c6f1");
    check_field_offset(lv, s19934c6f2, ABISELECT(972,808), "S19934C6.s19934c6f2");
    check_field_offset(lv, s19934c6f3, ABISELECT(976,812), "S19934C6.s19934c6f3");
    check_field_offset(lv, s19934c6f4, ABISELECT(1096,912), "S19934C6.s19934c6f4");
    test_class_info(&lv, &cd_S19934C6);
    dp->~S19934C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19934C6(Test_S19934C6, "S19934C6", ABISELECT(1224,1016));

#else // __cplusplus

extern void _ZN8S19934C6C1Ev();
extern void _ZN8S19934C6D1Ev();
Name_Map name_map_S19934C6[] = {
  NSPAIR(_ZN8S19934C6C1Ev),
  NSPAIR(_ZN8S19934C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
static Base_Class bases_S19934C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19934C2,    ABISELECT(1104,916), //bcp->offset
    3, //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 _ZTI8S19934C6[];
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY vtc_S19934C6[] = {
  ABISELECT(1104,916),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  0,
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S19934C6[];
static  VTT_ENTRY vtt_S19934C6[] = {
  {&(_ZTV8S19934C6[3]),  3,7},
  {&(_ZTV8S19934C6[6]),  6,7},
};
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
Class_Descriptor cd_S19934C6 = {  "S19934C6", // class name
  bases_S19934C6, 1,
  &(vtc_S19934C6[0]), // expected_vtbl_contents
  &(vtt_S19934C6[0]), // expected_vtt_contents
  ABISELECT(1224,1016), // object size
  NSPAIRA(_ZTI8S19934C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19934C6),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19934C6),2, //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  S19934C7  : virtual S19934C2 , virtual S19934C6 {
  void *s19934c7f0;
  int s19934c7f1[6];
  char s19934c7f2;
  ::S19934C2 s19934c7f3;
  void *s19934c7f4;
  virtual  ~S19934C7(); // _ZN8S19934C7D2Ev
  S19934C7(); // tgen
};
//SIG(-1 S19934C7) C1{ VBC2{ v1 Fs FL[4] Fp Fc Fp FL Fi[10]} VBC3{ VBC2 FC2[8] Fi Fc FC2 Fi} vd Fp Fi[6] Fc FC2 Fp}


 S19934C7 ::~S19934C7(){ note_dtor("S19934C7", this);}
S19934C7 ::S19934C7(){ note_ctor("S19934C7", this);} // tgen

static void Test_S19934C7()
{
  extern Class_Descriptor cd_S19934C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(176,290)];
    init_test(&cd_S19934C7, buf);
    S19934C7 *dp, &lv = *(dp=new (buf) S19934C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1400,1156), "sizeof(S19934C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19934C7)");
    check_base_class_offset(lv, (S19934C2*), ABISELECT(176,140), "S19934C7");
    check_base_class_offset(lv, (S19934C2*)(S19934C6*), ABISELECT(176,140), "S19934C7");
    check_base_class_offset(lv, (S19934C6*), ABISELECT(296,240), "S19934C7");
    check_field_offset(lv, s19934c7f0, ABISELECT(8,4), "S19934C7.s19934c7f0");
    check_field_offset(lv, s19934c7f1, ABISELECT(16,8), "S19934C7.s19934c7f1");
    check_field_offset(lv, s19934c7f2, ABISELECT(40,32), "S19934C7.s19934c7f2");
    check_field_offset(lv, s19934c7f3, ABISELECT(48,36), "S19934C7.s19934c7f3");
    check_field_offset(lv, s19934c7f4, ABISELECT(168,136), "S19934C7.s19934c7f4");
    test_class_info(&lv, &cd_S19934C7);
    dp->~S19934C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19934C7(Test_S19934C7, "S19934C7", ABISELECT(1400,1156));

#else // __cplusplus

extern void _ZN8S19934C7C1Ev();
extern void _ZN8S19934C7D2Ev();
Name_Map name_map_S19934C7[] = {
  NSPAIR(_ZN8S19934C7C1Ev),
  NSPAIR(_ZN8S19934C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
static Base_Class bases_S19934C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19934C2,    ABISELECT(176,140), //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19934C6,    ABISELECT(296,240), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19934C7[];
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY vtc_S19934C7[] = {
  ABISELECT(296,240),
  ABISELECT(176,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
  0,
  ABISELECT(-176,-140),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  ABISELECT(-120,-100),
  ABISELECT(-296,-240),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern VTBL_ENTRY _ZTV8S19934C7[];
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C7[] = {
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C6__8S19934C7[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTT_ENTRY vtt_S19934C7[] = {
  {&(_ZTV8S19934C7[4]),  4,13},
  {&(_ZTV8S19934C7[9]),  9,13},
  {&(_ZTV8S19934C7[13]),  13,13},
  {&(_tg__ZTV8S19934C6__8S19934C7[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C6__8S19934C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
Class_Descriptor cd_S19934C7 = {  "S19934C7", // class name
  bases_S19934C7, 2,
  &(vtc_S19934C7[0]), // expected_vtbl_contents
  &(vtt_S19934C7[0]), // expected_vtt_contents
  ABISELECT(1400,1156), // object size
  NSPAIRA(_ZTI8S19934C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19934C7),13, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19934C7),5, //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  S19934C5  : virtual S19934C2 , S19934C6 , S19934C7 {
  __tsi64 s19934c5f0;
  void *s19934c5f1[2];
  virtual  ~S19934C5(); // _ZN8S19934C5D2Ev
  virtual void  v2(); // _ZN8S19934C52v2Ev
  S19934C5(); // tgen
};
//SIG(-1 S19934C5) C1{ VBC2{ v2 Fs FL[4] Fp Fc Fp FL Fi[10]} BC3{ VBC2 FC2[8] Fi Fc FC2 Fi} BC4{ VBC2 VBC3 vd Fp Fi[6] Fc FC2 Fp} vd v1 FL Fp[2]}


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

static void Test_S19934C5()
{
  extern Class_Descriptor cd_S19934C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(317,523)];
    init_test(&cd_S19934C5, buf);
    S19934C5 *dp, &lv = *(dp=new (buf) S19934C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2528,2088), "sizeof(S19934C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19934C5)");
    check_base_class_offset(lv, (S19934C2*), ABISELECT(1304,1072), "S19934C5");
    /*is_ambiguous_... S19934C5::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*), ABISELECT(1304,1072), "S19934C5");
    check_base_class_offset(lv, (S19934C2*)(S19934C7*), ABISELECT(1304,1072), "S19934C5");
    /*is_ambiguous_... S19934C5::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*), ABISELECT(1304,1072), "S19934C5");
    /*is_ambiguous_... S19934C5::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C6*), 0, "S19934C5");
    check_base_class_offset(lv, (S19934C6*)(S19934C7*), ABISELECT(1424,1172), "S19934C5");
    check_base_class_offset(lv, (S19934C7*), ABISELECT(1104,916), "S19934C5");
    check_field_offset(lv, s19934c5f0, ABISELECT(1280,1056), "S19934C5.s19934c5f0");
    check_field_offset(lv, s19934c5f1, ABISELECT(1288,1064), "S19934C5.s19934c5f1");
    test_class_info(&lv, &cd_S19934C5);
    dp->~S19934C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19934C5(Test_S19934C5, "S19934C5", ABISELECT(2528,2088));

#else // __cplusplus

extern void _ZN8S19934C5C1Ev();
extern void _ZN8S19934C5D2Ev();
Name_Map name_map_S19934C5[] = {
  NSPAIR(_ZN8S19934C5C1Ev),
  NSPAIR(_ZN8S19934C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
static Base_Class bases_S19934C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19934C2,    ABISELECT(1304,1072), //bcp->offset
    13, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S19934C6,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19934C6,    ABISELECT(1424,1172), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //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
    3, //immediately_derived
  0, 1},
  {&cd_S19934C7,    ABISELECT(1104,916), //bcp->offset
    7, //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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19934C5[];
extern void _ZN8S19934C5D1Ev();
extern void _ZN8S19934C5D0Ev();
extern void _ZN8S19934C52v2Ev();
extern void ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev)();
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY vtc_S19934C5[] = {
  ABISELECT(1424,1172),
  ABISELECT(1304,1072),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
  ABISELECT(320,256),
  ABISELECT(200,156),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev),
  0,
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  ABISELECT(-120,-100),
  ABISELECT(-1424,-1172),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
};
extern VTBL_ENTRY _ZTV8S19934C5[];
static  VTBL_ENTRY _tg__ZTV8S19934C6__A__8S19934C5[] = {
  ABISELECT(1304,1072),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C6__A__8S19934C5[] = {
  0,
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C7__8S19934C5[] = {
  ABISELECT(320,256),
  ABISELECT(200,156),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C7__8S19934C5[] = {
  0,
  ABISELECT(-200,-156),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C7__8S19934C5[] = {
  ABISELECT(-120,-100),
  ABISELECT(-320,-256),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C5[] = {
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C6__A1__8S19934C5[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTT_ENTRY vtt_S19934C5[] = {
  {&(_ZTV8S19934C5[4]),  4,20},
  {&(_tg__ZTV8S19934C6__A__8S19934C5[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C6__A__8S19934C5[3]),  3,4},
  {&(_tg__ZTV8S19934C7__8S19934C5[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C7__8S19934C5[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C7__8S19934C5[3]),  3,3},
  {&(_ZTV8S19934C5[16]),  16,20},
  {&(_ZTV8S19934C5[11]),  11,20},
  {&(_ZTV8S19934C5[20]),  20,20},
  {&(_tg__ZTV8S19934C6__A1__8S19934C5[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C6__A1__8S19934C5[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19934C5[];
extern  VTBL_ENTRY _ZTV8S19934C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C5[];
Class_Descriptor cd_S19934C5 = {  "S19934C5", // class name
  bases_S19934C5, 4,
  &(vtc_S19934C5[0]), // expected_vtbl_contents
  &(vtt_S19934C5[0]), // expected_vtt_contents
  ABISELECT(2528,2088), // object size
  NSPAIRA(_ZTI8S19934C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19934C5),20, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19934C5),11, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19934C4  : virtual S19934C2 , S19934C5 , S19934C6 , S19934C7 {
  __tsi64 s19934c4f0;
  ::S19934C7 s19934c4f1[2];
  __tsi64 s19934c4f2;
  int s19934c4f3;
  ::S20677C6_nt s19934c4f4;
  virtual  ~S19934C4(); // _ZN8S19934C4D2Ev
  S19934C4(); // tgen
};
//SIG(-1 S19934C4) C1{ VBC2{ v1 Fs FL[4] Fp Fc Fp FL Fi[10]} BC3{ VBC2 BC4{ VBC2 FC2[8] Fi Fc FC2 Fi} BC5{ VBC2 VBC4 vd Fp Fi[6] Fc FC2 Fp} vd v2 FL Fp[2]} BC4 BC5 vd FL FC5[2] FL Fi FC6{}}


 S19934C4 ::~S19934C4(){ note_dtor("S19934C4", this);}
S19934C4 ::S19934C4(){ note_ctor("S19934C4", this);} // tgen

static void Test_S19934C4()
{
  extern Class_Descriptor cd_S19934C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(830,1371)];
    init_test(&cd_S19934C4, buf);
    S19934C4 *dp, &lv = *(dp=new (buf) S19934C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6632,5480), "sizeof(S19934C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19934C4)");
    check_base_class_offset(lv, (S19934C2*), ABISELECT(5408,4464), "S19934C4");
    check_base_class_offset(lv, (S19934C2*)(S19934C5*), ABISELECT(5408,4464), "S19934C4");
    /*is_ambiguous_... S19934C5::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*)(S19934C5*), ABISELECT(5408,4464), "S19934C4");
    check_base_class_offset(lv, (S19934C2*)(S19934C7*)(S19934C5*), ABISELECT(5408,4464), "S19934C4");
    /*is_ambiguous_... S19934C4::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*), ABISELECT(5408,4464), "S19934C4");
    /*is_ambiguous_... S19934C4::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*), ABISELECT(5408,4464), "S19934C4");
    /*is_ambiguous_... S19934C4::S19934C7 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C7*), ABISELECT(5408,4464), "S19934C4");
    /*is_ambiguous_... S19934C5::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C5*), 0, "S19934C4");
    check_base_class_offset(lv, (S19934C6*)(S19934C7*)(S19934C5*), ABISELECT(5528,4564), "S19934C4");
    /*is_ambiguous_... S19934C4::S19934C7 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C7*), ABISELECT(5528,4564), "S19934C4");
    check_base_class_offset(lv, (S19934C7*)(S19934C5*), ABISELECT(1104,916), "S19934C4");
    check_base_class_offset(lv, (S19934C5*), 0, "S19934C4");
    /*is_ambiguous_... S19934C4::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C6*), ABISELECT(1304,1072), "S19934C4");
    /*is_ambiguous_... S19934C4::S19934C7 */ AMB_check_base_class_offset(lv, (S19934C7*), ABISELECT(2408,1988), "S19934C4");
    check_field_offset(lv, s19934c4f0, ABISELECT(2584,2128), "S19934C4.s19934c4f0");
    check_field_offset(lv, s19934c4f1, ABISELECT(2592,2136), "S19934C4.s19934c4f1");
    check_field_offset(lv, s19934c4f2, ABISELECT(5392,4448), "S19934C4.s19934c4f2");
    check_field_offset(lv, s19934c4f3, ABISELECT(5400,4456), "S19934C4.s19934c4f3");
    check_field_offset(lv, s19934c4f4, ABISELECT(5404,4460), "S19934C4.s19934c4f4");
    test_class_info(&lv, &cd_S19934C4);
    dp->~S19934C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19934C4(Test_S19934C4, "S19934C4", ABISELECT(6632,5480));

#else // __cplusplus

extern void _ZN8S19934C4C1Ev();
extern void _ZN8S19934C4D2Ev();
Name_Map name_map_S19934C4[] = {
  NSPAIR(_ZN8S19934C4C1Ev),
  NSPAIR(_ZN8S19934C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C5;
extern VTBL_ENTRY _ZTI8S19934C5[];
extern  VTBL_ENTRY _ZTV8S19934C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C5[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
static Base_Class bases_S19934C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19934C2,    ABISELECT(5408,4464), //bcp->offset
    22, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19934C6,    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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19934C6,    ABISELECT(5528,4564), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19934C7,    ABISELECT(1104,916), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19934C5,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19934C6,    ABISELECT(1304,1072), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19934C7,    ABISELECT(2408,1988), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19934C4[];
extern void _ZN8S19934C4D1Ev();
extern void _ZN8S19934C4D0Ev();
extern void _ZN8S19934C52v2Ev();
extern void ABISELECT(_ZThn1104_N8S19934C4D1Ev,_ZThn916_N8S19934C4D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C4D0Ev,_ZThn916_N8S19934C4D0Ev)();
extern void ABISELECT(_ZThn2408_N8S19934C4D1Ev,_ZThn1988_N8S19934C4D1Ev)();
extern void ABISELECT(_ZThn2408_N8S19934C4D0Ev,_ZThn1988_N8S19934C4D0Ev)();
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY vtc_S19934C4[] = {
  ABISELECT(5528,4564),
  ABISELECT(5408,4464),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  (VTBL_ENTRY)&_ZN8S19934C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
  ABISELECT(4424,3648),
  ABISELECT(4304,3548),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C4D1Ev,_ZThn916_N8S19934C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C4D0Ev,_ZThn916_N8S19934C4D0Ev),
  ABISELECT(4104,3392),
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  ABISELECT(3120,2576),
  ABISELECT(3000,2476),
  ABISELECT(-2408,-1988),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N8S19934C4D1Ev,_ZThn1988_N8S19934C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N8S19934C4D0Ev,_ZThn1988_N8S19934C4D0Ev),
  0,
  ABISELECT(-5408,-4464),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  ABISELECT(-120,-100),
  ABISELECT(-5528,-4564),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
};
extern VTBL_ENTRY _ZTV8S19934C4[];
extern void _ZN8S19934C5D1Ev();
extern void _ZN8S19934C5D0Ev();
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C5__8S19934C4[] = {
  ABISELECT(5528,4564),
  ABISELECT(5408,4464),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C68S19934C5__8S19934C4[] = {
  ABISELECT(5408,4464),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C68S19934C5__8S19934C4[] = {
  0,
  ABISELECT(-5408,-4464),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C5__8S19934C4[] = {
  ABISELECT(4424,3648),
  ABISELECT(4304,3548),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C78S19934C5__8S19934C4[] = {
  0,
  ABISELECT(-4304,-3548),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C78S19934C5__8S19934C4[] = {
  ABISELECT(-120,-100),
  ABISELECT(-4424,-3648),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C5__8S19934C4[] = {
  0,
  ABISELECT(-5408,-4464),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C7__8S19934C5__8S19934C4[] = {
  ABISELECT(4424,3648),
  ABISELECT(4304,3548),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C5__8S19934C4[] = {
  ABISELECT(-120,-100),
  ABISELECT(-5528,-4564),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A__8S19934C4[] = {
  ABISELECT(4104,3392),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C6__A__8S19934C4[] = {
  0,
  ABISELECT(-4104,-3392),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C7__A1__8S19934C4[] = {
  ABISELECT(3120,2576),
  ABISELECT(3000,2476),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C7__A1__8S19934C4[] = {
  0,
  ABISELECT(-3000,-2476),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C7__A1__8S19934C4[] = {
  ABISELECT(-120,-100),
  ABISELECT(-3120,-2576),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C4[] = {
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C6__A1__8S19934C4[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTT_ENTRY vtt_S19934C4[] = {
  {&(_ZTV8S19934C4[4]),  4,29},
  {&(_tg__ZTV8S19934C5__8S19934C4[4]),  4,7},
  {&(_tg__ZTV8S19934C68S19934C5__8S19934C4[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C68S19934C5__8S19934C4[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C5__8S19934C4[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C78S19934C5__8S19934C4[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C78S19934C5__8S19934C4[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C5__8S19934C4[3]),  3,4},
  {&(_tg__ZTV8S19934C7__8S19934C5__8S19934C4[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C5__8S19934C4[3]),  3,3},
  {&(_tg__ZTV8S19934C6__A__8S19934C4[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C6__A__8S19934C4[3]),  3,4},
  {&(_tg__ZTV8S19934C7__A1__8S19934C4[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C7__A1__8S19934C4[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C7__A1__8S19934C4[3]),  3,3},
  {&(_ZTV8S19934C4[25]),  25,29},
  {&(_ZTV8S19934C4[11]),  11,29},
  {&(_ZTV8S19934C4[29]),  29,29},
  {&(_ZTV8S19934C4[16]),  16,29},
  {&(_ZTV8S19934C4[20]),  20,29},
  {&(_tg__ZTV8S19934C6__A1__8S19934C4[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C6__A1__8S19934C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19934C4[];
extern  VTBL_ENTRY _ZTV8S19934C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C4[];
Class_Descriptor cd_S19934C4 = {  "S19934C4", // class name
  bases_S19934C4, 7,
  &(vtc_S19934C4[0]), // expected_vtbl_contents
  &(vtt_S19934C4[0]), // expected_vtt_contents
  ABISELECT(6632,5480), // object size
  NSPAIRA(_ZTI8S19934C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19934C4),29, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19934C4),22, //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  S19934C10  {
  __tsi64 s19934c10f0;
  ::S19934C5 s19934c10f1;
  void *s19934c10f2[8];
  long s19934c10f3;
  void  mf19934c10(); // _ZN9S19934C1010mf19934c10Ev
};
//SIG(-1 S19934C10) C1{ m FL FC2{ VBC3{ v2 Fs FL[4] Fp Fc Fp FL Fi[10]} BC4{ VBC3 FC3[8] Fi Fc FC3 Fi} BC5{ VBC3 VBC4 vd Fp Fi[6] Fc FC3 Fp} vd v1 FL Fp[2]} Fp[8] Fl}


void  S19934C10 ::mf19934c10(){}

static void Test_S19934C10()
{
  {
    init_simple_test("S19934C10");
    S19934C10 lv;
    check2(sizeof(lv), ABISELECT(2608,2132), "sizeof(S19934C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19934C10)");
    check_field_offset(lv, s19934c10f0, 0, "S19934C10.s19934c10f0");
    check_field_offset(lv, s19934c10f1, 8, "S19934C10.s19934c10f1");
    check_field_offset(lv, s19934c10f2, ABISELECT(2536,2096), "S19934C10.s19934c10f2");
    check_field_offset(lv, s19934c10f3, ABISELECT(2600,2128), "S19934C10.s19934c10f3");
  }
}
static Arrange_To_Call_Me vS19934C10(Test_S19934C10, "S19934C10", ABISELECT(2608,2132));

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S19934C10[];
VTBL_ENTRY *P__ZTI9S19934C10 = _ZTI9S19934C10; 
Class_Descriptor cd_S19934C10 = {  "S19934C10", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(2608,2132), // object size
  NSPAIRA(_ZTI9S19934C10),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  S19934C11  : S19934C6 , virtual S19934C10 , S19934C7 , S19934C2 {
  void *s19934c11f0;
  int s19934c11f1[3];
  ~S19934C11(); // tgen
  S19934C11(); // tgen
};
//SIG(-1 S19934C11) C1{ BC2{ VBC3{ v1 Fs FL[4] Fp Fc Fp FL Fi[10]} FC3[8] Fi Fc FC3 Fi} VBC4{ m FL FC5{ VBC3 BC2 BC6{ VBC3 VBC2 vd Fp Fi[6] Fc FC3 Fp} vd v2 FL Fp[2]} Fp[8] Fl} BC6 BC3 Fp Fi[3]}


S19934C11 ::~S19934C11(){ note_dtor("S19934C11", this);} // tgen
S19934C11 ::S19934C11(){ note_ctor("S19934C11", this);} // tgen

static void Test_S19934C11()
{
  extern Class_Descriptor cd_S19934C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(658,1081)];
    init_test(&cd_S19934C11, buf);
    S19934C11 *dp, &lv = *(dp=new (buf) S19934C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5256,4320), "sizeof(S19934C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19934C11)");
    /*is_ambiguous_... S19934C11::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*), ABISELECT(1424,1172), "S19934C11");
    check_base_class_offset(lv, (S19934C2*)(S19934C7*), ABISELECT(1424,1172), "S19934C11");
    /*is_ambiguous_... S19934C11::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*), ABISELECT(1424,1172), "S19934C11");
    /*is_ambiguous_... S19934C11::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C6*), 0, "S19934C11");
    check_base_class_offset(lv, (S19934C10*), ABISELECT(1544,1272), "S19934C11");
    check_base_class_offset(lv, (S19934C6*)(S19934C7*), ABISELECT(4152,3404), "S19934C11");
    check_base_class_offset(lv, (S19934C7*), ABISELECT(1104,916), "S19934C11");
    /*is_ambiguous_... S19934C11::S19934C2 */ AMB_check_base_class_offset(lv, (S19934C2*), ABISELECT(1280,1056), "S19934C11");
    check_field_offset(lv, s19934c11f0, ABISELECT(1400,1156), "S19934C11.s19934c11f0");
    check_field_offset(lv, s19934c11f1, ABISELECT(1408,1160), "S19934C11.s19934c11f1");
    test_class_info(&lv, &cd_S19934C11);
    dp->~S19934C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19934C11(Test_S19934C11, "S19934C11", ABISELECT(5256,4320));

#else // __cplusplus

extern void _ZN9S19934C11C1Ev();
extern void _ZN9S19934C11D1Ev();
Name_Map name_map_S19934C11[] = {
  NSPAIR(_ZN9S19934C11C1Ev),
  NSPAIR(_ZN9S19934C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
static Base_Class bases_S19934C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19934C2,    ABISELECT(1424,1172), //bcp->offset
    16, //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
    1, //immediately_derived
  0, 1},
  {&cd_S19934C6,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19934C10,    ABISELECT(1544,1272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19934C6,    ABISELECT(4152,3404), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //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_S19934C7,    ABISELECT(1104,916), //bcp->offset
    7, //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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19934C2,    ABISELECT(1280,1056), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19934C11[];
extern void _ZN9S19934C11D1Ev();
extern void _ZN9S19934C11D0Ev();
extern void ABISELECT(_ZThn1104_N9S19934C11D1Ev,_ZThn916_N9S19934C11D1Ev)();
extern void ABISELECT(_ZThn1104_N9S19934C11D0Ev,_ZThn916_N9S19934C11D0Ev)();
extern void _ZN8S19934C22v1Ev();
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY vtc_S19934C11[] = {
  ABISELECT(4152,3404),
  ABISELECT(1544,1272),
  ABISELECT(1424,1172),
  0,
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&_ZN9S19934C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19934C11D0Ev,
  ABISELECT(3048,2488),
  ABISELECT(320,256),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N9S19934C11D1Ev,_ZThn916_N9S19934C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N9S19934C11D0Ev,_ZThn916_N9S19934C11D0Ev),
  ABISELECT(-1280,-1056),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  0,
  ABISELECT(-1424,-1172),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  ABISELECT(-2728,-2232),
  ABISELECT(-4152,-3404),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
};
extern VTBL_ENTRY _ZTV9S19934C11[];
static  VTBL_ENTRY _tg__ZTV8S19934C6__A__9S19934C11[] = {
  ABISELECT(1424,1172),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C6__A__9S19934C11[] = {
  0,
  ABISELECT(-1424,-1172),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C7__9S19934C11[] = {
  ABISELECT(3048,2488),
  ABISELECT(320,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C7__9S19934C11[] = {
  0,
  ABISELECT(-320,-256),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C7__9S19934C11[] = {
  ABISELECT(-2728,-2232),
  ABISELECT(-3048,-2488),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__9S19934C11[] = {
  ABISELECT(-2728,-2232),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C6__A1__9S19934C11[] = {
  0,
  ABISELECT(2728,2232),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTT_ENTRY vtt_S19934C11[] = {
  {&(_ZTV9S19934C11[5]),  5,23},
  {&(_tg__ZTV8S19934C6__A__9S19934C11[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C6__A__9S19934C11[3]),  3,4},
  {&(_tg__ZTV8S19934C7__9S19934C11[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C7__9S19934C11[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C7__9S19934C11[3]),  3,3},
  {&(_ZTV9S19934C11[19]),  19,23},
  {&(_ZTV9S19934C11[11]),  11,23},
  {&(_ZTV9S19934C11[23]),  23,23},
  {&(_tg__ZTV8S19934C6__A1__9S19934C11[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C6__A1__9S19934C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19934C11[];
extern  VTBL_ENTRY _ZTV9S19934C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19934C11[];
Class_Descriptor cd_S19934C11 = {  "S19934C11", // class name
  bases_S19934C11, 6,
  &(vtc_S19934C11[0]), // expected_vtbl_contents
  &(vtt_S19934C11[0]), // expected_vtt_contents
  ABISELECT(5256,4320), // object size
  NSPAIRA(_ZTI9S19934C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19934C11),23, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19934C11),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19934C9  : S19934C10 , virtual S19934C5 , virtual S19934C11 , S19934C2 {
  __tsi64 s19934c9f0;
  void *s19934c9f1[10];
  virtual  ~S19934C9(); // _ZN8S19934C9D2Ev
  virtual void  v3(); // _ZN8S19934C92v3Ev
  S19934C9(); // tgen
};
//SIG(-1 S19934C9) C1{ BC2{ m FL FC3{ VBC4{ v2 Fs FL[4] Fp Fc Fp FL Fi[10]} BC5{ VBC4 FC4[8] Fi Fc FC4 Fi} BC6{ VBC4 VBC5 vd Fp Fi[6] Fc FC4 Fp} vd v3 FL Fp[2]} Fp[8] Fl} VBC3 VBC7{ BC5 VBC2 BC6 BC4 Fp Fi[3]} BC4 vd v1 FL Fp[10]}


 S19934C9 ::~S19934C9(){ note_dtor("S19934C9", this);}
void  S19934C9 ::v3(){vfunc_called(this, "_ZN8S19934C92v3Ev");}
S19934C9 ::S19934C9(){ note_ctor("S19934C9", this);} // tgen

static void Test_S19934C9()
{
  extern Class_Descriptor cd_S19934C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1173,1919)];
    init_test(&cd_S19934C9, buf);
    S19934C9 *dp, &lv = *(dp=new (buf) S19934C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9376,7672), "sizeof(S19934C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19934C9)");
    /*is_ambiguous_... S19934C9::S19934C10 */ AMB_check_base_class_offset(lv, (S19934C10*), ABISELECT(120,100), "S19934C9");
    check_base_class_offset(lv, (S19934C2*)(S19934C5*), ABISELECT(4120,3352), "S19934C9");
    /*is_ambiguous_... S19934C5::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*)(S19934C5*), ABISELECT(4120,3352), "S19934C9");
    check_base_class_offset(lv, (S19934C2*)(S19934C7*)(S19934C5*), ABISELECT(4120,3352), "S19934C9");
    /*is_ambiguous_... S19934C9::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*), ABISELECT(4120,3352), "S19934C9");
    /*is_ambiguous_... S19934C11::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*)(S19934C11*), ABISELECT(4120,3352), "S19934C9");
    check_base_class_offset(lv, (S19934C2*)(S19934C7*)(S19934C11*), ABISELECT(4120,3352), "S19934C9");
    /*is_ambiguous_... S19934C5::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C5*), ABISELECT(2816,2280), "S19934C9");
    check_base_class_offset(lv, (S19934C6*)(S19934C7*)(S19934C5*), ABISELECT(4240,3452), "S19934C9");
    check_base_class_offset(lv, (S19934C6*)(S19934C7*)(S19934C11*), ABISELECT(4240,3452), "S19934C9");
    check_base_class_offset(lv, (S19934C7*)(S19934C5*), ABISELECT(3920,3196), "S19934C9");
    check_base_class_offset(lv, (S19934C5*), ABISELECT(2816,2280), "S19934C9");
    /*is_ambiguous_... S19934C11::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C11*), ABISELECT(5344,4368), "S19934C9");
    check_base_class_offset(lv, (S19934C10*)(S19934C11*), ABISELECT(6768,5540), "S19934C9");
    check_base_class_offset(lv, (S19934C7*)(S19934C11*), ABISELECT(6448,5284), "S19934C9");
    /*is_ambiguous_... S19934C11::S19934C2 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C11*), ABISELECT(6624,5424), "S19934C9");
    check_base_class_offset(lv, (S19934C11*), ABISELECT(5344,4368), "S19934C9");
    /*is_ambiguous_... S19934C9::S19934C2 */ AMB_check_base_class_offset(lv, (S19934C2*), 0, "S19934C9");
    check_field_offset(lv, s19934c9f0, ABISELECT(2728,2232), "S19934C9.s19934c9f0");
    check_field_offset(lv, s19934c9f1, ABISELECT(2736,2240), "S19934C9.s19934c9f1");
    test_class_info(&lv, &cd_S19934C9);
    dp->~S19934C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19934C9(Test_S19934C9, "S19934C9", ABISELECT(9376,7672));

#else // __cplusplus

extern void _ZN8S19934C9C1Ev();
extern void _ZN8S19934C9D2Ev();
Name_Map name_map_S19934C9[] = {
  NSPAIR(_ZN8S19934C9C1Ev),
  NSPAIR(_ZN8S19934C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C5;
extern VTBL_ENTRY _ZTI8S19934C5[];
extern  VTBL_ENTRY _ZTV8S19934C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C5[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C11;
extern VTBL_ENTRY _ZTI9S19934C11[];
extern  VTBL_ENTRY _ZTV9S19934C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19934C11[];
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
static Base_Class bases_S19934C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19934C10,    ABISELECT(120,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
    -1, //immediately_derived
  1, 0},
  {&cd_S19934C2,    ABISELECT(4120,3352), //bcp->offset
    26, //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_S19934C6,    ABISELECT(2816,2280), //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
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19934C6,    ABISELECT(4240,3452), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19934C7,    ABISELECT(3920,3196), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19934C5,    ABISELECT(2816,2280), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19934C6,    ABISELECT(5344,4368), //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
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19934C10,    ABISELECT(6768,5540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19934C7,    ABISELECT(6448,5284), //bcp->offset
    42, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19934C2,    ABISELECT(6624,5424), //bcp->offset
    48, //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
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19934C11,    ABISELECT(5344,4368), //bcp->offset
    33, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19934C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19934C9[];
extern void _ZN8S19934C22v1Ev();
extern void _ZN8S19934C9D1Ev();
extern void _ZN8S19934C9D0Ev();
extern void _ZN8S19934C92v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19934C9D1Ev,_ZTv0_n20_N8S19934C9D1Ev)();
extern void ABISELECT(_ZThn2816_N8S19934C9D1Ev,_ZThn2280_N8S19934C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19934C9D0Ev,_ZTv0_n20_N8S19934C9D0Ev)();
extern void ABISELECT(_ZThn2816_N8S19934C9D0Ev,_ZThn2280_N8S19934C9D0Ev)() __attribute__((weak));
extern void _ZN8S19934C52v2Ev();
extern void ABISELECT(_ZTvn1104_n40_N8S19934C9D1Ev,_ZTvn916_n20_N8S19934C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N8S19934C9D0Ev,_ZTvn916_n20_N8S19934C9D0Ev)();
extern void _ZN8S19934C22v1Ev();
extern void ABISELECT(_ZTv0_n48_N8S19934C9D1Ev,_ZTv0_n24_N8S19934C9D1Ev)();
extern void ABISELECT(_ZThn5344_N8S19934C9D1Ev,_ZThn4368_N8S19934C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19934C9D0Ev,_ZTv0_n24_N8S19934C9D0Ev)();
extern void ABISELECT(_ZThn5344_N8S19934C9D0Ev,_ZThn4368_N8S19934C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1104_n48_N8S19934C9D1Ev,_ZTvn916_n24_N8S19934C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N8S19934C9D0Ev,_ZTvn916_n24_N8S19934C9D0Ev)();
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY vtc_S19934C9[] = {
  ABISELECT(6768,5540),
  ABISELECT(5344,4368),
  ABISELECT(4240,3452),
  ABISELECT(4120,3352),
  ABISELECT(2816,2280),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19934C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C92v3Ev,
  0,
  ABISELECT(-2816,-2280),
  ABISELECT(1424,1172),
  ABISELECT(1304,1072),
  ABISELECT(-2816,-2280),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C9D1Ev,_ZTv0_n20_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C9D0Ev,_ZTv0_n20_N8S19934C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
  ABISELECT(320,256),
  ABISELECT(200,156),
  ABISELECT(-3920,-3196),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C9D1Ev,_ZTvn916_n20_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C9D0Ev,_ZTvn916_n20_N8S19934C9D0Ev),
  0,
  ABISELECT(-4120,-3352),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  ABISELECT(-120,-100),
  ABISELECT(-4240,-3452),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  ABISELECT(1280,1056),
  ABISELECT(-5344,-4368),
  ABISELECT(-1104,-916),
  ABISELECT(1424,1172),
  ABISELECT(-1224,-1016),
  ABISELECT(-5344,-4368),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C9D1Ev,_ZTv0_n24_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C9D0Ev,_ZTv0_n24_N8S19934C9D0Ev),
  ABISELECT(-2208,-1832),
  ABISELECT(-2328,-1932),
  ABISELECT(-6448,-5284),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C9D1Ev,_ZTvn916_n24_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C9D0Ev,_ZTvn916_n24_N8S19934C9D0Ev),
  ABISELECT(-6624,-5424),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S19934C9[];
extern void _ZN8S19934C5D1Ev();
extern void _ZN8S19934C5D0Ev();
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C5__8S19934C9[] = {
  ABISELECT(1424,1172),
  ABISELECT(1304,1072),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C68S19934C5__8S19934C9[] = {
  ABISELECT(1304,1072),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C68S19934C5__8S19934C9[] = {
  0,
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C5__8S19934C9[] = {
  ABISELECT(320,256),
  ABISELECT(200,156),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C78S19934C5__8S19934C9[] = {
  0,
  ABISELECT(-200,-156),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C78S19934C5__8S19934C9[] = {
  ABISELECT(-120,-100),
  ABISELECT(-320,-256),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C5__8S19934C9[] = {
  0,
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C7__8S19934C5__8S19934C9[] = {
  ABISELECT(320,256),
  ABISELECT(200,156),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C5__8S19934C9[] = {
  ABISELECT(-120,-100),
  ABISELECT(-1424,-1172),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C9[] = {
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C6__A1__8S19934C9[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN9S19934C11D1Ev();
extern void _ZN9S19934C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19934C11__8S19934C9[] = {
  ABISELECT(-1104,-916),
  ABISELECT(1424,1172),
  ABISELECT(-1224,-1016),
  0,
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&_ZN9S19934C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19934C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C69S19934C11__A2__8S19934C9[] = {
  ABISELECT(-1224,-1016),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C69S19934C11__A2__8S19934C9[] = {
  0,
  ABISELECT(1224,1016),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C79S19934C11__A1__8S19934C9[] = {
  ABISELECT(-2208,-1832),
  ABISELECT(-2328,-1932),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C79S19934C11__A1__8S19934C9[] = {
  0,
  ABISELECT(2328,1932),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C79S19934C11__A1__8S19934C9[] = {
  ABISELECT(-120,-100),
  ABISELECT(2208,1832),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__9S19934C11__8S19934C9[] = {
  0,
  ABISELECT(1224,1016),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N9S19934C11D1Ev,_ZThn916_N9S19934C11D1Ev)();
extern void ABISELECT(_ZThn1104_N9S19934C11D0Ev,_ZThn916_N9S19934C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C7__9S19934C11__8S19934C9[] = {
  ABISELECT(-2208,-1832),
  ABISELECT(-2328,-1932),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N9S19934C11D1Ev,_ZThn916_N9S19934C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N9S19934C11D0Ev,_ZThn916_N9S19934C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__9S19934C11__8S19934C9[] = {
  ABISELECT(-120,-100),
  ABISELECT(1104,916),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
};
static  VTT_ENTRY vtt_S19934C9[] = {
  {&(_ZTV8S19934C9[7]),  7,51},
  {&(_ZTV8S19934C9[17]),  17,51},
  {&(_ZTV8S19934C9[29]),  29,51},
  {&(_ZTV8S19934C9[24]),  24,51},
  {&(_ZTV8S19934C9[33]),  33,51},
  {&(_ZTV8S19934C9[40]),  40,51},
  {&(_ZTV8S19934C9[46]),  46,51},
  {&(_ZTV8S19934C9[50]),  50,51},
  {&(_tg__ZTV8S19934C5__8S19934C9[4]),  4,7},
  {&(_tg__ZTV8S19934C68S19934C5__8S19934C9[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C68S19934C5__8S19934C9[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C5__8S19934C9[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C78S19934C5__8S19934C9[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C78S19934C5__8S19934C9[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C5__8S19934C9[3]),  3,4},
  {&(_tg__ZTV8S19934C7__8S19934C5__8S19934C9[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C5__8S19934C9[3]),  3,3},
  {&(_tg__ZTV8S19934C6__A1__8S19934C9[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C6__A1__8S19934C9[3]),  3,4},
  {&(_tg__ZTV9S19934C11__8S19934C9[5]),  5,7},
  {&(_tg__ZTV8S19934C69S19934C11__A2__8S19934C9[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C69S19934C11__A2__8S19934C9[3]),  3,4},
  {&(_tg__ZTV8S19934C79S19934C11__A1__8S19934C9[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C79S19934C11__A1__8S19934C9[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C79S19934C11__A1__8S19934C9[3]),  3,3},
  {&(_tg__ZTV8S19934C2__9S19934C11__8S19934C9[3]),  3,4},
  {&(_tg__ZTV8S19934C7__9S19934C11__8S19934C9[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__9S19934C11__8S19934C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19934C9[];
extern  VTBL_ENTRY _ZTV8S19934C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C9[];
static VTBL_ENTRY alt_thunk_names15[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19934C9D0Ev,_ZTv0_n24_N8S19934C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5344_N8S19934C9D0Ev,_ZThn4368_N8S19934C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19934C9D1Ev,_ZTv0_n24_N8S19934C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5344_N8S19934C9D1Ev,_ZThn4368_N8S19934C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19934C9D0Ev,_ZTv0_n20_N8S19934C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N8S19934C9D0Ev,_ZThn2280_N8S19934C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19934C9D1Ev,_ZTv0_n20_N8S19934C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N8S19934C9D1Ev,_ZThn2280_N8S19934C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19934C9 = {  "S19934C9", // class name
  bases_S19934C9, 12,
  &(vtc_S19934C9[0]), // expected_vtbl_contents
  &(vtt_S19934C9[0]), // expected_vtt_contents
  ABISELECT(9376,7672), // object size
  NSPAIRA(_ZTI8S19934C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19934C9),51, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19934C9),28, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names15,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19934C3  : S19934C4 , S19934C2 , virtual S19934C9 {
  int s19934c3f0;
  long double s19934c3f1;
  int s19934c3f2;
  __tsi64 s19934c3f3;
  int s19934c3f4[2];
  virtual  ~S19934C3(); // _ZN8S19934C3D2Ev
  virtual void  v4(); // _ZN8S19934C32v4Ev
  S19934C3(); // tgen
};
//SIG(-1 S19934C3) C1{ BC2{ VBC3{ v2 Fs FL[4] Fp Fc Fp FL Fi[10]} BC4{ VBC3 BC5{ VBC3 FC3[8] Fi Fc FC3 Fi} BC6{ VBC3 VBC5 vd Fp Fi[6] Fc FC3 Fp} vd v3 FL Fp[2]} BC5 BC6 vd FL FC6[2] FL Fi FC7{}} BC3 VBC8{ BC9{ m FL FC4 Fp[8] Fl} VBC4 VBC10{ BC5 VBC9 BC6 BC3 Fp Fi[3]} BC3 vd v4 FL Fp[10]} vd v1 Fi FD Fi FL Fi[2]}


 S19934C3 ::~S19934C3(){ note_dtor("S19934C3", this);}
void  S19934C3 ::v4(){vfunc_called(this, "_ZN8S19934C32v4Ev");}
S19934C3 ::S19934C3(){ note_ctor("S19934C3", this);} // tgen

static void Test_S19934C3()
{
  extern Class_Descriptor cd_S19934C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(936,3069)];
    init_test(&cd_S19934C3, buf);
    S19934C3 *dp, &lv = *(dp=new (buf) S19934C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(14960,12272), "sizeof(S19934C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19934C3)");
    check_base_class_offset(lv, (S19934C2*)(S19934C4*), ABISELECT(5576,4600), "S19934C3");
    check_base_class_offset(lv, (S19934C2*)(S19934C5*)(S19934C4*), ABISELECT(5576,4600), "S19934C3");
    /*is_ambiguous_... S19934C5::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*)(S19934C5*)(S19934C4*), ABISELECT(5576,4600), "S19934C3");
    check_base_class_offset(lv, (S19934C2*)(S19934C7*)(S19934C5*)(S19934C4*), ABISELECT(5576,4600), "S19934C3");
    /*is_ambiguous_... S19934C3::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*), ABISELECT(5576,4600), "S19934C3");
    /*is_ambiguous_... S19934C4::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*)(S19934C4*), ABISELECT(5576,4600), "S19934C3");
    /*is_ambiguous_... S19934C4::S19934C7 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C7*)(S19934C4*), ABISELECT(5576,4600), "S19934C3");
    /*is_ambiguous_... S19934C3::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C5*), ABISELECT(5576,4600), "S19934C3");
    /*is_ambiguous_... S19934C3::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*)(S19934C5*), ABISELECT(5576,4600), "S19934C3");
    /*is_ambiguous_... S19934C3::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C7*)(S19934C5*), ABISELECT(5576,4600), "S19934C3");
    /*is_ambiguous_... S19934C11::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*)(S19934C11*), ABISELECT(5576,4600), "S19934C3");
    check_base_class_offset(lv, (S19934C2*)(S19934C7*)(S19934C11*), ABISELECT(5576,4600), "S19934C3");
    /*is_ambiguous_... S19934C5::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C5*)(S19934C4*), 0, "S19934C3");
    check_base_class_offset(lv, (S19934C6*)(S19934C7*)(S19934C5*)(S19934C4*), ABISELECT(5696,4700), "S19934C3");
    /*is_ambiguous_... S19934C4::S19934C7 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C7*)(S19934C4*), ABISELECT(5696,4700), "S19934C3");
    /*is_ambiguous_... S19934C3::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C7*)(S19934C5*), ABISELECT(5696,4700), "S19934C3");
    check_base_class_offset(lv, (S19934C6*)(S19934C7*)(S19934C11*), ABISELECT(5696,4700), "S19934C3");
    check_base_class_offset(lv, (S19934C7*)(S19934C5*)(S19934C4*), ABISELECT(1104,916), "S19934C3");
    check_base_class_offset(lv, (S19934C5*)(S19934C4*), 0, "S19934C3");
    /*is_ambiguous_... S19934C4::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C4*), ABISELECT(1304,1072), "S19934C3");
    /*is_ambiguous_... S19934C4::S19934C7 */ AMB_check_base_class_offset(lv, (S19934C7*)(S19934C4*), ABISELECT(2408,1988), "S19934C3");
    check_base_class_offset(lv, (S19934C4*), 0, "S19934C3");
    /*is_ambiguous_... S19934C3::S19934C2 */ AMB_check_base_class_offset(lv, (S19934C2*), ABISELECT(5408,4464), "S19934C3");
    /*is_ambiguous_... S19934C9::S19934C10 */ AMB_check_base_class_offset(lv, (S19934C10*)(S19934C9*), ABISELECT(6920,5716), "S19934C3");
    /*is_ambiguous_... S19934C3::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C5*), ABISELECT(9616,7896), "S19934C3");
    /*is_ambiguous_... S19934C3::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C7*)(S19934C5*), ABISELECT(10720,8812), "S19934C3");
    check_base_class_offset(lv, (S19934C5*)(S19934C9*), ABISELECT(9616,7896), "S19934C3");
    /*is_ambiguous_... S19934C11::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C11*), ABISELECT(10920,8968), "S19934C3");
    check_base_class_offset(lv, (S19934C10*)(S19934C11*), ABISELECT(12344,10140), "S19934C3");
    check_base_class_offset(lv, (S19934C7*)(S19934C11*), ABISELECT(12024,9884), "S19934C3");
    /*is_ambiguous_... S19934C11::S19934C2 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C11*), ABISELECT(12200,10024), "S19934C3");
    check_base_class_offset(lv, (S19934C11*)(S19934C9*), ABISELECT(10920,8968), "S19934C3");
    /*is_ambiguous_... S19934C9::S19934C2 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C9*), ABISELECT(6800,5616), "S19934C3");
    check_base_class_offset(lv, (S19934C9*), ABISELECT(6800,5616), "S19934C3");
    check_field_offset(lv, s19934c3f0, ABISELECT(5528,4564), "S19934C3.s19934c3f0");
    check_field_offset(lv, s19934c3f1, ABISELECT(5536,4568), "S19934C3.s19934c3f1");
    check_field_offset(lv, s19934c3f2, ABISELECT(5552,4580), "S19934C3.s19934c3f2");
    check_field_offset(lv, s19934c3f3, ABISELECT(5560,4584), "S19934C3.s19934c3f3");
    check_field_offset(lv, s19934c3f4, ABISELECT(5568,4592), "S19934C3.s19934c3f4");
    test_class_info(&lv, &cd_S19934C3);
    dp->~S19934C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19934C3(Test_S19934C3, "S19934C3", ABISELECT(14960,12272));

#else // __cplusplus

extern void _ZN8S19934C3C1Ev();
extern void _ZN8S19934C3D2Ev();
Name_Map name_map_S19934C3[] = {
  NSPAIR(_ZN8S19934C3C1Ev),
  NSPAIR(_ZN8S19934C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C5;
extern VTBL_ENTRY _ZTI8S19934C5[];
extern  VTBL_ENTRY _ZTV8S19934C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C5[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C4;
extern VTBL_ENTRY _ZTI8S19934C4[];
extern  VTBL_ENTRY _ZTV8S19934C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C4[];
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C5;
extern VTBL_ENTRY _ZTI8S19934C5[];
extern  VTBL_ENTRY _ZTV8S19934C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C5[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C11;
extern VTBL_ENTRY _ZTI9S19934C11[];
extern  VTBL_ENTRY _ZTV9S19934C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19934C11[];
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C9;
extern VTBL_ENTRY _ZTI8S19934C9[];
extern  VTBL_ENTRY _ZTV8S19934C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C9[];
static Base_Class bases_S19934C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19934C2,    ABISELECT(5576,4600), //bcp->offset
    30, //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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19934C6,    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
    12, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19934C6,    ABISELECT(5696,4700), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19934C7,    ABISELECT(1104,916), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19934C5,    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
    7, //immediately_derived
  0, 0},
  {&cd_S19934C6,    ABISELECT(1304,1072), //bcp->offset
    18, //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
    15, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19934C7,    ABISELECT(2408,1988), //bcp->offset
    21, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19934C4,    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
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19934C2,    ABISELECT(5408,4464), //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
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19934C10,    ABISELECT(6920,5716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19934C6,    ABISELECT(9616,7896), //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
    3, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19934C7,    ABISELECT(10720,8812), //bcp->offset
    60, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19934C5,    ABISELECT(9616,7896), //bcp->offset
    51, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19934C6,    ABISELECT(10920,8968), //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
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19934C10,    ABISELECT(12344,10140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19934C7,    ABISELECT(12024,9884), //bcp->offset
    75, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19934C2,    ABISELECT(12200,10024), //bcp->offset
    81, //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
    8, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19934C11,    ABISELECT(10920,8968), //bcp->offset
    66, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19934C2,    ABISELECT(6800,5616), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19934C9,    ABISELECT(6800,5616), //bcp->offset
    37, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19934C3[];
extern void _ZN8S19934C3D1Ev();
extern void _ZN8S19934C3D0Ev();
extern void _ZN8S19934C52v2Ev();
extern void _ZN8S19934C32v4Ev();
extern void ABISELECT(_ZThn1104_N8S19934C3D1Ev,_ZThn916_N8S19934C3D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C3D0Ev,_ZThn916_N8S19934C3D0Ev)();
extern void ABISELECT(_ZThn2408_N8S19934C3D1Ev,_ZThn1988_N8S19934C3D1Ev)();
extern void ABISELECT(_ZThn2408_N8S19934C3D0Ev,_ZThn1988_N8S19934C3D0Ev)();
extern void _ZN8S19934C22v1Ev();
extern void _ZN8S19934C22v1Ev();
extern void _ZN8S19934C22v1Ev();
extern void ABISELECT(_ZTv0_n72_N8S19934C3D1Ev,_ZTv0_n36_N8S19934C3D1Ev)();
extern void ABISELECT(_ZThn6800_N8S19934C3D1Ev,_ZThn5616_N8S19934C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19934C3D0Ev,_ZTv0_n36_N8S19934C3D0Ev)();
extern void ABISELECT(_ZThn6800_N8S19934C3D0Ev,_ZThn5616_N8S19934C3D0Ev)() __attribute__((weak));
extern void _ZN8S19934C92v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19934C3D1Ev,_ZTv0_n20_N8S19934C3D1Ev)();
extern void ABISELECT(_ZThn9616_N8S19934C3D1Ev,_ZThn7896_N8S19934C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19934C3D0Ev,_ZTv0_n20_N8S19934C3D0Ev)();
extern void ABISELECT(_ZThn9616_N8S19934C3D0Ev,_ZThn7896_N8S19934C3D0Ev)() __attribute__((weak));
extern void _ZN8S19934C52v2Ev();
extern void ABISELECT(_ZTvn1104_n40_N8S19934C3D1Ev,_ZTvn916_n20_N8S19934C3D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N8S19934C3D0Ev,_ZTvn916_n20_N8S19934C3D0Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19934C3D1Ev,_ZTv0_n24_N8S19934C3D1Ev)();
extern void ABISELECT(_ZThn10920_N8S19934C3D1Ev,_ZThn8968_N8S19934C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19934C3D0Ev,_ZTv0_n24_N8S19934C3D0Ev)();
extern void ABISELECT(_ZThn10920_N8S19934C3D0Ev,_ZThn8968_N8S19934C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1104_n48_N8S19934C3D1Ev,_ZTvn916_n24_N8S19934C3D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N8S19934C3D0Ev,_ZTvn916_n24_N8S19934C3D0Ev)();
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY vtc_S19934C3[] = {
  ABISELECT(12344,10140),
  ABISELECT(10920,8968),
  ABISELECT(9616,7896),
  ABISELECT(6800,5616),
  ABISELECT(5696,4700),
  ABISELECT(5576,4600),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&_ZN8S19934C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19934C32v4Ev,
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C3D1Ev,_ZThn916_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C3D0Ev,_ZThn916_N8S19934C3D0Ev),
  ABISELECT(4272,3528),
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  ABISELECT(3288,2712),
  ABISELECT(3168,2612),
  ABISELECT(-2408,-1988),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N8S19934C3D1Ev,_ZThn1988_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N8S19934C3D0Ev,_ZThn1988_N8S19934C3D0Ev),
  ABISELECT(-5408,-4464),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  0,
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  ABISELECT(-120,-100),
  ABISELECT(-5696,-4700),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  0,
  ABISELECT(-6800,-5616),
  0,
  ABISELECT(5544,4524),
  ABISELECT(4120,3352),
  ABISELECT(-1104,-916),
  ABISELECT(-1224,-1016),
  ABISELECT(2816,2280),
  ABISELECT(-6800,-5616),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19934C3D1Ev,_ZTv0_n36_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19934C3D0Ev,_ZTv0_n36_N8S19934C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19934C92v3Ev,
  0,
  ABISELECT(-9616,-7896),
  ABISELECT(-3920,-3196),
  ABISELECT(-4040,-3296),
  ABISELECT(-9616,-7896),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C3D1Ev,_ZTv0_n20_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C3D0Ev,_ZTv0_n20_N8S19934C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  ABISELECT(-10720,-8812),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C3D1Ev,_ZTvn916_n20_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C3D0Ev,_ZTvn916_n20_N8S19934C3D0Ev),
  ABISELECT(1280,1056),
  ABISELECT(-10920,-8968),
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-5344,-4368),
  ABISELECT(-10920,-8968),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C3D1Ev,_ZTv0_n24_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C3D0Ev,_ZTv0_n24_N8S19934C3D0Ev),
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  ABISELECT(-12024,-9884),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C3D1Ev,_ZTvn916_n24_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C3D0Ev,_ZTvn916_n24_N8S19934C3D0Ev),
  ABISELECT(-12200,-10024),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S19934C3[];
extern void _ZN8S19934C4D1Ev();
extern void _ZN8S19934C4D0Ev();
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C4__8S19934C3[] = {
  ABISELECT(5696,4700),
  ABISELECT(5576,4600),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  (VTBL_ENTRY)&_ZN8S19934C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
extern void _ZN8S19934C5D1Ev();
extern void _ZN8S19934C5D0Ev();
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C58S19934C4__8S19934C3[] = {
  ABISELECT(5696,4700),
  ABISELECT(5576,4600),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C68S19934C58S19934C4__8S19934C3[] = {
  ABISELECT(5576,4600),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C68S19934C58S19934C4__8S19934C3[] = {
  0,
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C58S19934C4__8S19934C3[] = {
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C78S19934C58S19934C4__8S19934C3[] = {
  0,
  ABISELECT(-4472,-3684),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C78S19934C58S19934C4__8S19934C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(-4592,-3784),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C58S19934C4__8S19934C3[] = {
  0,
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C7__8S19934C58S19934C4__8S19934C3[] = {
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C58S19934C4__8S19934C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(-5696,-4700),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19934C68S19934C4__A2__8S19934C3[] = {
  ABISELECT(4272,3528),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C68S19934C4__A2__8S19934C3[] = {
  0,
  ABISELECT(-4272,-3528),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C4__A1__8S19934C3[] = {
  ABISELECT(3288,2712),
  ABISELECT(3168,2612),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C78S19934C4__A1__8S19934C3[] = {
  0,
  ABISELECT(-3168,-2612),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C78S19934C4__A1__8S19934C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(-3288,-2712),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C4__8S19934C3[] = {
  0,
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N8S19934C4D1Ev,_ZThn916_N8S19934C4D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C4D0Ev,_ZThn916_N8S19934C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C5__8S19934C4__8S19934C3[] = {
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C4D1Ev,_ZThn916_N8S19934C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C4D0Ev,_ZThn916_N8S19934C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C4__8S19934C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(-5696,-4700),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A__8S19934C4__8S19934C3[] = {
  ABISELECT(4272,3528),
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
};
extern void ABISELECT(_ZThn2408_N8S19934C4D1Ev,_ZThn1988_N8S19934C4D1Ev)();
extern void ABISELECT(_ZThn2408_N8S19934C4D0Ev,_ZThn1988_N8S19934C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C7__A1__8S19934C4__8S19934C3[] = {
  ABISELECT(3288,2712),
  ABISELECT(3168,2612),
  ABISELECT(-2408,-1988),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N8S19934C4D1Ev,_ZThn1988_N8S19934C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N8S19934C4D0Ev,_ZThn1988_N8S19934C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C3[] = {
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C6__A1__8S19934C3[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C22v1Ev();
extern void _ZN8S19934C9D1Ev();
extern void _ZN8S19934C9D0Ev();
extern void _ZN8S19934C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C9__8S19934C3[] = {
  ABISELECT(5544,4524),
  ABISELECT(4120,3352),
  ABISELECT(-1104,-916),
  ABISELECT(-1224,-1016),
  ABISELECT(2816,2280),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19934C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C92v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19934C9D1Ev,_ZTv0_n20_N8S19934C9D1Ev)();
extern void ABISELECT(_ZThn2816_N8S19934C9D1Ev,_ZThn2280_N8S19934C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19934C9D0Ev,_ZTv0_n20_N8S19934C9D0Ev)();
extern void ABISELECT(_ZThn2816_N8S19934C9D0Ev,_ZThn2280_N8S19934C9D0Ev)() __attribute__((weak));
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C5__8S19934C9__8S19934C3[] = {
  0,
  ABISELECT(-2816,-2280),
  ABISELECT(-3920,-3196),
  ABISELECT(-4040,-3296),
  ABISELECT(-2816,-2280),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C9D1Ev,_ZTv0_n20_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C9D0Ev,_ZTv0_n20_N8S19934C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C9__8S19934C3[] = {
  0,
  ABISELECT(1224,1016),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZTvn1104_n40_N8S19934C9D1Ev,_ZTvn916_n20_N8S19934C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N8S19934C9D0Ev,_ZTvn916_n20_N8S19934C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C5__8S19934C9__8S19934C3[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  ABISELECT(-3920,-3196),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C9D1Ev,_ZTvn916_n20_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C9D0Ev,_ZTvn916_n20_N8S19934C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C9__8S19934C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(1104,916),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19934C9D1Ev,_ZTv0_n24_N8S19934C9D1Ev)();
extern void ABISELECT(_ZThn4120_N8S19934C9D1Ev,_ZThn3352_N8S19934C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19934C9D0Ev,_ZTv0_n24_N8S19934C9D0Ev)();
extern void ABISELECT(_ZThn4120_N8S19934C9D0Ev,_ZThn3352_N8S19934C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19934C11__8S19934C9__8S19934C3[] = {
  ABISELECT(1280,1056),
  ABISELECT(-4120,-3352),
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-5344,-4368),
  ABISELECT(-4120,-3352),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C9D1Ev,_ZTv0_n24_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C9D0Ev,_ZTv0_n24_N8S19934C9D0Ev),
};
extern void ABISELECT(_ZTvn1104_n48_N8S19934C9D1Ev,_ZTvn916_n24_N8S19934C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N8S19934C9D0Ev,_ZTvn916_n24_N8S19934C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C79S19934C11__A1__8S19934C9__8S19934C3[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  ABISELECT(-5224,-4268),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C9D1Ev,_ZTvn916_n24_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C9D0Ev,_ZTvn916_n24_N8S19934C9D0Ev),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C29S19934C11__A1__8S19934C9__8S19934C3[] = {
  ABISELECT(-5400,-4408),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C5D1Ev();
extern void _ZN8S19934C5D0Ev();
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C5__A1__8S19934C3[] = {
  ABISELECT(-3920,-3196),
  ABISELECT(-4040,-3296),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C68S19934C5__A3__8S19934C3[] = {
  ABISELECT(-4040,-3296),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C68S19934C5__A3__8S19934C3[] = {
  0,
  ABISELECT(4040,3296),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C5__A2__8S19934C3[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C78S19934C5__A2__8S19934C3[] = {
  0,
  ABISELECT(5144,4212),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C78S19934C5__A2__8S19934C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(5024,4112),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C5__A1__8S19934C3[] = {
  0,
  ABISELECT(4040,3296),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C7__8S19934C5__A1__8S19934C3[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C5__A1__8S19934C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(3920,3196),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
};
extern void _ZN9S19934C11D1Ev();
extern void _ZN9S19934C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19934C11__8S19934C3[] = {
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-5344,-4368),
  0,
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&_ZN9S19934C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19934C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C69S19934C11__A4__8S19934C3[] = {
  ABISELECT(-5344,-4368),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C69S19934C11__A4__8S19934C3[] = {
  0,
  ABISELECT(5344,4368),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C79S19934C11__A3__8S19934C3[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C79S19934C11__A3__8S19934C3[] = {
  0,
  ABISELECT(6448,5284),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C79S19934C11__A3__8S19934C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(6328,5184),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__9S19934C11__8S19934C3[] = {
  0,
  ABISELECT(5344,4368),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N9S19934C11D1Ev,_ZThn916_N9S19934C11D1Ev)();
extern void ABISELECT(_ZThn1104_N9S19934C11D0Ev,_ZThn916_N9S19934C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C7__9S19934C11__8S19934C3[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N9S19934C11D1Ev,_ZThn916_N9S19934C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N9S19934C11D0Ev,_ZThn916_N9S19934C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__9S19934C11__8S19934C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(5224,4268),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
};
static  VTT_ENTRY vtt_S19934C3[] = {
  {&(_ZTV8S19934C3[8]),  8,84},
  {&(_tg__ZTV8S19934C4__8S19934C3[4]),  4,7},
  {&(_tg__ZTV8S19934C58S19934C4__8S19934C3[4]),  4,7},
  {&(_tg__ZTV8S19934C68S19934C58S19934C4__8S19934C3[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C68S19934C58S19934C4__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C58S19934C4__8S19934C3[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C78S19934C58S19934C4__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C78S19934C58S19934C4__8S19934C3[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C58S19934C4__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C7__8S19934C58S19934C4__8S19934C3[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C58S19934C4__8S19934C3[3]),  3,3},
  {&(_tg__ZTV8S19934C68S19934C4__A2__8S19934C3[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C68S19934C4__A2__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C4__A1__8S19934C3[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C78S19934C4__A1__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C78S19934C4__A1__8S19934C3[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C4__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C5__8S19934C4__8S19934C3[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C4__8S19934C3[3]),  3,3},
  {&(_tg__ZTV8S19934C6__A__8S19934C4__8S19934C3[3]),  3,3},
  {&(_tg__ZTV8S19934C7__A1__8S19934C4__8S19934C3[4]),  4,6},
  {&(_ZTV8S19934C3[33]),  33,84},
  {&(_ZTV8S19934C3[16]),  16,84},
  {&(_ZTV8S19934C3[37]),  37,84},
  {&(_ZTV8S19934C3[21]),  21,84},
  {&(_ZTV8S19934C3[25]),  25,84},
  {&(_ZTV8S19934C3[47]),  47,84},
  {&(_ZTV8S19934C3[57]),  57,84},
  {&(_ZTV8S19934C3[64]),  64,84},
  {&(_ZTV8S19934C3[73]),  73,84},
  {&(_ZTV8S19934C3[79]),  79,84},
  {&(_ZTV8S19934C3[83]),  83,84},
  {&(_tg__ZTV8S19934C6__A1__8S19934C3[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C6__A1__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C9__8S19934C3[7]),  7,11},
  {&(_tg__ZTV8S19934C5__8S19934C9__8S19934C3[6]),  6,9},
  {&(_tg__ZTV8S19934C2__8S19934C9__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C5__8S19934C9__8S19934C3[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C9__8S19934C3[3]),  3,3},
  {&(_tg__ZTV9S19934C11__8S19934C9__8S19934C3[7]),  7,9},
  {&(_tg__ZTV8S19934C79S19934C11__A1__8S19934C9__8S19934C3[4]),  4,6},
  {&(_tg__ZTV8S19934C29S19934C11__A1__8S19934C9__8S19934C3[2]),  2,3},
  {&(_tg__ZTV8S19934C5__A1__8S19934C3[4]),  4,7},
  {&(_tg__ZTV8S19934C68S19934C5__A3__8S19934C3[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C68S19934C5__A3__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C5__A2__8S19934C3[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C78S19934C5__A2__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C78S19934C5__A2__8S19934C3[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C5__A1__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C7__8S19934C5__A1__8S19934C3[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C5__A1__8S19934C3[3]),  3,3},
  {&(_tg__ZTV9S19934C11__8S19934C3[5]),  5,7},
  {&(_tg__ZTV8S19934C69S19934C11__A4__8S19934C3[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C69S19934C11__A4__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C79S19934C11__A3__8S19934C3[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C79S19934C11__A3__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C79S19934C11__A3__8S19934C3[3]),  3,3},
  {&(_tg__ZTV8S19934C2__9S19934C11__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C7__9S19934C11__8S19934C3[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__9S19934C11__8S19934C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19934C3[];
extern  VTBL_ENTRY _ZTV8S19934C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C3[];
static VTBL_ENTRY alt_thunk_names16[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19934C9D0Ev,_ZTv0_n24_N8S19934C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4120_N8S19934C9D0Ev,_ZThn3352_N8S19934C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19934C9D1Ev,_ZTv0_n24_N8S19934C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4120_N8S19934C9D1Ev,_ZThn3352_N8S19934C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19934C9D0Ev,_ZTv0_n20_N8S19934C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N8S19934C9D0Ev,_ZThn2280_N8S19934C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19934C9D1Ev,_ZTv0_n20_N8S19934C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N8S19934C9D1Ev,_ZThn2280_N8S19934C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19934C3D0Ev,_ZTv0_n24_N8S19934C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10920_N8S19934C3D0Ev,_ZThn8968_N8S19934C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19934C3D1Ev,_ZTv0_n24_N8S19934C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10920_N8S19934C3D1Ev,_ZThn8968_N8S19934C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19934C3D0Ev,_ZTv0_n20_N8S19934C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9616_N8S19934C3D0Ev,_ZThn7896_N8S19934C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19934C3D1Ev,_ZTv0_n20_N8S19934C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9616_N8S19934C3D1Ev,_ZThn7896_N8S19934C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19934C3D0Ev,_ZTv0_n36_N8S19934C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6800_N8S19934C3D0Ev,_ZThn5616_N8S19934C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19934C3D1Ev,_ZTv0_n36_N8S19934C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6800_N8S19934C3D1Ev,_ZThn5616_N8S19934C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19934C3 = {  "S19934C3", // class name
  bases_S19934C3, 20,
  &(vtc_S19934C3[0]), // expected_vtbl_contents
  &(vtt_S19934C3[0]), // expected_vtt_contents
  ABISELECT(14960,12272), // object size
  NSPAIRA(_ZTI8S19934C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19934C3),84, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19934C3),60, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names16,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19934C1  : virtual S19934C2 , virtual S19934C3 , S19934C5 , S19934C9 {
  int s19934c1f0;
  __tsi64 s19934c1f1[3];
  int s19934c1f2;
  int s19934c1f3:2;
  int  :0;
  __tsi64 s19934c1f5[3];
  ::S19934C10 s19934c1f6;
  virtual  ~S19934C1(); // _ZN8S19934C1D2Ev
  S19934C1(); // tgen
};
//SIG(1 S19934C1) C1{ VBC2{ v1 Fs FL[4] Fp Fc Fp FL Fi[10]} VBC3{ BC4{ VBC2 BC5{ VBC2 BC6{ VBC2 FC2[8] Fi Fc FC2 Fi} BC7{ VBC2 VBC6 vd Fp Fi[6] Fc FC2 Fp} vd v2 FL Fp[2]} BC6 BC7 vd FL FC7[2] FL Fi FC8{}} BC2 VBC9{ BC10{ m FL FC5 Fp[8] Fl} VBC5 VBC11{ BC6 VBC10 BC7 BC2 Fp Fi[3]} BC2 vd v3 FL Fp[10]} vd v4 Fi FD Fi FL Fi[2]} BC5 BC9 vd Fi FL[3] Fi Fi:2 Fi:0 FL[3] FC10}


 S19934C1 ::~S19934C1(){ note_dtor("S19934C1", this);}
S19934C1 ::S19934C1(){ note_ctor("S19934C1", this);} // tgen

static void Test_S19934C1()
{
  extern Class_Descriptor cd_S19934C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1360,4455)];
    init_test(&cd_S19934C1, buf);
    S19934C1 *dp, &lv = *(dp=new (buf) S19934C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(21744,17816), "sizeof(S19934C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19934C1)");
    /*is_ambiguous_... S19934C1::S19934C2 */ AMB_check_base_class_offset(lv, (S19934C2*), ABISELECT(6792,5544), "S19934C1");
    check_base_class_offset(lv, (S19934C2*)(S19934C4*)(S19934C3*), ABISELECT(6792,5544), "S19934C1");
    check_base_class_offset(lv, (S19934C2*)(S19934C5*)(S19934C4*)(S19934C3*), ABISELECT(6792,5544), "S19934C1");
    /*is_ambiguous_... S19934C5::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*)(S19934C5*)(S19934C4*)(S19934C3*), ABISELECT(6792,5544), "S19934C1");
    check_base_class_offset(lv, (S19934C2*)(S19934C7*)(S19934C5*)(S19934C4*)(S19934C3*), ABISELECT(6792,5544), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*), ABISELECT(6792,5544), "S19934C1");
    /*is_ambiguous_... S19934C4::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*)(S19934C4*)(S19934C3*), ABISELECT(6792,5544), "S19934C1");
    /*is_ambiguous_... S19934C4::S19934C7 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C7*)(S19934C4*)(S19934C3*), ABISELECT(6792,5544), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C5*), ABISELECT(6792,5544), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*)(S19934C5*), ABISELECT(6792,5544), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C7*)(S19934C5*), ABISELECT(6792,5544), "S19934C1");
    /*is_ambiguous_... S19934C11::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*)(S19934C11*), ABISELECT(6792,5544), "S19934C1");
    check_base_class_offset(lv, (S19934C2*)(S19934C7*)(S19934C11*), ABISELECT(6792,5544), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C5*), ABISELECT(6792,5544), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*)(S19934C5*), ABISELECT(6792,5544), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C7*)(S19934C5*), ABISELECT(6792,5544), "S19934C1");
    /*is_ambiguous_... S19934C5::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C5*)(S19934C4*)(S19934C3*), ABISELECT(6912,5644), "S19934C1");
    check_base_class_offset(lv, (S19934C6*)(S19934C7*)(S19934C5*)(S19934C4*)(S19934C3*), ABISELECT(12488,10244), "S19934C1");
    /*is_ambiguous_... S19934C4::S19934C7 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C7*)(S19934C4*)(S19934C3*), ABISELECT(12488,10244), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C7*)(S19934C5*), ABISELECT(12488,10244), "S19934C1");
    check_base_class_offset(lv, (S19934C6*)(S19934C7*)(S19934C11*), ABISELECT(12488,10244), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C7*)(S19934C5*), ABISELECT(12488,10244), "S19934C1");
    check_base_class_offset(lv, (S19934C7*)(S19934C5*)(S19934C4*)(S19934C3*), ABISELECT(8016,6560), "S19934C1");
    check_base_class_offset(lv, (S19934C5*)(S19934C4*)(S19934C3*), ABISELECT(6912,5644), "S19934C1");
    /*is_ambiguous_... S19934C4::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C4*)(S19934C3*), ABISELECT(8216,6716), "S19934C1");
    /*is_ambiguous_... S19934C4::S19934C7 */ AMB_check_base_class_offset(lv, (S19934C7*)(S19934C4*)(S19934C3*), ABISELECT(9320,7632), "S19934C1");
    check_base_class_offset(lv, (S19934C4*)(S19934C3*), ABISELECT(6912,5644), "S19934C1");
    /*is_ambiguous_... S19934C3::S19934C2 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C3*), ABISELECT(12320,10108), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C9 */ AMB_check_base_class_offset(lv, (S19934C10*)(S19934C9*), ABISELECT(13712,11260), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C5*), ABISELECT(16408,13440), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C7*)(S19934C5*), ABISELECT(17512,14356), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C9 */ AMB_check_base_class_offset(lv, (S19934C5*)(S19934C9*), ABISELECT(16408,13440), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C9 */ AMB_check_base_class_offset(lv, (S19934C5*)(S19934C9*), ABISELECT(16408,13440), "S19934C1");
    /*is_ambiguous_... S19934C11::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C11*), ABISELECT(17712,14512), "S19934C1");
    check_base_class_offset(lv, (S19934C10*)(S19934C11*), ABISELECT(19136,15684), "S19934C1");
    check_base_class_offset(lv, (S19934C7*)(S19934C11*), ABISELECT(18816,15428), "S19934C1");
    /*is_ambiguous_... S19934C11::S19934C2 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C11*), ABISELECT(18992,15568), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C9 */ AMB_check_base_class_offset(lv, (S19934C11*)(S19934C9*), ABISELECT(17712,14512), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C9 */ AMB_check_base_class_offset(lv, (S19934C11*)(S19934C9*), ABISELECT(17712,14512), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C9 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C9*), ABISELECT(13592,11160), "S19934C1");
    check_base_class_offset(lv, (S19934C9*)(S19934C3*), ABISELECT(13592,11160), "S19934C1");
    check_base_class_offset(lv, (S19934C3*), ABISELECT(6912,5644), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C5*), 0, "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C7*)(S19934C5*), ABISELECT(1104,916), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C5*), 0, "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C9 */ AMB_check_base_class_offset(lv, (S19934C10*)(S19934C9*), ABISELECT(1424,1172), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C9 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C9*), ABISELECT(1304,1072), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C9 */ AMB_check_base_class_offset(lv, (S19934C9*), ABISELECT(1304,1072), "S19934C1");
    check_field_offset(lv, s19934c1f0, ABISELECT(4120,3352), "S19934C1.s19934c1f0");
    check_field_offset(lv, s19934c1f1, ABISELECT(4128,3356), "S19934C1.s19934c1f1");
    check_field_offset(lv, s19934c1f2, ABISELECT(4152,3380), "S19934C1.s19934c1f2");
    set_bf_and_test(lv, s19934c1f3, ABISELECT(4156,3384), 0, 2, 1, "S19934C1");
    set_bf_and_test(lv, s19934c1f3, ABISELECT(4156,3384), 0, 2, hide_sll(1LL<<1), "S19934C1");
    check_field_offset(lv, s19934c1f5, ABISELECT(4160,3388), "S19934C1.s19934c1f5");
    check_field_offset(lv, s19934c1f6, ABISELECT(4184,3412), "S19934C1.s19934c1f6");
    test_class_info(&lv, &cd_S19934C1);
    dp->~S19934C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19934C1(Test_S19934C1, "S19934C1", ABISELECT(21744,17816));

#else // __cplusplus

extern void _ZN8S19934C1C1Ev();
extern void _ZN8S19934C1D2Ev();
Name_Map name_map_S19934C1[] = {
  NSPAIR(_ZN8S19934C1C1Ev),
  NSPAIR(_ZN8S19934C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C5;
extern VTBL_ENTRY _ZTI8S19934C5[];
extern  VTBL_ENTRY _ZTV8S19934C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C5[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C4;
extern VTBL_ENTRY _ZTI8S19934C4[];
extern  VTBL_ENTRY _ZTV8S19934C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C4[];
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C5;
extern VTBL_ENTRY _ZTI8S19934C5[];
extern  VTBL_ENTRY _ZTV8S19934C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C5[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C11;
extern VTBL_ENTRY _ZTI9S19934C11[];
extern  VTBL_ENTRY _ZTV9S19934C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19934C11[];
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C9;
extern VTBL_ENTRY _ZTI8S19934C9[];
extern  VTBL_ENTRY _ZTV8S19934C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C9[];
extern Class_Descriptor cd_S19934C3;
extern VTBL_ENTRY _ZTI8S19934C3[];
extern  VTBL_ENTRY _ZTV8S19934C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C3[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C5;
extern VTBL_ENTRY _ZTI8S19934C5[];
extern  VTBL_ENTRY _ZTV8S19934C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C5[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C9;
extern VTBL_ENTRY _ZTI8S19934C9[];
extern  VTBL_ENTRY _ZTV8S19934C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C9[];
static Base_Class bases_S19934C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19934C2,    ABISELECT(6792,5544), //bcp->offset
    29, //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_S19934C6,    ABISELECT(6912,5644), //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
    12, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19934C6,    ABISELECT(12488,10244), //bcp->offset
    67, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19934C7,    ABISELECT(8016,6560), //bcp->offset
    49, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19934C5,    ABISELECT(6912,5644), //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
    14, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19934C6,    ABISELECT(8216,6716), //bcp->offset
    55, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19934C7,    ABISELECT(9320,7632), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19934C4,    ABISELECT(6912,5644), //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
    17, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19934C2,    ABISELECT(12320,10108), //bcp->offset
    64, //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
    18, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19934C10,    ABISELECT(13712,11260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19934C6,    ABISELECT(16408,13440), //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
    3, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19934C7,    ABISELECT(17512,14356), //bcp->offset
    93, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    79, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19934C5,    ABISELECT(16408,13440), //bcp->offset
    84, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19934C6,    ABISELECT(17712,14512), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    86, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19934C10,    ABISELECT(19136,15684), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19934C7,    ABISELECT(18816,15428), //bcp->offset
    108, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    88, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19934C2,    ABISELECT(18992,15568), //bcp->offset
    114, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19934C11,    ABISELECT(17712,14512), //bcp->offset
    99, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    85, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19934C2,    ABISELECT(13592,11160), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19934C9,    ABISELECT(13592,11160), //bcp->offset
    70, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S19934C3,    ABISELECT(6912,5644), //bcp->offset
    33, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19934C6,    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
    20, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19934C7,    ABISELECT(1104,916), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19934C5,    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
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19934C10,    ABISELECT(1424,1172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19934C2,    ABISELECT(1304,1072), //bcp->offset
    -1, //bcp->virtual_function_table_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
    26, //immediately_derived
  0, 0},
  {&cd_S19934C9,    ABISELECT(1304,1072), //bcp->offset
    18, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19934C1[];
extern void _ZN8S19934C1D1Ev();
extern void _ZN8S19934C1D0Ev();
extern void _ZN8S19934C52v2Ev();
extern void ABISELECT(_ZThn1104_N8S19934C1D1Ev,_ZThn916_N8S19934C1D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C1D0Ev,_ZThn916_N8S19934C1D0Ev)();
extern void _ZN8S19934C22v1Ev();
extern void ABISELECT(_ZThn1304_N8S19934C1D1Ev,_ZThn1072_N8S19934C1D1Ev)();
extern void ABISELECT(_ZThn1304_N8S19934C1D0Ev,_ZThn1072_N8S19934C1D0Ev)();
extern void _ZN8S19934C92v3Ev();
extern void _ZN8S19934C22v1Ev();
extern void ABISELECT(_ZTv0_n72_N8S19934C1D1Ev,_ZTv0_n36_N8S19934C1D1Ev)();
extern void ABISELECT(_ZThn6912_N8S19934C1D1Ev,_ZThn5644_N8S19934C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19934C1D0Ev,_ZTv0_n36_N8S19934C1D0Ev)();
extern void ABISELECT(_ZThn6912_N8S19934C1D0Ev,_ZThn5644_N8S19934C1D0Ev)() __attribute__((weak));
extern void _ZN8S19934C52v2Ev();
extern void _ZN8S19934C32v4Ev();
extern void ABISELECT(_ZTvn1104_n72_N8S19934C1D1Ev,_ZTvn916_n36_N8S19934C1D1Ev)();
extern void ABISELECT(_ZTvn1104_n72_N8S19934C1D0Ev,_ZTvn916_n36_N8S19934C1D0Ev)();
extern void ABISELECT(_ZTvn2408_n72_N8S19934C1D1Ev,_ZTvn1988_n36_N8S19934C1D1Ev)();
extern void ABISELECT(_ZTvn2408_n72_N8S19934C1D0Ev,_ZTvn1988_n36_N8S19934C1D0Ev)();
extern void _ZN8S19934C22v1Ev();
extern void _ZN8S19934C22v1Ev();
extern void ABISELECT(_ZTv0_n72_N8S19934C1D1Ev,_ZTv0_n36_N8S19934C1D1Ev)();
extern void ABISELECT(_ZThn13592_N8S19934C1D1Ev,_ZThn11160_N8S19934C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19934C1D0Ev,_ZTv0_n36_N8S19934C1D0Ev)();
extern void ABISELECT(_ZThn13592_N8S19934C1D0Ev,_ZThn11160_N8S19934C1D0Ev)() __attribute__((weak));
extern void _ZN8S19934C92v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19934C1D1Ev,_ZTv0_n20_N8S19934C1D1Ev)();
extern void ABISELECT(_ZThn16408_N8S19934C1D1Ev,_ZThn13440_N8S19934C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19934C1D0Ev,_ZTv0_n20_N8S19934C1D0Ev)();
extern void ABISELECT(_ZThn16408_N8S19934C1D0Ev,_ZThn13440_N8S19934C1D0Ev)() __attribute__((weak));
extern void _ZN8S19934C52v2Ev();
extern void ABISELECT(_ZTvn1104_n40_N8S19934C1D1Ev,_ZTvn916_n20_N8S19934C1D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N8S19934C1D0Ev,_ZTvn916_n20_N8S19934C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19934C1D1Ev,_ZTv0_n24_N8S19934C1D1Ev)();
extern void ABISELECT(_ZThn17712_N8S19934C1D1Ev,_ZThn14512_N8S19934C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19934C1D0Ev,_ZTv0_n24_N8S19934C1D0Ev)();
extern void ABISELECT(_ZThn17712_N8S19934C1D0Ev,_ZThn14512_N8S19934C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1104_n48_N8S19934C1D1Ev,_ZTvn916_n24_N8S19934C1D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N8S19934C1D0Ev,_ZTvn916_n24_N8S19934C1D0Ev)();
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY vtc_S19934C1[] = {
  ABISELECT(19136,15684),
  ABISELECT(17712,14512),
  ABISELECT(16408,13440),
  ABISELECT(13592,11160),
  ABISELECT(6912,5644),
  ABISELECT(12488,10244),
  ABISELECT(6792,5544),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&_ZN8S19934C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
  ABISELECT(11384,9328),
  ABISELECT(5688,4628),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C1D1Ev,_ZThn916_N8S19934C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C1D0Ev,_ZThn916_N8S19934C1D0Ev),
  ABISELECT(17832,14612),
  ABISELECT(16408,13440),
  ABISELECT(11184,9172),
  ABISELECT(5488,4472),
  ABISELECT(15104,12368),
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1304_N8S19934C1D1Ev,_ZThn1072_N8S19934C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1304_N8S19934C1D0Ev,_ZThn1072_N8S19934C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19934C92v3Ev,
  0,
  ABISELECT(-6792,-5544),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  ABISELECT(5408,4464),
  0,
  0,
  ABISELECT(-6912,-5644),
  ABISELECT(12224,10040),
  ABISELECT(10800,8868),
  ABISELECT(9496,7796),
  ABISELECT(6680,5516),
  ABISELECT(5576,4600),
  ABISELECT(-120,-100),
  ABISELECT(-6912,-5644),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19934C1D1Ev,_ZTv0_n36_N8S19934C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19934C1D0Ev,_ZTv0_n36_N8S19934C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19934C32v4Ev,
  ABISELECT(4472,3684),
  ABISELECT(-1224,-1016),
  ABISELECT(-8016,-6560),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n72_N8S19934C1D1Ev,_ZTvn916_n36_N8S19934C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n72_N8S19934C1D0Ev,_ZTvn916_n36_N8S19934C1D0Ev),
  ABISELECT(-1424,-1172),
  ABISELECT(-8216,-6716),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  ABISELECT(3168,2612),
  ABISELECT(-2528,-2088),
  ABISELECT(-9320,-7632),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2408_n72_N8S19934C1D1Ev,_ZTvn1988_n36_N8S19934C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2408_n72_N8S19934C1D0Ev,_ZTvn1988_n36_N8S19934C1D0Ev),
  ABISELECT(-12320,-10108),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  ABISELECT(-5696,-4700),
  ABISELECT(-12488,-10244),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  0,
  ABISELECT(-13592,-11160),
  0,
  ABISELECT(5544,4524),
  ABISELECT(4120,3352),
  ABISELECT(-1104,-916),
  ABISELECT(-6800,-5616),
  ABISELECT(2816,2280),
  ABISELECT(-13592,-11160),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19934C1D1Ev,_ZTv0_n36_N8S19934C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19934C1D0Ev,_ZTv0_n36_N8S19934C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19934C92v3Ev,
  0,
  ABISELECT(-16408,-13440),
  ABISELECT(-3920,-3196),
  ABISELECT(-9616,-7896),
  ABISELECT(-16408,-13440),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C1D1Ev,_ZTv0_n20_N8S19934C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C1D0Ev,_ZTv0_n20_N8S19934C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
  ABISELECT(-5024,-4112),
  ABISELECT(-10720,-8812),
  ABISELECT(-17512,-14356),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C1D1Ev,_ZTvn916_n20_N8S19934C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C1D0Ev,_ZTvn916_n20_N8S19934C1D0Ev),
  ABISELECT(1280,1056),
  ABISELECT(-17712,-14512),
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-10920,-8968),
  ABISELECT(-17712,-14512),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C1D1Ev,_ZTv0_n24_N8S19934C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C1D0Ev,_ZTv0_n24_N8S19934C1D0Ev),
  ABISELECT(-6328,-5184),
  ABISELECT(-12024,-9884),
  ABISELECT(-18816,-15428),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C1D1Ev,_ZTvn916_n24_N8S19934C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C1D0Ev,_ZTvn916_n24_N8S19934C1D0Ev),
  ABISELECT(-18992,-15568),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S19934C1[];
extern void _ZN8S19934C5D1Ev();
extern void _ZN8S19934C5D0Ev();
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C5__A__8S19934C1[] = {
  ABISELECT(12488,10244),
  ABISELECT(6792,5544),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C68S19934C5__A5__8S19934C1[] = {
  ABISELECT(6792,5544),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C68S19934C5__A5__8S19934C1[] = {
  0,
  ABISELECT(-6792,-5544),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C5__A4__8S19934C1[] = {
  ABISELECT(11384,9328),
  ABISELECT(5688,4628),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C78S19934C5__A4__8S19934C1[] = {
  0,
  ABISELECT(-5688,-4628),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C78S19934C5__A4__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(-11384,-9328),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C5__A__8S19934C1[] = {
  0,
  ABISELECT(-6792,-5544),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C7__8S19934C5__A__8S19934C1[] = {
  ABISELECT(11384,9328),
  ABISELECT(5688,4628),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C5__A__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(-12488,-10244),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
};
extern void _ZN8S19934C22v1Ev();
extern void _ZN8S19934C9D1Ev();
extern void _ZN8S19934C9D0Ev();
extern void _ZN8S19934C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C9__A__8S19934C1[] = {
  ABISELECT(17832,14612),
  ABISELECT(16408,13440),
  ABISELECT(11184,9172),
  ABISELECT(5488,4472),
  ABISELECT(15104,12368),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19934C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C92v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19934C9D1Ev,_ZTv0_n20_N8S19934C9D1Ev)();
extern void ABISELECT(_ZThn15104_N8S19934C9D1Ev,_ZThn12368_N8S19934C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19934C9D0Ev,_ZTv0_n20_N8S19934C9D0Ev)();
extern void ABISELECT(_ZThn15104_N8S19934C9D0Ev,_ZThn12368_N8S19934C9D0Ev)() __attribute__((weak));
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C5__8S19934C9__A__8S19934C1[] = {
  0,
  ABISELECT(-15104,-12368),
  ABISELECT(-3920,-3196),
  ABISELECT(-9616,-7896),
  ABISELECT(-15104,-12368),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C9D1Ev,_ZTv0_n20_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C9D0Ev,_ZTv0_n20_N8S19934C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C9__A__8S19934C1[] = {
  0,
  ABISELECT(-5488,-4472),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZTvn1104_n40_N8S19934C9D1Ev,_ZTvn916_n20_N8S19934C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N8S19934C9D0Ev,_ZTvn916_n20_N8S19934C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C5__8S19934C9__A__8S19934C1[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-10720,-8812),
  ABISELECT(-16208,-13284),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C9D1Ev,_ZTvn916_n20_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C9D0Ev,_ZTvn916_n20_N8S19934C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C9__A__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(-11184,-9172),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19934C9D1Ev,_ZTv0_n24_N8S19934C9D1Ev)();
extern void ABISELECT(_ZThn16408_N8S19934C9D1Ev,_ZThn13440_N8S19934C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19934C9D0Ev,_ZTv0_n24_N8S19934C9D0Ev)();
extern void ABISELECT(_ZThn16408_N8S19934C9D0Ev,_ZThn13440_N8S19934C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19934C11__8S19934C9__A__8S19934C1[] = {
  ABISELECT(1280,1056),
  ABISELECT(-16408,-13440),
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-10920,-8968),
  ABISELECT(-16408,-13440),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C9D1Ev,_ZTv0_n24_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C9D0Ev,_ZTv0_n24_N8S19934C9D0Ev),
};
extern void ABISELECT(_ZTvn1104_n48_N8S19934C9D1Ev,_ZTvn916_n24_N8S19934C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N8S19934C9D0Ev,_ZTvn916_n24_N8S19934C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C79S19934C11__A1__8S19934C9__A__8S19934C1[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-12024,-9884),
  ABISELECT(-17512,-14356),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C9D1Ev,_ZTvn916_n24_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C9D0Ev,_ZTvn916_n24_N8S19934C9D0Ev),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C29S19934C11__A1__8S19934C9__A__8S19934C1[] = {
  ABISELECT(-17688,-14496),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C3D1Ev();
extern void _ZN8S19934C3D0Ev();
extern void _ZN8S19934C52v2Ev();
extern void _ZN8S19934C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C3__8S19934C1[] = {
  ABISELECT(12224,10040),
  ABISELECT(10800,8868),
  ABISELECT(9496,7796),
  ABISELECT(6680,5516),
  ABISELECT(5576,4600),
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&_ZN8S19934C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19934C32v4Ev,
};
extern void _ZN8S19934C4D1Ev();
extern void _ZN8S19934C4D0Ev();
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C48S19934C3__8S19934C1[] = {
  ABISELECT(5576,4600),
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  (VTBL_ENTRY)&_ZN8S19934C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
extern void _ZN8S19934C5D1Ev();
extern void _ZN8S19934C5D0Ev();
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C58S19934C48S19934C3__8S19934C1[] = {
  ABISELECT(5576,4600),
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C68S19934C58S19934C48S19934C3__8S19934C1[] = {
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C68S19934C58S19934C48S19934C3__8S19934C1[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C58S19934C48S19934C3__8S19934C1[] = {
  ABISELECT(4472,3684),
  ABISELECT(-1224,-1016),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C78S19934C58S19934C48S19934C3__8S19934C1[] = {
  0,
  ABISELECT(1224,1016),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C78S19934C58S19934C48S19934C3__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(-4472,-3684),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C58S19934C48S19934C3__8S19934C1[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C7__8S19934C58S19934C48S19934C3__8S19934C1[] = {
  ABISELECT(4472,3684),
  ABISELECT(-1224,-1016),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C58S19934C48S19934C3__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19934C68S19934C48S19934C3__A2__8S19934C1[] = {
  ABISELECT(-1424,-1172),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C68S19934C48S19934C3__A2__8S19934C1[] = {
  0,
  ABISELECT(1424,1172),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C48S19934C3__A1__8S19934C1[] = {
  ABISELECT(3168,2612),
  ABISELECT(-2528,-2088),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C78S19934C48S19934C3__A1__8S19934C1[] = {
  0,
  ABISELECT(2528,2088),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C78S19934C48S19934C3__A1__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(-3168,-2612),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C48S19934C3__8S19934C1[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N8S19934C4D1Ev,_ZThn916_N8S19934C4D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C4D0Ev,_ZThn916_N8S19934C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C5__8S19934C48S19934C3__8S19934C1[] = {
  ABISELECT(4472,3684),
  ABISELECT(-1224,-1016),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C4D1Ev,_ZThn916_N8S19934C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C4D0Ev,_ZThn916_N8S19934C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C48S19934C3__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A__8S19934C48S19934C3__8S19934C1[] = {
  ABISELECT(-1424,-1172),
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
};
extern void ABISELECT(_ZThn2408_N8S19934C4D1Ev,_ZThn1988_N8S19934C4D1Ev)();
extern void ABISELECT(_ZThn2408_N8S19934C4D0Ev,_ZThn1988_N8S19934C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C7__A1__8S19934C48S19934C3__8S19934C1[] = {
  ABISELECT(3168,2612),
  ABISELECT(-2528,-2088),
  ABISELECT(-2408,-1988),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N8S19934C4D1Ev,_ZThn1988_N8S19934C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N8S19934C4D0Ev,_ZThn1988_N8S19934C4D0Ev),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C3__8S19934C1[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N8S19934C3D1Ev,_ZThn916_N8S19934C3D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C3D0Ev,_ZThn916_N8S19934C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C58S19934C4__8S19934C3__8S19934C1[] = {
  ABISELECT(4472,3684),
  ABISELECT(-1224,-1016),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C3D1Ev,_ZThn916_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C3D0Ev,_ZThn916_N8S19934C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C3__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19934C68S19934C4__A2__8S19934C3__8S19934C1[] = {
  ABISELECT(-1424,-1172),
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
};
extern void ABISELECT(_ZThn2408_N8S19934C3D1Ev,_ZThn1988_N8S19934C3D1Ev)();
extern void ABISELECT(_ZThn2408_N8S19934C3D0Ev,_ZThn1988_N8S19934C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C4__A1__8S19934C3__8S19934C1[] = {
  ABISELECT(3168,2612),
  ABISELECT(-2528,-2088),
  ABISELECT(-2408,-1988),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N8S19934C3D1Ev,_ZThn1988_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N8S19934C3D0Ev,_ZThn1988_N8S19934C3D0Ev),
};
extern void _ZN8S19934C22v1Ev();
extern void ABISELECT(_ZTv0_n72_N8S19934C3D1Ev,_ZTv0_n36_N8S19934C3D1Ev)();
extern void ABISELECT(_ZThn6680_N8S19934C3D1Ev,_ZThn5516_N8S19934C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19934C3D0Ev,_ZTv0_n36_N8S19934C3D0Ev)();
extern void ABISELECT(_ZThn6680_N8S19934C3D0Ev,_ZThn5516_N8S19934C3D0Ev)() __attribute__((weak));
extern void _ZN8S19934C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C9__8S19934C3__8S19934C1[] = {
  0,
  ABISELECT(-6680,-5516),
  0,
  ABISELECT(5544,4524),
  ABISELECT(4120,3352),
  ABISELECT(-1104,-916),
  ABISELECT(-6800,-5616),
  ABISELECT(2816,2280),
  ABISELECT(-6680,-5516),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19934C3D1Ev,_ZTv0_n36_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19934C3D0Ev,_ZTv0_n36_N8S19934C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19934C92v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19934C3D1Ev,_ZTv0_n20_N8S19934C3D1Ev)();
extern void ABISELECT(_ZThn9496_N8S19934C3D1Ev,_ZThn7796_N8S19934C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19934C3D0Ev,_ZTv0_n20_N8S19934C3D0Ev)();
extern void ABISELECT(_ZThn9496_N8S19934C3D0Ev,_ZThn7796_N8S19934C3D0Ev)() __attribute__((weak));
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C5__A1__8S19934C3__8S19934C1[] = {
  0,
  ABISELECT(-9496,-7796),
  ABISELECT(-3920,-3196),
  ABISELECT(-9616,-7896),
  ABISELECT(-9496,-7796),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C3D1Ev,_ZTv0_n20_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C3D0Ev,_ZTv0_n20_N8S19934C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
extern void ABISELECT(_ZTvn1104_n40_N8S19934C3D1Ev,_ZTvn916_n20_N8S19934C3D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N8S19934C3D0Ev,_ZTvn916_n20_N8S19934C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C5__A2__8S19934C3__8S19934C1[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-10720,-8812),
  ABISELECT(-10600,-8712),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C3D1Ev,_ZTvn916_n20_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C3D0Ev,_ZTvn916_n20_N8S19934C3D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19934C3D1Ev,_ZTv0_n24_N8S19934C3D1Ev)();
extern void ABISELECT(_ZThn10800_N8S19934C3D1Ev,_ZThn8868_N8S19934C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19934C3D0Ev,_ZTv0_n24_N8S19934C3D0Ev)();
extern void ABISELECT(_ZThn10800_N8S19934C3D0Ev,_ZThn8868_N8S19934C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19934C11__8S19934C3__8S19934C1[] = {
  ABISELECT(1280,1056),
  ABISELECT(-10800,-8868),
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-10920,-8968),
  ABISELECT(-10800,-8868),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C3D1Ev,_ZTv0_n24_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C3D0Ev,_ZTv0_n24_N8S19934C3D0Ev),
};
extern void ABISELECT(_ZTvn1104_n48_N8S19934C3D1Ev,_ZTvn916_n24_N8S19934C3D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N8S19934C3D0Ev,_ZTvn916_n24_N8S19934C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C79S19934C11__A3__8S19934C3__8S19934C1[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-12024,-9884),
  ABISELECT(-11904,-9784),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C3D1Ev,_ZTvn916_n24_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C3D0Ev,_ZTvn916_n24_N8S19934C3D0Ev),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C29S19934C11__A2__8S19934C3__8S19934C1[] = {
  ABISELECT(-12080,-9924),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C6__A1__8S19934C1[] = {
  0,
  ABISELECT(5696,4700),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C22v1Ev();
extern void _ZN8S19934C9D1Ev();
extern void _ZN8S19934C9D0Ev();
extern void _ZN8S19934C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C9__8S19934C1[] = {
  ABISELECT(5544,4524),
  ABISELECT(4120,3352),
  ABISELECT(-1104,-916),
  ABISELECT(-6800,-5616),
  ABISELECT(2816,2280),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19934C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C92v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19934C9D1Ev,_ZTv0_n20_N8S19934C9D1Ev)();
extern void ABISELECT(_ZThn2816_N8S19934C9D1Ev,_ZThn2280_N8S19934C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19934C9D0Ev,_ZTv0_n20_N8S19934C9D0Ev)();
extern void ABISELECT(_ZThn2816_N8S19934C9D0Ev,_ZThn2280_N8S19934C9D0Ev)() __attribute__((weak));
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C5__8S19934C9__8S19934C1[] = {
  0,
  ABISELECT(-2816,-2280),
  ABISELECT(-3920,-3196),
  ABISELECT(-9616,-7896),
  ABISELECT(-2816,-2280),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C9D1Ev,_ZTv0_n20_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C9D0Ev,_ZTv0_n20_N8S19934C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C9__8S19934C1[] = {
  0,
  ABISELECT(6800,5616),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZTvn1104_n40_N8S19934C9D1Ev,_ZTvn916_n20_N8S19934C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N8S19934C9D0Ev,_ZTvn916_n20_N8S19934C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C5__8S19934C9__8S19934C1[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-10720,-8812),
  ABISELECT(-3920,-3196),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C9D1Ev,_ZTvn916_n20_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C9D0Ev,_ZTvn916_n20_N8S19934C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C9__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(1104,916),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19934C9D1Ev,_ZTv0_n24_N8S19934C9D1Ev)();
extern void ABISELECT(_ZThn4120_N8S19934C9D1Ev,_ZThn3352_N8S19934C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19934C9D0Ev,_ZTv0_n24_N8S19934C9D0Ev)();
extern void ABISELECT(_ZThn4120_N8S19934C9D0Ev,_ZThn3352_N8S19934C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19934C11__8S19934C9__8S19934C1[] = {
  ABISELECT(1280,1056),
  ABISELECT(-4120,-3352),
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-10920,-8968),
  ABISELECT(-4120,-3352),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C9D1Ev,_ZTv0_n24_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C9D0Ev,_ZTv0_n24_N8S19934C9D0Ev),
};
extern void ABISELECT(_ZTvn1104_n48_N8S19934C9D1Ev,_ZTvn916_n24_N8S19934C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N8S19934C9D0Ev,_ZTvn916_n24_N8S19934C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C79S19934C11__A1__8S19934C9__8S19934C1[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-12024,-9884),
  ABISELECT(-5224,-4268),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C9D1Ev,_ZTvn916_n24_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C9D0Ev,_ZTvn916_n24_N8S19934C9D0Ev),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C29S19934C11__A1__8S19934C9__8S19934C1[] = {
  ABISELECT(-5400,-4408),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C5D1Ev();
extern void _ZN8S19934C5D0Ev();
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C5__A1__8S19934C1[] = {
  ABISELECT(-3920,-3196),
  ABISELECT(-9616,-7896),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C68S19934C5__A3__8S19934C1[] = {
  ABISELECT(-9616,-7896),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C68S19934C5__A3__8S19934C1[] = {
  0,
  ABISELECT(9616,7896),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C5__A2__8S19934C1[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-10720,-8812),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C78S19934C5__A2__8S19934C1[] = {
  0,
  ABISELECT(10720,8812),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C78S19934C5__A2__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(5024,4112),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C5__A1__8S19934C1[] = {
  0,
  ABISELECT(9616,7896),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C7__8S19934C5__A1__8S19934C1[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-10720,-8812),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C5__A1__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(3920,3196),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
};
extern void _ZN9S19934C11D1Ev();
extern void _ZN9S19934C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19934C11__8S19934C1[] = {
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-10920,-8968),
  0,
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&_ZN9S19934C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19934C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C69S19934C11__A4__8S19934C1[] = {
  ABISELECT(-10920,-8968),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C69S19934C11__A4__8S19934C1[] = {
  0,
  ABISELECT(10920,8968),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C79S19934C11__A3__8S19934C1[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-12024,-9884),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C79S19934C11__A3__8S19934C1[] = {
  0,
  ABISELECT(12024,9884),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C79S19934C11__A3__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(6328,5184),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__9S19934C11__8S19934C1[] = {
  0,
  ABISELECT(10920,8968),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N9S19934C11D1Ev,_ZThn916_N9S19934C11D1Ev)();
extern void ABISELECT(_ZThn1104_N9S19934C11D0Ev,_ZThn916_N9S19934C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C7__9S19934C11__8S19934C1[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-12024,-9884),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N9S19934C11D1Ev,_ZThn916_N9S19934C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N9S19934C11D0Ev,_ZThn916_N9S19934C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__9S19934C11__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(5224,4268),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
};
static  VTT_ENTRY vtt_S19934C1[] = {
  {&(_ZTV8S19934C1[9]),  9,117},
  {&(_tg__ZTV8S19934C5__A__8S19934C1[4]),  4,7},
  {&(_tg__ZTV8S19934C68S19934C5__A5__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C68S19934C5__A5__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C5__A4__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C78S19934C5__A4__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C78S19934C5__A4__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C5__A__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C7__8S19934C5__A__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C5__A__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C9__A__8S19934C1[7]),  7,11},
  {&(_tg__ZTV8S19934C5__8S19934C9__A__8S19934C1[6]),  6,9},
  {&(_tg__ZTV8S19934C2__8S19934C9__A__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C5__8S19934C9__A__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C9__A__8S19934C1[3]),  3,3},
  {&(_tg__ZTV9S19934C11__8S19934C9__A__8S19934C1[7]),  7,9},
  {&(_tg__ZTV8S19934C79S19934C11__A1__8S19934C9__A__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C29S19934C11__A1__8S19934C9__A__8S19934C1[2]),  2,3},
  {&(_ZTV8S19934C1[32]),  32,117},
  {&(_ZTV8S19934C1[45]),  45,117},
  {&(_ZTV8S19934C1[53]),  53,117},
  {&(_ZTV8S19934C1[70]),  70,117},
  {&(_ZTV8S19934C1[58]),  58,117},
  {&(_ZTV8S19934C1[62]),  62,117},
  {&(_ZTV8S19934C1[66]),  66,117},
  {&(_ZTV8S19934C1[80]),  80,117},
  {&(_ZTV8S19934C1[90]),  90,117},
  {&(_ZTV8S19934C1[97]),  97,117},
  {&(_ZTV8S19934C1[106]),  106,117},
  {&(_ZTV8S19934C1[112]),  112,117},
  {&(_ZTV8S19934C1[116]),  116,117},
  {&(_ZTV8S19934C1[16]),  16,117},
  {&(_ZTV8S19934C1[25]),  25,117},
  {&(_tg__ZTV8S19934C3__8S19934C1[8]),  8,12},
  {&(_tg__ZTV8S19934C48S19934C3__8S19934C1[4]),  4,7},
  {&(_tg__ZTV8S19934C58S19934C48S19934C3__8S19934C1[4]),  4,7},
  {&(_tg__ZTV8S19934C68S19934C58S19934C48S19934C3__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C68S19934C58S19934C48S19934C3__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C58S19934C48S19934C3__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C78S19934C58S19934C48S19934C3__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C78S19934C58S19934C48S19934C3__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C58S19934C48S19934C3__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C7__8S19934C58S19934C48S19934C3__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C58S19934C48S19934C3__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C68S19934C48S19934C3__A2__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C68S19934C48S19934C3__A2__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C48S19934C3__A1__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C78S19934C48S19934C3__A1__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C78S19934C48S19934C3__A1__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C48S19934C3__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C5__8S19934C48S19934C3__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C48S19934C3__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C6__A__8S19934C48S19934C3__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C7__A1__8S19934C48S19934C3__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C3__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C58S19934C4__8S19934C3__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C3__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C68S19934C4__A2__8S19934C3__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C78S19934C4__A1__8S19934C3__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C9__8S19934C3__8S19934C1[10]),  10,14},
  {&(_tg__ZTV8S19934C5__A1__8S19934C3__8S19934C1[6]),  6,9},
  {&(_tg__ZTV8S19934C78S19934C5__A2__8S19934C3__8S19934C1[4]),  4,6},
  {&(_tg__ZTV9S19934C11__8S19934C3__8S19934C1[7]),  7,9},
  {&(_tg__ZTV8S19934C79S19934C11__A3__8S19934C3__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C29S19934C11__A2__8S19934C3__8S19934C1[2]),  2,3},
  {&(_tg__ZTV8S19934C6__A1__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C6__A1__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C9__8S19934C1[7]),  7,11},
  {&(_tg__ZTV8S19934C5__8S19934C9__8S19934C1[6]),  6,9},
  {&(_tg__ZTV8S19934C2__8S19934C9__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C5__8S19934C9__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C9__8S19934C1[3]),  3,3},
  {&(_tg__ZTV9S19934C11__8S19934C9__8S19934C1[7]),  7,9},
  {&(_tg__ZTV8S19934C79S19934C11__A1__8S19934C9__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C29S19934C11__A1__8S19934C9__8S19934C1[2]),  2,3},
  {&(_tg__ZTV8S19934C5__A1__8S19934C1[4]),  4,7},
  {&(_tg__ZTV8S19934C68S19934C5__A3__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C68S19934C5__A3__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C5__A2__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C78S19934C5__A2__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C78S19934C5__A2__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C5__A1__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C7__8S19934C5__A1__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C5__A1__8S19934C1[3]),  3,3},
  {&(_tg__ZTV9S19934C11__8S19934C1[5]),  5,7},
  {&(_tg__ZTV8S19934C69S19934C11__A4__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C69S19934C11__A4__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C79S19934C11__A3__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C79S19934C11__A3__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C79S19934C11__A3__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C2__9S19934C11__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C7__9S19934C11__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__9S19934C11__8S19934C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19934C1[];
extern  VTBL_ENTRY _ZTV8S19934C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C1[];
static VTBL_ENTRY alt_thunk_names17[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19934C3D0Ev,_ZTv0_n24_N8S19934C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N8S19934C3D0Ev,_ZThn8868_N8S19934C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19934C3D1Ev,_ZTv0_n24_N8S19934C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N8S19934C3D1Ev,_ZThn8868_N8S19934C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19934C3D0Ev,_ZTv0_n20_N8S19934C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9496_N8S19934C3D0Ev,_ZThn7796_N8S19934C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19934C3D1Ev,_ZTv0_n20_N8S19934C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9496_N8S19934C3D1Ev,_ZThn7796_N8S19934C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19934C3D0Ev,_ZTv0_n36_N8S19934C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6680_N8S19934C3D0Ev,_ZThn5516_N8S19934C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19934C3D1Ev,_ZTv0_n36_N8S19934C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6680_N8S19934C3D1Ev,_ZThn5516_N8S19934C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19934C9D0Ev,_ZTv0_n24_N8S19934C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4120_N8S19934C9D0Ev,_ZThn3352_N8S19934C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16408_N8S19934C9D0Ev,_ZThn13440_N8S19934C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19934C9D1Ev,_ZTv0_n24_N8S19934C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4120_N8S19934C9D1Ev,_ZThn3352_N8S19934C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16408_N8S19934C9D1Ev,_ZThn13440_N8S19934C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19934C9D0Ev,_ZTv0_n20_N8S19934C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N8S19934C9D0Ev,_ZThn2280_N8S19934C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn15104_N8S19934C9D0Ev,_ZThn12368_N8S19934C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19934C9D1Ev,_ZTv0_n20_N8S19934C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N8S19934C9D1Ev,_ZThn2280_N8S19934C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn15104_N8S19934C9D1Ev,_ZThn12368_N8S19934C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19934C1D0Ev,_ZTv0_n24_N8S19934C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17712_N8S19934C1D0Ev,_ZThn14512_N8S19934C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19934C1D1Ev,_ZTv0_n24_N8S19934C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17712_N8S19934C1D1Ev,_ZThn14512_N8S19934C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19934C1D0Ev,_ZTv0_n20_N8S19934C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16408_N8S19934C1D0Ev,_ZThn13440_N8S19934C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19934C1D1Ev,_ZTv0_n20_N8S19934C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16408_N8S19934C1D1Ev,_ZThn13440_N8S19934C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19934C1D0Ev,_ZTv0_n36_N8S19934C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13592_N8S19934C1D0Ev,_ZThn11160_N8S19934C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6912_N8S19934C1D0Ev,_ZThn5644_N8S19934C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19934C1D1Ev,_ZTv0_n36_N8S19934C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13592_N8S19934C1D1Ev,_ZThn11160_N8S19934C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6912_N8S19934C1D1Ev,_ZThn5644_N8S19934C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19934C1 = {  "S19934C1", // class name
  bases_S19934C1, 27,
  &(vtc_S19934C1[0]), // expected_vtbl_contents
  &(vtt_S19934C1[0]), // expected_vtt_contents
  ABISELECT(21744,17816), // object size
  NSPAIRA(_ZTI8S19934C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19934C1),117, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19934C1),93, //virtual table table var
  24, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names17,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6542C2  {
  short s6542c2f0;
  __tsi64 s6542c2f1[4];
  void *s6542c2f2;
  char s6542c2f3;
  void *s6542c2f4;
  __tsi64 s6542c2f5;
  int s6542c2f6[10];
  virtual void  v2(); // _ZN7S6542C22v2Ev
  ~S6542C2(); // tgen
  S6542C2(); // tgen
};
//SIG(-1 S6542C2) C1{ v1 Fs FL[4] Fp Fc Fp FL Fi[10]}


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

static void Test_S6542C2()
{
  extern Class_Descriptor cd_S6542C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,26)];
    init_test(&cd_S6542C2, buf);
    S6542C2 *dp, &lv = *(dp=new (buf) S6542C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,100), "sizeof(S6542C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6542C2)");
    check_field_offset(lv, s6542c2f0, ABISELECT(8,4), "S6542C2.s6542c2f0");
    check_field_offset(lv, s6542c2f1, ABISELECT(16,8), "S6542C2.s6542c2f1");
    check_field_offset(lv, s6542c2f2, ABISELECT(48,40), "S6542C2.s6542c2f2");
    check_field_offset(lv, s6542c2f3, ABISELECT(56,44), "S6542C2.s6542c2f3");
    check_field_offset(lv, s6542c2f4, ABISELECT(64,48), "S6542C2.s6542c2f4");
    check_field_offset(lv, s6542c2f5, ABISELECT(72,52), "S6542C2.s6542c2f5");
    check_field_offset(lv, s6542c2f6, ABISELECT(80,60), "S6542C2.s6542c2f6");
    test_class_info(&lv, &cd_S6542C2);
    dp->~S6542C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6542C2(Test_S6542C2, "S6542C2", ABISELECT(120,100));

#else // __cplusplus

extern void _ZN7S6542C2C1Ev();
extern void _ZN7S6542C2D1Ev();
Name_Map name_map_S6542C2[] = {
  NSPAIR(_ZN7S6542C2C1Ev),
  NSPAIR(_ZN7S6542C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6542C2[];
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY vtc_S6542C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C2[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
Class_Descriptor cd_S6542C2 = {  "S6542C2", // class name
  0,0,//no base classes
  &(vtc_S6542C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,100), // object size
  NSPAIRA(_ZTI7S6542C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6542C2),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6542C6  : virtual S6542C2 {
  ::S6542C2 s6542c6f0[8];
  int s6542c6f1;
  char s6542c6f2;
  ::S6542C2 s6542c6f3;
  int s6542c6f4;
  ~S6542C6(); // tgen
  S6542C6(); // tgen
};
//SIG(-1 S6542C6) C1{ VBC2{ v1 Fs FL[4] Fp Fc Fp FL Fi[10]} FC2[8] Fi Fc FC2 Fi}


S6542C6 ::~S6542C6(){ note_dtor("S6542C6", this);} // tgen
S6542C6 ::S6542C6(){ note_ctor("S6542C6", this);} // tgen

static void Test_S6542C6()
{
  extern Class_Descriptor cd_S6542C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(154,255)];
    init_test(&cd_S6542C6, buf);
    S6542C6 *dp, &lv = *(dp=new (buf) S6542C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1224,1016), "sizeof(S6542C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6542C6)");
    check_base_class_offset(lv, (S6542C2*), ABISELECT(1104,916), "S6542C6");
    check_field_offset(lv, s6542c6f0, ABISELECT(8,4), "S6542C6.s6542c6f0");
    check_field_offset(lv, s6542c6f1, ABISELECT(968,804), "S6542C6.s6542c6f1");
    check_field_offset(lv, s6542c6f2, ABISELECT(972,808), "S6542C6.s6542c6f2");
    check_field_offset(lv, s6542c6f3, ABISELECT(976,812), "S6542C6.s6542c6f3");
    check_field_offset(lv, s6542c6f4, ABISELECT(1096,912), "S6542C6.s6542c6f4");
    test_class_info(&lv, &cd_S6542C6);
    dp->~S6542C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6542C6(Test_S6542C6, "S6542C6", ABISELECT(1224,1016));

#else // __cplusplus

extern void _ZN7S6542C6C1Ev();
extern void _ZN7S6542C6D1Ev();
Name_Map name_map_S6542C6[] = {
  NSPAIR(_ZN7S6542C6C1Ev),
  NSPAIR(_ZN7S6542C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
static Base_Class bases_S6542C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6542C2,    ABISELECT(1104,916), //bcp->offset
    3, //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 _ZTI7S6542C6[];
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY vtc_S6542C6[] = {
  ABISELECT(1104,916),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  0,
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern VTBL_ENTRY _ZTV7S6542C6[];
static  VTT_ENTRY vtt_S6542C6[] = {
  {&(_ZTV7S6542C6[3]),  3,7},
  {&(_ZTV7S6542C6[6]),  6,7},
};
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
Class_Descriptor cd_S6542C6 = {  "S6542C6", // class name
  bases_S6542C6, 1,
  &(vtc_S6542C6[0]), // expected_vtbl_contents
  &(vtt_S6542C6[0]), // expected_vtt_contents
  ABISELECT(1224,1016), // object size
  NSPAIRA(_ZTI7S6542C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6542C6),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6542C6),2, //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  S6542C7  : virtual S6542C2 , virtual S6542C6 {
  void *s6542c7f0;
  int s6542c7f1[6];
  char s6542c7f2;
  ::S6542C2 s6542c7f3;
  void *s6542c7f4;
  virtual  ~S6542C7(); // _ZN7S6542C7D2Ev
  S6542C7(); // tgen
};
//SIG(-1 S6542C7) C1{ VBC2{ v1 Fs FL[4] Fp Fc Fp FL Fi[10]} VBC3{ VBC2 FC2[8] Fi Fc FC2 Fi} vd Fp Fi[6] Fc FC2 Fp}


 S6542C7 ::~S6542C7(){ note_dtor("S6542C7", this);}
S6542C7 ::S6542C7(){ note_ctor("S6542C7", this);} // tgen

static void Test_S6542C7()
{
  extern Class_Descriptor cd_S6542C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(176,290)];
    init_test(&cd_S6542C7, buf);
    S6542C7 *dp, &lv = *(dp=new (buf) S6542C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1400,1156), "sizeof(S6542C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6542C7)");
    check_base_class_offset(lv, (S6542C2*), ABISELECT(176,140), "S6542C7");
    check_base_class_offset(lv, (S6542C2*)(S6542C6*), ABISELECT(176,140), "S6542C7");
    check_base_class_offset(lv, (S6542C6*), ABISELECT(296,240), "S6542C7");
    check_field_offset(lv, s6542c7f0, ABISELECT(8,4), "S6542C7.s6542c7f0");
    check_field_offset(lv, s6542c7f1, ABISELECT(16,8), "S6542C7.s6542c7f1");
    check_field_offset(lv, s6542c7f2, ABISELECT(40,32), "S6542C7.s6542c7f2");
    check_field_offset(lv, s6542c7f3, ABISELECT(48,36), "S6542C7.s6542c7f3");
    check_field_offset(lv, s6542c7f4, ABISELECT(168,136), "S6542C7.s6542c7f4");
    test_class_info(&lv, &cd_S6542C7);
    dp->~S6542C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6542C7(Test_S6542C7, "S6542C7", ABISELECT(1400,1156));

#else // __cplusplus

extern void _ZN7S6542C7C1Ev();
extern void _ZN7S6542C7D2Ev();
Name_Map name_map_S6542C7[] = {
  NSPAIR(_ZN7S6542C7C1Ev),
  NSPAIR(_ZN7S6542C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
static Base_Class bases_S6542C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6542C2,    ABISELECT(176,140), //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6542C6,    ABISELECT(296,240), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6542C7[];
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY vtc_S6542C7[] = {
  ABISELECT(296,240),
  ABISELECT(176,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
  0,
  ABISELECT(-176,-140),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  ABISELECT(-120,-100),
  ABISELECT(-296,-240),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
extern VTBL_ENTRY _ZTV7S6542C7[];
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C7[] = {
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C6__7S6542C7[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTT_ENTRY vtt_S6542C7[] = {
  {&(_ZTV7S6542C7[4]),  4,13},
  {&(_ZTV7S6542C7[9]),  9,13},
  {&(_ZTV7S6542C7[13]),  13,13},
  {&(_tg__ZTV7S6542C6__7S6542C7[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C6__7S6542C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
Class_Descriptor cd_S6542C7 = {  "S6542C7", // class name
  bases_S6542C7, 2,
  &(vtc_S6542C7[0]), // expected_vtbl_contents
  &(vtt_S6542C7[0]), // expected_vtt_contents
  ABISELECT(1400,1156), // object size
  NSPAIRA(_ZTI7S6542C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6542C7),13, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6542C7),5, //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  S6542C5  : virtual S6542C2 , S6542C6 , S6542C7 {
  __tsi64 s6542c5f0;
  void *s6542c5f1[2];
  virtual  ~S6542C5(); // _ZN7S6542C5D2Ev
  virtual void  v3(); // _ZN7S6542C52v3Ev
  S6542C5(); // tgen
};
//SIG(-1 S6542C5) C1{ VBC2{ v2 Fs FL[4] Fp Fc Fp FL Fi[10]} BC3{ VBC2 FC2[8] Fi Fc FC2 Fi} BC4{ VBC2 VBC3 vd Fp Fi[6] Fc FC2 Fp} vd v1 FL Fp[2]}


 S6542C5 ::~S6542C5(){ note_dtor("S6542C5", this);}
void  S6542C5 ::v3(){vfunc_called(this, "_ZN7S6542C52v3Ev");}
S6542C5 ::S6542C5(){ note_ctor("S6542C5", this);} // tgen

static void Test_S6542C5()
{
  extern Class_Descriptor cd_S6542C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(317,523)];
    init_test(&cd_S6542C5, buf);
    S6542C5 *dp, &lv = *(dp=new (buf) S6542C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2528,2088), "sizeof(S6542C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6542C5)");
    check_base_class_offset(lv, (S6542C2*), ABISELECT(1304,1072), "S6542C5");
    /*is_ambiguous_... S6542C5::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*), ABISELECT(1304,1072), "S6542C5");
    check_base_class_offset(lv, (S6542C2*)(S6542C7*), ABISELECT(1304,1072), "S6542C5");
    /*is_ambiguous_... S6542C5::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*), ABISELECT(1304,1072), "S6542C5");
    /*is_ambiguous_... S6542C5::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C6*), 0, "S6542C5");
    check_base_class_offset(lv, (S6542C6*)(S6542C7*), ABISELECT(1424,1172), "S6542C5");
    check_base_class_offset(lv, (S6542C7*), ABISELECT(1104,916), "S6542C5");
    check_field_offset(lv, s6542c5f0, ABISELECT(1280,1056), "S6542C5.s6542c5f0");
    check_field_offset(lv, s6542c5f1, ABISELECT(1288,1064), "S6542C5.s6542c5f1");
    test_class_info(&lv, &cd_S6542C5);
    dp->~S6542C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6542C5(Test_S6542C5, "S6542C5", ABISELECT(2528,2088));

#else // __cplusplus

extern void _ZN7S6542C5C1Ev();
extern void _ZN7S6542C5D2Ev();
Name_Map name_map_S6542C5[] = {
  NSPAIR(_ZN7S6542C5C1Ev),
  NSPAIR(_ZN7S6542C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
static Base_Class bases_S6542C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6542C2,    ABISELECT(1304,1072), //bcp->offset
    13, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S6542C6,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6542C6,    ABISELECT(1424,1172), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //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
    3, //immediately_derived
  0, 1},
  {&cd_S6542C7,    ABISELECT(1104,916), //bcp->offset
    7, //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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6542C5[];
extern void _ZN7S6542C5D1Ev();
extern void _ZN7S6542C5D0Ev();
extern void _ZN7S6542C52v3Ev();
extern void ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev)();
extern void ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev)();
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY vtc_S6542C5[] = {
  ABISELECT(1424,1172),
  ABISELECT(1304,1072),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
  ABISELECT(320,256),
  ABISELECT(200,156),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev),
  0,
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  ABISELECT(-120,-100),
  ABISELECT(-1424,-1172),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
};
extern VTBL_ENTRY _ZTV7S6542C5[];
static  VTBL_ENTRY _tg__ZTV7S6542C6__A__7S6542C5[] = {
  ABISELECT(1304,1072),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C6__A__7S6542C5[] = {
  0,
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C7__7S6542C5[] = {
  ABISELECT(320,256),
  ABISELECT(200,156),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C7__7S6542C5[] = {
  0,
  ABISELECT(-200,-156),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C7__7S6542C5[] = {
  ABISELECT(-120,-100),
  ABISELECT(-320,-256),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C5[] = {
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C6__A1__7S6542C5[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTT_ENTRY vtt_S6542C5[] = {
  {&(_ZTV7S6542C5[4]),  4,20},
  {&(_tg__ZTV7S6542C6__A__7S6542C5[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C6__A__7S6542C5[3]),  3,4},
  {&(_tg__ZTV7S6542C7__7S6542C5[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C7__7S6542C5[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C7__7S6542C5[3]),  3,3},
  {&(_ZTV7S6542C5[16]),  16,20},
  {&(_ZTV7S6542C5[11]),  11,20},
  {&(_ZTV7S6542C5[20]),  20,20},
  {&(_tg__ZTV7S6542C6__A1__7S6542C5[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C6__A1__7S6542C5[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6542C5[];
extern  VTBL_ENTRY _ZTV7S6542C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C5[];
Class_Descriptor cd_S6542C5 = {  "S6542C5", // class name
  bases_S6542C5, 4,
  &(vtc_S6542C5[0]), // expected_vtbl_contents
  &(vtt_S6542C5[0]), // expected_vtt_contents
  ABISELECT(2528,2088), // object size
  NSPAIRA(_ZTI7S6542C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6542C5),20, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6542C5),11, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6542C4  : virtual S6542C2 , S6542C5 , S6542C6 , S6542C7 {
  __tsi64 s6542c4f0;
  ::S6542C7 s6542c4f1[2];
  __tsi64 s6542c4f2;
  int s6542c4f3;
  ::S20677C6_nt s6542c4f4;
  virtual  ~S6542C4(); // _ZN7S6542C4D2Ev
  S6542C4(); // tgen
};
//SIG(-1 S6542C4) C1{ VBC2{ v1 Fs FL[4] Fp Fc Fp FL Fi[10]} BC3{ VBC2 BC4{ VBC2 FC2[8] Fi Fc FC2 Fi} BC5{ VBC2 VBC4 vd Fp Fi[6] Fc FC2 Fp} vd v2 FL Fp[2]} BC4 BC5 vd FL FC5[2] FL Fi FC6{}}


 S6542C4 ::~S6542C4(){ note_dtor("S6542C4", this);}
S6542C4 ::S6542C4(){ note_ctor("S6542C4", this);} // tgen

static void Test_S6542C4()
{
  extern Class_Descriptor cd_S6542C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(830,1371)];
    init_test(&cd_S6542C4, buf);
    S6542C4 *dp, &lv = *(dp=new (buf) S6542C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6632,5480), "sizeof(S6542C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6542C4)");
    check_base_class_offset(lv, (S6542C2*), ABISELECT(5408,4464), "S6542C4");
    check_base_class_offset(lv, (S6542C2*)(S6542C5*), ABISELECT(5408,4464), "S6542C4");
    /*is_ambiguous_... S6542C5::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*)(S6542C5*), ABISELECT(5408,4464), "S6542C4");
    check_base_class_offset(lv, (S6542C2*)(S6542C7*)(S6542C5*), ABISELECT(5408,4464), "S6542C4");
    /*is_ambiguous_... S6542C4::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*), ABISELECT(5408,4464), "S6542C4");
    /*is_ambiguous_... S6542C4::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*), ABISELECT(5408,4464), "S6542C4");
    /*is_ambiguous_... S6542C4::S6542C7 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C7*), ABISELECT(5408,4464), "S6542C4");
    /*is_ambiguous_... S6542C5::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C5*), 0, "S6542C4");
    check_base_class_offset(lv, (S6542C6*)(S6542C7*)(S6542C5*), ABISELECT(5528,4564), "S6542C4");
    /*is_ambiguous_... S6542C4::S6542C7 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C7*), ABISELECT(5528,4564), "S6542C4");
    check_base_class_offset(lv, (S6542C7*)(S6542C5*), ABISELECT(1104,916), "S6542C4");
    check_base_class_offset(lv, (S6542C5*), 0, "S6542C4");
    /*is_ambiguous_... S6542C4::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C6*), ABISELECT(1304,1072), "S6542C4");
    /*is_ambiguous_... S6542C4::S6542C7 */ AMB_check_base_class_offset(lv, (S6542C7*), ABISELECT(2408,1988), "S6542C4");
    check_field_offset(lv, s6542c4f0, ABISELECT(2584,2128), "S6542C4.s6542c4f0");
    check_field_offset(lv, s6542c4f1, ABISELECT(2592,2136), "S6542C4.s6542c4f1");
    check_field_offset(lv, s6542c4f2, ABISELECT(5392,4448), "S6542C4.s6542c4f2");
    check_field_offset(lv, s6542c4f3, ABISELECT(5400,4456), "S6542C4.s6542c4f3");
    check_field_offset(lv, s6542c4f4, ABISELECT(5404,4460), "S6542C4.s6542c4f4");
    test_class_info(&lv, &cd_S6542C4);
    dp->~S6542C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6542C4(Test_S6542C4, "S6542C4", ABISELECT(6632,5480));

#else // __cplusplus

extern void _ZN7S6542C4C1Ev();
extern void _ZN7S6542C4D2Ev();
Name_Map name_map_S6542C4[] = {
  NSPAIR(_ZN7S6542C4C1Ev),
  NSPAIR(_ZN7S6542C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
extern Class_Descriptor cd_S6542C5;
extern VTBL_ENTRY _ZTI7S6542C5[];
extern  VTBL_ENTRY _ZTV7S6542C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C5[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
static Base_Class bases_S6542C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6542C2,    ABISELECT(5408,4464), //bcp->offset
    22, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6542C6,    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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6542C6,    ABISELECT(5528,4564), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6542C7,    ABISELECT(1104,916), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6542C5,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6542C6,    ABISELECT(1304,1072), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6542C7,    ABISELECT(2408,1988), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6542C4[];
extern void _ZN7S6542C4D1Ev();
extern void _ZN7S6542C4D0Ev();
extern void _ZN7S6542C52v3Ev();
extern void ABISELECT(_ZThn1104_N7S6542C4D1Ev,_ZThn916_N7S6542C4D1Ev)();
extern void ABISELECT(_ZThn1104_N7S6542C4D0Ev,_ZThn916_N7S6542C4D0Ev)();
extern void ABISELECT(_ZThn2408_N7S6542C4D1Ev,_ZThn1988_N7S6542C4D1Ev)();
extern void ABISELECT(_ZThn2408_N7S6542C4D0Ev,_ZThn1988_N7S6542C4D0Ev)();
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY vtc_S6542C4[] = {
  ABISELECT(5528,4564),
  ABISELECT(5408,4464),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  (VTBL_ENTRY)&_ZN7S6542C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C4D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
  ABISELECT(4424,3648),
  ABISELECT(4304,3548),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C4D1Ev,_ZThn916_N7S6542C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C4D0Ev,_ZThn916_N7S6542C4D0Ev),
  ABISELECT(4104,3392),
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  ABISELECT(3120,2576),
  ABISELECT(3000,2476),
  ABISELECT(-2408,-1988),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N7S6542C4D1Ev,_ZThn1988_N7S6542C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N7S6542C4D0Ev,_ZThn1988_N7S6542C4D0Ev),
  0,
  ABISELECT(-5408,-4464),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  ABISELECT(-120,-100),
  ABISELECT(-5528,-4564),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
};
extern VTBL_ENTRY _ZTV7S6542C4[];
extern void _ZN7S6542C5D1Ev();
extern void _ZN7S6542C5D0Ev();
extern void _ZN7S6542C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C5__7S6542C4[] = {
  ABISELECT(5528,4564),
  ABISELECT(5408,4464),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C67S6542C5__7S6542C4[] = {
  ABISELECT(5408,4464),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C67S6542C5__7S6542C4[] = {
  0,
  ABISELECT(-5408,-4464),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C5__7S6542C4[] = {
  ABISELECT(4424,3648),
  ABISELECT(4304,3548),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C77S6542C5__7S6542C4[] = {
  0,
  ABISELECT(-4304,-3548),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C77S6542C5__7S6542C4[] = {
  ABISELECT(-120,-100),
  ABISELECT(-4424,-3648),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C5__7S6542C4[] = {
  0,
  ABISELECT(-5408,-4464),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev)();
extern void ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C7__7S6542C5__7S6542C4[] = {
  ABISELECT(4424,3648),
  ABISELECT(4304,3548),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C5__7S6542C4[] = {
  ABISELECT(-120,-100),
  ABISELECT(-5528,-4564),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A__7S6542C4[] = {
  ABISELECT(4104,3392),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C6__A__7S6542C4[] = {
  0,
  ABISELECT(-4104,-3392),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C7__A1__7S6542C4[] = {
  ABISELECT(3120,2576),
  ABISELECT(3000,2476),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C7__A1__7S6542C4[] = {
  0,
  ABISELECT(-3000,-2476),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C7__A1__7S6542C4[] = {
  ABISELECT(-120,-100),
  ABISELECT(-3120,-2576),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C4[] = {
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C6__A1__7S6542C4[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTT_ENTRY vtt_S6542C4[] = {
  {&(_ZTV7S6542C4[4]),  4,29},
  {&(_tg__ZTV7S6542C5__7S6542C4[4]),  4,7},
  {&(_tg__ZTV7S6542C67S6542C5__7S6542C4[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C67S6542C5__7S6542C4[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C5__7S6542C4[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C77S6542C5__7S6542C4[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C77S6542C5__7S6542C4[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C5__7S6542C4[3]),  3,4},
  {&(_tg__ZTV7S6542C7__7S6542C5__7S6542C4[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__7S6542C5__7S6542C4[3]),  3,3},
  {&(_tg__ZTV7S6542C6__A__7S6542C4[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C6__A__7S6542C4[3]),  3,4},
  {&(_tg__ZTV7S6542C7__A1__7S6542C4[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C7__A1__7S6542C4[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C7__A1__7S6542C4[3]),  3,3},
  {&(_ZTV7S6542C4[25]),  25,29},
  {&(_ZTV7S6542C4[11]),  11,29},
  {&(_ZTV7S6542C4[29]),  29,29},
  {&(_ZTV7S6542C4[16]),  16,29},
  {&(_ZTV7S6542C4[20]),  20,29},
  {&(_tg__ZTV7S6542C6__A1__7S6542C4[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C6__A1__7S6542C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6542C4[];
extern  VTBL_ENTRY _ZTV7S6542C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C4[];
Class_Descriptor cd_S6542C4 = {  "S6542C4", // class name
  bases_S6542C4, 7,
  &(vtc_S6542C4[0]), // expected_vtbl_contents
  &(vtt_S6542C4[0]), // expected_vtt_contents
  ABISELECT(6632,5480), // object size
  NSPAIRA(_ZTI7S6542C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6542C4),29, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6542C4),22, //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  S6542C11  : S6542C6 , virtual S19934C10 , S6542C7 , S6542C2 {
  void *s6542c11f0;
  int s6542c11f1[3];
  ~S6542C11(); // tgen
  S6542C11(); // tgen
};
//SIG(-1 S6542C11) C1{ BC2{ VBC3{ v1 Fs FL[4] Fp Fc Fp FL Fi[10]} FC3[8] Fi Fc FC3 Fi} VBC4{ m FL FC5{ VBC6{ v3 Fs FL[4] Fp Fc Fp FL Fi[10]} BC7{ VBC6 FC6[8] Fi Fc FC6 Fi} BC8{ VBC6 VBC7 vd Fp Fi[6] Fc FC6 Fp} vd v2 FL Fp[2]} Fp[8] Fl} BC9{ VBC3 VBC2 vd Fp Fi[6] Fc FC3 Fp} BC3 Fp Fi[3]}


S6542C11 ::~S6542C11(){ note_dtor("S6542C11", this);} // tgen
S6542C11 ::S6542C11(){ note_ctor("S6542C11", this);} // tgen

static void Test_S6542C11()
{
  extern Class_Descriptor cd_S6542C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(658,1081)];
    init_test(&cd_S6542C11, buf);
    S6542C11 *dp, &lv = *(dp=new (buf) S6542C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5256,4320), "sizeof(S6542C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6542C11)");
    /*is_ambiguous_... S6542C11::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*), ABISELECT(1424,1172), "S6542C11");
    check_base_class_offset(lv, (S6542C2*)(S6542C7*), ABISELECT(1424,1172), "S6542C11");
    /*is_ambiguous_... S6542C11::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*), ABISELECT(1424,1172), "S6542C11");
    /*is_ambiguous_... S6542C11::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C6*), 0, "S6542C11");
    check_base_class_offset(lv, (S19934C10*), ABISELECT(1544,1272), "S6542C11");
    check_base_class_offset(lv, (S6542C6*)(S6542C7*), ABISELECT(4152,3404), "S6542C11");
    check_base_class_offset(lv, (S6542C7*), ABISELECT(1104,916), "S6542C11");
    /*is_ambiguous_... S6542C11::S6542C2 */ AMB_check_base_class_offset(lv, (S6542C2*), ABISELECT(1280,1056), "S6542C11");
    check_field_offset(lv, s6542c11f0, ABISELECT(1400,1156), "S6542C11.s6542c11f0");
    check_field_offset(lv, s6542c11f1, ABISELECT(1408,1160), "S6542C11.s6542c11f1");
    test_class_info(&lv, &cd_S6542C11);
    dp->~S6542C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6542C11(Test_S6542C11, "S6542C11", ABISELECT(5256,4320));

#else // __cplusplus

extern void _ZN8S6542C11C1Ev();
extern void _ZN8S6542C11D1Ev();
Name_Map name_map_S6542C11[] = {
  NSPAIR(_ZN8S6542C11C1Ev),
  NSPAIR(_ZN8S6542C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
static Base_Class bases_S6542C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6542C2,    ABISELECT(1424,1172), //bcp->offset
    16, //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
    1, //immediately_derived
  0, 1},
  {&cd_S6542C6,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19934C10,    ABISELECT(1544,1272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S6542C6,    ABISELECT(4152,3404), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //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_S6542C7,    ABISELECT(1104,916), //bcp->offset
    7, //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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6542C2,    ABISELECT(1280,1056), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6542C11[];
extern void _ZN8S6542C11D1Ev();
extern void _ZN8S6542C11D0Ev();
extern void ABISELECT(_ZThn1104_N8S6542C11D1Ev,_ZThn916_N8S6542C11D1Ev)();
extern void ABISELECT(_ZThn1104_N8S6542C11D0Ev,_ZThn916_N8S6542C11D0Ev)();
extern void _ZN7S6542C22v2Ev();
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY vtc_S6542C11[] = {
  ABISELECT(4152,3404),
  ABISELECT(1544,1272),
  ABISELECT(1424,1172),
  0,
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&_ZN8S6542C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6542C11D0Ev,
  ABISELECT(3048,2488),
  ABISELECT(320,256),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S6542C11D1Ev,_ZThn916_N8S6542C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S6542C11D0Ev,_ZThn916_N8S6542C11D0Ev),
  ABISELECT(-1280,-1056),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  0,
  ABISELECT(-1424,-1172),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  ABISELECT(-2728,-2232),
  ABISELECT(-4152,-3404),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
};
extern VTBL_ENTRY _ZTV8S6542C11[];
static  VTBL_ENTRY _tg__ZTV7S6542C6__A__8S6542C11[] = {
  ABISELECT(1424,1172),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C6__A__8S6542C11[] = {
  0,
  ABISELECT(-1424,-1172),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C7__8S6542C11[] = {
  ABISELECT(3048,2488),
  ABISELECT(320,256),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C7__8S6542C11[] = {
  0,
  ABISELECT(-320,-256),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C7__8S6542C11[] = {
  ABISELECT(-2728,-2232),
  ABISELECT(-3048,-2488),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__8S6542C11[] = {
  ABISELECT(-2728,-2232),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C6__A1__8S6542C11[] = {
  0,
  ABISELECT(2728,2232),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTT_ENTRY vtt_S6542C11[] = {
  {&(_ZTV8S6542C11[5]),  5,23},
  {&(_tg__ZTV7S6542C6__A__8S6542C11[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C6__A__8S6542C11[3]),  3,4},
  {&(_tg__ZTV7S6542C7__8S6542C11[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C7__8S6542C11[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C7__8S6542C11[3]),  3,3},
  {&(_ZTV8S6542C11[19]),  19,23},
  {&(_ZTV8S6542C11[11]),  11,23},
  {&(_ZTV8S6542C11[23]),  23,23},
  {&(_tg__ZTV7S6542C6__A1__8S6542C11[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C6__A1__8S6542C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6542C11[];
extern  VTBL_ENTRY _ZTV8S6542C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6542C11[];
Class_Descriptor cd_S6542C11 = {  "S6542C11", // class name
  bases_S6542C11, 6,
  &(vtc_S6542C11[0]), // expected_vtbl_contents
  &(vtt_S6542C11[0]), // expected_vtt_contents
  ABISELECT(5256,4320), // object size
  NSPAIRA(_ZTI8S6542C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S6542C11),23, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6542C11),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6542C9  : S19934C10 , virtual S6542C5 , virtual S6542C11 , S6542C2 {
  __tsi64 s6542c9f0;
  void *s6542c9f1[10];
  virtual  ~S6542C9(); // _ZN7S6542C9D2Ev
  virtual void  v4(); // _ZN7S6542C92v4Ev
  S6542C9(); // tgen
};
//SIG(-1 S6542C9) C1{ BC2{ m FL FC3{ VBC4{ v5 Fs FL[4] Fp Fc Fp FL Fi[10]} BC5{ VBC4 FC4[8] Fi Fc FC4 Fi} BC6{ VBC4 VBC5 vd Fp Fi[6] Fc FC4 Fp} vd v4 FL Fp[2]} Fp[8] Fl} VBC7{ VBC8{ v2 Fs FL[4] Fp Fc Fp FL Fi[10]} BC9{ VBC8 FC8[8] Fi Fc FC8 Fi} BC10{ VBC8 VBC9 vd Fp Fi[6] Fc FC8 Fp} vd v3 FL Fp[2]} VBC11{ BC9 VBC2 BC10 BC8 Fp Fi[3]} BC8 vd v1 FL Fp[10]}


 S6542C9 ::~S6542C9(){ note_dtor("S6542C9", this);}
void  S6542C9 ::v4(){vfunc_called(this, "_ZN7S6542C92v4Ev");}
S6542C9 ::S6542C9(){ note_ctor("S6542C9", this);} // tgen

static void Test_S6542C9()
{
  extern Class_Descriptor cd_S6542C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1173,1919)];
    init_test(&cd_S6542C9, buf);
    S6542C9 *dp, &lv = *(dp=new (buf) S6542C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9376,7672), "sizeof(S6542C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6542C9)");
    /*is_ambiguous_... S6542C9::S19934C10 */ AMB_check_base_class_offset(lv, (S19934C10*), ABISELECT(120,100), "S6542C9");
    check_base_class_offset(lv, (S6542C2*)(S6542C5*), ABISELECT(4120,3352), "S6542C9");
    /*is_ambiguous_... S6542C5::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*)(S6542C5*), ABISELECT(4120,3352), "S6542C9");
    check_base_class_offset(lv, (S6542C2*)(S6542C7*)(S6542C5*), ABISELECT(4120,3352), "S6542C9");
    /*is_ambiguous_... S6542C9::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*), ABISELECT(4120,3352), "S6542C9");
    /*is_ambiguous_... S6542C11::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*)(S6542C11*), ABISELECT(4120,3352), "S6542C9");
    check_base_class_offset(lv, (S6542C2*)(S6542C7*)(S6542C11*), ABISELECT(4120,3352), "S6542C9");
    /*is_ambiguous_... S6542C5::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C5*), ABISELECT(2816,2280), "S6542C9");
    check_base_class_offset(lv, (S6542C6*)(S6542C7*)(S6542C5*), ABISELECT(4240,3452), "S6542C9");
    check_base_class_offset(lv, (S6542C6*)(S6542C7*)(S6542C11*), ABISELECT(4240,3452), "S6542C9");
    check_base_class_offset(lv, (S6542C7*)(S6542C5*), ABISELECT(3920,3196), "S6542C9");
    check_base_class_offset(lv, (S6542C5*), ABISELECT(2816,2280), "S6542C9");
    /*is_ambiguous_... S6542C11::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C11*), ABISELECT(5344,4368), "S6542C9");
    check_base_class_offset(lv, (S19934C10*)(S6542C11*), ABISELECT(6768,5540), "S6542C9");
    check_base_class_offset(lv, (S6542C7*)(S6542C11*), ABISELECT(6448,5284), "S6542C9");
    /*is_ambiguous_... S6542C11::S6542C2 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C11*), ABISELECT(6624,5424), "S6542C9");
    check_base_class_offset(lv, (S6542C11*), ABISELECT(5344,4368), "S6542C9");
    /*is_ambiguous_... S6542C9::S6542C2 */ AMB_check_base_class_offset(lv, (S6542C2*), 0, "S6542C9");
    check_field_offset(lv, s6542c9f0, ABISELECT(2728,2232), "S6542C9.s6542c9f0");
    check_field_offset(lv, s6542c9f1, ABISELECT(2736,2240), "S6542C9.s6542c9f1");
    test_class_info(&lv, &cd_S6542C9);
    dp->~S6542C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6542C9(Test_S6542C9, "S6542C9", ABISELECT(9376,7672));

#else // __cplusplus

extern void _ZN7S6542C9C1Ev();
extern void _ZN7S6542C9D2Ev();
Name_Map name_map_S6542C9[] = {
  NSPAIR(_ZN7S6542C9C1Ev),
  NSPAIR(_ZN7S6542C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
extern Class_Descriptor cd_S6542C5;
extern VTBL_ENTRY _ZTI7S6542C5[];
extern  VTBL_ENTRY _ZTV7S6542C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C5[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C11;
extern VTBL_ENTRY _ZTI8S6542C11[];
extern  VTBL_ENTRY _ZTV8S6542C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6542C11[];
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
static Base_Class bases_S6542C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19934C10,    ABISELECT(120,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
    -1, //immediately_derived
  1, 0},
  {&cd_S6542C2,    ABISELECT(4120,3352), //bcp->offset
    26, //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_S6542C6,    ABISELECT(2816,2280), //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
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6542C6,    ABISELECT(4240,3452), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6542C7,    ABISELECT(3920,3196), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6542C5,    ABISELECT(2816,2280), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6542C6,    ABISELECT(5344,4368), //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
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19934C10,    ABISELECT(6768,5540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6542C7,    ABISELECT(6448,5284), //bcp->offset
    42, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6542C2,    ABISELECT(6624,5424), //bcp->offset
    48, //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
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6542C11,    ABISELECT(5344,4368), //bcp->offset
    33, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6542C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S6542C9[];
extern void _ZN7S6542C22v2Ev();
extern void _ZN7S6542C9D1Ev();
extern void _ZN7S6542C9D0Ev();
extern void _ZN7S6542C92v4Ev();
extern void ABISELECT(_ZTv0_n40_N7S6542C9D1Ev,_ZTv0_n20_N7S6542C9D1Ev)();
extern void ABISELECT(_ZThn2816_N7S6542C9D1Ev,_ZThn2280_N7S6542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6542C9D0Ev,_ZTv0_n20_N7S6542C9D0Ev)();
extern void ABISELECT(_ZThn2816_N7S6542C9D0Ev,_ZThn2280_N7S6542C9D0Ev)() __attribute__((weak));
extern void _ZN7S6542C52v3Ev();
extern void ABISELECT(_ZTvn1104_n40_N7S6542C9D1Ev,_ZTvn916_n20_N7S6542C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N7S6542C9D0Ev,_ZTvn916_n20_N7S6542C9D0Ev)();
extern void _ZN7S6542C22v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S6542C9D1Ev,_ZTv0_n24_N7S6542C9D1Ev)();
extern void ABISELECT(_ZThn5344_N7S6542C9D1Ev,_ZThn4368_N7S6542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S6542C9D0Ev,_ZTv0_n24_N7S6542C9D0Ev)();
extern void ABISELECT(_ZThn5344_N7S6542C9D0Ev,_ZThn4368_N7S6542C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1104_n48_N7S6542C9D1Ev,_ZTvn916_n24_N7S6542C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N7S6542C9D0Ev,_ZTvn916_n24_N7S6542C9D0Ev)();
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY vtc_S6542C9[] = {
  ABISELECT(6768,5540),
  ABISELECT(5344,4368),
  ABISELECT(4240,3452),
  ABISELECT(4120,3352),
  ABISELECT(2816,2280),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C9D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C92v4Ev,
  0,
  ABISELECT(-2816,-2280),
  ABISELECT(1424,1172),
  ABISELECT(1304,1072),
  ABISELECT(-2816,-2280),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6542C9D1Ev,_ZTv0_n20_N7S6542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6542C9D0Ev,_ZTv0_n20_N7S6542C9D0Ev),
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
  ABISELECT(320,256),
  ABISELECT(200,156),
  ABISELECT(-3920,-3196),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N7S6542C9D1Ev,_ZTvn916_n20_N7S6542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N7S6542C9D0Ev,_ZTvn916_n20_N7S6542C9D0Ev),
  0,
  ABISELECT(-4120,-3352),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  ABISELECT(-120,-100),
  ABISELECT(-4240,-3452),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  ABISELECT(1280,1056),
  ABISELECT(-5344,-4368),
  ABISELECT(-1104,-916),
  ABISELECT(1424,1172),
  ABISELECT(-1224,-1016),
  ABISELECT(-5344,-4368),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6542C9D1Ev,_ZTv0_n24_N7S6542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6542C9D0Ev,_ZTv0_n24_N7S6542C9D0Ev),
  ABISELECT(-2208,-1832),
  ABISELECT(-2328,-1932),
  ABISELECT(-6448,-5284),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N7S6542C9D1Ev,_ZTvn916_n24_N7S6542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N7S6542C9D0Ev,_ZTvn916_n24_N7S6542C9D0Ev),
  ABISELECT(-6624,-5424),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern VTBL_ENTRY _ZTV7S6542C9[];
extern void _ZN7S6542C5D1Ev();
extern void _ZN7S6542C5D0Ev();
extern void _ZN7S6542C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C5__7S6542C9[] = {
  ABISELECT(1424,1172),
  ABISELECT(1304,1072),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C67S6542C5__7S6542C9[] = {
  ABISELECT(1304,1072),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C67S6542C5__7S6542C9[] = {
  0,
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C5__7S6542C9[] = {
  ABISELECT(320,256),
  ABISELECT(200,156),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C77S6542C5__7S6542C9[] = {
  0,
  ABISELECT(-200,-156),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C77S6542C5__7S6542C9[] = {
  ABISELECT(-120,-100),
  ABISELECT(-320,-256),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C5__7S6542C9[] = {
  0,
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev)();
extern void ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C7__7S6542C5__7S6542C9[] = {
  ABISELECT(320,256),
  ABISELECT(200,156),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C5__7S6542C9[] = {
  ABISELECT(-120,-100),
  ABISELECT(-1424,-1172),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C9[] = {
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C6__A1__7S6542C9[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN8S6542C11D1Ev();
extern void _ZN8S6542C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6542C11__7S6542C9[] = {
  ABISELECT(-1104,-916),
  ABISELECT(1424,1172),
  ABISELECT(-1224,-1016),
  0,
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&_ZN8S6542C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6542C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C68S6542C11__A2__7S6542C9[] = {
  ABISELECT(-1224,-1016),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C68S6542C11__A2__7S6542C9[] = {
  0,
  ABISELECT(1224,1016),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C78S6542C11__A1__7S6542C9[] = {
  ABISELECT(-2208,-1832),
  ABISELECT(-2328,-1932),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C78S6542C11__A1__7S6542C9[] = {
  0,
  ABISELECT(2328,1932),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C78S6542C11__A1__7S6542C9[] = {
  ABISELECT(-120,-100),
  ABISELECT(2208,1832),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__8S6542C11__7S6542C9[] = {
  0,
  ABISELECT(1224,1016),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZThn1104_N8S6542C11D1Ev,_ZThn916_N8S6542C11D1Ev)();
extern void ABISELECT(_ZThn1104_N8S6542C11D0Ev,_ZThn916_N8S6542C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C7__8S6542C11__7S6542C9[] = {
  ABISELECT(-2208,-1832),
  ABISELECT(-2328,-1932),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S6542C11D1Ev,_ZThn916_N8S6542C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S6542C11D0Ev,_ZThn916_N8S6542C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__8S6542C11__7S6542C9[] = {
  ABISELECT(-120,-100),
  ABISELECT(1104,916),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
};
static  VTT_ENTRY vtt_S6542C9[] = {
  {&(_ZTV7S6542C9[7]),  7,51},
  {&(_ZTV7S6542C9[17]),  17,51},
  {&(_ZTV7S6542C9[29]),  29,51},
  {&(_ZTV7S6542C9[24]),  24,51},
  {&(_ZTV7S6542C9[33]),  33,51},
  {&(_ZTV7S6542C9[40]),  40,51},
  {&(_ZTV7S6542C9[46]),  46,51},
  {&(_ZTV7S6542C9[50]),  50,51},
  {&(_tg__ZTV7S6542C5__7S6542C9[4]),  4,7},
  {&(_tg__ZTV7S6542C67S6542C5__7S6542C9[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C67S6542C5__7S6542C9[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C5__7S6542C9[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C77S6542C5__7S6542C9[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C77S6542C5__7S6542C9[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C5__7S6542C9[3]),  3,4},
  {&(_tg__ZTV7S6542C7__7S6542C5__7S6542C9[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__7S6542C5__7S6542C9[3]),  3,3},
  {&(_tg__ZTV7S6542C6__A1__7S6542C9[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C6__A1__7S6542C9[3]),  3,4},
  {&(_tg__ZTV8S6542C11__7S6542C9[5]),  5,7},
  {&(_tg__ZTV7S6542C68S6542C11__A2__7S6542C9[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C68S6542C11__A2__7S6542C9[3]),  3,4},
  {&(_tg__ZTV7S6542C78S6542C11__A1__7S6542C9[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C78S6542C11__A1__7S6542C9[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C78S6542C11__A1__7S6542C9[3]),  3,3},
  {&(_tg__ZTV7S6542C2__8S6542C11__7S6542C9[3]),  3,4},
  {&(_tg__ZTV7S6542C7__8S6542C11__7S6542C9[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__8S6542C11__7S6542C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6542C9[];
extern  VTBL_ENTRY _ZTV7S6542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C9[];
static VTBL_ENTRY alt_thunk_names18[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6542C9D0Ev,_ZTv0_n24_N7S6542C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5344_N7S6542C9D0Ev,_ZThn4368_N7S6542C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6542C9D1Ev,_ZTv0_n24_N7S6542C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5344_N7S6542C9D1Ev,_ZThn4368_N7S6542C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6542C9D0Ev,_ZTv0_n20_N7S6542C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N7S6542C9D0Ev,_ZThn2280_N7S6542C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6542C9D1Ev,_ZTv0_n20_N7S6542C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N7S6542C9D1Ev,_ZThn2280_N7S6542C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6542C9 = {  "S6542C9", // class name
  bases_S6542C9, 12,
  &(vtc_S6542C9[0]), // expected_vtbl_contents
  &(vtt_S6542C9[0]), // expected_vtt_contents
  ABISELECT(9376,7672), // object size
  NSPAIRA(_ZTI7S6542C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6542C9),51, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6542C9),28, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names18,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6542C3  : S6542C4 , S6542C2 , virtual S6542C9 {
  int s6542c3f0;
  long double s6542c3f1;
  int s6542c3f2;
  __tsi64 s6542c3f3;
  int s6542c3f4[2];
  virtual  ~S6542C3(); // _ZN7S6542C3D2Ev
  virtual void  v5(); // _ZN7S6542C32v5Ev
  S6542C3(); // tgen
};
//SIG(-1 S6542C3) C1{ BC2{ VBC3{ v2 Fs FL[4] Fp Fc Fp FL Fi[10]} BC4{ VBC3 BC5{ VBC3 FC3[8] Fi Fc FC3 Fi} BC6{ VBC3 VBC5 vd Fp Fi[6] Fc FC3 Fp} vd v3 FL Fp[2]} BC5 BC6 vd FL FC6[2] FL Fi FC7{}} BC3 VBC8{ BC9{ m FL FC10{ VBC11{ v6 Fs FL[4] Fp Fc Fp FL Fi[10]} BC12{ VBC11 FC11[8] Fi Fc FC11 Fi} BC13{ VBC11 VBC12 vd Fp Fi[6] Fc FC11 Fp} vd v5 FL Fp[2]} Fp[8] Fl} VBC4 VBC14{ BC5 VBC9 BC6 BC3 Fp Fi[3]} BC3 vd v4 FL Fp[10]} vd v1 Fi FD Fi FL Fi[2]}


 S6542C3 ::~S6542C3(){ note_dtor("S6542C3", this);}
void  S6542C3 ::v5(){vfunc_called(this, "_ZN7S6542C32v5Ev");}
S6542C3 ::S6542C3(){ note_ctor("S6542C3", this);} // tgen

static void Test_S6542C3()
{
  extern Class_Descriptor cd_S6542C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(936,3069)];
    init_test(&cd_S6542C3, buf);
    S6542C3 *dp, &lv = *(dp=new (buf) S6542C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(14960,12272), "sizeof(S6542C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6542C3)");
    check_base_class_offset(lv, (S6542C2*)(S6542C4*), ABISELECT(5576,4600), "S6542C3");
    check_base_class_offset(lv, (S6542C2*)(S6542C5*)(S6542C4*), ABISELECT(5576,4600), "S6542C3");
    /*is_ambiguous_... S6542C5::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*)(S6542C5*)(S6542C4*), ABISELECT(5576,4600), "S6542C3");
    check_base_class_offset(lv, (S6542C2*)(S6542C7*)(S6542C5*)(S6542C4*), ABISELECT(5576,4600), "S6542C3");
    /*is_ambiguous_... S6542C3::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*), ABISELECT(5576,4600), "S6542C3");
    /*is_ambiguous_... S6542C4::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*)(S6542C4*), ABISELECT(5576,4600), "S6542C3");
    /*is_ambiguous_... S6542C4::S6542C7 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C7*)(S6542C4*), ABISELECT(5576,4600), "S6542C3");
    /*is_ambiguous_... S6542C3::S6542C5 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C5*), ABISELECT(5576,4600), "S6542C3");
    /*is_ambiguous_... S6542C3::S6542C5 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*)(S6542C5*), ABISELECT(5576,4600), "S6542C3");
    /*is_ambiguous_... S6542C3::S6542C5 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C7*)(S6542C5*), ABISELECT(5576,4600), "S6542C3");
    /*is_ambiguous_... S6542C11::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*)(S6542C11*), ABISELECT(5576,4600), "S6542C3");
    check_base_class_offset(lv, (S6542C2*)(S6542C7*)(S6542C11*), ABISELECT(5576,4600), "S6542C3");
    /*is_ambiguous_... S6542C5::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C5*)(S6542C4*), 0, "S6542C3");
    check_base_class_offset(lv, (S6542C6*)(S6542C7*)(S6542C5*)(S6542C4*), ABISELECT(5696,4700), "S6542C3");
    /*is_ambiguous_... S6542C4::S6542C7 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C7*)(S6542C4*), ABISELECT(5696,4700), "S6542C3");
    /*is_ambiguous_... S6542C3::S6542C5 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C7*)(S6542C5*), ABISELECT(5696,4700), "S6542C3");
    check_base_class_offset(lv, (S6542C6*)(S6542C7*)(S6542C11*), ABISELECT(5696,4700), "S6542C3");
    check_base_class_offset(lv, (S6542C7*)(S6542C5*)(S6542C4*), ABISELECT(1104,916), "S6542C3");
    check_base_class_offset(lv, (S6542C5*)(S6542C4*), 0, "S6542C3");
    /*is_ambiguous_... S6542C4::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C4*), ABISELECT(1304,1072), "S6542C3");
    /*is_ambiguous_... S6542C4::S6542C7 */ AMB_check_base_class_offset(lv, (S6542C7*)(S6542C4*), ABISELECT(2408,1988), "S6542C3");
    check_base_class_offset(lv, (S6542C4*), 0, "S6542C3");
    /*is_ambiguous_... S6542C3::S6542C2 */ AMB_check_base_class_offset(lv, (S6542C2*), ABISELECT(5408,4464), "S6542C3");
    /*is_ambiguous_... S6542C9::S19934C10 */ AMB_check_base_class_offset(lv, (S19934C10*)(S6542C9*), ABISELECT(6920,5716), "S6542C3");
    /*is_ambiguous_... S6542C3::S6542C5 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C5*), ABISELECT(9616,7896), "S6542C3");
    /*is_ambiguous_... S6542C3::S6542C5 */ AMB_check_base_class_offset(lv, (S6542C7*)(S6542C5*), ABISELECT(10720,8812), "S6542C3");
    check_base_class_offset(lv, (S6542C5*)(S6542C9*), ABISELECT(9616,7896), "S6542C3");
    /*is_ambiguous_... S6542C11::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C11*), ABISELECT(10920,8968), "S6542C3");
    check_base_class_offset(lv, (S19934C10*)(S6542C11*), ABISELECT(12344,10140), "S6542C3");
    check_base_class_offset(lv, (S6542C7*)(S6542C11*), ABISELECT(12024,9884), "S6542C3");
    /*is_ambiguous_... S6542C11::S6542C2 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C11*), ABISELECT(12200,10024), "S6542C3");
    check_base_class_offset(lv, (S6542C11*)(S6542C9*), ABISELECT(10920,8968), "S6542C3");
    /*is_ambiguous_... S6542C9::S6542C2 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C9*), ABISELECT(6800,5616), "S6542C3");
    check_base_class_offset(lv, (S6542C9*), ABISELECT(6800,5616), "S6542C3");
    check_field_offset(lv, s6542c3f0, ABISELECT(5528,4564), "S6542C3.s6542c3f0");
    check_field_offset(lv, s6542c3f1, ABISELECT(5536,4568), "S6542C3.s6542c3f1");
    check_field_offset(lv, s6542c3f2, ABISELECT(5552,4580), "S6542C3.s6542c3f2");
    check_field_offset(lv, s6542c3f3, ABISELECT(5560,4584), "S6542C3.s6542c3f3");
    check_field_offset(lv, s6542c3f4, ABISELECT(5568,4592), "S6542C3.s6542c3f4");
    test_class_info(&lv, &cd_S6542C3);
    dp->~S6542C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6542C3(Test_S6542C3, "S6542C3", ABISELECT(14960,12272));

#else // __cplusplus

extern void _ZN7S6542C3C1Ev();
extern void _ZN7S6542C3D2Ev();
Name_Map name_map_S6542C3[] = {
  NSPAIR(_ZN7S6542C3C1Ev),
  NSPAIR(_ZN7S6542C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
extern Class_Descriptor cd_S6542C5;
extern VTBL_ENTRY _ZTI7S6542C5[];
extern  VTBL_ENTRY _ZTV7S6542C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C5[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
extern Class_Descriptor cd_S6542C4;
extern VTBL_ENTRY _ZTI7S6542C4[];
extern  VTBL_ENTRY _ZTV7S6542C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C4[];
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
extern Class_Descriptor cd_S6542C5;
extern VTBL_ENTRY _ZTI7S6542C5[];
extern  VTBL_ENTRY _ZTV7S6542C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C5[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C11;
extern VTBL_ENTRY _ZTI8S6542C11[];
extern  VTBL_ENTRY _ZTV8S6542C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6542C11[];
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C9;
extern VTBL_ENTRY _ZTI7S6542C9[];
extern  VTBL_ENTRY _ZTV7S6542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C9[];
static Base_Class bases_S6542C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6542C2,    ABISELECT(5576,4600), //bcp->offset
    30, //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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S6542C6,    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
    12, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6542C6,    ABISELECT(5696,4700), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6542C7,    ABISELECT(1104,916), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6542C5,    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
    7, //immediately_derived
  0, 0},
  {&cd_S6542C6,    ABISELECT(1304,1072), //bcp->offset
    18, //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
    15, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6542C7,    ABISELECT(2408,1988), //bcp->offset
    21, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6542C4,    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
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6542C2,    ABISELECT(5408,4464), //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
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19934C10,    ABISELECT(6920,5716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6542C6,    ABISELECT(9616,7896), //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
    3, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6542C7,    ABISELECT(10720,8812), //bcp->offset
    60, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6542C5,    ABISELECT(9616,7896), //bcp->offset
    51, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S6542C6,    ABISELECT(10920,8968), //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
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19934C10,    ABISELECT(12344,10140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6542C7,    ABISELECT(12024,9884), //bcp->offset
    75, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6542C2,    ABISELECT(12200,10024), //bcp->offset
    81, //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
    8, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6542C11,    ABISELECT(10920,8968), //bcp->offset
    66, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S6542C2,    ABISELECT(6800,5616), //bcp->offset
    -1, //bcp->virtual_function_table_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_S6542C9,    ABISELECT(6800,5616), //bcp->offset
    37, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6542C3[];
extern void _ZN7S6542C3D1Ev();
extern void _ZN7S6542C3D0Ev();
extern void _ZN7S6542C52v3Ev();
extern void _ZN7S6542C32v5Ev();
extern void ABISELECT(_ZThn1104_N7S6542C3D1Ev,_ZThn916_N7S6542C3D1Ev)();
extern void ABISELECT(_ZThn1104_N7S6542C3D0Ev,_ZThn916_N7S6542C3D0Ev)();
extern void ABISELECT(_ZThn2408_N7S6542C3D1Ev,_ZThn1988_N7S6542C3D1Ev)();
extern void ABISELECT(_ZThn2408_N7S6542C3D0Ev,_ZThn1988_N7S6542C3D0Ev)();
extern void _ZN7S6542C22v2Ev();
extern void _ZN7S6542C22v2Ev();
extern void _ZN7S6542C22v2Ev();
extern void ABISELECT(_ZTv0_n72_N7S6542C3D1Ev,_ZTv0_n36_N7S6542C3D1Ev)();
extern void ABISELECT(_ZThn6800_N7S6542C3D1Ev,_ZThn5616_N7S6542C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6542C3D0Ev,_ZTv0_n36_N7S6542C3D0Ev)();
extern void ABISELECT(_ZThn6800_N7S6542C3D0Ev,_ZThn5616_N7S6542C3D0Ev)() __attribute__((weak));
extern void _ZN7S6542C92v4Ev();
extern void ABISELECT(_ZTv0_n40_N7S6542C3D1Ev,_ZTv0_n20_N7S6542C3D1Ev)();
extern void ABISELECT(_ZThn9616_N7S6542C3D1Ev,_ZThn7896_N7S6542C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6542C3D0Ev,_ZTv0_n20_N7S6542C3D0Ev)();
extern void ABISELECT(_ZThn9616_N7S6542C3D0Ev,_ZThn7896_N7S6542C3D0Ev)() __attribute__((weak));
extern void _ZN7S6542C52v3Ev();
extern void ABISELECT(_ZTvn1104_n40_N7S6542C3D1Ev,_ZTvn916_n20_N7S6542C3D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N7S6542C3D0Ev,_ZTvn916_n20_N7S6542C3D0Ev)();
extern void ABISELECT(_ZTv0_n48_N7S6542C3D1Ev,_ZTv0_n24_N7S6542C3D1Ev)();
extern void ABISELECT(_ZThn10920_N7S6542C3D1Ev,_ZThn8968_N7S6542C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S6542C3D0Ev,_ZTv0_n24_N7S6542C3D0Ev)();
extern void ABISELECT(_ZThn10920_N7S6542C3D0Ev,_ZThn8968_N7S6542C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1104_n48_N7S6542C3D1Ev,_ZTvn916_n24_N7S6542C3D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N7S6542C3D0Ev,_ZTvn916_n24_N7S6542C3D0Ev)();
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY vtc_S6542C3[] = {
  ABISELECT(12344,10140),
  ABISELECT(10920,8968),
  ABISELECT(9616,7896),
  ABISELECT(6800,5616),
  ABISELECT(5696,4700),
  ABISELECT(5576,4600),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&_ZN7S6542C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
  (VTBL_ENTRY)&_ZN7S6542C32v5Ev,
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C3D1Ev,_ZThn916_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C3D0Ev,_ZThn916_N7S6542C3D0Ev),
  ABISELECT(4272,3528),
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  ABISELECT(3288,2712),
  ABISELECT(3168,2612),
  ABISELECT(-2408,-1988),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N7S6542C3D1Ev,_ZThn1988_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N7S6542C3D0Ev,_ZThn1988_N7S6542C3D0Ev),
  ABISELECT(-5408,-4464),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  0,
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  ABISELECT(-120,-100),
  ABISELECT(-5696,-4700),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  0,
  ABISELECT(-6800,-5616),
  0,
  ABISELECT(5544,4524),
  ABISELECT(4120,3352),
  ABISELECT(-1104,-916),
  ABISELECT(-1224,-1016),
  ABISELECT(2816,2280),
  ABISELECT(-6800,-5616),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6542C3D1Ev,_ZTv0_n36_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6542C3D0Ev,_ZTv0_n36_N7S6542C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6542C92v4Ev,
  0,
  ABISELECT(-9616,-7896),
  ABISELECT(-3920,-3196),
  ABISELECT(-4040,-3296),
  ABISELECT(-9616,-7896),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6542C3D1Ev,_ZTv0_n20_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6542C3D0Ev,_ZTv0_n20_N7S6542C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  ABISELECT(-10720,-8812),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N7S6542C3D1Ev,_ZTvn916_n20_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N7S6542C3D0Ev,_ZTvn916_n20_N7S6542C3D0Ev),
  ABISELECT(1280,1056),
  ABISELECT(-10920,-8968),
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-5344,-4368),
  ABISELECT(-10920,-8968),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6542C3D1Ev,_ZTv0_n24_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6542C3D0Ev,_ZTv0_n24_N7S6542C3D0Ev),
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  ABISELECT(-12024,-9884),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N7S6542C3D1Ev,_ZTvn916_n24_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N7S6542C3D0Ev,_ZTvn916_n24_N7S6542C3D0Ev),
  ABISELECT(-12200,-10024),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern VTBL_ENTRY _ZTV7S6542C3[];
extern void _ZN7S6542C4D1Ev();
extern void _ZN7S6542C4D0Ev();
extern void _ZN7S6542C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C4__7S6542C3[] = {
  ABISELECT(5696,4700),
  ABISELECT(5576,4600),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  (VTBL_ENTRY)&_ZN7S6542C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C4D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
};
extern void _ZN7S6542C5D1Ev();
extern void _ZN7S6542C5D0Ev();
extern void _ZN7S6542C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C57S6542C4__7S6542C3[] = {
  ABISELECT(5696,4700),
  ABISELECT(5576,4600),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C67S6542C57S6542C4__7S6542C3[] = {
  ABISELECT(5576,4600),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C67S6542C57S6542C4__7S6542C3[] = {
  0,
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C57S6542C4__7S6542C3[] = {
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C77S6542C57S6542C4__7S6542C3[] = {
  0,
  ABISELECT(-4472,-3684),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C77S6542C57S6542C4__7S6542C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(-4592,-3784),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C57S6542C4__7S6542C3[] = {
  0,
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev)();
extern void ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C7__7S6542C57S6542C4__7S6542C3[] = {
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C57S6542C4__7S6542C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(-5696,-4700),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6542C67S6542C4__A2__7S6542C3[] = {
  ABISELECT(4272,3528),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C67S6542C4__A2__7S6542C3[] = {
  0,
  ABISELECT(-4272,-3528),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C4__A1__7S6542C3[] = {
  ABISELECT(3288,2712),
  ABISELECT(3168,2612),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C77S6542C4__A1__7S6542C3[] = {
  0,
  ABISELECT(-3168,-2612),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C77S6542C4__A1__7S6542C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(-3288,-2712),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C4__7S6542C3[] = {
  0,
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZThn1104_N7S6542C4D1Ev,_ZThn916_N7S6542C4D1Ev)();
extern void ABISELECT(_ZThn1104_N7S6542C4D0Ev,_ZThn916_N7S6542C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C5__7S6542C4__7S6542C3[] = {
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C4D1Ev,_ZThn916_N7S6542C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C4D0Ev,_ZThn916_N7S6542C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C4__7S6542C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(-5696,-4700),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A__7S6542C4__7S6542C3[] = {
  ABISELECT(4272,3528),
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
};
extern void ABISELECT(_ZThn2408_N7S6542C4D1Ev,_ZThn1988_N7S6542C4D1Ev)();
extern void ABISELECT(_ZThn2408_N7S6542C4D0Ev,_ZThn1988_N7S6542C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C7__A1__7S6542C4__7S6542C3[] = {
  ABISELECT(3288,2712),
  ABISELECT(3168,2612),
  ABISELECT(-2408,-1988),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N7S6542C4D1Ev,_ZThn1988_N7S6542C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N7S6542C4D0Ev,_ZThn1988_N7S6542C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C3[] = {
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C6__A1__7S6542C3[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C22v2Ev();
extern void _ZN7S6542C9D1Ev();
extern void _ZN7S6542C9D0Ev();
extern void _ZN7S6542C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C9__7S6542C3[] = {
  ABISELECT(5544,4524),
  ABISELECT(4120,3352),
  ABISELECT(-1104,-916),
  ABISELECT(-1224,-1016),
  ABISELECT(2816,2280),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C9D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C92v4Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S6542C9D1Ev,_ZTv0_n20_N7S6542C9D1Ev)();
extern void ABISELECT(_ZThn2816_N7S6542C9D1Ev,_ZThn2280_N7S6542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6542C9D0Ev,_ZTv0_n20_N7S6542C9D0Ev)();
extern void ABISELECT(_ZThn2816_N7S6542C9D0Ev,_ZThn2280_N7S6542C9D0Ev)() __attribute__((weak));
extern void _ZN7S6542C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C5__7S6542C9__7S6542C3[] = {
  0,
  ABISELECT(-2816,-2280),
  ABISELECT(-3920,-3196),
  ABISELECT(-4040,-3296),
  ABISELECT(-2816,-2280),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6542C9D1Ev,_ZTv0_n20_N7S6542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6542C9D0Ev,_ZTv0_n20_N7S6542C9D0Ev),
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C9__7S6542C3[] = {
  0,
  ABISELECT(1224,1016),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZTvn1104_n40_N7S6542C9D1Ev,_ZTvn916_n20_N7S6542C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N7S6542C9D0Ev,_ZTvn916_n20_N7S6542C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C5__7S6542C9__7S6542C3[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  ABISELECT(-3920,-3196),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N7S6542C9D1Ev,_ZTvn916_n20_N7S6542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N7S6542C9D0Ev,_ZTvn916_n20_N7S6542C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C9__7S6542C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(1104,916),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S6542C9D1Ev,_ZTv0_n24_N7S6542C9D1Ev)();
extern void ABISELECT(_ZThn4120_N7S6542C9D1Ev,_ZThn3352_N7S6542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S6542C9D0Ev,_ZTv0_n24_N7S6542C9D0Ev)();
extern void ABISELECT(_ZThn4120_N7S6542C9D0Ev,_ZThn3352_N7S6542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6542C11__7S6542C9__7S6542C3[] = {
  ABISELECT(1280,1056),
  ABISELECT(-4120,-3352),
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-5344,-4368),
  ABISELECT(-4120,-3352),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6542C9D1Ev,_ZTv0_n24_N7S6542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6542C9D0Ev,_ZTv0_n24_N7S6542C9D0Ev),
};
extern void ABISELECT(_ZTvn1104_n48_N7S6542C9D1Ev,_ZTvn916_n24_N7S6542C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N7S6542C9D0Ev,_ZTvn916_n24_N7S6542C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C78S6542C11__A1__7S6542C9__7S6542C3[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  ABISELECT(-5224,-4268),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N7S6542C9D1Ev,_ZTvn916_n24_N7S6542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N7S6542C9D0Ev,_ZTvn916_n24_N7S6542C9D0Ev),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C28S6542C11__A1__7S6542C9__7S6542C3[] = {
  ABISELECT(-5400,-4408),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C5D1Ev();
extern void _ZN7S6542C5D0Ev();
extern void _ZN7S6542C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C5__A1__7S6542C3[] = {
  ABISELECT(-3920,-3196),
  ABISELECT(-4040,-3296),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C67S6542C5__A3__7S6542C3[] = {
  ABISELECT(-4040,-3296),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C67S6542C5__A3__7S6542C3[] = {
  0,
  ABISELECT(4040,3296),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C5__A2__7S6542C3[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C77S6542C5__A2__7S6542C3[] = {
  0,
  ABISELECT(5144,4212),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C77S6542C5__A2__7S6542C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(5024,4112),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C5__A1__7S6542C3[] = {
  0,
  ABISELECT(4040,3296),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev)();
extern void ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C7__7S6542C5__A1__7S6542C3[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C5__A1__7S6542C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(3920,3196),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
};
extern void _ZN8S6542C11D1Ev();
extern void _ZN8S6542C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6542C11__7S6542C3[] = {
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-5344,-4368),
  0,
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&_ZN8S6542C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6542C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C68S6542C11__A4__7S6542C3[] = {
  ABISELECT(-5344,-4368),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C68S6542C11__A4__7S6542C3[] = {
  0,
  ABISELECT(5344,4368),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C78S6542C11__A3__7S6542C3[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C78S6542C11__A3__7S6542C3[] = {
  0,
  ABISELECT(6448,5284),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C78S6542C11__A3__7S6542C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(6328,5184),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__8S6542C11__7S6542C3[] = {
  0,
  ABISELECT(5344,4368),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZThn1104_N8S6542C11D1Ev,_ZThn916_N8S6542C11D1Ev)();
extern void ABISELECT(_ZThn1104_N8S6542C11D0Ev,_ZThn916_N8S6542C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C7__8S6542C11__7S6542C3[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S6542C11D1Ev,_ZThn916_N8S6542C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S6542C11D0Ev,_ZThn916_N8S6542C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__8S6542C11__7S6542C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(5224,4268),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
};
static  VTT_ENTRY vtt_S6542C3[] = {
  {&(_ZTV7S6542C3[8]),  8,84},
  {&(_tg__ZTV7S6542C4__7S6542C3[4]),  4,7},
  {&(_tg__ZTV7S6542C57S6542C4__7S6542C3[4]),  4,7},
  {&(_tg__ZTV7S6542C67S6542C57S6542C4__7S6542C3[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C67S6542C57S6542C4__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C57S6542C4__7S6542C3[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C77S6542C57S6542C4__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C77S6542C57S6542C4__7S6542C3[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C57S6542C4__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C7__7S6542C57S6542C4__7S6542C3[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__7S6542C57S6542C4__7S6542C3[3]),  3,3},
  {&(_tg__ZTV7S6542C67S6542C4__A2__7S6542C3[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C67S6542C4__A2__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C4__A1__7S6542C3[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C77S6542C4__A1__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C77S6542C4__A1__7S6542C3[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C4__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C5__7S6542C4__7S6542C3[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__7S6542C4__7S6542C3[3]),  3,3},
  {&(_tg__ZTV7S6542C6__A__7S6542C4__7S6542C3[3]),  3,3},
  {&(_tg__ZTV7S6542C7__A1__7S6542C4__7S6542C3[4]),  4,6},
  {&(_ZTV7S6542C3[33]),  33,84},
  {&(_ZTV7S6542C3[16]),  16,84},
  {&(_ZTV7S6542C3[37]),  37,84},
  {&(_ZTV7S6542C3[21]),  21,84},
  {&(_ZTV7S6542C3[25]),  25,84},
  {&(_ZTV7S6542C3[47]),  47,84},
  {&(_ZTV7S6542C3[57]),  57,84},
  {&(_ZTV7S6542C3[64]),  64,84},
  {&(_ZTV7S6542C3[73]),  73,84},
  {&(_ZTV7S6542C3[79]),  79,84},
  {&(_ZTV7S6542C3[83]),  83,84},
  {&(_tg__ZTV7S6542C6__A1__7S6542C3[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C6__A1__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C9__7S6542C3[7]),  7,11},
  {&(_tg__ZTV7S6542C5__7S6542C9__7S6542C3[6]),  6,9},
  {&(_tg__ZTV7S6542C2__7S6542C9__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C5__7S6542C9__7S6542C3[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__7S6542C9__7S6542C3[3]),  3,3},
  {&(_tg__ZTV8S6542C11__7S6542C9__7S6542C3[7]),  7,9},
  {&(_tg__ZTV7S6542C78S6542C11__A1__7S6542C9__7S6542C3[4]),  4,6},
  {&(_tg__ZTV7S6542C28S6542C11__A1__7S6542C9__7S6542C3[2]),  2,3},
  {&(_tg__ZTV7S6542C5__A1__7S6542C3[4]),  4,7},
  {&(_tg__ZTV7S6542C67S6542C5__A3__7S6542C3[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C67S6542C5__A3__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C5__A2__7S6542C3[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C77S6542C5__A2__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C77S6542C5__A2__7S6542C3[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C5__A1__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C7__7S6542C5__A1__7S6542C3[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__7S6542C5__A1__7S6542C3[3]),  3,3},
  {&(_tg__ZTV8S6542C11__7S6542C3[5]),  5,7},
  {&(_tg__ZTV7S6542C68S6542C11__A4__7S6542C3[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C68S6542C11__A4__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C78S6542C11__A3__7S6542C3[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C78S6542C11__A3__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C78S6542C11__A3__7S6542C3[3]),  3,3},
  {&(_tg__ZTV7S6542C2__8S6542C11__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C7__8S6542C11__7S6542C3[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__8S6542C11__7S6542C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6542C3[];
extern  VTBL_ENTRY _ZTV7S6542C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C3[];
static VTBL_ENTRY alt_thunk_names19[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6542C9D0Ev,_ZTv0_n24_N7S6542C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4120_N7S6542C9D0Ev,_ZThn3352_N7S6542C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6542C9D1Ev,_ZTv0_n24_N7S6542C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4120_N7S6542C9D1Ev,_ZThn3352_N7S6542C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6542C9D0Ev,_ZTv0_n20_N7S6542C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N7S6542C9D0Ev,_ZThn2280_N7S6542C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6542C9D1Ev,_ZTv0_n20_N7S6542C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N7S6542C9D1Ev,_ZThn2280_N7S6542C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6542C3D0Ev,_ZTv0_n24_N7S6542C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10920_N7S6542C3D0Ev,_ZThn8968_N7S6542C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6542C3D1Ev,_ZTv0_n24_N7S6542C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10920_N7S6542C3D1Ev,_ZThn8968_N7S6542C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6542C3D0Ev,_ZTv0_n20_N7S6542C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9616_N7S6542C3D0Ev,_ZThn7896_N7S6542C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6542C3D1Ev,_ZTv0_n20_N7S6542C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9616_N7S6542C3D1Ev,_ZThn7896_N7S6542C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6542C3D0Ev,_ZTv0_n36_N7S6542C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6800_N7S6542C3D0Ev,_ZThn5616_N7S6542C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6542C3D1Ev,_ZTv0_n36_N7S6542C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6800_N7S6542C3D1Ev,_ZThn5616_N7S6542C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6542C3 = {  "S6542C3", // class name
  bases_S6542C3, 20,
  &(vtc_S6542C3[0]), // expected_vtbl_contents
  &(vtt_S6542C3[0]), // expected_vtt_contents
  ABISELECT(14960,12272), // object size
  NSPAIRA(_ZTI7S6542C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6542C3),84, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6542C3),60, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names19,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6542C1  : S6542C2 , virtual S6542C3 {
  void *s6542c1f0;
  int s6542c1f1;
  void *s6542c1f2[10];
  __tsi64 s6542c1f3;
  ::S6542C5 s6542c1f4;
  int s6542c1f5;
  __tsi64 s6542c1f6;
  int s6542c1f7;
  void *s6542c1f8;
  virtual  ~S6542C1(); // _ZN7S6542C1D2Ev
  virtual void  v1(); // _ZN7S6542C12v1Ev
  S6542C1(); // tgen
};
//SIG(1 S6542C1) C1{ BC2{ v2 Fs FL[4] Fp Fc Fp FL Fi[10]} VBC3{ BC4{ VBC2 BC5{ VBC2 BC6{ VBC2 FC2[8] Fi Fc FC2 Fi} BC7{ VBC2 VBC6 vd Fp Fi[6] Fc FC2 Fp} vd v3 FL Fp[2]} BC6 BC7 vd FL FC7[2] FL Fi FC8{}} BC2 VBC9{ BC10{ m FL FC11{ VBC12{ v7 Fs FL[4] Fp Fc Fp FL Fi[10]} BC13{ VBC12 FC12[8] Fi Fc FC12 Fi} BC14{ VBC12 VBC13 vd Fp Fi[6] Fc FC12 Fp} vd v6 FL Fp[2]} Fp[8] Fl} VBC5 VBC15{ BC6 VBC10 BC7 BC2 Fp Fi[3]} BC2 vd v4 FL Fp[10]} vd v5 Fi FD Fi FL Fi[2]} vd v1 Fp Fi Fp[10] FL FC5 Fi FL Fi Fp}


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

static void Test_S6542C1()
{
  extern Class_Descriptor cd_S6542C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1110,3635)];
    init_test(&cd_S6542C1, buf);
    S6542C1 *dp, &lv = *(dp=new (buf) S6542C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17744,14536), "sizeof(S6542C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6542C1)");
    /*is_ambiguous_... S6542C1::S6542C2 */ AMB_check_base_class_offset(lv, (S6542C2*), 0, "S6542C1");
    check_base_class_offset(lv, (S6542C2*)(S6542C4*)(S6542C3*), ABISELECT(8360,6864), "S6542C1");
    check_base_class_offset(lv, (S6542C2*)(S6542C5*)(S6542C4*)(S6542C3*), ABISELECT(8360,6864), "S6542C1");
    /*is_ambiguous_... S6542C5::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*)(S6542C5*)(S6542C4*)(S6542C3*), ABISELECT(8360,6864), "S6542C1");
    check_base_class_offset(lv, (S6542C2*)(S6542C7*)(S6542C5*)(S6542C4*)(S6542C3*), ABISELECT(8360,6864), "S6542C1");
    /*is_ambiguous_... S6542C1::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*), ABISELECT(8360,6864), "S6542C1");
    /*is_ambiguous_... S6542C4::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*)(S6542C4*)(S6542C3*), ABISELECT(8360,6864), "S6542C1");
    /*is_ambiguous_... S6542C4::S6542C7 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C7*)(S6542C4*)(S6542C3*), ABISELECT(8360,6864), "S6542C1");
    /*is_ambiguous_... S6542C1::S6542C5 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C5*), ABISELECT(8360,6864), "S6542C1");
    /*is_ambiguous_... S6542C1::S6542C5 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*)(S6542C5*), ABISELECT(8360,6864), "S6542C1");
    /*is_ambiguous_... S6542C1::S6542C5 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C7*)(S6542C5*), ABISELECT(8360,6864), "S6542C1");
    /*is_ambiguous_... S6542C11::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*)(S6542C11*), ABISELECT(8360,6864), "S6542C1");
    check_base_class_offset(lv, (S6542C2*)(S6542C7*)(S6542C11*), ABISELECT(8360,6864), "S6542C1");
    /*is_ambiguous_... S6542C5::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C5*)(S6542C4*)(S6542C3*), ABISELECT(2784,2264), "S6542C1");
    check_base_class_offset(lv, (S6542C6*)(S6542C7*)(S6542C5*)(S6542C4*)(S6542C3*), ABISELECT(8480,6964), "S6542C1");
    /*is_ambiguous_... S6542C4::S6542C7 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C7*)(S6542C4*)(S6542C3*), ABISELECT(8480,6964), "S6542C1");
    /*is_ambiguous_... S6542C1::S6542C5 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C7*)(S6542C5*), ABISELECT(8480,6964), "S6542C1");
    check_base_class_offset(lv, (S6542C6*)(S6542C7*)(S6542C11*), ABISELECT(8480,6964), "S6542C1");
    check_base_class_offset(lv, (S6542C7*)(S6542C5*)(S6542C4*)(S6542C3*), ABISELECT(3888,3180), "S6542C1");
    check_base_class_offset(lv, (S6542C5*)(S6542C4*)(S6542C3*), ABISELECT(2784,2264), "S6542C1");
    /*is_ambiguous_... S6542C4::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C4*)(S6542C3*), ABISELECT(4088,3336), "S6542C1");
    /*is_ambiguous_... S6542C4::S6542C7 */ AMB_check_base_class_offset(lv, (S6542C7*)(S6542C4*)(S6542C3*), ABISELECT(5192,4252), "S6542C1");
    check_base_class_offset(lv, (S6542C4*)(S6542C3*), ABISELECT(2784,2264), "S6542C1");
    /*is_ambiguous_... S6542C3::S6542C2 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C3*), ABISELECT(8192,6728), "S6542C1");
    /*is_ambiguous_... S6542C9::S19934C10 */ AMB_check_base_class_offset(lv, (S19934C10*)(S6542C9*), ABISELECT(9704,7980), "S6542C1");
    /*is_ambiguous_... S6542C1::S6542C5 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C5*), ABISELECT(12400,10160), "S6542C1");
    /*is_ambiguous_... S6542C1::S6542C5 */ AMB_check_base_class_offset(lv, (S6542C7*)(S6542C5*), ABISELECT(13504,11076), "S6542C1");
    check_base_class_offset(lv, (S6542C5*)(S6542C9*), ABISELECT(12400,10160), "S6542C1");
    /*is_ambiguous_... S6542C11::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C11*), ABISELECT(13704,11232), "S6542C1");
    check_base_class_offset(lv, (S19934C10*)(S6542C11*), ABISELECT(15128,12404), "S6542C1");
    check_base_class_offset(lv, (S6542C7*)(S6542C11*), ABISELECT(14808,12148), "S6542C1");
    /*is_ambiguous_... S6542C11::S6542C2 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C11*), ABISELECT(14984,12288), "S6542C1");
    check_base_class_offset(lv, (S6542C11*)(S6542C9*), ABISELECT(13704,11232), "S6542C1");
    /*is_ambiguous_... S6542C9::S6542C2 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C9*), ABISELECT(9584,7880), "S6542C1");
    check_base_class_offset(lv, (S6542C9*)(S6542C3*), ABISELECT(9584,7880), "S6542C1");
    check_base_class_offset(lv, (S6542C3*), ABISELECT(2784,2264), "S6542C1");
    check_field_offset(lv, s6542c1f0, ABISELECT(120,100), "S6542C1.s6542c1f0");
    check_field_offset(lv, s6542c1f1, ABISELECT(128,104), "S6542C1.s6542c1f1");
    check_field_offset(lv, s6542c1f2, ABISELECT(136,108), "S6542C1.s6542c1f2");
    check_field_offset(lv, s6542c1f3, ABISELECT(216,148), "S6542C1.s6542c1f3");
    check_field_offset(lv, s6542c1f4, ABISELECT(224,156), "S6542C1.s6542c1f4");
    check_field_offset(lv, s6542c1f5, ABISELECT(2752,2244), "S6542C1.s6542c1f5");
    check_field_offset(lv, s6542c1f6, ABISELECT(2760,2248), "S6542C1.s6542c1f6");
    check_field_offset(lv, s6542c1f7, ABISELECT(2768,2256), "S6542C1.s6542c1f7");
    check_field_offset(lv, s6542c1f8, ABISELECT(2776,2260), "S6542C1.s6542c1f8");
    test_class_info(&lv, &cd_S6542C1);
    dp->~S6542C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6542C1(Test_S6542C1, "S6542C1", ABISELECT(17744,14536));

#else // __cplusplus

extern void _ZN7S6542C1C1Ev();
extern void _ZN7S6542C1D2Ev();
Name_Map name_map_S6542C1[] = {
  NSPAIR(_ZN7S6542C1C1Ev),
  NSPAIR(_ZN7S6542C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
extern Class_Descriptor cd_S6542C5;
extern VTBL_ENTRY _ZTI7S6542C5[];
extern  VTBL_ENTRY _ZTV7S6542C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C5[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
extern Class_Descriptor cd_S6542C4;
extern VTBL_ENTRY _ZTI7S6542C4[];
extern  VTBL_ENTRY _ZTV7S6542C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C4[];
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
extern Class_Descriptor cd_S6542C5;
extern VTBL_ENTRY _ZTI7S6542C5[];
extern  VTBL_ENTRY _ZTV7S6542C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C5[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C11;
extern VTBL_ENTRY _ZTI8S6542C11[];
extern  VTBL_ENTRY _ZTV8S6542C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6542C11[];
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C9;
extern VTBL_ENTRY _ZTI7S6542C9[];
extern  VTBL_ENTRY _ZTV7S6542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C9[];
extern Class_Descriptor cd_S6542C3;
extern VTBL_ENTRY _ZTI7S6542C3[];
extern  VTBL_ENTRY _ZTV7S6542C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C3[];
static Base_Class bases_S6542C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6542C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6542C2,    ABISELECT(8360,6864), //bcp->offset
    47, //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_S6542C6,    ABISELECT(2784,2264), //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
    12, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6542C6,    ABISELECT(8480,6964), //bcp->offset
    51, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6542C7,    ABISELECT(3888,3180), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6542C5,    ABISELECT(2784,2264), //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
    14, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6542C6,    ABISELECT(4088,3336), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6542C7,    ABISELECT(5192,4252), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6542C4,    ABISELECT(2784,2264), //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
    17, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6542C2,    ABISELECT(8192,6728), //bcp->offset
    44, //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
    18, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19934C10,    ABISELECT(9704,7980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6542C6,    ABISELECT(12400,10160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6542C7,    ABISELECT(13504,11076), //bcp->offset
    77, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6542C5,    ABISELECT(12400,10160), //bcp->offset
    68, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S6542C6,    ABISELECT(13704,11232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19934C10,    ABISELECT(15128,12404), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6542C7,    ABISELECT(14808,12148), //bcp->offset
    92, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S6542C2,    ABISELECT(14984,12288), //bcp->offset
    98, //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
    8, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S6542C11,    ABISELECT(13704,11232), //bcp->offset
    83, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S6542C2,    ABISELECT(9584,7880), //bcp->offset
    -1, //bcp->virtual_function_table_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_S6542C9,    ABISELECT(9584,7880), //bcp->offset
    54, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S6542C3,    ABISELECT(2784,2264), //bcp->offset
    13, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6542C1[];
extern void _ZN7S6542C22v2Ev();
extern void _ZN7S6542C1D1Ev();
extern void _ZN7S6542C1D0Ev();
extern void _ZN7S6542C12v1Ev();
extern void ABISELECT(_ZTv0_n72_N7S6542C1D1Ev,_ZTv0_n36_N7S6542C1D1Ev)();
extern void ABISELECT(_ZThn2784_N7S6542C1D1Ev,_ZThn2264_N7S6542C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6542C1D0Ev,_ZTv0_n36_N7S6542C1D0Ev)();
extern void ABISELECT(_ZThn2784_N7S6542C1D0Ev,_ZThn2264_N7S6542C1D0Ev)() __attribute__((weak));
extern void _ZN7S6542C52v3Ev();
extern void _ZN7S6542C32v5Ev();
extern void ABISELECT(_ZTvn1104_n72_N7S6542C1D1Ev,_ZTvn916_n36_N7S6542C1D1Ev)();
extern void ABISELECT(_ZTvn1104_n72_N7S6542C1D0Ev,_ZTvn916_n36_N7S6542C1D0Ev)();
extern void ABISELECT(_ZTvn2408_n72_N7S6542C1D1Ev,_ZTvn1988_n36_N7S6542C1D1Ev)();
extern void ABISELECT(_ZTvn2408_n72_N7S6542C1D0Ev,_ZTvn1988_n36_N7S6542C1D0Ev)();
extern void _ZN7S6542C22v2Ev();
extern void _ZN7S6542C22v2Ev();
extern void _ZN7S6542C22v2Ev();
extern void ABISELECT(_ZTv0_n72_N7S6542C1D1Ev,_ZTv0_n36_N7S6542C1D1Ev)();
extern void ABISELECT(_ZThn9584_N7S6542C1D1Ev,_ZThn7880_N7S6542C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6542C1D0Ev,_ZTv0_n36_N7S6542C1D0Ev)();
extern void ABISELECT(_ZThn9584_N7S6542C1D0Ev,_ZThn7880_N7S6542C1D0Ev)() __attribute__((weak));
extern void _ZN7S6542C92v4Ev();
extern void ABISELECT(_ZTv0_n40_N7S6542C1D1Ev,_ZTv0_n20_N7S6542C1D1Ev)();
extern void ABISELECT(_ZThn12400_N7S6542C1D1Ev,_ZThn10160_N7S6542C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6542C1D0Ev,_ZTv0_n20_N7S6542C1D0Ev)();
extern void ABISELECT(_ZThn12400_N7S6542C1D0Ev,_ZThn10160_N7S6542C1D0Ev)() __attribute__((weak));
extern void _ZN7S6542C52v3Ev();
extern void ABISELECT(_ZTvn1104_n40_N7S6542C1D1Ev,_ZTvn916_n20_N7S6542C1D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N7S6542C1D0Ev,_ZTvn916_n20_N7S6542C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N7S6542C1D1Ev,_ZTv0_n24_N7S6542C1D1Ev)();
extern void ABISELECT(_ZThn13704_N7S6542C1D1Ev,_ZThn11232_N7S6542C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S6542C1D0Ev,_ZTv0_n24_N7S6542C1D0Ev)();
extern void ABISELECT(_ZThn13704_N7S6542C1D0Ev,_ZThn11232_N7S6542C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1104_n48_N7S6542C1D1Ev,_ZTvn916_n24_N7S6542C1D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N7S6542C1D0Ev,_ZTvn916_n24_N7S6542C1D0Ev)();
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY vtc_S6542C1[] = {
  ABISELECT(15128,12404),
  ABISELECT(13704,11232),
  ABISELECT(12400,10160),
  ABISELECT(9584,7880),
  ABISELECT(8480,6964),
  ABISELECT(8360,6864),
  ABISELECT(2784,2264),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6542C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C12v1Ev,
  ABISELECT(5408,4464),
  0,
  0,
  ABISELECT(-2784,-2264),
  ABISELECT(12344,10140),
  ABISELECT(10920,8968),
  ABISELECT(9616,7896),
  ABISELECT(6800,5616),
  ABISELECT(5696,4700),
  ABISELECT(5576,4600),
  ABISELECT(-2784,-2264),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6542C1D1Ev,_ZTv0_n36_N7S6542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6542C1D0Ev,_ZTv0_n36_N7S6542C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
  (VTBL_ENTRY)&_ZN7S6542C32v5Ev,
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  ABISELECT(-3888,-3180),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n72_N7S6542C1D1Ev,_ZTvn916_n36_N7S6542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n72_N7S6542C1D0Ev,_ZTvn916_n36_N7S6542C1D0Ev),
  ABISELECT(4272,3528),
  ABISELECT(-4088,-3336),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  ABISELECT(3288,2712),
  ABISELECT(3168,2612),
  ABISELECT(-5192,-4252),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2408_n72_N7S6542C1D1Ev,_ZTvn1988_n36_N7S6542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2408_n72_N7S6542C1D0Ev,_ZTvn1988_n36_N7S6542C1D0Ev),
  ABISELECT(-8192,-6728),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  0,
  ABISELECT(-8360,-6864),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  ABISELECT(-120,-100),
  ABISELECT(-8480,-6964),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  0,
  ABISELECT(-9584,-7880),
  0,
  ABISELECT(5544,4524),
  ABISELECT(4120,3352),
  ABISELECT(-1104,-916),
  ABISELECT(-1224,-1016),
  ABISELECT(2816,2280),
  ABISELECT(-9584,-7880),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6542C1D1Ev,_ZTv0_n36_N7S6542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6542C1D0Ev,_ZTv0_n36_N7S6542C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6542C92v4Ev,
  0,
  ABISELECT(-12400,-10160),
  ABISELECT(-3920,-3196),
  ABISELECT(-4040,-3296),
  ABISELECT(-12400,-10160),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6542C1D1Ev,_ZTv0_n20_N7S6542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6542C1D0Ev,_ZTv0_n20_N7S6542C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  ABISELECT(-13504,-11076),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N7S6542C1D1Ev,_ZTvn916_n20_N7S6542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N7S6542C1D0Ev,_ZTvn916_n20_N7S6542C1D0Ev),
  ABISELECT(1280,1056),
  ABISELECT(-13704,-11232),
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-5344,-4368),
  ABISELECT(-13704,-11232),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6542C1D1Ev,_ZTv0_n24_N7S6542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6542C1D0Ev,_ZTv0_n24_N7S6542C1D0Ev),
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  ABISELECT(-14808,-12148),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N7S6542C1D1Ev,_ZTvn916_n24_N7S6542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N7S6542C1D0Ev,_ZTvn916_n24_N7S6542C1D0Ev),
  ABISELECT(-14984,-12288),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern VTBL_ENTRY _ZTV7S6542C1[];
extern void _ZN7S6542C3D1Ev();
extern void _ZN7S6542C3D0Ev();
extern void _ZN7S6542C52v3Ev();
extern void _ZN7S6542C32v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C3__7S6542C1[] = {
  ABISELECT(12344,10140),
  ABISELECT(10920,8968),
  ABISELECT(9616,7896),
  ABISELECT(6800,5616),
  ABISELECT(5696,4700),
  ABISELECT(5576,4600),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&_ZN7S6542C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
  (VTBL_ENTRY)&_ZN7S6542C32v5Ev,
};
extern void _ZN7S6542C4D1Ev();
extern void _ZN7S6542C4D0Ev();
extern void _ZN7S6542C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C47S6542C3__7S6542C1[] = {
  ABISELECT(5696,4700),
  ABISELECT(5576,4600),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  (VTBL_ENTRY)&_ZN7S6542C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C4D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
};
extern void _ZN7S6542C5D1Ev();
extern void _ZN7S6542C5D0Ev();
extern void _ZN7S6542C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C57S6542C47S6542C3__7S6542C1[] = {
  ABISELECT(5696,4700),
  ABISELECT(5576,4600),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C67S6542C57S6542C47S6542C3__7S6542C1[] = {
  ABISELECT(5576,4600),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C67S6542C57S6542C47S6542C3__7S6542C1[] = {
  0,
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C57S6542C47S6542C3__7S6542C1[] = {
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C77S6542C57S6542C47S6542C3__7S6542C1[] = {
  0,
  ABISELECT(-4472,-3684),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C77S6542C57S6542C47S6542C3__7S6542C1[] = {
  ABISELECT(-120,-100),
  ABISELECT(-4592,-3784),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C57S6542C47S6542C3__7S6542C1[] = {
  0,
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev)();
extern void ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C7__7S6542C57S6542C47S6542C3__7S6542C1[] = {
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C57S6542C47S6542C3__7S6542C1[] = {
  ABISELECT(-120,-100),
  ABISELECT(-5696,-4700),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6542C67S6542C47S6542C3__A2__7S6542C1[] = {
  ABISELECT(4272,3528),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C67S6542C47S6542C3__A2__7S6542C1[] = {
  0,
  ABISELECT(-4272,-3528),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C47S6542C3__A1__7S6542C1[] = {
  ABISELECT(3288,2712),
  ABISELECT(3168,2612),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C77S6542C47S6542C3__A1__7S6542C1[] = {
  0,
  ABISELECT(-3168,-2612),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C77S6542C47S6542C3__A1__7S6542C1[] = {
  ABISELECT(-120,-100),
  ABISELECT(-3288,-2712),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C47S6542C3__7S6542C1[] = {
  0,
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZThn1104_N7S6542C4D1Ev,_ZThn916_N7S6542C4D1Ev)();
extern void ABISELECT(_ZThn1104_N7S6542C4D0Ev,_ZThn916_N7S6542C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C5__7S6542C47S6542C3__7S6542C1[] = {
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C4D1Ev,_ZThn916_N7S6542C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C4D0Ev,_ZThn916_N7S6542C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C47S6542C3__7S6542C1[] = {
  ABISELECT(-120,-100),
  ABISELECT(-5696,-4700),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A__7S6542C47S6542C3__7S6542C1[] = {
  ABISELECT(4272,3528),
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
};
extern void ABISELECT(_ZThn2408_N7S6542C4D1Ev,_ZThn1988_N7S6542C4D1Ev)();
extern void ABISELECT(_ZThn2408_N7S6542C4D0Ev,_ZThn1988_N7S6542C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C7__A1__7S6542C47S6542C3__7S6542C1[] = {
  ABISELECT(3288,2712),
  ABISELECT(3168,2612),
  ABISELECT(-2408,-1988),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N7S6542C4D1Ev,_ZThn1988_N7S6542C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N7S6542C4D0Ev,_ZThn1988_N7S6542C4D0Ev),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C3__7S6542C1[] = {
  0,
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZThn1104_N7S6542C3D1Ev,_ZThn916_N7S6542C3D1Ev)();
extern void ABISELECT(_ZThn1104_N7S6542C3D0Ev,_ZThn916_N7S6542C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C57S6542C4__7S6542C3__7S6542C1[] = {
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C3D1Ev,_ZThn916_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C3D0Ev,_ZThn916_N7S6542C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C3__7S6542C1[] = {
  ABISELECT(-120,-100),
  ABISELECT(-5696,-4700),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6542C67S6542C4__A2__7S6542C3__7S6542C1[] = {
  ABISELECT(4272,3528),
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
};
extern void ABISELECT(_ZThn2408_N7S6542C3D1Ev,_ZThn1988_N7S6542C3D1Ev)();
extern void ABISELECT(_ZThn2408_N7S6542C3D0Ev,_ZThn1988_N7S6542C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C4__A1__7S6542C3__7S6542C1[] = {
  ABISELECT(3288,2712),
  ABISELECT(3168,2612),
  ABISELECT(-2408,-1988),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N7S6542C3D1Ev,_ZThn1988_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N7S6542C3D0Ev,_ZThn1988_N7S6542C3D0Ev),
};
extern void _ZN7S6542C22v2Ev();
extern void ABISELECT(_ZTv0_n72_N7S6542C3D1Ev,_ZTv0_n36_N7S6542C3D1Ev)();
extern void ABISELECT(_ZThn6800_N7S6542C3D1Ev,_ZThn5616_N7S6542C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6542C3D0Ev,_ZTv0_n36_N7S6542C3D0Ev)();
extern void ABISELECT(_ZThn6800_N7S6542C3D0Ev,_ZThn5616_N7S6542C3D0Ev)() __attribute__((weak));
extern void _ZN7S6542C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C9__7S6542C3__7S6542C1[] = {
  0,
  ABISELECT(-6800,-5616),
  0,
  ABISELECT(5544,4524),
  ABISELECT(4120,3352),
  ABISELECT(-1104,-916),
  ABISELECT(-1224,-1016),
  ABISELECT(2816,2280),
  ABISELECT(-6800,-5616),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6542C3D1Ev,_ZTv0_n36_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6542C3D0Ev,_ZTv0_n36_N7S6542C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6542C92v4Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S6542C3D1Ev,_ZTv0_n20_N7S6542C3D1Ev)();
extern void ABISELECT(_ZThn9616_N7S6542C3D1Ev,_ZThn7896_N7S6542C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6542C3D0Ev,_ZTv0_n20_N7S6542C3D0Ev)();
extern void ABISELECT(_ZThn9616_N7S6542C3D0Ev,_ZThn7896_N7S6542C3D0Ev)() __attribute__((weak));
extern void _ZN7S6542C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C5__A1__7S6542C3__7S6542C1[] = {
  0,
  ABISELECT(-9616,-7896),
  ABISELECT(-3920,-3196),
  ABISELECT(-4040,-3296),
  ABISELECT(-9616,-7896),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6542C3D1Ev,_ZTv0_n20_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6542C3D0Ev,_ZTv0_n20_N7S6542C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
};
extern void ABISELECT(_ZTvn1104_n40_N7S6542C3D1Ev,_ZTvn916_n20_N7S6542C3D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N7S6542C3D0Ev,_ZTvn916_n20_N7S6542C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C5__A2__7S6542C3__7S6542C1[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  ABISELECT(-10720,-8812),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N7S6542C3D1Ev,_ZTvn916_n20_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N7S6542C3D0Ev,_ZTvn916_n20_N7S6542C3D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S6542C3D1Ev,_ZTv0_n24_N7S6542C3D1Ev)();
extern void ABISELECT(_ZThn10920_N7S6542C3D1Ev,_ZThn8968_N7S6542C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S6542C3D0Ev,_ZTv0_n24_N7S6542C3D0Ev)();
extern void ABISELECT(_ZThn10920_N7S6542C3D0Ev,_ZThn8968_N7S6542C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6542C11__7S6542C3__7S6542C1[] = {
  ABISELECT(1280,1056),
  ABISELECT(-10920,-8968),
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-5344,-4368),
  ABISELECT(-10920,-8968),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6542C3D1Ev,_ZTv0_n24_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6542C3D0Ev,_ZTv0_n24_N7S6542C3D0Ev),
};
extern void ABISELECT(_ZTvn1104_n48_N7S6542C3D1Ev,_ZTvn916_n24_N7S6542C3D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N7S6542C3D0Ev,_ZTvn916_n24_N7S6542C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C78S6542C11__A3__7S6542C3__7S6542C1[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  ABISELECT(-12024,-9884),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N7S6542C3D1Ev,_ZTvn916_n24_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N7S6542C3D0Ev,_ZTvn916_n24_N7S6542C3D0Ev),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C28S6542C11__A2__7S6542C3__7S6542C1[] = {
  ABISELECT(-12200,-10024),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C1[] = {
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C6__A1__7S6542C1[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C22v2Ev();
extern void _ZN7S6542C9D1Ev();
extern void _ZN7S6542C9D0Ev();
extern void _ZN7S6542C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C9__7S6542C1[] = {
  ABISELECT(5544,4524),
  ABISELECT(4120,3352),
  ABISELECT(-1104,-916),
  ABISELECT(-1224,-1016),
  ABISELECT(2816,2280),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C9D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C92v4Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S6542C9D1Ev,_ZTv0_n20_N7S6542C9D1Ev)();
extern void ABISELECT(_ZThn2816_N7S6542C9D1Ev,_ZThn2280_N7S6542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6542C9D0Ev,_ZTv0_n20_N7S6542C9D0Ev)();
extern void ABISELECT(_ZThn2816_N7S6542C9D0Ev,_ZThn2280_N7S6542C9D0Ev)() __attribute__((weak));
extern void _ZN7S6542C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C5__7S6542C9__7S6542C1[] = {
  0,
  ABISELECT(-2816,-2280),
  ABISELECT(-3920,-3196),
  ABISELECT(-4040,-3296),
  ABISELECT(-2816,-2280),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6542C9D1Ev,_ZTv0_n20_N7S6542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6542C9D0Ev,_ZTv0_n20_N7S6542C9D0Ev),
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C9__7S6542C1[] = {
  0,
  ABISELECT(1224,1016),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZTvn1104_n40_N7S6542C9D1Ev,_ZTvn916_n20_N7S6542C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N7S6542C9D0Ev,_ZTvn916_n20_N7S6542C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C5__7S6542C9__7S6542C1[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  ABISELECT(-3920,-3196),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N7S6542C9D1Ev,_ZTvn916_n20_N7S6542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N7S6542C9D0Ev,_ZTvn916_n20_N7S6542C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C9__7S6542C1[] = {
  ABISELECT(-120,-100),
  ABISELECT(1104,916),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S6542C9D1Ev,_ZTv0_n24_N7S6542C9D1Ev)();
extern void ABISELECT(_ZThn4120_N7S6542C9D1Ev,_ZThn3352_N7S6542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S6542C9D0Ev,_ZTv0_n24_N7S6542C9D0Ev)();
extern void ABISELECT(_ZThn4120_N7S6542C9D0Ev,_ZThn3352_N7S6542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6542C11__7S6542C9__7S6542C1[] = {
  ABISELECT(1280,1056),
  ABISELECT(-4120,-3352),
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-5344,-4368),
  ABISELECT(-4120,-3352),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6542C9D1Ev,_ZTv0_n24_N7S6542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6542C9D0Ev,_ZTv0_n24_N7S6542C9D0Ev),
};
extern void ABISELECT(_ZTvn1104_n48_N7S6542C9D1Ev,_ZTvn916_n24_N7S6542C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N7S6542C9D0Ev,_ZTvn916_n24_N7S6542C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C78S6542C11__A1__7S6542C9__7S6542C1[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  ABISELECT(-5224,-4268),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N7S6542C9D1Ev,_ZTvn916_n24_N7S6542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N7S6542C9D0Ev,_ZTvn916_n24_N7S6542C9D0Ev),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C28S6542C11__A1__7S6542C9__7S6542C1[] = {
  ABISELECT(-5400,-4408),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C5D1Ev();
extern void _ZN7S6542C5D0Ev();
extern void _ZN7S6542C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C5__A1__7S6542C1[] = {
  ABISELECT(-3920,-3196),
  ABISELECT(-4040,-3296),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C67S6542C5__A3__7S6542C1[] = {
  ABISELECT(-4040,-3296),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C67S6542C5__A3__7S6542C1[] = {
  0,
  ABISELECT(4040,3296),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C5__A2__7S6542C1[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C77S6542C5__A2__7S6542C1[] = {
  0,
  ABISELECT(5144,4212),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C77S6542C5__A2__7S6542C1[] = {
  ABISELECT(-120,-100),
  ABISELECT(5024,4112),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C5__A1__7S6542C1[] = {
  0,
  ABISELECT(4040,3296),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev)();
extern void ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C7__7S6542C5__A1__7S6542C1[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C5__A1__7S6542C1[] = {
  ABISELECT(-120,-100),
  ABISELECT(3920,3196),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
};
extern void _ZN8S6542C11D1Ev();
extern void _ZN8S6542C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6542C11__7S6542C1[] = {
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-5344,-4368),
  0,
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&_ZN8S6542C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6542C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C68S6542C11__A4__7S6542C1[] = {
  ABISELECT(-5344,-4368),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C68S6542C11__A4__7S6542C1[] = {
  0,
  ABISELECT(5344,4368),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C78S6542C11__A3__7S6542C1[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C78S6542C11__A3__7S6542C1[] = {
  0,
  ABISELECT(6448,5284),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C78S6542C11__A3__7S6542C1[] = {
  ABISELECT(-120,-100),
  ABISELECT(6328,5184),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__8S6542C11__7S6542C1[] = {
  0,
  ABISELECT(5344,4368),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZThn1104_N8S6542C11D1Ev,_ZThn916_N8S6542C11D1Ev)();
extern void ABISELECT(_ZThn1104_N8S6542C11D0Ev,_ZThn916_N8S6542C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C7__8S6542C11__7S6542C1[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S6542C11D1Ev,_ZThn916_N8S6542C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S6542C11D0Ev,_ZThn916_N8S6542C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__8S6542C11__7S6542C1[] = {
  ABISELECT(-120,-100),
  ABISELECT(5224,4268),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
};
static  VTT_ENTRY vtt_S6542C1[] = {
  {&(_ZTV7S6542C1[9]),  9,101},
  {&(_ZTV7S6542C1[25]),  25,101},
  {&(_ZTV7S6542C1[50]),  50,101},
  {&(_ZTV7S6542C1[33]),  33,101},
  {&(_ZTV7S6542C1[54]),  54,101},
  {&(_ZTV7S6542C1[38]),  38,101},
  {&(_ZTV7S6542C1[42]),  42,101},
  {&(_ZTV7S6542C1[46]),  46,101},
  {&(_ZTV7S6542C1[64]),  64,101},
  {&(_ZTV7S6542C1[74]),  74,101},
  {&(_ZTV7S6542C1[81]),  81,101},
  {&(_ZTV7S6542C1[90]),  90,101},
  {&(_ZTV7S6542C1[96]),  96,101},
  {&(_ZTV7S6542C1[100]),  100,101},
  {&(_tg__ZTV7S6542C3__7S6542C1[8]),  8,12},
  {&(_tg__ZTV7S6542C47S6542C3__7S6542C1[4]),  4,7},
  {&(_tg__ZTV7S6542C57S6542C47S6542C3__7S6542C1[4]),  4,7},
  {&(_tg__ZTV7S6542C67S6542C57S6542C47S6542C3__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C67S6542C57S6542C47S6542C3__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C57S6542C47S6542C3__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C77S6542C57S6542C47S6542C3__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C77S6542C57S6542C47S6542C3__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C57S6542C47S6542C3__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C7__7S6542C57S6542C47S6542C3__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__7S6542C57S6542C47S6542C3__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C67S6542C47S6542C3__A2__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C67S6542C47S6542C3__A2__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C47S6542C3__A1__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C77S6542C47S6542C3__A1__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C77S6542C47S6542C3__A1__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C47S6542C3__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C5__7S6542C47S6542C3__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__7S6542C47S6542C3__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C6__A__7S6542C47S6542C3__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C7__A1__7S6542C47S6542C3__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C3__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C57S6542C4__7S6542C3__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__7S6542C3__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C67S6542C4__A2__7S6542C3__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C77S6542C4__A1__7S6542C3__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C9__7S6542C3__7S6542C1[10]),  10,14},
  {&(_tg__ZTV7S6542C5__A1__7S6542C3__7S6542C1[6]),  6,9},
  {&(_tg__ZTV7S6542C77S6542C5__A2__7S6542C3__7S6542C1[4]),  4,6},
  {&(_tg__ZTV8S6542C11__7S6542C3__7S6542C1[7]),  7,9},
  {&(_tg__ZTV7S6542C78S6542C11__A3__7S6542C3__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C28S6542C11__A2__7S6542C3__7S6542C1[2]),  2,3},
  {&(_tg__ZTV7S6542C6__A1__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C6__A1__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C9__7S6542C1[7]),  7,11},
  {&(_tg__ZTV7S6542C5__7S6542C9__7S6542C1[6]),  6,9},
  {&(_tg__ZTV7S6542C2__7S6542C9__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C5__7S6542C9__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__7S6542C9__7S6542C1[3]),  3,3},
  {&(_tg__ZTV8S6542C11__7S6542C9__7S6542C1[7]),  7,9},
  {&(_tg__ZTV7S6542C78S6542C11__A1__7S6542C9__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C28S6542C11__A1__7S6542C9__7S6542C1[2]),  2,3},
  {&(_tg__ZTV7S6542C5__A1__7S6542C1[4]),  4,7},
  {&(_tg__ZTV7S6542C67S6542C5__A3__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C67S6542C5__A3__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C5__A2__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C77S6542C5__A2__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C77S6542C5__A2__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C5__A1__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C7__7S6542C5__A1__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__7S6542C5__A1__7S6542C1[3]),  3,3},
  {&(_tg__ZTV8S6542C11__7S6542C1[5]),  5,7},
  {&(_tg__ZTV7S6542C68S6542C11__A4__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C68S6542C11__A4__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C78S6542C11__A3__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C78S6542C11__A3__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C78S6542C11__A3__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C2__8S6542C11__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C7__8S6542C11__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__8S6542C11__7S6542C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6542C1[];
extern  VTBL_ENTRY _ZTV7S6542C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C1[];
static VTBL_ENTRY alt_thunk_names20[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6542C9D0Ev,_ZTv0_n24_N7S6542C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4120_N7S6542C9D0Ev,_ZThn3352_N7S6542C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6542C9D1Ev,_ZTv0_n24_N7S6542C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4120_N7S6542C9D1Ev,_ZThn3352_N7S6542C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6542C9D0Ev,_ZTv0_n20_N7S6542C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N7S6542C9D0Ev,_ZThn2280_N7S6542C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6542C9D1Ev,_ZTv0_n20_N7S6542C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N7S6542C9D1Ev,_ZThn2280_N7S6542C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6542C3D0Ev,_ZTv0_n24_N7S6542C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10920_N7S6542C3D0Ev,_ZThn8968_N7S6542C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6542C3D1Ev,_ZTv0_n24_N7S6542C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10920_N7S6542C3D1Ev,_ZThn8968_N7S6542C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6542C3D0Ev,_ZTv0_n20_N7S6542C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9616_N7S6542C3D0Ev,_ZThn7896_N7S6542C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6542C3D1Ev,_ZTv0_n20_N7S6542C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9616_N7S6542C3D1Ev,_ZThn7896_N7S6542C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6542C3D0Ev,_ZTv0_n36_N7S6542C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6800_N7S6542C3D0Ev,_ZThn5616_N7S6542C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6542C3D1Ev,_ZTv0_n36_N7S6542C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6800_N7S6542C3D1Ev,_ZThn5616_N7S6542C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6542C1D0Ev,_ZTv0_n24_N7S6542C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13704_N7S6542C1D0Ev,_ZThn11232_N7S6542C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6542C1D1Ev,_ZTv0_n24_N7S6542C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13704_N7S6542C1D1Ev,_ZThn11232_N7S6542C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6542C1D0Ev,_ZTv0_n20_N7S6542C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12400_N7S6542C1D0Ev,_ZThn10160_N7S6542C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6542C1D1Ev,_ZTv0_n20_N7S6542C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12400_N7S6542C1D1Ev,_ZThn10160_N7S6542C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6542C1D0Ev,_ZTv0_n36_N7S6542C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9584_N7S6542C1D0Ev,_ZThn7880_N7S6542C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2784_N7S6542C1D0Ev,_ZThn2264_N7S6542C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6542C1D1Ev,_ZTv0_n36_N7S6542C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9584_N7S6542C1D1Ev,_ZThn7880_N7S6542C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2784_N7S6542C1D1Ev,_ZThn2264_N7S6542C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6542C1 = {  "S6542C1", // class name
  bases_S6542C1, 22,
  &(vtc_S6542C1[0]), // expected_vtbl_contents
  &(vtt_S6542C1[0]), // expected_vtt_contents
  ABISELECT(17744,14536), // object size
  NSPAIRA(_ZTI7S6542C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6542C1),101, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6542C1),74, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names20,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19572C5  {
  short s19572c5f0:13;
  void  mf19572c5(); // _ZN8S19572C59mf19572c5Ev
};
//SIG(-1 S19572C5) C1{ m Fs:13}


void  S19572C5 ::mf19572c5(){}

static void Test_S19572C5()
{
  {
    init_simple_test("S19572C5");
    static S19572C5 lv;
    check2(sizeof(lv), 2, "sizeof(S19572C5)");
    check2(__alignof__(lv), 2, "__alignof__(S19572C5)");
    set_bf_and_test(lv, s19572c5f0, 0, 0, 13, 1, "S19572C5");
    set_bf_and_test(lv, s19572c5f0, 0, 0, 13, hide_sll(1LL<<12), "S19572C5");
  }
}
static Arrange_To_Call_Me vS19572C5(Test_S19572C5, "S19572C5", 2);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S19572C5[];
VTBL_ENTRY *P__ZTI8S19572C5 = _ZTI8S19572C5; 
Class_Descriptor cd_S19572C5 = {  "S19572C5", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  2, // object size
  NSPAIRA(_ZTI8S19572C5),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  S19572C4  : virtual S19572C5 {
  ~S19572C4(); // tgen
  S19572C4(); // tgen
};
//SIG(-1 S19572C4) C1{ VBC2{ m Fs:13}}


S19572C4 ::~S19572C4(){ note_dtor("S19572C4", this);} // tgen
S19572C4 ::S19572C4(){ note_ctor("S19572C4", this);} // tgen

static void Test_S19572C4()
{
  extern Class_Descriptor cd_S19572C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19572C4, buf);
    S19572C4 *dp, &lv = *(dp=new (buf) S19572C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19572C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19572C4)");
    check_base_class_offset(lv, (S19572C5*), ABISELECT(8,4), "S19572C4");
    test_class_info(&lv, &cd_S19572C4);
    dp->~S19572C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C4(Test_S19572C4, "S19572C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19572C4C1Ev();
extern void _ZN8S19572C4D1Ev();
Name_Map name_map_S19572C4[] = {
  NSPAIR(_ZN8S19572C4C1Ev),
  NSPAIR(_ZN8S19572C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
static Base_Class bases_S19572C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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 _ZTI8S19572C4[];
static  VTBL_ENTRY vtc_S19572C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern VTBL_ENTRY _ZTV8S19572C4[];
static  VTT_ENTRY vtt_S19572C4[] = {
  {&(_ZTV8S19572C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
Class_Descriptor cd_S19572C4 = {  "S19572C4", // class name
  bases_S19572C4, 1,
  &(vtc_S19572C4[0]), // expected_vtbl_contents
  &(vtt_S19572C4[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19572C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19572C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19572C4),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  S19572C3  : virtual S19572C4 {
  ~S19572C3(); // tgen
  S19572C3(); // tgen
};
//SIG(-1 S19572C3) C1{ VBC2{ VBC3{ m Fs:13}}}


S19572C3 ::~S19572C3(){ note_dtor("S19572C3", this);} // tgen
S19572C3 ::S19572C3(){ note_ctor("S19572C3", this);} // tgen

static void Test_S19572C3()
{
  extern Class_Descriptor cd_S19572C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19572C3, buf);
    S19572C3 *dp, &lv = *(dp=new (buf) S19572C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19572C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19572C3)");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(8,4), "S19572C3");
    check_base_class_offset(lv, (S19572C4*), 0, "S19572C3");
    test_class_info(&lv, &cd_S19572C3);
    dp->~S19572C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C3(Test_S19572C3, "S19572C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19572C3C1Ev();
extern void _ZN8S19572C3D1Ev();
Name_Map name_map_S19572C3[] = {
  NSPAIR(_ZN8S19572C3C1Ev),
  NSPAIR(_ZN8S19572C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
static Base_Class bases_S19572C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
  0, 1},
  {&cd_S19572C4,    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 _ZTI8S19572C3[];
static  VTBL_ENTRY vtc_S19572C3[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C3[0]),
};
extern VTBL_ENTRY _ZTV8S19572C3[];
static  VTBL_ENTRY _tg__ZTV8S19572C4__8S19572C3[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTT_ENTRY vtt_S19572C3[] = {
  {&(_ZTV8S19572C3[4]),  4,4},
  {&(_ZTV8S19572C3[4]),  4,4},
  {&(_tg__ZTV8S19572C4__8S19572C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19572C3[];
extern  VTBL_ENTRY _ZTV8S19572C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C3[];
Class_Descriptor cd_S19572C3 = {  "S19572C3", // class name
  bases_S19572C3, 2,
  &(vtc_S19572C3[0]), // expected_vtbl_contents
  &(vtt_S19572C3[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19572C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19572C3),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19572C3),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  S19572C6  {
  int s19572c6f0;
  virtual void  v1(); // _ZN8S19572C62v1Ev
  ~S19572C6(); // tgen
  S19572C6(); // tgen
};
//SIG(-1 S19572C6) C1{ v1 Fi}


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

static void Test_S19572C6()
{
  extern Class_Descriptor cd_S19572C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19572C6, buf);
    S19572C6 *dp, &lv = *(dp=new (buf) S19572C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19572C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19572C6)");
    check_field_offset(lv, s19572c6f0, ABISELECT(8,4), "S19572C6.s19572c6f0");
    test_class_info(&lv, &cd_S19572C6);
    dp->~S19572C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C6(Test_S19572C6, "S19572C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19572C6C1Ev();
extern void _ZN8S19572C6D1Ev();
Name_Map name_map_S19572C6[] = {
  NSPAIR(_ZN8S19572C6C1Ev),
  NSPAIR(_ZN8S19572C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19572C6[];
extern void _ZN8S19572C62v1Ev();
static  VTBL_ENTRY vtc_S19572C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C6[0]),
  (VTBL_ENTRY)&_ZN8S19572C62v1Ev,
};
extern VTBL_ENTRY _ZTI8S19572C6[];
extern  VTBL_ENTRY _ZTV8S19572C6[];
Class_Descriptor cd_S19572C6 = {  "S19572C6", // class name
  0,0,//no base classes
  &(vtc_S19572C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19572C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19572C6),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19572C2  : S19572C3 , virtual S19572C6 {
  void *s19572c2f0;
  ~S19572C2(); // tgen
  S19572C2(); // tgen
};
//SIG(-1 S19572C2) C1{ BC2{ VBC3{ VBC4{ m Fs:13}}} VBC5{ v1 Fi} Fp}


S19572C2 ::~S19572C2(){ note_dtor("S19572C2", this);} // tgen
S19572C2 ::S19572C2(){ note_ctor("S19572C2", this);} // tgen

static void Test_S19572C2()
{
  extern Class_Descriptor cd_S19572C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19572C2, buf);
    S19572C2 *dp, &lv = *(dp=new (buf) S19572C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19572C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19572C2)");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(16,8), "S19572C2");
    check_base_class_offset(lv, (S19572C4*)(S19572C3*), 0, "S19572C2");
    check_base_class_offset(lv, (S19572C3*), 0, "S19572C2");
    check_base_class_offset(lv, (S19572C6*), ABISELECT(24,12), "S19572C2");
    check_field_offset(lv, s19572c2f0, ABISELECT(8,4), "S19572C2.s19572c2f0");
    test_class_info(&lv, &cd_S19572C2);
    dp->~S19572C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C2(Test_S19572C2, "S19572C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19572C2C1Ev();
extern void _ZN8S19572C2D1Ev();
Name_Map name_map_S19572C2[] = {
  NSPAIR(_ZN8S19572C2C1Ev),
  NSPAIR(_ZN8S19572C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C3;
extern VTBL_ENTRY _ZTI8S19572C3[];
extern  VTBL_ENTRY _ZTV8S19572C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C3[];
extern Class_Descriptor cd_S19572C6;
extern VTBL_ENTRY _ZTI8S19572C6[];
extern  VTBL_ENTRY _ZTV8S19572C6[];
static Base_Class bases_S19572C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
  0, 1},
  {&cd_S19572C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19572C3,    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},
  {&cd_S19572C6,    ABISELECT(24,12), //bcp->offset
    5, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19572C2[];
extern void _ZN8S19572C62v1Ev();
static  VTBL_ENTRY vtc_S19572C2[] = {
  ABISELECT(24,12),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C2[0]),
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19572C2[0]),
  (VTBL_ENTRY)&_ZN8S19572C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S19572C2[];
static  VTBL_ENTRY _tg__ZTV8S19572C3__8S19572C2[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__8S19572C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTT_ENTRY vtt_S19572C2[] = {
  {&(_ZTV8S19572C2[5]),  5,9},
  {&(_tg__ZTV8S19572C3__8S19572C2[4]),  4,4},
  {&(_tg__ZTV8S19572C3__8S19572C2[4]),  4,4},
  {&(_ZTV8S19572C2[5]),  5,9},
  {&(_ZTV8S19572C2[8]),  8,9},
  {&(_tg__ZTV8S19572C4__8S19572C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19572C2[];
extern  VTBL_ENTRY _ZTV8S19572C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C2[];
Class_Descriptor cd_S19572C2 = {  "S19572C2", // class name
  bases_S19572C2, 4,
  &(vtc_S19572C2[0]), // expected_vtbl_contents
  &(vtt_S19572C2[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19572C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19572C2),9, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19572C2),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19572C10  : S19572C5 {
};
//SIG(-1 S19572C10) C1{ BC2{ m Fs:13}}



static void Test_S19572C10()
{
  extern Class_Descriptor cd_S19572C10;
  void *lvp;
  {
    short buf[2];
    init_test(&cd_S19572C10, buf);
    S19572C10 &lv = *(new (buf) S19572C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), 2, "sizeof(S19572C10)");
    check2(__alignof__(lv), 2, "__alignof__(S19572C10)");
    check_base_class_offset(lv, (S19572C5*), 0, "S19572C10");
    test_class_info(&lv, &cd_S19572C10);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C10(Test_S19572C10, "S19572C10", 2);

#else // __cplusplus

extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
static Base_Class bases_S19572C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19572C10[];
Class_Descriptor cd_S19572C10 = {  "S19572C10", // class name
  bases_S19572C10, 1,
  0, // no vftv
  0, //no vtt
  2, // object size
  NSPAIRA(_ZTI9S19572C10),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  S19572C9  : S19572C10 {
  virtual  ~S19572C9(); // _ZN8S19572C9D1Ev
  S19572C9(); // tgen
};
//SIG(-1 S19572C9) C1{ BC2{ BC3{ m Fs:13}} vd}


 S19572C9 ::~S19572C9(){ note_dtor("S19572C9", this);}
S19572C9 ::S19572C9(){ note_ctor("S19572C9", this);} // tgen

static void Test_S19572C9()
{
  extern Class_Descriptor cd_S19572C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19572C9, buf);
    S19572C9 *dp, &lv = *(dp=new (buf) S19572C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19572C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19572C9)");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(8,4), "S19572C9");
    check_base_class_offset(lv, (S19572C10*), ABISELECT(8,4), "S19572C9");
    test_class_info(&lv, &cd_S19572C9);
    dp->~S19572C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C9(Test_S19572C9, "S19572C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19572C9C1Ev();
extern void _ZN8S19572C9D1Ev();
Name_Map name_map_S19572C9[] = {
  NSPAIR(_ZN8S19572C9C1Ev),
  NSPAIR(_ZN8S19572C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
static Base_Class bases_S19572C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
  0, 0},
  {&cd_S19572C10,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S19572C9[];
extern void _ZN8S19572C9D1Ev();
extern void _ZN8S19572C9D0Ev();
static  VTBL_ENTRY vtc_S19572C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C9[0]),
  (VTBL_ENTRY)&_ZN8S19572C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19572C9D0Ev,
};
extern VTBL_ENTRY _ZTI8S19572C9[];
extern  VTBL_ENTRY _ZTV8S19572C9[];
Class_Descriptor cd_S19572C9 = {  "S19572C9", // class name
  bases_S19572C9, 2,
  &(vtc_S19572C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19572C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19572C9),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  S19572C12  : virtual S19572C10 {
  ~S19572C12(); // tgen
  S19572C12(); // tgen
};
//SIG(-1 S19572C12) C1{ VBC2{ BC3{ m Fs:13}}}


S19572C12 ::~S19572C12(){ note_dtor("S19572C12", this);} // tgen
S19572C12 ::S19572C12(){ note_ctor("S19572C12", this);} // tgen

static void Test_S19572C12()
{
  extern Class_Descriptor cd_S19572C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19572C12, buf);
    S19572C12 *dp, &lv = *(dp=new (buf) S19572C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19572C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19572C12)");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(8,4), "S19572C12");
    check_base_class_offset(lv, (S19572C10*), ABISELECT(8,4), "S19572C12");
    test_class_info(&lv, &cd_S19572C12);
    dp->~S19572C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C12(Test_S19572C12, "S19572C12", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19572C12C1Ev();
extern void _ZN9S19572C12D1Ev();
Name_Map name_map_S19572C12[] = {
  NSPAIR(_ZN9S19572C12C1Ev),
  NSPAIR(_ZN9S19572C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
static Base_Class bases_S19572C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
  0, 0},
  {&cd_S19572C10,    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 _ZTI9S19572C12[];
static  VTBL_ENTRY vtc_S19572C12[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern VTBL_ENTRY _ZTV9S19572C12[];
static  VTT_ENTRY vtt_S19572C12[] = {
  {&(_ZTV9S19572C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
Class_Descriptor cd_S19572C12 = {  "S19572C12", // class name
  bases_S19572C12, 2,
  &(vtc_S19572C12[0]), // expected_vtbl_contents
  &(vtt_S19572C12[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19572C12),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19572C12),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19572C12),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  S19572C13  : S19572C4 , S19572C10 {
  virtual  ~S19572C13(); // _ZN9S19572C13D2Ev
  S19572C13(); // tgen
};
//SIG(-1 S19572C13) C1{ BC2{ VBC3{ m Fs:13}} BC4{ BC3} vd}


 S19572C13 ::~S19572C13(){ note_dtor("S19572C13", this);}
S19572C13 ::S19572C13(){ note_ctor("S19572C13", this);} // tgen

static void Test_S19572C13()
{
  extern Class_Descriptor cd_S19572C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19572C13, buf);
    S19572C13 *dp, &lv = *(dp=new (buf) S19572C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19572C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19572C13)");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(10,6), "S19572C13");
    check_base_class_offset(lv, (S19572C4*), 0, "S19572C13");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(8,4), "S19572C13");
    check_base_class_offset(lv, (S19572C10*), ABISELECT(8,4), "S19572C13");
    test_class_info(&lv, &cd_S19572C13);
    dp->~S19572C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C13(Test_S19572C13, "S19572C13", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19572C13C1Ev();
extern void _ZN9S19572C13D2Ev();
Name_Map name_map_S19572C13[] = {
  NSPAIR(_ZN9S19572C13C1Ev),
  NSPAIR(_ZN9S19572C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
static Base_Class bases_S19572C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(10,6), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19572C4,    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_S19572C5,    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_S19572C10,    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},
  {0}};
extern VTBL_ENTRY _ZTI9S19572C13[];
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY vtc_S19572C13[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
extern VTBL_ENTRY _ZTV9S19572C13[];
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C13[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTT_ENTRY vtt_S19572C13[] = {
  {&(_ZTV9S19572C13[3]),  3,5},
  {&(_tg__ZTV8S19572C4__9S19572C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
Class_Descriptor cd_S19572C13 = {  "S19572C13", // class name
  bases_S19572C13, 4,
  &(vtc_S19572C13[0]), // expected_vtbl_contents
  &(vtt_S19572C13[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19572C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19572C13),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19572C13),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  S19572C11  : virtual S19572C5 , virtual S19572C10 , S19572C12 , S19572C13 , S19572C4 {
  long double s19572c11f0[5];
  virtual  ~S19572C11(); // _ZN9S19572C11D2Ev
  S19572C11(); // tgen
};
//SIG(-1 S19572C11) C1{ VBC2{ m Fs:13} VBC3{ BC2} BC4{ VBC3} BC5{ BC6{ VBC2} BC3 vd} BC6 vd FD[5]}


 S19572C11 ::~S19572C11(){ note_dtor("S19572C11", this);}
S19572C11 ::S19572C11(){ note_ctor("S19572C11", this);} // tgen

static void Test_S19572C11()
{
  extern Class_Descriptor cd_S19572C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,21)];
    init_test(&cd_S19572C11, buf);
    S19572C11 *dp, &lv = *(dp=new (buf) S19572C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,80), "sizeof(S19572C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19572C11)");
    /*is_ambiguous_... S19572C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*), ABISELECT(112,76), "S19572C11");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*), ABISELECT(112,76), "S19572C11");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(112,76), "S19572C11");
    /*is_ambiguous_... S19572C11::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(114,78), "S19572C11");
    /*is_ambiguous_... S19572C11::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*), ABISELECT(114,78), "S19572C11");
    check_base_class_offset(lv, (S19572C10*)(S19572C12*), ABISELECT(114,78), "S19572C11");
    check_base_class_offset(lv, (S19572C12*), 0, "S19572C11");
    check_base_class_offset(lv, (S19572C4*)(S19572C13*), ABISELECT(8,4), "S19572C11");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*), ABISELECT(16,8), "S19572C11");
    check_base_class_offset(lv, (S19572C10*)(S19572C13*), ABISELECT(16,8), "S19572C11");
    check_base_class_offset(lv, (S19572C13*), ABISELECT(8,4), "S19572C11");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*), ABISELECT(24,12), "S19572C11");
    check_field_offset(lv, s19572c11f0, ABISELECT(32,16), "S19572C11.s19572c11f0");
    test_class_info(&lv, &cd_S19572C11);
    dp->~S19572C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C11(Test_S19572C11, "S19572C11", ABISELECT(128,80));

#else // __cplusplus

extern void _ZN9S19572C11C1Ev();
extern void _ZN9S19572C11D2Ev();
Name_Map name_map_S19572C11[] = {
  NSPAIR(_ZN9S19572C11C1Ev),
  NSPAIR(_ZN9S19572C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
static Base_Class bases_S19572C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(112,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
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    ABISELECT(114,78), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19572C10,    ABISELECT(114,78), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19572C12,    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_S19572C4,    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
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    6, //immediately_derived
  0, 0},
  {&cd_S19572C10,    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
    7, //immediately_derived
  0, 0},
  {&cd_S19572C13,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19572C4,    ABISELECT(24,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19572C11[];
extern void _ZN9S19572C11D1Ev();
extern void _ZN9S19572C11D0Ev();
extern void ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev)();
static  VTBL_ENTRY vtc_S19572C11[] = {
  ABISELECT(112,76),
  ABISELECT(114,78),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&_ZN9S19572C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C11D0Ev,
  ABISELECT(104,72),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev),
  ABISELECT(88,64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
};
extern VTBL_ENTRY _ZTV9S19572C11[];
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C11[] = {
  ABISELECT(114,78),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C11[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C13__9S19572C11[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__A1__9S19572C11[] = {
  ABISELECT(88,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTT_ENTRY vtt_S19572C11[] = {
  {&(_ZTV9S19572C11[4]),  4,14},
  {&(_tg__ZTV9S19572C12__9S19572C11[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C11[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C13__9S19572C11[3]),  3,3},
  {&(_tg__ZTV8S19572C4__A1__9S19572C11[3]),  3,3},
  {&(_ZTV9S19572C11[9]),  9,14},
  {&(_ZTV9S19572C11[14]),  14,14},
};
extern VTBL_ENTRY _ZTI9S19572C11[];
extern  VTBL_ENTRY _ZTV9S19572C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C11[];
Class_Descriptor cd_S19572C11 = {  "S19572C11", // class name
  bases_S19572C11, 9,
  &(vtc_S19572C11[0]), // expected_vtbl_contents
  &(vtt_S19572C11[0]), // expected_vtt_contents
  ABISELECT(128,80), // object size
  NSPAIRA(_ZTI9S19572C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19572C11),14, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19572C11),7, //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  S19572C8  : S19572C9 , virtual S19572C3 , S19572C11 {
  int s19572c8f0;
  virtual  ~S19572C8(); // _ZN8S19572C8D2Ev
  S19572C8(); // tgen
};
//SIG(-1 S19572C8) C1{ BC2{ BC3{ BC4{ m Fs:13}} vd} VBC5{ VBC6{ VBC4}} BC7{ VBC4 VBC3 BC8{ VBC3} BC9{ BC6 BC3 vd} BC6 vd FD[5]} vd Fi}


 S19572C8 ::~S19572C8(){ note_dtor("S19572C8", this);}
S19572C8 ::S19572C8(){ note_ctor("S19572C8", this);} // tgen

static void Test_S19572C8()
{
  extern Class_Descriptor cd_S19572C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,25)];
    init_test(&cd_S19572C8, buf);
    S19572C8 *dp, &lv = *(dp=new (buf) S19572C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,96), "sizeof(S19572C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19572C8)");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C9*), ABISELECT(8,4), "S19572C8");
    check_base_class_offset(lv, (S19572C10*)(S19572C9*), ABISELECT(8,4), "S19572C8");
    check_base_class_offset(lv, (S19572C9*), 0, "S19572C8");
    /*is_ambiguous_... S19572C8::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(144,92), "S19572C8");
    /*is_ambiguous_... S19572C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C11*), ABISELECT(144,92), "S19572C8");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(144,92), "S19572C8");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C11*), ABISELECT(144,92), "S19572C8");
    check_base_class_offset(lv, (S19572C4*)(S19572C3*), ABISELECT(136,88), "S19572C8");
    check_base_class_offset(lv, (S19572C3*), ABISELECT(136,88), "S19572C8");
    /*is_ambiguous_... S19572C8::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(146,94), "S19572C8");
    /*is_ambiguous_... S19572C11::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C11*), ABISELECT(146,94), "S19572C8");
    check_base_class_offset(lv, (S19572C10*)(S19572C12*)(S19572C11*), ABISELECT(146,94), "S19572C8");
    check_base_class_offset(lv, (S19572C12*)(S19572C11*), ABISELECT(16,8), "S19572C8");
    check_base_class_offset(lv, (S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(24,12), "S19572C8");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(32,16), "S19572C8");
    check_base_class_offset(lv, (S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(32,16), "S19572C8");
    check_base_class_offset(lv, (S19572C13*)(S19572C11*), ABISELECT(24,12), "S19572C8");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C11*), ABISELECT(40,20), "S19572C8");
    check_base_class_offset(lv, (S19572C11*), ABISELECT(16,8), "S19572C8");
    check_field_offset(lv, s19572c8f0, ABISELECT(128,84), "S19572C8.s19572c8f0");
    test_class_info(&lv, &cd_S19572C8);
    dp->~S19572C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C8(Test_S19572C8, "S19572C8", ABISELECT(160,96));

#else // __cplusplus

extern void _ZN8S19572C8C1Ev();
extern void _ZN8S19572C8D2Ev();
Name_Map name_map_S19572C8[] = {
  NSPAIR(_ZN8S19572C8C1Ev),
  NSPAIR(_ZN8S19572C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C9;
extern VTBL_ENTRY _ZTI8S19572C9[];
extern  VTBL_ENTRY _ZTV8S19572C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C3;
extern VTBL_ENTRY _ZTI8S19572C3[];
extern  VTBL_ENTRY _ZTV8S19572C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C3[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C11;
extern VTBL_ENTRY _ZTI9S19572C11[];
extern  VTBL_ENTRY _ZTV9S19572C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C11[];
static Base_Class bases_S19572C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
  0, 0},
  {&cd_S19572C10,    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, 0},
  {&cd_S19572C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19572C5,    ABISELECT(144,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
    4, //immediately_derived
  0, 1},
  {&cd_S19572C4,    ABISELECT(136,88), //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
    5, //immediately_derived
  0, 1},
  {&cd_S19572C3,    ABISELECT(136,88), //bcp->offset
    22, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    ABISELECT(146,94), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19572C10,    ABISELECT(146,94), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19572C12,    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
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C4,    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
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    11, //immediately_derived
  0, 0},
  {&cd_S19572C10,    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
    12, //immediately_derived
  0, 0},
  {&cd_S19572C13,    ABISELECT(24,12), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(40,20), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C11,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //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 _ZTI8S19572C8[];
extern void _ZN8S19572C8D1Ev();
extern void _ZN8S19572C8D0Ev();
extern void ABISELECT(_ZThn16_N8S19572C8D1Ev,_ZThn8_N8S19572C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19572C8D0Ev,_ZThn8_N8S19572C8D0Ev)();
extern void ABISELECT(_ZThn24_N8S19572C8D1Ev,_ZThn12_N8S19572C8D1Ev)();
extern void ABISELECT(_ZThn24_N8S19572C8D0Ev,_ZThn12_N8S19572C8D0Ev)();
static  VTBL_ENTRY vtc_S19572C8[] = {
  ABISELECT(146,94),
  ABISELECT(144,92),
  ABISELECT(136,88),
  ABISELECT(136,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
  (VTBL_ENTRY)&_ZN8S19572C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19572C8D0Ev,
  ABISELECT(128,84),
  ABISELECT(130,86),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19572C8D1Ev,_ZThn8_N8S19572C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19572C8D0Ev,_ZThn8_N8S19572C8D0Ev),
  ABISELECT(120,80),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19572C8D1Ev,_ZThn12_N8S19572C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19572C8D0Ev,_ZThn12_N8S19572C8D0Ev),
  ABISELECT(104,72),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
  0,
  ABISELECT(8,4),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
};
extern VTBL_ENTRY _ZTV8S19572C8[];
extern void _ZN9S19572C11D1Ev();
extern void _ZN9S19572C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C11__8S19572C8[] = {
  ABISELECT(128,84),
  ABISELECT(130,86),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&_ZN9S19572C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19572C129S19572C11__8S19572C8[] = {
  ABISELECT(130,86),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__8S19572C8[] = {
  ABISELECT(120,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C139S19572C11__A1__8S19572C8[] = {
  ABISELECT(120,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A2__8S19572C8[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C11__8S19572C8[] = {
  ABISELECT(120,80),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__A1__9S19572C11__8S19572C8[] = {
  ABISELECT(104,72),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C3__8S19572C8[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__8S19572C8[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTT_ENTRY vtt_S19572C8[] = {
  {&(_ZTV8S19572C8[6]),  6,26},
  {&(_tg__ZTV9S19572C11__8S19572C8[4]),  4,6},
  {&(_tg__ZTV9S19572C129S19572C11__8S19572C8[3]),  3,3},
  {&(_tg__ZTV9S19572C139S19572C11__8S19572C8[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C139S19572C11__A1__8S19572C8[3]),  3,3},
  {&(_tg__ZTV8S19572C49S19572C11__A2__8S19572C8[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C11__8S19572C8[3]),  3,5},
  {&(_tg__ZTV8S19572C4__A1__9S19572C11__8S19572C8[3]),  3,3},
  {&(_ZTV8S19572C8[26]),  26,26},
  {&(_ZTV8S19572C8[26]),  26,26},
  {&(_ZTV8S19572C8[12]),  12,26},
  {&(_ZTV8S19572C8[17]),  17,26},
  {&(_ZTV8S19572C8[22]),  22,26},
  {&(_tg__ZTV8S19572C3__8S19572C8[4]),  4,4},
  {&(_tg__ZTV8S19572C3__8S19572C8[4]),  4,4},
  {&(_tg__ZTV8S19572C4__8S19572C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19572C8[];
extern  VTBL_ENTRY _ZTV8S19572C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C8[];
Class_Descriptor cd_S19572C8 = {  "S19572C8", // class name
  bases_S19572C8, 15,
  &(vtc_S19572C8[0]), // expected_vtbl_contents
  &(vtt_S19572C8[0]), // expected_vtt_contents
  ABISELECT(160,96), // object size
  NSPAIRA(_ZTI8S19572C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19572C8),26, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19572C8),16, //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  S19572C7  : virtual S19572C8 {
  void *s19572c7f0;
  virtual void  v2(); // _ZN8S19572C72v2Ev
  ~S19572C7(); // tgen
  S19572C7(); // tgen
};
//SIG(-1 S19572C7) C1{ VBC2{ BC3{ BC4{ BC5{ m Fs:13}} vd} VBC6{ VBC7{ VBC5}} BC8{ VBC5 VBC4 BC9{ VBC4} BC10{ BC7 BC4 vd} BC7 vd FD[5]} vd Fi} v1 Fp}


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

static void Test_S19572C7()
{
  extern Class_Descriptor cd_S19572C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,26)];
    init_test(&cd_S19572C7, buf);
    S19572C7 *dp, &lv = *(dp=new (buf) S19572C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,100), "sizeof(S19572C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19572C7)");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C9*)(S19572C8*), ABISELECT(24,12), "S19572C7");
    check_base_class_offset(lv, (S19572C10*)(S19572C9*)(S19572C8*), ABISELECT(24,12), "S19572C7");
    check_base_class_offset(lv, (S19572C9*)(S19572C8*), ABISELECT(16,8), "S19572C7");
    /*is_ambiguous_... S19572C7::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(148,96), "S19572C7");
    /*is_ambiguous_... S19572C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C11*)(S19572C8*), ABISELECT(148,96), "S19572C7");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*)(S19572C11*)(S19572C8*), ABISELECT(148,96), "S19572C7");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C11*)(S19572C8*), ABISELECT(148,96), "S19572C7");
    check_base_class_offset(lv, (S19572C4*)(S19572C3*), 0, "S19572C7");
    check_base_class_offset(lv, (S19572C3*)(S19572C8*), 0, "S19572C7");
    /*is_ambiguous_... S19572C7::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(150,98), "S19572C7");
    /*is_ambiguous_... S19572C11::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C11*)(S19572C8*), ABISELECT(150,98), "S19572C7");
    check_base_class_offset(lv, (S19572C10*)(S19572C12*)(S19572C11*)(S19572C8*), ABISELECT(150,98), "S19572C7");
    check_base_class_offset(lv, (S19572C12*)(S19572C11*)(S19572C8*), ABISELECT(32,16), "S19572C7");
    check_base_class_offset(lv, (S19572C4*)(S19572C13*)(S19572C11*)(S19572C8*), ABISELECT(40,20), "S19572C7");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*)(S19572C11*)(S19572C8*), ABISELECT(48,24), "S19572C7");
    check_base_class_offset(lv, (S19572C10*)(S19572C13*)(S19572C11*)(S19572C8*), ABISELECT(48,24), "S19572C7");
    check_base_class_offset(lv, (S19572C13*)(S19572C11*)(S19572C8*), ABISELECT(40,20), "S19572C7");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C11*)(S19572C8*), ABISELECT(56,28), "S19572C7");
    check_base_class_offset(lv, (S19572C11*)(S19572C8*), ABISELECT(32,16), "S19572C7");
    check_base_class_offset(lv, (S19572C8*), ABISELECT(16,8), "S19572C7");
    check_field_offset(lv, s19572c7f0, ABISELECT(8,4), "S19572C7.s19572c7f0");
    test_class_info(&lv, &cd_S19572C7);
    dp->~S19572C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C7(Test_S19572C7, "S19572C7", ABISELECT(160,100));

#else // __cplusplus

extern void _ZN8S19572C7C1Ev();
extern void _ZN8S19572C7D1Ev();
Name_Map name_map_S19572C7[] = {
  NSPAIR(_ZN8S19572C7C1Ev),
  NSPAIR(_ZN8S19572C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C9;
extern VTBL_ENTRY _ZTI8S19572C9[];
extern  VTBL_ENTRY _ZTV8S19572C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C3;
extern VTBL_ENTRY _ZTI8S19572C3[];
extern  VTBL_ENTRY _ZTV8S19572C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C3[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C11;
extern VTBL_ENTRY _ZTI9S19572C11[];
extern  VTBL_ENTRY _ZTV9S19572C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C11[];
extern Class_Descriptor cd_S19572C8;
extern VTBL_ENTRY _ZTI8S19572C8[];
extern  VTBL_ENTRY _ZTV8S19572C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C8[];
static Base_Class bases_S19572C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
  0, 0},
  {&cd_S19572C10,    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
    2, //immediately_derived
  0, 0},
  {&cd_S19572C9,    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
    15, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(148,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, 1},
  {&cd_S19572C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19572C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19572C5,    ABISELECT(150,98), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19572C10,    ABISELECT(150,98), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19572C12,    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
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C4,    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
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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_S19572C10,    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
    12, //immediately_derived
  0, 0},
  {&cd_S19572C13,    ABISELECT(40,20), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(56,28), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C11,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19572C8,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19572C7[];
extern void _ZN8S19572C72v2Ev();
extern void _ZN8S19572C7D1Ev();
extern void _ZN8S19572C7D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S19572C7D1Ev,_ZTv0_n28_N8S19572C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S19572C7D1Ev,_ZThn8_N8S19572C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19572C7D0Ev,_ZTv0_n28_N8S19572C7D0Ev)();
extern void ABISELECT(_ZThn16_N8S19572C7D0Ev,_ZThn8_N8S19572C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n56_N8S19572C7D1Ev,_ZTvn8_n28_N8S19572C7D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S19572C7D0Ev,_ZTvn8_n28_N8S19572C7D0Ev)();
extern void ABISELECT(_ZTvn24_n56_N8S19572C7D1Ev,_ZTvn12_n28_N8S19572C7D1Ev)();
extern void ABISELECT(_ZTvn24_n56_N8S19572C7D0Ev,_ZTvn12_n28_N8S19572C7D0Ev)();
static  VTBL_ENTRY vtc_S19572C7[] = {
  ABISELECT(150,98),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(148,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C7[0]),
  (VTBL_ENTRY)&_ZN8S19572C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19572C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19572C7D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(134,90),
  ABISELECT(132,88),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19572C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19572C7D1Ev,_ZTv0_n28_N8S19572C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19572C7D0Ev,_ZTv0_n28_N8S19572C7D0Ev),
  ABISELECT(116,80),
  ABISELECT(118,82),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19572C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S19572C7D1Ev,_ZTvn8_n28_N8S19572C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S19572C7D0Ev,_ZTvn8_n28_N8S19572C7D0Ev),
  ABISELECT(108,76),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19572C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n56_N8S19572C7D1Ev,_ZTvn12_n28_N8S19572C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n56_N8S19572C7D0Ev,_ZTvn12_n28_N8S19572C7D0Ev),
  ABISELECT(92,68),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S19572C7[0]),
};
extern VTBL_ENTRY _ZTV8S19572C7[];
extern void _ZN8S19572C8D1Ev();
extern void _ZN8S19572C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19572C8__8S19572C7[] = {
  ABISELECT(134,90),
  ABISELECT(132,88),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
  (VTBL_ENTRY)&_ZN8S19572C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19572C8D0Ev,
};
extern void _ZN9S19572C11D1Ev();
extern void _ZN9S19572C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C118S19572C8__8S19572C7[] = {
  ABISELECT(116,80),
  ABISELECT(118,82),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&_ZN9S19572C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19572C129S19572C118S19572C8__8S19572C7[] = {
  ABISELECT(118,82),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C118S19572C8__8S19572C7[] = {
  ABISELECT(108,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C139S19572C118S19572C8__A1__8S19572C7[] = {
  ABISELECT(108,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C118S19572C8__A2__8S19572C7[] = {
  ABISELECT(92,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C118S19572C8__8S19572C7[] = {
  ABISELECT(108,76),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__A1__9S19572C118S19572C8__8S19572C7[] = {
  ABISELECT(92,68),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C3__8S19572C8__8S19572C7[] = {
  0,
  ABISELECT(148,96),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
};
extern void ABISELECT(_ZThn16_N8S19572C8D1Ev,_ZThn8_N8S19572C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19572C8D0Ev,_ZThn8_N8S19572C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C11__8S19572C8__8S19572C7[] = {
  ABISELECT(116,80),
  ABISELECT(118,82),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19572C8D1Ev,_ZThn8_N8S19572C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19572C8D0Ev,_ZThn8_N8S19572C8D0Ev),
};
extern void ABISELECT(_ZThn24_N8S19572C8D1Ev,_ZThn12_N8S19572C8D1Ev)();
extern void ABISELECT(_ZThn24_N8S19572C8D0Ev,_ZThn12_N8S19572C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__8S19572C8__8S19572C7[] = {
  ABISELECT(108,76),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19572C8D1Ev,_ZThn12_N8S19572C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19572C8D0Ev,_ZThn12_N8S19572C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A2__8S19572C8__8S19572C7[] = {
  ABISELECT(92,68),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C3__8S19572C7[] = {
  0,
  ABISELECT(148,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__8S19572C7[] = {
  ABISELECT(148,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTT_ENTRY vtt_S19572C7[] = {
  {&(_ZTV8S19572C7[7]),  7,33},
  {&(_ZTV8S19572C7[17]),  17,33},
  {&(_ZTV8S19572C7[7]),  7,33},
  {&(_ZTV8S19572C7[7]),  7,33},
  {&(_ZTV8S19572C7[23]),  23,33},
  {&(_ZTV8S19572C7[28]),  28,33},
  {&(_ZTV8S19572C7[33]),  33,33},
  {&(_tg__ZTV8S19572C8__8S19572C7[6]),  6,8},
  {&(_tg__ZTV9S19572C118S19572C8__8S19572C7[4]),  4,6},
  {&(_tg__ZTV9S19572C129S19572C118S19572C8__8S19572C7[3]),  3,3},
  {&(_tg__ZTV9S19572C139S19572C118S19572C8__8S19572C7[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C139S19572C118S19572C8__A1__8S19572C7[3]),  3,3},
  {&(_tg__ZTV8S19572C49S19572C118S19572C8__A2__8S19572C7[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C118S19572C8__8S19572C7[3]),  3,5},
  {&(_tg__ZTV8S19572C4__A1__9S19572C118S19572C8__8S19572C7[3]),  3,3},
  {&(_tg__ZTV8S19572C3__8S19572C8__8S19572C7[4]),  4,4},
  {&(_tg__ZTV8S19572C3__8S19572C8__8S19572C7[4]),  4,4},
  {&(_tg__ZTV9S19572C11__8S19572C8__8S19572C7[4]),  4,6},
  {&(_tg__ZTV9S19572C139S19572C11__8S19572C8__8S19572C7[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A2__8S19572C8__8S19572C7[3]),  3,3},
  {&(_tg__ZTV8S19572C3__8S19572C7[4]),  4,4},
  {&(_tg__ZTV8S19572C3__8S19572C7[4]),  4,4},
  {&(_tg__ZTV8S19572C4__8S19572C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19572C7[];
extern  VTBL_ENTRY _ZTV8S19572C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C7[];
static VTBL_ENTRY alt_thunk_names21[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19572C7D0Ev,_ZTv0_n28_N8S19572C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19572C7D0Ev,_ZThn8_N8S19572C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19572C7D1Ev,_ZTv0_n28_N8S19572C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19572C7D1Ev,_ZThn8_N8S19572C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19572C7 = {  "S19572C7", // class name
  bases_S19572C7, 16,
  &(vtc_S19572C7[0]), // expected_vtbl_contents
  &(vtt_S19572C7[0]), // expected_vtt_contents
  ABISELECT(160,100), // object size
  NSPAIRA(_ZTI8S19572C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19572C7),33, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19572C7),23, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names21,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19572C20  : virtual S19572C5 {
  ~S19572C20(); // tgen
  S19572C20(); // tgen
};
//SIG(-1 S19572C20) C1{ VBC2{ m Fs:13}}


S19572C20 ::~S19572C20(){ note_dtor("S19572C20", this);} // tgen
S19572C20 ::S19572C20(){ note_ctor("S19572C20", this);} // tgen

static void Test_S19572C20()
{
  extern Class_Descriptor cd_S19572C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19572C20, buf);
    S19572C20 *dp, &lv = *(dp=new (buf) S19572C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19572C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19572C20)");
    check_base_class_offset(lv, (S19572C5*), ABISELECT(8,4), "S19572C20");
    test_class_info(&lv, &cd_S19572C20);
    dp->~S19572C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C20(Test_S19572C20, "S19572C20", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19572C20C1Ev();
extern void _ZN9S19572C20D1Ev();
Name_Map name_map_S19572C20[] = {
  NSPAIR(_ZN9S19572C20C1Ev),
  NSPAIR(_ZN9S19572C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
static Base_Class bases_S19572C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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 _ZTI9S19572C20[];
static  VTBL_ENTRY vtc_S19572C20[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C20[0]),
};
extern VTBL_ENTRY _ZTV9S19572C20[];
static  VTT_ENTRY vtt_S19572C20[] = {
  {&(_ZTV9S19572C20[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19572C20[];
extern  VTBL_ENTRY _ZTV9S19572C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C20[];
Class_Descriptor cd_S19572C20 = {  "S19572C20", // class name
  bases_S19572C20, 1,
  &(vtc_S19572C20[0]), // expected_vtbl_contents
  &(vtt_S19572C20[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19572C20),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19572C20),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19572C20),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  S19572C19  : virtual S19572C20 , virtual S19572C4 , S19572C5 , virtual S19572C10 {
  int s19572c19f0;
  virtual  ~S19572C19(); // _ZN9S19572C19D2Ev
  S19572C19(); // tgen
};
//SIG(-1 S19572C19) C1{ VBC2{ VBC3{ m Fs:13}} VBC4{ VBC3} BC3 VBC5{ BC3} vd Fi}


 S19572C19 ::~S19572C19(){ note_dtor("S19572C19", this);}
S19572C19 ::S19572C19(){ note_ctor("S19572C19", this);} // tgen

static void Test_S19572C19()
{
  extern Class_Descriptor cd_S19572C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19572C19, buf);
    S19572C19 *dp, &lv = *(dp=new (buf) S19572C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19572C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19572C19)");
    check_base_class_offset(lv, (S19572C5*)(S19572C20*), ABISELECT(16,12), "S19572C19");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(16,12), "S19572C19");
    check_base_class_offset(lv, (S19572C20*), 0, "S19572C19");
    check_base_class_offset(lv, (S19572C4*), ABISELECT(24,16), "S19572C19");
    /*is_ambiguous_... S19572C19::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*), ABISELECT(8,4), "S19572C19");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(32,20), "S19572C19");
    check_base_class_offset(lv, (S19572C10*), ABISELECT(32,20), "S19572C19");
    check_field_offset(lv, s19572c19f0, ABISELECT(12,8), "S19572C19.s19572c19f0");
    test_class_info(&lv, &cd_S19572C19);
    dp->~S19572C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C19(Test_S19572C19, "S19572C19", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN9S19572C19C1Ev();
extern void _ZN9S19572C19D2Ev();
Name_Map name_map_S19572C19[] = {
  NSPAIR(_ZN9S19572C19C1Ev),
  NSPAIR(_ZN9S19572C19D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C20;
extern VTBL_ENTRY _ZTI9S19572C20[];
extern  VTBL_ENTRY _ZTV9S19572C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C20[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
static Base_Class bases_S19572C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
    1, //immediately_derived
  0, 1},
  {&cd_S19572C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C4,    ABISELECT(24,16), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    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_S19572C5,    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
    5, //immediately_derived
  0, 0},
  {&cd_S19572C10,    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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19572C19[];
extern void _ZN9S19572C19D1Ev();
extern void _ZN9S19572C19D0Ev();
static  VTBL_ENTRY vtc_S19572C19[] = {
  ABISELECT(32,20),
  ABISELECT(24,16),
  0,
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C19[0]),
  (VTBL_ENTRY)&_ZN9S19572C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C19D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S19572C19[0]),
};
extern VTBL_ENTRY _ZTV9S19572C19[];
static  VTBL_ENTRY _tg__ZTV9S19572C20__9S19572C19[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C19[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTT_ENTRY vtt_S19572C19[] = {
  {&(_ZTV9S19572C19[6]),  6,11},
  {&(_ZTV9S19572C19[6]),  6,11},
  {&(_ZTV9S19572C19[11]),  11,11},
  {&(_tg__ZTV9S19572C20__9S19572C19[3]),  3,3},
  {&(_tg__ZTV8S19572C4__9S19572C19[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19572C19[];
extern  VTBL_ENTRY _ZTV9S19572C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C19[];
Class_Descriptor cd_S19572C19 = {  "S19572C19", // class name
  bases_S19572C19, 6,
  &(vtc_S19572C19[0]), // expected_vtbl_contents
  &(vtt_S19572C19[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI9S19572C19),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19572C19),11, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19572C19),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  S19572C18  : virtual S19572C10 , virtual S19572C12 , virtual S19572C11 , S19572C4 {
  ::S19572C19 s19572c18f0;
  virtual void  v3(); // _ZN9S19572C182v3Ev
  ~S19572C18(); // tgen
  S19572C18(); // tgen
};
//SIG(-1 S19572C18) C1{ VBC2{ BC3{ m Fs:13}} VBC4{ VBC2} VBC5{ VBC3 VBC2 BC4 BC6{ BC7{ VBC3} BC2 vd} BC7 vd FD[5]} BC7 v1 FC8{ VBC9{ VBC3} VBC7 BC3 VBC2 vd Fi}}


void  S19572C18 ::v3(){vfunc_called(this, "_ZN9S19572C182v3Ev");}
S19572C18 ::~S19572C18(){ note_dtor("S19572C18", this);} // tgen
S19572C18 ::S19572C18(){ note_ctor("S19572C18", this);} // tgen

static void Test_S19572C18()
{
  extern Class_Descriptor cd_S19572C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,30)];
    init_test(&cd_S19572C18, buf);
    S19572C18 *dp, &lv = *(dp=new (buf) S19572C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,116), "sizeof(S19572C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19572C18)");
    /*is_ambiguous_... S19572C18::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(48,28), "S19572C18");
    /*is_ambiguous_... S19572C18::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*), ABISELECT(48,28), "S19572C18");
    /*is_ambiguous_... S19572C18::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C12*), ABISELECT(48,28), "S19572C18");
    /*is_ambiguous_... S19572C11::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C11*), ABISELECT(48,28), "S19572C18");
    check_base_class_offset(lv, (S19572C10*)(S19572C12*)(S19572C11*), ABISELECT(48,28), "S19572C18");
    /*is_ambiguous_... S19572C18::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C12*), ABISELECT(56,32), "S19572C18");
    /*is_ambiguous_... S19572C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C11*), ABISELECT(176,112), "S19572C18");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(176,112), "S19572C18");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C11*), ABISELECT(176,112), "S19572C18");
    /*is_ambiguous_... S19572C18::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(176,112), "S19572C18");
    check_base_class_offset(lv, (S19572C12*)(S19572C11*), ABISELECT(64,36), "S19572C18");
    check_base_class_offset(lv, (S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(72,40), "S19572C18");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(80,44), "S19572C18");
    check_base_class_offset(lv, (S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(80,44), "S19572C18");
    check_base_class_offset(lv, (S19572C13*)(S19572C11*), ABISELECT(72,40), "S19572C18");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C11*), ABISELECT(88,48), "S19572C18");
    check_base_class_offset(lv, (S19572C11*), ABISELECT(64,36), "S19572C18");
    /*is_ambiguous_... S19572C18::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*), 0, "S19572C18");
    check_field_offset(lv, s19572c18f0, ABISELECT(8,4), "S19572C18.s19572c18f0");
    test_class_info(&lv, &cd_S19572C18);
    dp->~S19572C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C18(Test_S19572C18, "S19572C18", ABISELECT(192,116));

#else // __cplusplus

extern void _ZN9S19572C18C1Ev();
extern void _ZN9S19572C18D1Ev();
Name_Map name_map_S19572C18[] = {
  NSPAIR(_ZN9S19572C18C1Ev),
  NSPAIR(_ZN9S19572C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C11;
extern VTBL_ENTRY _ZTI9S19572C11[];
extern  VTBL_ENTRY _ZTV9S19572C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C11[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
static Base_Class bases_S19572C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
    1, //immediately_derived
  0, 0},
  {&cd_S19572C10,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C12,    ABISELECT(56,32), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    ABISELECT(176,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
    5, //immediately_derived
  0, 1},
  {&cd_S19572C12,    ABISELECT(64,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
    2, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(72,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
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(80,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
    7, //immediately_derived
  0, 0},
  {&cd_S19572C10,    ABISELECT(80,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
    8, //immediately_derived
  0, 0},
  {&cd_S19572C13,    ABISELECT(72,40), //bcp->offset
    19, //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
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(88,48), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19572C11,    ABISELECT(64,36), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C4,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19572C18[];
extern void _ZN9S19572C182v3Ev();
extern void _ZN9S19572C18D1Ev();
extern void _ZN9S19572C18D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev)();
extern void ABISELECT(_ZThn64_N9S19572C18D1Ev,_ZThn36_N9S19572C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev)();
extern void ABISELECT(_ZThn64_N9S19572C18D0Ev,_ZThn36_N9S19572C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N9S19572C18D1Ev,_ZTvn4_n20_N9S19572C18D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C18D0Ev,_ZTvn4_n20_N9S19572C18D0Ev)();
static  VTBL_ENTRY vtc_S19572C18[] = {
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(48,28),
  ABISELECT(176,112),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&_ZN9S19572C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C18D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  ABISELECT(-64,-36),
  ABISELECT(112,76),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev),
  ABISELECT(104,72),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C18D1Ev,_ZTvn4_n20_N9S19572C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C18D0Ev,_ZTvn4_n20_N9S19572C18D0Ev),
  ABISELECT(88,64),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
};
extern VTBL_ENTRY _ZTV9S19572C18[];
static  VTBL_ENTRY _tg__ZTV8S19572C4__A2__9S19572C18[] = {
  ABISELECT(176,112),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C18[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C11D1Ev();
extern void _ZN9S19572C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C18[] = {
  ABISELECT(112,76),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&_ZN9S19572C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19572C129S19572C11__A1__9S19572C18[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__9S19572C18[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C139S19572C11__9S19572C18[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A1__9S19572C18[] = {
  ABISELECT(88,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C11__9S19572C18[] = {
  ABISELECT(104,72),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__A1__9S19572C11__9S19572C18[] = {
  ABISELECT(88,64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
};
static  VTT_ENTRY vtt_S19572C18[] = {
  {&(_ZTV9S19572C18[6]),  6,27},
  {&(_tg__ZTV8S19572C4__A2__9S19572C18[3]),  3,3},
  {&(_ZTV9S19572C18[12]),  12,27},
  {&(_ZTV9S19572C18[17]),  17,27},
  {&(_ZTV9S19572C18[22]),  22,27},
  {&(_ZTV9S19572C18[27]),  27,27},
  {&(_tg__ZTV9S19572C12__9S19572C18[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C18[4]),  4,6},
  {&(_tg__ZTV9S19572C129S19572C11__A1__9S19572C18[3]),  3,3},
  {&(_tg__ZTV9S19572C139S19572C11__9S19572C18[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C139S19572C11__9S19572C18[3]),  3,3},
  {&(_tg__ZTV8S19572C49S19572C11__A1__9S19572C18[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C11__9S19572C18[3]),  3,5},
  {&(_tg__ZTV8S19572C4__A1__9S19572C11__9S19572C18[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19572C18[];
extern  VTBL_ENTRY _ZTV9S19572C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C18[];
static VTBL_ENTRY alt_thunk_names22[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19572C18D0Ev,_ZThn36_N9S19572C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19572C18D1Ev,_ZThn36_N9S19572C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19572C18 = {  "S19572C18", // class name
  bases_S19572C18, 12,
  &(vtc_S19572C18[0]), // expected_vtbl_contents
  &(vtt_S19572C18[0]), // expected_vtt_contents
  ABISELECT(192,116), // object size
  NSPAIRA(_ZTI9S19572C18),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19572C18),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19572C18),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names22,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19572C17  : virtual S19572C5 , virtual S19572C3 , virtual S19572C18 {
  int s19572c17f0;
  virtual  ~S19572C17(); // _ZN9S19572C17D2Ev
  S19572C17(); // tgen
};
//SIG(-1 S19572C17) C1{ VBC2{ m Fs:13} VBC3{ VBC4{ VBC2}} VBC5{ VBC6{ BC2} VBC7{ VBC6} VBC8{ VBC2 VBC6 BC7 BC9{ BC4 BC6 vd} BC4 vd FD[5]} BC4 v1 FC10{ VBC11{ VBC2} VBC4 BC2 VBC6 vd Fi}} vd Fi}


 S19572C17 ::~S19572C17(){ note_dtor("S19572C17", this);}
S19572C17 ::S19572C17(){ note_ctor("S19572C17", this);} // tgen

static void Test_S19572C17()
{
  extern Class_Descriptor cd_S19572C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,32)];
    init_test(&cd_S19572C17, buf);
    S19572C17 *dp, &lv = *(dp=new (buf) S19572C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,124), "sizeof(S19572C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19572C17)");
    /*is_ambiguous_... S19572C17::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*), ABISELECT(12,8), "S19572C17");
    /*is_ambiguous_... S19572C17::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(12,8), "S19572C17");
    /*is_ambiguous_... S19572C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C11*), ABISELECT(12,8), "S19572C17");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(12,8), "S19572C17");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C11*), ABISELECT(12,8), "S19572C17");
    /*is_ambiguous_... S19572C18::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C18*), ABISELECT(12,8), "S19572C17");
    check_base_class_offset(lv, (S19572C4*)(S19572C3*), 0, "S19572C17");
    check_base_class_offset(lv, (S19572C3*), 0, "S19572C17");
    /*is_ambiguous_... S19572C17::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(64,40), "S19572C17");
    /*is_ambiguous_... S19572C18::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C18*), ABISELECT(64,40), "S19572C17");
    /*is_ambiguous_... S19572C17::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C12*), ABISELECT(64,40), "S19572C17");
    /*is_ambiguous_... S19572C11::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C11*), ABISELECT(64,40), "S19572C17");
    check_base_class_offset(lv, (S19572C10*)(S19572C12*)(S19572C11*), ABISELECT(64,40), "S19572C17");
    /*is_ambiguous_... S19572C18::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C12*)(S19572C18*), ABISELECT(72,44), "S19572C17");
    check_base_class_offset(lv, (S19572C12*)(S19572C11*), ABISELECT(80,48), "S19572C17");
    check_base_class_offset(lv, (S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(88,52), "S19572C17");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(96,56), "S19572C17");
    check_base_class_offset(lv, (S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(96,56), "S19572C17");
    check_base_class_offset(lv, (S19572C13*)(S19572C11*), ABISELECT(88,52), "S19572C17");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C11*), ABISELECT(104,60), "S19572C17");
    check_base_class_offset(lv, (S19572C11*)(S19572C18*), ABISELECT(80,48), "S19572C17");
    /*is_ambiguous_... S19572C18::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C18*), ABISELECT(16,12), "S19572C17");
    check_base_class_offset(lv, (S19572C18*), ABISELECT(16,12), "S19572C17");
    check_field_offset(lv, s19572c17f0, ABISELECT(8,4), "S19572C17.s19572c17f0");
    test_class_info(&lv, &cd_S19572C17);
    dp->~S19572C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C17(Test_S19572C17, "S19572C17", ABISELECT(192,124));

#else // __cplusplus

extern void _ZN9S19572C17C1Ev();
extern void _ZN9S19572C17D2Ev();
Name_Map name_map_S19572C17[] = {
  NSPAIR(_ZN9S19572C17C1Ev),
  NSPAIR(_ZN9S19572C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C3;
extern VTBL_ENTRY _ZTI8S19572C3[];
extern  VTBL_ENTRY _ZTV8S19572C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C3[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C11;
extern VTBL_ENTRY _ZTI9S19572C11[];
extern  VTBL_ENTRY _ZTV9S19572C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C11[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C18;
extern VTBL_ENTRY _ZTI9S19572C18[];
extern  VTBL_ENTRY _ZTV9S19572C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C18[];
static Base_Class bases_S19572C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(12,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_S19572C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19572C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    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
    4, //immediately_derived
  0, 0},
  {&cd_S19572C10,    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
    5, //immediately_derived
  0, 1},
  {&cd_S19572C12,    ABISELECT(72,44), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19572C12,    ABISELECT(80,48), //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
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(88,52), //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
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(96,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_S19572C10,    ABISELECT(96,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
    10, //immediately_derived
  0, 0},
  {&cd_S19572C13,    ABISELECT(88,52), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(104,60), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19572C11,    ABISELECT(80,48), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19572C4,    ABISELECT(16,12), //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
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C18,    ABISELECT(16,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19572C17[];
extern void _ZN9S19572C17D1Ev();
extern void _ZN9S19572C17D0Ev();
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S19572C17D1Ev,_ZThn12_N9S19572C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev)();
extern void ABISELECT(_ZThn16_N9S19572C17D0Ev,_ZThn12_N9S19572C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev)();
extern void ABISELECT(_ZThn80_N9S19572C17D1Ev,_ZThn48_N9S19572C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev)();
extern void ABISELECT(_ZThn80_N9S19572C17D0Ev,_ZThn48_N9S19572C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N9S19572C17D1Ev,_ZTvn4_n20_N9S19572C17D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C17D0Ev,_ZTvn4_n20_N9S19572C17D0Ev)();
static  VTBL_ENTRY vtc_S19572C17[] = {
  ABISELECT(80,48),
  ABISELECT(72,44),
  ABISELECT(64,40),
  ABISELECT(16,12),
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&_ZN9S19572C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C17D0Ev,
  ABISELECT(-16,-12),
  0,
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(48,28),
  -4,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  ABISELECT(-80,-48),
  ABISELECT(-68,-40),
  ABISELECT(-16,-8),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev),
  ABISELECT(-76,-44),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C17D1Ev,_ZTvn4_n20_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C17D0Ev,_ZTvn4_n20_N9S19572C17D0Ev),
  ABISELECT(-92,-52),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
};
extern VTBL_ENTRY _ZTV9S19572C17[];
static  VTBL_ENTRY _tg__ZTV8S19572C3__9S19572C17[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C17[] = {
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void _ZN9S19572C182v3Ev();
extern void _ZN9S19572C18D1Ev();
extern void _ZN9S19572C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C17[] = {
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(48,28),
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&_ZN9S19572C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C18D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C18__A3__9S19572C17[] = {
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C18__9S19572C17[] = {
  ABISELECT(-8,-4),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev)();
extern void ABISELECT(_ZThn64_N9S19572C18D1Ev,_ZThn36_N9S19572C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev)();
extern void ABISELECT(_ZThn64_N9S19572C18D0Ev,_ZThn36_N9S19572C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C18__9S19572C17[] = {
  ABISELECT(-64,-36),
  ABISELECT(-68,-40),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C18D1Ev,_ZTvn4_n20_N9S19572C18D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C18D0Ev,_ZTvn4_n20_N9S19572C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__9S19572C18__9S19572C17[] = {
  ABISELECT(-76,-44),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C18D1Ev,_ZTvn4_n20_N9S19572C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C18D0Ev,_ZTvn4_n20_N9S19572C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A1__9S19572C18__9S19572C17[] = {
  ABISELECT(-92,-52),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C17[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C11D1Ev();
extern void _ZN9S19572C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C17[] = {
  ABISELECT(-68,-40),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&_ZN9S19572C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19572C129S19572C11__A1__9S19572C17[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__9S19572C17[] = {
  ABISELECT(-76,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C139S19572C11__A1__9S19572C17[] = {
  ABISELECT(-76,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A2__9S19572C17[] = {
  ABISELECT(-92,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C11__9S19572C17[] = {
  ABISELECT(-76,-44),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__A1__9S19572C11__9S19572C17[] = {
  ABISELECT(-92,-52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
};
static  VTT_ENTRY vtt_S19572C17[] = {
  {&(_ZTV9S19572C17[9]),  9,40},
  {&(_ZTV9S19572C17[9]),  9,40},
  {&(_ZTV9S19572C17[9]),  9,40},
  {&(_ZTV9S19572C17[19]),  19,40},
  {&(_ZTV9S19572C17[25]),  25,40},
  {&(_ZTV9S19572C17[30]),  30,40},
  {&(_ZTV9S19572C17[35]),  35,40},
  {&(_ZTV9S19572C17[40]),  40,40},
  {&(_tg__ZTV8S19572C3__9S19572C17[4]),  4,4},
  {&(_tg__ZTV8S19572C3__9S19572C17[4]),  4,4},
  {&(_tg__ZTV8S19572C4__9S19572C17[3]),  3,3},
  {&(_tg__ZTV9S19572C18__9S19572C17[6]),  6,9},
  {&(_tg__ZTV8S19572C49S19572C18__A3__9S19572C17[3]),  3,3},
  {&(_tg__ZTV9S19572C12__9S19572C18__9S19572C17[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C18__9S19572C17[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__9S19572C18__9S19572C17[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A1__9S19572C18__9S19572C17[3]),  3,3},
  {&(_tg__ZTV9S19572C12__9S19572C17[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C17[4]),  4,6},
  {&(_tg__ZTV9S19572C129S19572C11__A1__9S19572C17[3]),  3,3},
  {&(_tg__ZTV9S19572C139S19572C11__9S19572C17[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C139S19572C11__A1__9S19572C17[3]),  3,3},
  {&(_tg__ZTV8S19572C49S19572C11__A2__9S19572C17[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C11__9S19572C17[3]),  3,5},
  {&(_tg__ZTV8S19572C4__A1__9S19572C11__9S19572C17[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19572C17[];
extern  VTBL_ENTRY _ZTV9S19572C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C17[];
static VTBL_ENTRY alt_thunk_names23[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19572C18D0Ev,_ZThn36_N9S19572C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19572C18D1Ev,_ZThn36_N9S19572C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19572C17D0Ev,_ZThn48_N9S19572C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19572C17D1Ev,_ZThn48_N9S19572C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19572C17D0Ev,_ZThn12_N9S19572C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19572C17D1Ev,_ZThn12_N9S19572C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19572C17 = {  "S19572C17", // class name
  bases_S19572C17, 15,
  &(vtc_S19572C17[0]), // expected_vtbl_contents
  &(vtt_S19572C17[0]), // expected_vtt_contents
  ABISELECT(192,124), // object size
  NSPAIRA(_ZTI9S19572C17),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19572C17),40, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19572C17),25, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names23,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19572C21  : virtual S19572C5 , virtual S19572C4 {
  ~S19572C21(); // tgen
  S19572C21(); // tgen
};
//SIG(-1 S19572C21) C1{ VBC2{ m Fs:13} VBC3{ VBC2}}


S19572C21 ::~S19572C21(){ note_dtor("S19572C21", this);} // tgen
S19572C21 ::S19572C21(){ note_ctor("S19572C21", this);} // tgen

static void Test_S19572C21()
{
  extern Class_Descriptor cd_S19572C21;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19572C21, buf);
    S19572C21 *dp, &lv = *(dp=new (buf) S19572C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19572C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19572C21)");
    check_base_class_offset(lv, (S19572C5*), ABISELECT(8,4), "S19572C21");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(8,4), "S19572C21");
    check_base_class_offset(lv, (S19572C4*), 0, "S19572C21");
    test_class_info(&lv, &cd_S19572C21);
    dp->~S19572C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C21(Test_S19572C21, "S19572C21", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19572C21C1Ev();
extern void _ZN9S19572C21D1Ev();
Name_Map name_map_S19572C21[] = {
  NSPAIR(_ZN9S19572C21C1Ev),
  NSPAIR(_ZN9S19572C21D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
static Base_Class bases_S19572C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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_S19572C4,    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 _ZTI9S19572C21[];
static  VTBL_ENTRY vtc_S19572C21[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C21[0]),
};
extern VTBL_ENTRY _ZTV9S19572C21[];
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C21[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTT_ENTRY vtt_S19572C21[] = {
  {&(_ZTV9S19572C21[4]),  4,4},
  {&(_ZTV9S19572C21[4]),  4,4},
  {&(_tg__ZTV8S19572C4__9S19572C21[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19572C21[];
extern  VTBL_ENTRY _ZTV9S19572C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C21[];
Class_Descriptor cd_S19572C21 = {  "S19572C21", // class name
  bases_S19572C21, 2,
  &(vtc_S19572C21[0]), // expected_vtbl_contents
  &(vtt_S19572C21[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19572C21),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19572C21),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19572C21),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  S19572C16  : virtual S19572C13 , virtual S19572C12 , S19572C17 , S19572C21 , virtual S629C14 {
  ~S19572C16(); // tgen
  S19572C16(); // tgen
};
//SIG(-1 S19572C16) C1{ VBC2{ BC3{ VBC4{ m Fs:13}} BC5{ BC4} vd} VBC6{ VBC5} BC7{ VBC4 VBC8{ VBC3} VBC9{ VBC5 VBC6 VBC10{ VBC4 VBC5 BC6 BC2 BC3 vd FD[5]} BC3 v1 FC11{ VBC12{ VBC4} VBC3 BC4 VBC5 vd Fi}} vd Fi} BC13{ VBC4 VBC3} VBC14{ m}}


S19572C16 ::~S19572C16(){ note_dtor("S19572C16", this);} // tgen
S19572C16 ::S19572C16(){ note_ctor("S19572C16", this);} // tgen

static void Test_S19572C16()
{
  extern Class_Descriptor cd_S19572C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,34)];
    init_test(&cd_S19572C16, buf);
    S19572C16 *dp, &lv = *(dp=new (buf) S19572C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,132), "sizeof(S19572C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19572C16)");
    /*is_ambiguous_... S19572C16::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*), ABISELECT(34,18), "S19572C16");
    /*is_ambiguous_... S19572C17::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C17*), ABISELECT(34,18), "S19572C16");
    /*is_ambiguous_... S19572C16::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(34,18), "S19572C16");
    /*is_ambiguous_... S19572C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C11*), ABISELECT(34,18), "S19572C16");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(34,18), "S19572C16");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C11*), ABISELECT(34,18), "S19572C16");
    /*is_ambiguous_... S19572C18::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C18*), ABISELECT(34,18), "S19572C16");
    check_base_class_offset(lv, (S19572C5*)(S19572C21*), ABISELECT(34,18), "S19572C16");
    /*is_ambiguous_... S19572C16::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C13*), ABISELECT(24,12), "S19572C16");
    /*is_ambiguous_... S19572C16::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*), ABISELECT(32,16), "S19572C16");
    /*is_ambiguous_... S19572C16::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C13*), ABISELECT(32,16), "S19572C16");
    /*is_ambiguous_... S19572C16::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C13*), ABISELECT(24,12), "S19572C16");
    /*is_ambiguous_... S19572C16::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(48,24), "S19572C16");
    /*is_ambiguous_... S19572C16::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C12*), ABISELECT(48,24), "S19572C16");
    /*is_ambiguous_... S19572C18::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C18*), ABISELECT(48,24), "S19572C16");
    /*is_ambiguous_... S19572C11::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C11*), ABISELECT(48,24), "S19572C16");
    check_base_class_offset(lv, (S19572C10*)(S19572C12*)(S19572C11*), ABISELECT(48,24), "S19572C16");
    /*is_ambiguous_... S19572C16::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C12*), ABISELECT(40,20), "S19572C16");
    /*is_ambiguous_... S19572C18::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C12*)(S19572C18*), ABISELECT(40,20), "S19572C16");
    check_base_class_offset(lv, (S19572C4*)(S19572C3*), 0, "S19572C16");
    check_base_class_offset(lv, (S19572C4*)(S19572C21*), 0, "S19572C16");
    check_base_class_offset(lv, (S19572C3*)(S19572C17*), 0, "S19572C16");
    check_base_class_offset(lv, (S19572C12*)(S19572C11*), ABISELECT(112,56), "S19572C16");
    check_base_class_offset(lv, (S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(120,60), "S19572C16");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(128,64), "S19572C16");
    check_base_class_offset(lv, (S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(128,64), "S19572C16");
    check_base_class_offset(lv, (S19572C13*)(S19572C11*), ABISELECT(120,60), "S19572C16");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C11*), ABISELECT(136,68), "S19572C16");
    check_base_class_offset(lv, (S19572C11*)(S19572C18*), ABISELECT(112,56), "S19572C16");
    /*is_ambiguous_... S19572C18::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C18*), ABISELECT(56,28), "S19572C16");
    check_base_class_offset(lv, (S19572C18*)(S19572C17*), ABISELECT(56,28), "S19572C16");
    check_base_class_offset(lv, (S19572C17*), 0, "S19572C16");
    check_base_class_offset(lv, (S19572C21*), ABISELECT(16,8), "S19572C16");
    check_base_class_offset(lv, (S629C14*), 0, "S19572C16");
    test_class_info(&lv, &cd_S19572C16);
    dp->~S19572C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C16(Test_S19572C16, "S19572C16", ABISELECT(224,132));

#else // __cplusplus

extern void _ZN9S19572C16C1Ev();
extern void _ZN9S19572C16D1Ev();
Name_Map name_map_S19572C16[] = {
  NSPAIR(_ZN9S19572C16C1Ev),
  NSPAIR(_ZN9S19572C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C3;
extern VTBL_ENTRY _ZTI8S19572C3[];
extern  VTBL_ENTRY _ZTV8S19572C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C3[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C11;
extern VTBL_ENTRY _ZTI9S19572C11[];
extern  VTBL_ENTRY _ZTV9S19572C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C11[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C18;
extern VTBL_ENTRY _ZTI9S19572C18[];
extern  VTBL_ENTRY _ZTV9S19572C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C18[];
extern Class_Descriptor cd_S19572C17;
extern VTBL_ENTRY _ZTI9S19572C17[];
extern  VTBL_ENTRY _ZTV9S19572C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C17[];
extern Class_Descriptor cd_S19572C21;
extern VTBL_ENTRY _ZTI9S19572C21[];
extern  VTBL_ENTRY _ZTV9S19572C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C21[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
static Base_Class bases_S19572C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(34,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19572C4,    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
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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_S19572C10,    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
    4, //immediately_derived
  0, 0},
  {&cd_S19572C13,    ABISELECT(24,12), //bcp->offset
    17, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    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_S19572C10,    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
    7, //immediately_derived
  0, 1},
  {&cd_S19572C12,    ABISELECT(40,20), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19572C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19572C12,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(120,60), //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
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    13, //immediately_derived
  0, 0},
  {&cd_S19572C10,    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
    14, //immediately_derived
  0, 0},
  {&cd_S19572C13,    ABISELECT(120,60), //bcp->offset
    44, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(136,68), //bcp->offset
    49, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19572C11,    ABISELECT(112,56), //bcp->offset
    37, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19572C4,    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
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19572C18,    ABISELECT(56,28), //bcp->offset
    26, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19572C17,    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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19572C21,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S629C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S19572C16[];
extern void _ZN9S19572C16D1Ev();
extern void _ZN9S19572C16D0Ev();
extern void ABISELECT(_ZTv0_n32_N9S19572C16D1Ev,_ZTv0_n16_N9S19572C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S19572C16D1Ev,_ZThn12_N9S19572C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19572C16D0Ev,_ZTv0_n16_N9S19572C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S19572C16D0Ev,_ZThn12_N9S19572C16D0Ev)() __attribute__((weak));
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C16D1Ev,_ZTv0_n32_N9S19572C16D1Ev)();
extern void ABISELECT(_ZThn56_N9S19572C16D1Ev,_ZThn28_N9S19572C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C16D0Ev,_ZTv0_n32_N9S19572C16D0Ev)();
extern void ABISELECT(_ZThn56_N9S19572C16D0Ev,_ZThn28_N9S19572C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C16D1Ev,_ZTv0_n20_N9S19572C16D1Ev)();
extern void ABISELECT(_ZThn112_N9S19572C16D1Ev,_ZThn56_N9S19572C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C16D0Ev,_ZTv0_n20_N9S19572C16D0Ev)();
extern void ABISELECT(_ZThn112_N9S19572C16D0Ev,_ZThn56_N9S19572C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N9S19572C16D1Ev,_ZTvn4_n20_N9S19572C16D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C16D0Ev,_ZTvn4_n20_N9S19572C16D0Ev)();
static  VTBL_ENTRY vtc_S19572C16[] = {
  0,
  ABISELECT(24,12),
  ABISELECT(112,56),
  ABISELECT(40,20),
  ABISELECT(48,24),
  ABISELECT(56,28),
  0,
  0,
  ABISELECT(34,18),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&_ZN9S19572C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C16D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(18,10),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  ABISELECT(-24,-12),
  ABISELECT(10,6),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C16D1Ev,_ZTv0_n16_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C16D0Ev,_ZTv0_n16_N9S19572C16D0Ev),
  ABISELECT(8,4),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  ABISELECT(-56,-28),
  0,
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  ABISELECT(-22,-10),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C16D1Ev,_ZTv0_n32_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C16D0Ev,_ZTv0_n32_N9S19572C16D0Ev),
  ABISELECT(-112,-56),
  ABISELECT(-78,-38),
  ABISELECT(-64,-32),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C16D1Ev,_ZTv0_n20_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C16D0Ev,_ZTv0_n20_N9S19572C16D0Ev),
  ABISELECT(-86,-42),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C16D1Ev,_ZTvn4_n20_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C16D0Ev,_ZTvn4_n20_N9S19572C16D0Ev),
  ABISELECT(-102,-50),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
};
extern VTBL_ENTRY _ZTV9S19572C16[];
extern void _ZN9S19572C17D1Ev();
extern void _ZN9S19572C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C17__9S19572C16[] = {
  ABISELECT(112,56),
  ABISELECT(40,20),
  ABISELECT(48,24),
  ABISELECT(56,28),
  0,
  0,
  ABISELECT(34,18),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&_ZN9S19572C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C17D0Ev,
};
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev)();
extern void ABISELECT(_ZThn56_N9S19572C17D1Ev,_ZThn28_N9S19572C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev)();
extern void ABISELECT(_ZThn56_N9S19572C17D0Ev,_ZThn28_N9S19572C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C17__9S19572C16[] = {
  ABISELECT(-56,-28),
  0,
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  ABISELECT(-22,-10),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C17__9S19572C16[] = {
  ABISELECT(8,4),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev)();
extern void ABISELECT(_ZThn112_N9S19572C17D1Ev,_ZThn56_N9S19572C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev)();
extern void ABISELECT(_ZThn112_N9S19572C17D0Ev,_ZThn56_N9S19572C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C17__9S19572C16[] = {
  ABISELECT(-112,-56),
  ABISELECT(-78,-38),
  ABISELECT(-64,-32),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C17D1Ev,_ZTvn4_n20_N9S19572C17D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C17D0Ev,_ZTvn4_n20_N9S19572C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__9S19572C17__9S19572C16[] = {
  ABISELECT(-86,-42),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C17D1Ev,_ZTvn4_n20_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C17D0Ev,_ZTvn4_n20_N9S19572C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A2__9S19572C17__9S19572C16[] = {
  ABISELECT(-102,-50),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C21__9S19572C16[] = {
  ABISELECT(-16,-8),
  ABISELECT(18,10),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C21__9S19572C16[] = {
  ABISELECT(34,18),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19572C21[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C16[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C13__9S19572C16[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C16[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C3__9S19572C16[] = {
  0,
  ABISELECT(34,18),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__A1__9S19572C16[] = {
  ABISELECT(34,18),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void _ZN9S19572C182v3Ev();
extern void _ZN9S19572C18D1Ev();
extern void _ZN9S19572C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C16[] = {
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  ABISELECT(-22,-10),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&_ZN9S19572C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C18D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C18__A4__9S19572C16[] = {
  ABISELECT(-22,-10),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C18__9S19572C16[] = {
  ABISELECT(8,4),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev)();
extern void ABISELECT(_ZThn56_N9S19572C18D1Ev,_ZThn28_N9S19572C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev)();
extern void ABISELECT(_ZThn56_N9S19572C18D0Ev,_ZThn28_N9S19572C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C18__9S19572C16[] = {
  ABISELECT(-56,-28),
  ABISELECT(-78,-38),
  ABISELECT(-64,-32),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C18D1Ev,_ZTvn4_n20_N9S19572C18D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C18D0Ev,_ZTvn4_n20_N9S19572C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__9S19572C18__9S19572C16[] = {
  ABISELECT(-86,-42),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C18D1Ev,_ZTvn4_n20_N9S19572C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C18D0Ev,_ZTvn4_n20_N9S19572C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A1__9S19572C18__9S19572C16[] = {
  ABISELECT(-102,-50),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
};
extern void _ZN9S19572C11D1Ev();
extern void _ZN9S19572C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C16[] = {
  ABISELECT(-78,-38),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&_ZN9S19572C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19572C129S19572C11__A1__9S19572C16[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__A1__9S19572C16[] = {
  ABISELECT(-86,-42),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C139S19572C11__A2__9S19572C16[] = {
  ABISELECT(-86,-42),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A3__9S19572C16[] = {
  ABISELECT(-102,-50),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C11__9S19572C16[] = {
  ABISELECT(-86,-42),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__A1__9S19572C11__9S19572C16[] = {
  ABISELECT(-102,-50),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
};
static  VTT_ENTRY vtt_S19572C16[] = {
  {&(_ZTV9S19572C16[11]),  11,52},
  {&(_tg__ZTV9S19572C17__9S19572C16[9]),  9,11},
  {&(_tg__ZTV9S19572C17__9S19572C16[9]),  9,11},
  {&(_tg__ZTV9S19572C17__9S19572C16[9]),  9,11},
  {&(_tg__ZTV9S19572C18__9S19572C17__9S19572C16[8]),  8,11},
  {&(_tg__ZTV9S19572C12__9S19572C17__9S19572C16[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C17__9S19572C16[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__9S19572C17__9S19572C16[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A2__9S19572C17__9S19572C16[3]),  3,3},
  {&(_tg__ZTV9S19572C21__9S19572C16[4]),  4,4},
  {&(_tg__ZTV8S19572C4__9S19572C21__9S19572C16[3]),  3,3},
  {&(_ZTV9S19572C16[21]),  21,52},
  {&(_ZTV9S19572C16[26]),  26,52},
  {&(_ZTV9S19572C16[11]),  11,52},
  {&(_ZTV9S19572C16[11]),  11,52},
  {&(_ZTV9S19572C16[34]),  34,52},
  {&(_ZTV9S19572C16[42]),  42,52},
  {&(_ZTV9S19572C16[47]),  47,52},
  {&(_ZTV9S19572C16[52]),  52,52},
  {&(_ZTV9S19572C16[17]),  17,52},
  {&(_tg__ZTV9S19572C13__9S19572C16[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C13__9S19572C16[3]),  3,3},
  {&(_tg__ZTV9S19572C12__9S19572C16[3]),  3,3},
  {&(_tg__ZTV8S19572C3__9S19572C16[4]),  4,4},
  {&(_tg__ZTV8S19572C3__9S19572C16[4]),  4,4},
  {&(_tg__ZTV8S19572C4__A1__9S19572C16[3]),  3,3},
  {&(_tg__ZTV9S19572C18__9S19572C16[6]),  6,9},
  {&(_tg__ZTV8S19572C49S19572C18__A4__9S19572C16[3]),  3,3},
  {&(_tg__ZTV9S19572C12__9S19572C18__9S19572C16[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C18__9S19572C16[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__9S19572C18__9S19572C16[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A1__9S19572C18__9S19572C16[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C16[4]),  4,6},
  {&(_tg__ZTV9S19572C129S19572C11__A1__9S19572C16[3]),  3,3},
  {&(_tg__ZTV9S19572C139S19572C11__A1__9S19572C16[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C139S19572C11__A2__9S19572C16[3]),  3,3},
  {&(_tg__ZTV8S19572C49S19572C11__A3__9S19572C16[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C11__9S19572C16[3]),  3,5},
  {&(_tg__ZTV8S19572C4__A1__9S19572C11__9S19572C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19572C16[];
extern  VTBL_ENTRY _ZTV9S19572C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C16[];
static VTBL_ENTRY alt_thunk_names24[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19572C18D0Ev,_ZThn28_N9S19572C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19572C18D1Ev,_ZThn28_N9S19572C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19572C17D0Ev,_ZThn56_N9S19572C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19572C17D1Ev,_ZThn56_N9S19572C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19572C17D0Ev,_ZThn28_N9S19572C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19572C17D1Ev,_ZThn28_N9S19572C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C16D0Ev,_ZTv0_n20_N9S19572C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19572C16D0Ev,_ZThn56_N9S19572C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C16D1Ev,_ZTv0_n20_N9S19572C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19572C16D1Ev,_ZThn56_N9S19572C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C16D0Ev,_ZTv0_n32_N9S19572C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19572C16D0Ev,_ZThn28_N9S19572C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C16D1Ev,_ZTv0_n32_N9S19572C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19572C16D1Ev,_ZThn28_N9S19572C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C16D0Ev,_ZTv0_n16_N9S19572C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C16D0Ev,_ZThn12_N9S19572C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C16D1Ev,_ZTv0_n16_N9S19572C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C16D1Ev,_ZThn12_N9S19572C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19572C16 = {  "S19572C16", // class name
  bases_S19572C16, 22,
  &(vtc_S19572C16[0]), // expected_vtbl_contents
  &(vtt_S19572C16[0]), // expected_vtt_contents
  ABISELECT(224,132), // object size
  NSPAIRA(_ZTI9S19572C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19572C16),52, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19572C16),39, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names24,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19572C15  : virtual S19572C4 , virtual S19572C16 , S629C14 {
  virtual  ~S19572C15(); // _ZN9S19572C15D2Ev
  S19572C15(); // tgen
};
//SIG(-1 S19572C15) C1{ VBC2{ VBC3{ m Fs:13}} VBC4{ VBC5{ BC2 BC6{ BC3} vd} VBC7{ VBC6} BC8{ VBC3 VBC9{ VBC2} VBC10{ VBC6 VBC7 VBC11{ VBC3 VBC6 BC7 BC5 BC2 vd FD[5]} BC2 v1 FC12{ VBC13{ VBC3} VBC2 BC3 VBC6 vd Fi}} vd Fi} BC14{ VBC3 VBC2} VBC15{ m}} BC15 vd}


 S19572C15 ::~S19572C15(){ note_dtor("S19572C15", this);}
S19572C15 ::S19572C15(){ note_ctor("S19572C15", this);} // tgen

static void Test_S19572C15()
{
  extern Class_Descriptor cd_S19572C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,35)];
    init_test(&cd_S19572C15, buf);
    S19572C15 *dp, &lv = *(dp=new (buf) S19572C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,136), "sizeof(S19572C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19572C15)");
    /*is_ambiguous_... S19572C15::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(8,4), "S19572C15");
    /*is_ambiguous_... S19572C15::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*), ABISELECT(8,4), "S19572C15");
    /*is_ambiguous_... S19572C17::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C17*)(S19572C16*), ABISELECT(8,4), "S19572C15");
    /*is_ambiguous_... S19572C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C11*), ABISELECT(8,4), "S19572C15");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(8,4), "S19572C15");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C11*), ABISELECT(8,4), "S19572C15");
    /*is_ambiguous_... S19572C18::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C18*), ABISELECT(8,4), "S19572C15");
    check_base_class_offset(lv, (S19572C5*)(S19572C21*)(S19572C16*), ABISELECT(8,4), "S19572C15");
    /*is_ambiguous_... S19572C15::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*), ABISELECT(16,8), "S19572C15");
    check_base_class_offset(lv, (S19572C4*)(S19572C3*), ABISELECT(16,8), "S19572C15");
    check_base_class_offset(lv, (S19572C4*)(S19572C21*)(S19572C16*), ABISELECT(16,8), "S19572C15");
    /*is_ambiguous_... S19572C15::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C13*), ABISELECT(40,20), "S19572C15");
    /*is_ambiguous_... S19572C15::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*), ABISELECT(48,24), "S19572C15");
    /*is_ambiguous_... S19572C15::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C13*), ABISELECT(48,24), "S19572C15");
    /*is_ambiguous_... S19572C16::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C13*)(S19572C16*), ABISELECT(40,20), "S19572C15");
    /*is_ambiguous_... S19572C15::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(50,26), "S19572C15");
    /*is_ambiguous_... S19572C15::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C12*), ABISELECT(50,26), "S19572C15");
    /*is_ambiguous_... S19572C18::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C18*), ABISELECT(50,26), "S19572C15");
    /*is_ambiguous_... S19572C11::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C11*), ABISELECT(50,26), "S19572C15");
    check_base_class_offset(lv, (S19572C10*)(S19572C12*)(S19572C11*), ABISELECT(50,26), "S19572C15");
    /*is_ambiguous_... S19572C16::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C12*)(S19572C16*), 0, "S19572C15");
    /*is_ambiguous_... S19572C18::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C12*)(S19572C18*), 0, "S19572C15");
    check_base_class_offset(lv, (S19572C3*)(S19572C17*)(S19572C16*), ABISELECT(16,8), "S19572C15");
    check_base_class_offset(lv, (S19572C12*)(S19572C11*), ABISELECT(112,56), "S19572C15");
    check_base_class_offset(lv, (S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(120,60), "S19572C15");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(128,64), "S19572C15");
    check_base_class_offset(lv, (S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(128,64), "S19572C15");
    check_base_class_offset(lv, (S19572C13*)(S19572C11*), ABISELECT(120,60), "S19572C15");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C11*), ABISELECT(136,68), "S19572C15");
    check_base_class_offset(lv, (S19572C11*)(S19572C18*), ABISELECT(112,56), "S19572C15");
    /*is_ambiguous_... S19572C18::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C18*), ABISELECT(56,28), "S19572C15");
    check_base_class_offset(lv, (S19572C18*)(S19572C17*)(S19572C16*), ABISELECT(56,28), "S19572C15");
    check_base_class_offset(lv, (S19572C17*)(S19572C16*), ABISELECT(16,8), "S19572C15");
    check_base_class_offset(lv, (S19572C21*)(S19572C16*), ABISELECT(32,16), "S19572C15");
    check_base_class_offset(lv, (S629C14*)(S19572C16*), ABISELECT(224,132), "S19572C15");
    check_base_class_offset(lv, (S19572C16*), ABISELECT(16,8), "S19572C15");
    /*is_ambiguous_... S19572C15::S629C14 */ AMB_check_base_class_offset(lv, (S629C14*), 0, "S19572C15");
    test_class_info(&lv, &cd_S19572C15);
    dp->~S19572C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C15(Test_S19572C15, "S19572C15", ABISELECT(240,136));

#else // __cplusplus

extern void _ZN9S19572C15C1Ev();
extern void _ZN9S19572C15D2Ev();
Name_Map name_map_S19572C15[] = {
  NSPAIR(_ZN9S19572C15C1Ev),
  NSPAIR(_ZN9S19572C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C3;
extern VTBL_ENTRY _ZTI8S19572C3[];
extern  VTBL_ENTRY _ZTV8S19572C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C3[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C11;
extern VTBL_ENTRY _ZTI9S19572C11[];
extern  VTBL_ENTRY _ZTV9S19572C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C11[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C18;
extern VTBL_ENTRY _ZTI9S19572C18[];
extern  VTBL_ENTRY _ZTV9S19572C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C18[];
extern Class_Descriptor cd_S19572C17;
extern VTBL_ENTRY _ZTI9S19572C17[];
extern  VTBL_ENTRY _ZTV9S19572C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C17[];
extern Class_Descriptor cd_S19572C21;
extern VTBL_ENTRY _ZTI9S19572C21[];
extern  VTBL_ENTRY _ZTV9S19572C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C21[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S19572C16;
extern VTBL_ENTRY _ZTI9S19572C16[];
extern  VTBL_ENTRY _ZTV9S19572C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C16[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
static Base_Class bases_S19572C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
  0, 1},
  {&cd_S19572C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C4,    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
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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_S19572C10,    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_S19572C13,    ABISELECT(40,20), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19572C5,    ABISELECT(50,26), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19572C10,    ABISELECT(50,26), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19572C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19572C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19572C12,    ABISELECT(112,56), //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
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(120,60), //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
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    13, //immediately_derived
  0, 0},
  {&cd_S19572C10,    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
    14, //immediately_derived
  0, 0},
  {&cd_S19572C13,    ABISELECT(120,60), //bcp->offset
    56, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(136,68), //bcp->offset
    61, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19572C11,    ABISELECT(112,56), //bcp->offset
    49, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19572C4,    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
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19572C18,    ABISELECT(56,28), //bcp->offset
    38, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19572C17,    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
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19572C21,    ABISELECT(32,16), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S629C14,    ABISELECT(224,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
    22, //immediately_derived
  0, 1},
  {&cd_S19572C16,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S629C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19572C15[];
extern void _ZN9S19572C15D1Ev();
extern void _ZN9S19572C15D0Ev();
extern void ABISELECT(_ZTv0_n96_N9S19572C15D1Ev,_ZTv0_n48_N9S19572C15D1Ev)();
extern void ABISELECT(_ZThn16_N9S19572C15D1Ev,_ZThn8_N9S19572C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19572C15D0Ev,_ZTv0_n48_N9S19572C15D0Ev)();
extern void ABISELECT(_ZThn16_N9S19572C15D0Ev,_ZThn8_N9S19572C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19572C15D1Ev,_ZTv0_n16_N9S19572C15D1Ev)();
extern void ABISELECT(_ZThn40_N9S19572C15D1Ev,_ZThn20_N9S19572C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19572C15D0Ev,_ZTv0_n16_N9S19572C15D0Ev)();
extern void ABISELECT(_ZThn40_N9S19572C15D0Ev,_ZThn20_N9S19572C15D0Ev)() __attribute__((weak));
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C15D1Ev,_ZTv0_n32_N9S19572C15D1Ev)();
extern void ABISELECT(_ZThn56_N9S19572C15D1Ev,_ZThn28_N9S19572C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C15D0Ev,_ZTv0_n32_N9S19572C15D0Ev)();
extern void ABISELECT(_ZThn56_N9S19572C15D0Ev,_ZThn28_N9S19572C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C15D1Ev,_ZTv0_n20_N9S19572C15D1Ev)();
extern void ABISELECT(_ZThn112_N9S19572C15D1Ev,_ZThn56_N9S19572C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C15D0Ev,_ZTv0_n20_N9S19572C15D0Ev)();
extern void ABISELECT(_ZThn112_N9S19572C15D0Ev,_ZThn56_N9S19572C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N9S19572C15D1Ev,_ZTvn4_n20_N9S19572C15D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C15D0Ev,_ZTvn4_n20_N9S19572C15D0Ev)();
static  VTBL_ENTRY vtc_S19572C15[] = {
  ABISELECT(224,132),
  ABISELECT(112,56),
  ABISELECT(56,28),
  ABISELECT(16,8),
  0,
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(8,4),
  ABISELECT(16,8),
  ABISELECT(50,26),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&_ZN9S19572C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C15D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(208,124),
  ABISELECT(24,12),
  ABISELECT(96,48),
  ABISELECT(-16,-8),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19572C15D1Ev,_ZTv0_n48_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19572C15D0Ev,_ZTv0_n48_N9S19572C15D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  ABISELECT(-40,-20),
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C15D1Ev,_ZTv0_n16_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C15D0Ev,_ZTv0_n16_N9S19572C15D0Ev),
  ABISELECT(-56,-28),
  0,
  ABISELECT(56,28),
  ABISELECT(-56,-28),
  ABISELECT(-6,-2),
  ABISELECT(-48,-24),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C15D1Ev,_ZTv0_n32_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C15D0Ev,_ZTv0_n32_N9S19572C15D0Ev),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-62,-30),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C15D1Ev,_ZTv0_n20_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C15D0Ev,_ZTv0_n20_N9S19572C15D0Ev),
  ABISELECT(-112,-56),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C15D1Ev,_ZTvn4_n20_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C15D0Ev,_ZTvn4_n20_N9S19572C15D0Ev),
  ABISELECT(-128,-64),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
};
extern VTBL_ENTRY _ZTV9S19572C15[];
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C15[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void _ZN9S19572C16D1Ev();
extern void _ZN9S19572C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C16__9S19572C15[] = {
  ABISELECT(208,124),
  ABISELECT(24,12),
  ABISELECT(96,48),
  ABISELECT(-16,-8),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&_ZN9S19572C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C16D0Ev,
};
extern void _ZN9S19572C17D1Ev();
extern void _ZN9S19572C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C179S19572C16__9S19572C15[] = {
  ABISELECT(96,48),
  ABISELECT(-16,-8),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&_ZN9S19572C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C17D0Ev,
};
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev)();
extern void ABISELECT(_ZThn40_N9S19572C17D1Ev,_ZThn20_N9S19572C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev)();
extern void ABISELECT(_ZThn40_N9S19572C17D0Ev,_ZThn20_N9S19572C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C179S19572C16__9S19572C15[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(56,28),
  ABISELECT(-56,-28),
  ABISELECT(-6,-2),
  ABISELECT(-48,-24),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C179S19572C16__9S19572C15[] = {
  ABISELECT(50,26),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev)();
extern void ABISELECT(_ZThn96_N9S19572C17D1Ev,_ZThn48_N9S19572C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev)();
extern void ABISELECT(_ZThn96_N9S19572C17D0Ev,_ZThn48_N9S19572C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C179S19572C16__9S19572C15[] = {
  ABISELECT(-96,-48),
  ABISELECT(-104,-52),
  ABISELECT(-62,-30),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C17D1Ev,_ZTvn4_n20_N9S19572C17D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C17D0Ev,_ZTvn4_n20_N9S19572C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__9S19572C179S19572C16__9S19572C15[] = {
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C17D1Ev,_ZTvn4_n20_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C17D0Ev,_ZTvn4_n20_N9S19572C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A2__9S19572C179S19572C16__9S19572C15[] = {
  ABISELECT(-128,-64),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C219S19572C16__9S19572C15[] = {
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C219S19572C16__9S19572C15[] = {
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19572C21[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19572C16D1Ev,_ZTv0_n16_N9S19572C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S19572C16D1Ev,_ZThn12_N9S19572C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19572C16D0Ev,_ZTv0_n16_N9S19572C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S19572C16D0Ev,_ZThn12_N9S19572C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C16__9S19572C15[] = {
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C16D1Ev,_ZTv0_n16_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C16D0Ev,_ZTv0_n16_N9S19572C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C16__9S19572C15[] = {
  ABISELECT(50,26),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
};
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C16D1Ev,_ZTv0_n32_N9S19572C16D1Ev)();
extern void ABISELECT(_ZThn40_N9S19572C16D1Ev,_ZThn20_N9S19572C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C16D0Ev,_ZTv0_n32_N9S19572C16D0Ev)();
extern void ABISELECT(_ZThn40_N9S19572C16D0Ev,_ZThn20_N9S19572C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C16__9S19572C15[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(56,28),
  ABISELECT(-56,-28),
  ABISELECT(-6,-2),
  ABISELECT(-48,-24),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C16D1Ev,_ZTv0_n32_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C16D0Ev,_ZTv0_n32_N9S19572C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C16D1Ev,_ZTv0_n20_N9S19572C16D1Ev)();
extern void ABISELECT(_ZThn96_N9S19572C16D1Ev,_ZThn48_N9S19572C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C16D0Ev,_ZTv0_n20_N9S19572C16D0Ev)();
extern void ABISELECT(_ZThn96_N9S19572C16D0Ev,_ZThn48_N9S19572C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C16__9S19572C15[] = {
  ABISELECT(-96,-48),
  ABISELECT(-104,-52),
  ABISELECT(-62,-30),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C16D1Ev,_ZTv0_n20_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C16D0Ev,_ZTv0_n20_N9S19572C16D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C16D1Ev,_ZTvn4_n20_N9S19572C16D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C16D0Ev,_ZTvn4_n20_N9S19572C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__A1__9S19572C16__9S19572C15[] = {
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C16D1Ev,_ZTvn4_n20_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C16D0Ev,_ZTvn4_n20_N9S19572C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A3__9S19572C16__9S19572C15[] = {
  ABISELECT(-128,-64),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C21__9S19572C16__9S19572C15[] = {
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C15[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C13__A1__9S19572C15[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C15[] = {
  ABISELECT(50,26),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C3__9S19572C15[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C3[0]),
};
extern void _ZN9S19572C182v3Ev();
extern void _ZN9S19572C18D1Ev();
extern void _ZN9S19572C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C15[] = {
  ABISELECT(56,28),
  ABISELECT(-56,-28),
  ABISELECT(-6,-2),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&_ZN9S19572C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C18D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C18__A4__9S19572C15[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C18__9S19572C15[] = {
  ABISELECT(50,26),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev)();
extern void ABISELECT(_ZThn56_N9S19572C18D1Ev,_ZThn28_N9S19572C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev)();
extern void ABISELECT(_ZThn56_N9S19572C18D0Ev,_ZThn28_N9S19572C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C18__9S19572C15[] = {
  ABISELECT(-56,-28),
  ABISELECT(-104,-52),
  ABISELECT(-62,-30),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C18D1Ev,_ZTvn4_n20_N9S19572C18D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C18D0Ev,_ZTvn4_n20_N9S19572C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__9S19572C18__9S19572C15[] = {
  ABISELECT(-112,-56),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C18D1Ev,_ZTvn4_n20_N9S19572C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C18D0Ev,_ZTvn4_n20_N9S19572C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A1__9S19572C18__9S19572C15[] = {
  ABISELECT(-128,-64),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
};
extern void _ZN9S19572C11D1Ev();
extern void _ZN9S19572C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C15[] = {
  ABISELECT(-104,-52),
  ABISELECT(-62,-30),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&_ZN9S19572C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19572C129S19572C11__A1__9S19572C15[] = {
  ABISELECT(-62,-30),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__A1__9S19572C15[] = {
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C139S19572C11__A2__9S19572C15[] = {
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A3__9S19572C15[] = {
  ABISELECT(-128,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C11__9S19572C15[] = {
  ABISELECT(-112,-56),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__A1__9S19572C11__9S19572C15[] = {
  ABISELECT(-128,-64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
};
static  VTT_ENTRY vtt_S19572C15[] = {
  {&(_ZTV9S19572C15[12]),  12,64},
  {&(_ZTV9S19572C15[26]),  26,64},
  {&(_ZTV9S19572C15[26]),  26,64},
  {&(_ZTV9S19572C15[36]),  36,64},
  {&(_ZTV9S19572C15[12]),  12,64},
  {&(_ZTV9S19572C15[26]),  26,64},
  {&(_ZTV9S19572C15[46]),  46,64},
  {&(_ZTV9S19572C15[54]),  54,64},
  {&(_ZTV9S19572C15[59]),  59,64},
  {&(_ZTV9S19572C15[64]),  64,64},
  {&(_ZTV9S19572C15[32]),  32,64},
  {&(_tg__ZTV8S19572C4__9S19572C15[3]),  3,3},
  {&(_tg__ZTV9S19572C16__9S19572C15[11]),  11,13},
  {&(_tg__ZTV9S19572C179S19572C16__9S19572C15[9]),  9,11},
  {&(_tg__ZTV9S19572C179S19572C16__9S19572C15[9]),  9,11},
  {&(_tg__ZTV9S19572C179S19572C16__9S19572C15[9]),  9,11},
  {&(_tg__ZTV9S19572C18__9S19572C179S19572C16__9S19572C15[8]),  8,11},
  {&(_tg__ZTV9S19572C12__9S19572C179S19572C16__9S19572C15[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C179S19572C16__9S19572C15[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__9S19572C179S19572C16__9S19572C15[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A2__9S19572C179S19572C16__9S19572C15[3]),  3,3},
  {&(_tg__ZTV9S19572C219S19572C16__9S19572C15[4]),  4,4},
  {&(_tg__ZTV8S19572C4__9S19572C219S19572C16__9S19572C15[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C16__9S19572C15[4]),  4,6},
  {&(_tg__ZTV9S19572C12__9S19572C16__9S19572C15[3]),  3,3},
  {&(_tg__ZTV9S19572C16__9S19572C15[11]),  11,13},
  {&(_tg__ZTV9S19572C16__9S19572C15[11]),  11,13},
  {&(_tg__ZTV9S19572C18__9S19572C16__9S19572C15[8]),  8,11},
  {&(_tg__ZTV9S19572C11__9S19572C16__9S19572C15[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__A1__9S19572C16__9S19572C15[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A3__9S19572C16__9S19572C15[3]),  3,3},
  {&(_tg__ZTV9S19572C21__9S19572C16__9S19572C15[4]),  4,4},
  {&(_tg__ZTV9S19572C13__9S19572C15[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C13__A1__9S19572C15[3]),  3,3},
  {&(_tg__ZTV9S19572C12__9S19572C15[3]),  3,3},
  {&(_tg__ZTV8S19572C3__9S19572C15[4]),  4,4},
  {&(_tg__ZTV8S19572C3__9S19572C15[4]),  4,4},
  {&(_tg__ZTV9S19572C18__9S19572C15[6]),  6,9},
  {&(_tg__ZTV8S19572C49S19572C18__A4__9S19572C15[3]),  3,3},
  {&(_tg__ZTV9S19572C12__9S19572C18__9S19572C15[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C18__9S19572C15[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__9S19572C18__9S19572C15[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A1__9S19572C18__9S19572C15[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C15[4]),  4,6},
  {&(_tg__ZTV9S19572C129S19572C11__A1__9S19572C15[3]),  3,3},
  {&(_tg__ZTV9S19572C139S19572C11__A1__9S19572C15[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C139S19572C11__A2__9S19572C15[3]),  3,3},
  {&(_tg__ZTV8S19572C49S19572C11__A3__9S19572C15[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C11__9S19572C15[3]),  3,5},
  {&(_tg__ZTV8S19572C4__A1__9S19572C11__9S19572C15[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19572C15[];
extern  VTBL_ENTRY _ZTV9S19572C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C15[];
static VTBL_ENTRY alt_thunk_names25[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19572C18D0Ev,_ZThn28_N9S19572C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19572C18D1Ev,_ZThn28_N9S19572C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C16D0Ev,_ZTv0_n20_N9S19572C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19572C16D0Ev,_ZThn48_N9S19572C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C16D1Ev,_ZTv0_n20_N9S19572C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19572C16D1Ev,_ZThn48_N9S19572C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C16D0Ev,_ZTv0_n32_N9S19572C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C16D0Ev,_ZThn20_N9S19572C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C16D1Ev,_ZTv0_n32_N9S19572C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C16D1Ev,_ZThn20_N9S19572C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C16D0Ev,_ZTv0_n16_N9S19572C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C16D0Ev,_ZThn12_N9S19572C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C16D1Ev,_ZTv0_n16_N9S19572C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C16D1Ev,_ZThn12_N9S19572C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19572C17D0Ev,_ZThn48_N9S19572C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19572C17D1Ev,_ZThn48_N9S19572C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C17D0Ev,_ZThn20_N9S19572C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C17D1Ev,_ZThn20_N9S19572C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C15D0Ev,_ZTv0_n20_N9S19572C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19572C15D0Ev,_ZThn56_N9S19572C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C15D1Ev,_ZTv0_n20_N9S19572C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19572C15D1Ev,_ZThn56_N9S19572C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C15D0Ev,_ZTv0_n32_N9S19572C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19572C15D0Ev,_ZThn28_N9S19572C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C15D1Ev,_ZTv0_n32_N9S19572C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19572C15D1Ev,_ZThn28_N9S19572C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C15D0Ev,_ZTv0_n16_N9S19572C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C15D0Ev,_ZThn20_N9S19572C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C15D1Ev,_ZTv0_n16_N9S19572C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C15D1Ev,_ZThn20_N9S19572C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19572C15D0Ev,_ZTv0_n48_N9S19572C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19572C15D0Ev,_ZThn8_N9S19572C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19572C15D1Ev,_ZTv0_n48_N9S19572C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19572C15D1Ev,_ZThn8_N9S19572C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19572C15 = {  "S19572C15", // class name
  bases_S19572C15, 24,
  &(vtc_S19572C15[0]), // expected_vtbl_contents
  &(vtt_S19572C15[0]), // expected_vtt_contents
  ABISELECT(240,136), // object size
  NSPAIRA(_ZTI9S19572C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19572C15),64, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19572C15),50, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names25,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19572C14  : S19572C15 , S19572C6 , virtual S19572C20 {
  virtual  ~S19572C14(); // _ZN9S19572C14D2Ev
  S19572C14(); // tgen
};
//SIG(-1 S19572C14) C1{ BC2{ VBC3{ VBC4{ m Fs:13}} VBC5{ VBC6{ BC3 BC7{ BC4} vd} VBC8{ VBC7} BC9{ VBC4 VBC10{ VBC3} VBC11{ VBC7 VBC8 VBC12{ VBC4 VBC7 BC8 BC6 BC3 vd FD[5]} BC3 v1 FC13{ VBC14{ VBC4} VBC3 BC4 VBC7 vd Fi}} vd Fi} BC15{ VBC4 VBC3} VBC16{ m}} BC16 vd} BC17{ v2 Fi} VBC14 vd}


 S19572C14 ::~S19572C14(){ note_dtor("S19572C14", this);}
S19572C14 ::S19572C14(){ note_ctor("S19572C14", this);} // tgen

static void Test_S19572C14()
{
  extern Class_Descriptor cd_S19572C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,37)];
    init_test(&cd_S19572C14, buf);
    S19572C14 *dp, &lv = *(dp=new (buf) S19572C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,144), "sizeof(S19572C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19572C14)");
    /*is_ambiguous_... S19572C14::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(20,12), "S19572C14");
    /*is_ambiguous_... S19572C14::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*), ABISELECT(20,12), "S19572C14");
    /*is_ambiguous_... S19572C17::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C17*)(S19572C16*), ABISELECT(20,12), "S19572C14");
    /*is_ambiguous_... S19572C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C11*), ABISELECT(20,12), "S19572C14");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(20,12), "S19572C14");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C11*), ABISELECT(20,12), "S19572C14");
    /*is_ambiguous_... S19572C18::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C18*), ABISELECT(20,12), "S19572C14");
    check_base_class_offset(lv, (S19572C5*)(S19572C21*)(S19572C16*), ABISELECT(20,12), "S19572C14");
    check_base_class_offset(lv, (S19572C5*)(S19572C20*), ABISELECT(20,12), "S19572C14");
    /*is_ambiguous_... S19572C15::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C15*), ABISELECT(24,16), "S19572C14");
    check_base_class_offset(lv, (S19572C4*)(S19572C3*), ABISELECT(24,16), "S19572C14");
    check_base_class_offset(lv, (S19572C4*)(S19572C21*)(S19572C16*), ABISELECT(24,16), "S19572C14");
    /*is_ambiguous_... S19572C14::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C13*), ABISELECT(48,28), "S19572C14");
    /*is_ambiguous_... S19572C14::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*), ABISELECT(56,32), "S19572C14");
    /*is_ambiguous_... S19572C14::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C13*), ABISELECT(56,32), "S19572C14");
    /*is_ambiguous_... S19572C16::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C13*)(S19572C16*), ABISELECT(48,28), "S19572C14");
    /*is_ambiguous_... S19572C14::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(58,34), "S19572C14");
    /*is_ambiguous_... S19572C14::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C12*), ABISELECT(58,34), "S19572C14");
    /*is_ambiguous_... S19572C18::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C18*), ABISELECT(58,34), "S19572C14");
    /*is_ambiguous_... S19572C11::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C11*), ABISELECT(58,34), "S19572C14");
    check_base_class_offset(lv, (S19572C10*)(S19572C12*)(S19572C11*), ABISELECT(58,34), "S19572C14");
    /*is_ambiguous_... S19572C16::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C12*)(S19572C16*), 0, "S19572C14");
    /*is_ambiguous_... S19572C18::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C12*)(S19572C18*), 0, "S19572C14");
    check_base_class_offset(lv, (S19572C3*)(S19572C17*)(S19572C16*), ABISELECT(24,16), "S19572C14");
    check_base_class_offset(lv, (S19572C12*)(S19572C11*), ABISELECT(112,64), "S19572C14");
    check_base_class_offset(lv, (S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(120,68), "S19572C14");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(128,72), "S19572C14");
    check_base_class_offset(lv, (S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(128,72), "S19572C14");
    check_base_class_offset(lv, (S19572C13*)(S19572C11*), ABISELECT(120,68), "S19572C14");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C11*), ABISELECT(136,76), "S19572C14");
    check_base_class_offset(lv, (S19572C11*)(S19572C18*), ABISELECT(112,64), "S19572C14");
    /*is_ambiguous_... S19572C18::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C18*), ABISELECT(64,36), "S19572C14");
    check_base_class_offset(lv, (S19572C18*)(S19572C17*)(S19572C16*), ABISELECT(64,36), "S19572C14");
    check_base_class_offset(lv, (S19572C17*)(S19572C16*), ABISELECT(24,16), "S19572C14");
    check_base_class_offset(lv, (S19572C21*)(S19572C16*), ABISELECT(40,24), "S19572C14");
    check_base_class_offset(lv, (S629C14*)(S19572C16*), ABISELECT(224,140), "S19572C14");
    check_base_class_offset(lv, (S19572C16*)(S19572C15*), ABISELECT(24,16), "S19572C14");
    /*is_ambiguous_... S19572C15::S629C14 */ AMB_check_base_class_offset(lv, (S629C14*)(S19572C15*), 0, "S19572C14");
    check_base_class_offset(lv, (S19572C15*), 0, "S19572C14");
    check_base_class_offset(lv, (S19572C6*), ABISELECT(8,4), "S19572C14");
    check_base_class_offset(lv, (S19572C20*), ABISELECT(224,140), "S19572C14");
    test_class_info(&lv, &cd_S19572C14);
    dp->~S19572C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C14(Test_S19572C14, "S19572C14", ABISELECT(240,144));

#else // __cplusplus

extern void _ZN9S19572C14C1Ev();
extern void _ZN9S19572C14D2Ev();
Name_Map name_map_S19572C14[] = {
  NSPAIR(_ZN9S19572C14C1Ev),
  NSPAIR(_ZN9S19572C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C3;
extern VTBL_ENTRY _ZTI8S19572C3[];
extern  VTBL_ENTRY _ZTV8S19572C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C3[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C11;
extern VTBL_ENTRY _ZTI9S19572C11[];
extern  VTBL_ENTRY _ZTV9S19572C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C11[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C18;
extern VTBL_ENTRY _ZTI9S19572C18[];
extern  VTBL_ENTRY _ZTV9S19572C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C18[];
extern Class_Descriptor cd_S19572C17;
extern VTBL_ENTRY _ZTI9S19572C17[];
extern  VTBL_ENTRY _ZTV9S19572C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C17[];
extern Class_Descriptor cd_S19572C21;
extern VTBL_ENTRY _ZTI9S19572C21[];
extern  VTBL_ENTRY _ZTV9S19572C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C21[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S19572C16;
extern VTBL_ENTRY _ZTI9S19572C16[];
extern  VTBL_ENTRY _ZTV9S19572C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C16[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S19572C15;
extern VTBL_ENTRY _ZTI9S19572C15[];
extern  VTBL_ENTRY _ZTV9S19572C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C15[];
extern Class_Descriptor cd_S19572C6;
extern VTBL_ENTRY _ZTI8S19572C6[];
extern  VTBL_ENTRY _ZTV8S19572C6[];
extern Class_Descriptor cd_S19572C20;
extern VTBL_ENTRY _ZTI9S19572C20[];
extern  VTBL_ENTRY _ZTV9S19572C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C20[];
static Base_Class bases_S19572C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
    1, //immediately_derived
  0, 1},
  {&cd_S19572C4,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19572C4,    ABISELECT(48,28), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    4, //immediately_derived
  0, 0},
  {&cd_S19572C10,    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
    5, //immediately_derived
  0, 0},
  {&cd_S19572C13,    ABISELECT(48,28), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19572C5,    ABISELECT(58,34), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19572C10,    ABISELECT(58,34), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19572C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19572C3,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19572C12,    ABISELECT(112,64), //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
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(120,68), //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
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(128,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
    13, //immediately_derived
  0, 0},
  {&cd_S19572C10,    ABISELECT(128,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
    14, //immediately_derived
  0, 0},
  {&cd_S19572C13,    ABISELECT(120,68), //bcp->offset
    60, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(136,76), //bcp->offset
    65, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19572C11,    ABISELECT(112,64), //bcp->offset
    53, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19572C4,    ABISELECT(64,36), //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
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19572C18,    ABISELECT(64,36), //bcp->offset
    42, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19572C17,    ABISELECT(24,16), //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
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19572C21,    ABISELECT(40,24), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S629C14,    ABISELECT(224,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
    22, //immediately_derived
  0, 1},
  {&cd_S19572C16,    ABISELECT(24,16), //bcp->offset
    18, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S629C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19572C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19572C6,    ABISELECT(8,4), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19572C20,    ABISELECT(224,140), //bcp->offset
    68, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19572C14[];
extern void _ZN9S19572C14D1Ev();
extern void _ZN9S19572C14D0Ev();
extern void _ZN8S19572C62v1Ev();
extern void ABISELECT(_ZTv0_n96_N9S19572C14D1Ev,_ZTv0_n48_N9S19572C14D1Ev)();
extern void ABISELECT(_ZThn24_N9S19572C14D1Ev,_ZThn16_N9S19572C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19572C14D0Ev,_ZTv0_n48_N9S19572C14D0Ev)();
extern void ABISELECT(_ZThn24_N9S19572C14D0Ev,_ZThn16_N9S19572C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19572C14D1Ev,_ZTv0_n16_N9S19572C14D1Ev)();
extern void ABISELECT(_ZThn48_N9S19572C14D1Ev,_ZThn28_N9S19572C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19572C14D0Ev,_ZTv0_n16_N9S19572C14D0Ev)();
extern void ABISELECT(_ZThn48_N9S19572C14D0Ev,_ZThn28_N9S19572C14D0Ev)() __attribute__((weak));
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C14D1Ev,_ZTv0_n32_N9S19572C14D1Ev)();
extern void ABISELECT(_ZThn64_N9S19572C14D1Ev,_ZThn36_N9S19572C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C14D0Ev,_ZTv0_n32_N9S19572C14D0Ev)();
extern void ABISELECT(_ZThn64_N9S19572C14D0Ev,_ZThn36_N9S19572C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C14D1Ev,_ZTv0_n20_N9S19572C14D1Ev)();
extern void ABISELECT(_ZThn112_N9S19572C14D1Ev,_ZThn64_N9S19572C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C14D0Ev,_ZTv0_n20_N9S19572C14D0Ev)();
extern void ABISELECT(_ZThn112_N9S19572C14D0Ev,_ZThn64_N9S19572C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N9S19572C14D1Ev,_ZTvn4_n20_N9S19572C14D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C14D0Ev,_ZTvn4_n20_N9S19572C14D0Ev)();
static  VTBL_ENTRY vtc_S19572C14[] = {
  ABISELECT(224,140),
  ABISELECT(224,140),
  ABISELECT(112,64),
  ABISELECT(64,36),
  ABISELECT(24,16),
  0,
  ABISELECT(48,28),
  ABISELECT(24,16),
  ABISELECT(20,12),
  ABISELECT(24,16),
  ABISELECT(58,34),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&_ZN9S19572C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C14D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&_ZN8S19572C62v1Ev,
  ABISELECT(-24,-16),
  ABISELECT(200,124),
  ABISELECT(24,12),
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  -4,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19572C14D1Ev,_ZTv0_n48_N9S19572C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19572C14D0Ev,_ZTv0_n48_N9S19572C14D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-20,-12),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  ABISELECT(-48,-28),
  ABISELECT(-28,-16),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C14D1Ev,_ZTv0_n16_N9S19572C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C14D0Ev,_ZTv0_n16_N9S19572C14D0Ev),
  ABISELECT(-64,-36),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-44,-24),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C14D1Ev,_ZTv0_n32_N9S19572C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C14D0Ev,_ZTv0_n32_N9S19572C14D0Ev),
  ABISELECT(-112,-64),
  ABISELECT(-92,-52),
  ABISELECT(-54,-30),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C14D1Ev,_ZTv0_n20_N9S19572C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C14D0Ev,_ZTv0_n20_N9S19572C14D0Ev),
  ABISELECT(-100,-56),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C14D1Ev,_ZTvn4_n20_N9S19572C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C14D0Ev,_ZTvn4_n20_N9S19572C14D0Ev),
  ABISELECT(-116,-64),
  ABISELECT(-136,-76),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  ABISELECT(-204,-128),
  ABISELECT(-224,-140),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
};
extern VTBL_ENTRY _ZTV9S19572C14[];
extern void _ZN9S19572C15D1Ev();
extern void _ZN9S19572C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C15__9S19572C14[] = {
  ABISELECT(224,140),
  ABISELECT(112,64),
  ABISELECT(64,36),
  ABISELECT(24,16),
  0,
  ABISELECT(48,28),
  ABISELECT(24,16),
  ABISELECT(20,12),
  ABISELECT(24,16),
  ABISELECT(58,34),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&_ZN9S19572C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C15D0Ev,
};
extern void ABISELECT(_ZTv0_n96_N9S19572C15D1Ev,_ZTv0_n48_N9S19572C15D1Ev)();
extern void ABISELECT(_ZThn24_N9S19572C15D1Ev,_ZThn16_N9S19572C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19572C15D0Ev,_ZTv0_n48_N9S19572C15D0Ev)();
extern void ABISELECT(_ZThn24_N9S19572C15D0Ev,_ZThn16_N9S19572C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C16__9S19572C15__9S19572C14[] = {
  ABISELECT(-24,-16),
  ABISELECT(200,124),
  ABISELECT(24,12),
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  -4,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19572C15D1Ev,_ZTv0_n48_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19572C15D0Ev,_ZTv0_n48_N9S19572C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19572C15D1Ev,_ZTv0_n16_N9S19572C15D1Ev)();
extern void ABISELECT(_ZThn48_N9S19572C15D1Ev,_ZThn28_N9S19572C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19572C15D0Ev,_ZTv0_n16_N9S19572C15D0Ev)();
extern void ABISELECT(_ZThn48_N9S19572C15D0Ev,_ZThn28_N9S19572C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C15__9S19572C14[] = {
  ABISELECT(-48,-28),
  ABISELECT(-28,-16),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C15D1Ev,_ZTv0_n16_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C15D0Ev,_ZTv0_n16_N9S19572C15D0Ev),
};
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C15D1Ev,_ZTv0_n32_N9S19572C15D1Ev)();
extern void ABISELECT(_ZThn64_N9S19572C15D1Ev,_ZThn36_N9S19572C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C15D0Ev,_ZTv0_n32_N9S19572C15D0Ev)();
extern void ABISELECT(_ZThn64_N9S19572C15D0Ev,_ZThn36_N9S19572C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C15__9S19572C14[] = {
  ABISELECT(-64,-36),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-44,-24),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C15D1Ev,_ZTv0_n32_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C15D0Ev,_ZTv0_n32_N9S19572C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C15D1Ev,_ZTv0_n20_N9S19572C15D1Ev)();
extern void ABISELECT(_ZThn112_N9S19572C15D1Ev,_ZThn64_N9S19572C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C15D0Ev,_ZTv0_n20_N9S19572C15D0Ev)();
extern void ABISELECT(_ZThn112_N9S19572C15D0Ev,_ZThn64_N9S19572C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C15__9S19572C14[] = {
  ABISELECT(-112,-64),
  ABISELECT(-92,-52),
  ABISELECT(-54,-30),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C15D1Ev,_ZTv0_n20_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C15D0Ev,_ZTv0_n20_N9S19572C15D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C15D1Ev,_ZTvn4_n20_N9S19572C15D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C15D0Ev,_ZTvn4_n20_N9S19572C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__A1__9S19572C15__9S19572C14[] = {
  ABISELECT(-100,-56),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C15D1Ev,_ZTvn4_n20_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C15D0Ev,_ZTvn4_n20_N9S19572C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A3__9S19572C15__9S19572C14[] = {
  ABISELECT(-116,-64),
  ABISELECT(-136,-76),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C219S19572C16__9S19572C15__9S19572C14[] = {
  ABISELECT(-16,-8),
  ABISELECT(-20,-12),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C14[] = {
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void _ZN9S19572C16D1Ev();
extern void _ZN9S19572C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C16__9S19572C14[] = {
  ABISELECT(200,124),
  ABISELECT(24,12),
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&_ZN9S19572C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C16D0Ev,
};
extern void _ZN9S19572C17D1Ev();
extern void _ZN9S19572C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C179S19572C16__9S19572C14[] = {
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&_ZN9S19572C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C17D0Ev,
};
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev)();
extern void ABISELECT(_ZThn40_N9S19572C17D1Ev,_ZThn20_N9S19572C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev)();
extern void ABISELECT(_ZThn40_N9S19572C17D0Ev,_ZThn20_N9S19572C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C179S19572C16__9S19572C14[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-44,-24),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C179S19572C16__9S19572C14[] = {
  ABISELECT(58,34),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev)();
extern void ABISELECT(_ZThn88_N9S19572C17D1Ev,_ZThn48_N9S19572C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev)();
extern void ABISELECT(_ZThn88_N9S19572C17D0Ev,_ZThn48_N9S19572C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C179S19572C16__9S19572C14[] = {
  ABISELECT(-88,-48),
  ABISELECT(-92,-52),
  ABISELECT(-54,-30),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C17D1Ev,_ZTvn4_n20_N9S19572C17D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C17D0Ev,_ZTvn4_n20_N9S19572C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__9S19572C179S19572C16__9S19572C14[] = {
  ABISELECT(-100,-56),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C17D1Ev,_ZTvn4_n20_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C17D0Ev,_ZTvn4_n20_N9S19572C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A2__9S19572C179S19572C16__9S19572C14[] = {
  ABISELECT(-116,-64),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C219S19572C16__9S19572C14[] = {
  ABISELECT(-16,-8),
  ABISELECT(-20,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C219S19572C16__9S19572C14[] = {
  -4,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19572C21[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19572C16D1Ev,_ZTv0_n16_N9S19572C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S19572C16D1Ev,_ZThn12_N9S19572C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19572C16D0Ev,_ZTv0_n16_N9S19572C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S19572C16D0Ev,_ZThn12_N9S19572C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C16__9S19572C14[] = {
  ABISELECT(-24,-12),
  ABISELECT(-28,-16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C16D1Ev,_ZTv0_n16_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C16D0Ev,_ZTv0_n16_N9S19572C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C16__9S19572C14[] = {
  ABISELECT(58,34),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
};
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C16D1Ev,_ZTv0_n32_N9S19572C16D1Ev)();
extern void ABISELECT(_ZThn40_N9S19572C16D1Ev,_ZThn20_N9S19572C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C16D0Ev,_ZTv0_n32_N9S19572C16D0Ev)();
extern void ABISELECT(_ZThn40_N9S19572C16D0Ev,_ZThn20_N9S19572C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C16__9S19572C14[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-44,-24),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C16D1Ev,_ZTv0_n32_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C16D0Ev,_ZTv0_n32_N9S19572C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C16D1Ev,_ZTv0_n20_N9S19572C16D1Ev)();
extern void ABISELECT(_ZThn88_N9S19572C16D1Ev,_ZThn48_N9S19572C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C16D0Ev,_ZTv0_n20_N9S19572C16D0Ev)();
extern void ABISELECT(_ZThn88_N9S19572C16D0Ev,_ZThn48_N9S19572C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C16__9S19572C14[] = {
  ABISELECT(-88,-48),
  ABISELECT(-92,-52),
  ABISELECT(-54,-30),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C16D1Ev,_ZTv0_n20_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C16D0Ev,_ZTv0_n20_N9S19572C16D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C16D1Ev,_ZTvn4_n20_N9S19572C16D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C16D0Ev,_ZTvn4_n20_N9S19572C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__A1__9S19572C16__9S19572C14[] = {
  ABISELECT(-100,-56),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C16D1Ev,_ZTvn4_n20_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C16D0Ev,_ZTvn4_n20_N9S19572C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A3__9S19572C16__9S19572C14[] = {
  ABISELECT(-116,-64),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C21__9S19572C16__9S19572C14[] = {
  ABISELECT(-16,-8),
  ABISELECT(-20,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C14[] = {
  ABISELECT(-28,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C13__A1__9S19572C14[] = {
  ABISELECT(-28,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C14[] = {
  ABISELECT(58,34),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C3__9S19572C14[] = {
  0,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C3[0]),
};
extern void _ZN9S19572C182v3Ev();
extern void _ZN9S19572C18D1Ev();
extern void _ZN9S19572C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C14[] = {
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-44,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&_ZN9S19572C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C18D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C18__A4__9S19572C14[] = {
  ABISELECT(-44,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C18__9S19572C14[] = {
  ABISELECT(58,34),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev)();
extern void ABISELECT(_ZThn48_N9S19572C18D1Ev,_ZThn28_N9S19572C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev)();
extern void ABISELECT(_ZThn48_N9S19572C18D0Ev,_ZThn28_N9S19572C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C18__9S19572C14[] = {
  ABISELECT(-48,-28),
  ABISELECT(-92,-52),
  ABISELECT(-54,-30),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C18D1Ev,_ZTvn4_n20_N9S19572C18D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C18D0Ev,_ZTvn4_n20_N9S19572C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__9S19572C18__9S19572C14[] = {
  ABISELECT(-100,-56),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C18D1Ev,_ZTvn4_n20_N9S19572C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C18D0Ev,_ZTvn4_n20_N9S19572C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A1__9S19572C18__9S19572C14[] = {
  ABISELECT(-116,-64),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
};
extern void _ZN9S19572C11D1Ev();
extern void _ZN9S19572C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C14[] = {
  ABISELECT(-92,-52),
  ABISELECT(-54,-30),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&_ZN9S19572C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19572C129S19572C11__A1__9S19572C14[] = {
  ABISELECT(-54,-30),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__A1__9S19572C14[] = {
  ABISELECT(-100,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C139S19572C11__A2__9S19572C14[] = {
  ABISELECT(-100,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A3__9S19572C14[] = {
  ABISELECT(-116,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C11__9S19572C14[] = {
  ABISELECT(-100,-56),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__A1__9S19572C11__9S19572C14[] = {
  ABISELECT(-116,-64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C20__9S19572C14[] = {
  ABISELECT(-204,-128),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C20[0]),
};
static  VTT_ENTRY vtt_S19572C14[] = {
  {&(_ZTV9S19572C14[13]),  13,71},
  {&(_tg__ZTV9S19572C15__9S19572C14[12]),  12,14},
  {&(_tg__ZTV9S19572C16__9S19572C15__9S19572C14[12]),  12,14},
  {&(_tg__ZTV9S19572C16__9S19572C15__9S19572C14[12]),  12,14},
  {&(_tg__ZTV9S19572C13__9S19572C15__9S19572C14[4]),  4,6},
  {&(_tg__ZTV9S19572C15__9S19572C14[12]),  12,14},
  {&(_tg__ZTV9S19572C16__9S19572C15__9S19572C14[12]),  12,14},
  {&(_tg__ZTV9S19572C18__9S19572C15__9S19572C14[8]),  8,11},
  {&(_tg__ZTV9S19572C11__9S19572C15__9S19572C14[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__A1__9S19572C15__9S19572C14[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A3__9S19572C15__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C219S19572C16__9S19572C15__9S19572C14[4]),  4,4},
  {&(_ZTV9S19572C14[30]),  30,71},
  {&(_ZTV9S19572C14[30]),  30,71},
  {&(_ZTV9S19572C14[40]),  40,71},
  {&(_ZTV9S19572C14[13]),  13,71},
  {&(_ZTV9S19572C14[30]),  30,71},
  {&(_ZTV9S19572C14[50]),  50,71},
  {&(_ZTV9S19572C14[58]),  58,71},
  {&(_ZTV9S19572C14[63]),  63,71},
  {&(_ZTV9S19572C14[68]),  68,71},
  {&(_ZTV9S19572C14[36]),  36,71},
  {&(_ZTV9S19572C14[71]),  71,71},
  {&(_tg__ZTV8S19572C4__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C16__9S19572C14[11]),  11,13},
  {&(_tg__ZTV9S19572C179S19572C16__9S19572C14[9]),  9,11},
  {&(_tg__ZTV9S19572C179S19572C16__9S19572C14[9]),  9,11},
  {&(_tg__ZTV9S19572C179S19572C16__9S19572C14[9]),  9,11},
  {&(_tg__ZTV9S19572C18__9S19572C179S19572C16__9S19572C14[8]),  8,11},
  {&(_tg__ZTV9S19572C12__9S19572C179S19572C16__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C179S19572C16__9S19572C14[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__9S19572C179S19572C16__9S19572C14[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A2__9S19572C179S19572C16__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C219S19572C16__9S19572C14[4]),  4,4},
  {&(_tg__ZTV8S19572C4__9S19572C219S19572C16__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C16__9S19572C14[4]),  4,6},
  {&(_tg__ZTV9S19572C12__9S19572C16__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C16__9S19572C14[11]),  11,13},
  {&(_tg__ZTV9S19572C16__9S19572C14[11]),  11,13},
  {&(_tg__ZTV9S19572C18__9S19572C16__9S19572C14[8]),  8,11},
  {&(_tg__ZTV9S19572C11__9S19572C16__9S19572C14[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__A1__9S19572C16__9S19572C14[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A3__9S19572C16__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C21__9S19572C16__9S19572C14[4]),  4,4},
  {&(_tg__ZTV9S19572C13__9S19572C14[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C13__A1__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C12__9S19572C14[3]),  3,3},
  {&(_tg__ZTV8S19572C3__9S19572C14[4]),  4,4},
  {&(_tg__ZTV8S19572C3__9S19572C14[4]),  4,4},
  {&(_tg__ZTV9S19572C18__9S19572C14[6]),  6,9},
  {&(_tg__ZTV8S19572C49S19572C18__A4__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C12__9S19572C18__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C18__9S19572C14[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__9S19572C18__9S19572C14[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A1__9S19572C18__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C14[4]),  4,6},
  {&(_tg__ZTV9S19572C129S19572C11__A1__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C139S19572C11__A1__9S19572C14[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C139S19572C11__A2__9S19572C14[3]),  3,3},
  {&(_tg__ZTV8S19572C49S19572C11__A3__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C11__9S19572C14[3]),  3,5},
  {&(_tg__ZTV8S19572C4__A1__9S19572C11__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C20__9S19572C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19572C14[];
extern  VTBL_ENTRY _ZTV9S19572C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C14[];
static VTBL_ENTRY alt_thunk_names26[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19572C18D0Ev,_ZThn28_N9S19572C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19572C18D1Ev,_ZThn28_N9S19572C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C16D0Ev,_ZTv0_n20_N9S19572C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19572C16D0Ev,_ZThn48_N9S19572C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C16D1Ev,_ZTv0_n20_N9S19572C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19572C16D1Ev,_ZThn48_N9S19572C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C16D0Ev,_ZTv0_n32_N9S19572C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C16D0Ev,_ZThn20_N9S19572C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C16D1Ev,_ZTv0_n32_N9S19572C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C16D1Ev,_ZThn20_N9S19572C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C16D0Ev,_ZTv0_n16_N9S19572C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C16D0Ev,_ZThn12_N9S19572C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C16D1Ev,_ZTv0_n16_N9S19572C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C16D1Ev,_ZThn12_N9S19572C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19572C17D0Ev,_ZThn48_N9S19572C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19572C17D1Ev,_ZThn48_N9S19572C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C17D0Ev,_ZThn20_N9S19572C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C17D1Ev,_ZThn20_N9S19572C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C15D0Ev,_ZTv0_n20_N9S19572C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19572C15D0Ev,_ZThn64_N9S19572C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C15D1Ev,_ZTv0_n20_N9S19572C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19572C15D1Ev,_ZThn64_N9S19572C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C15D0Ev,_ZTv0_n32_N9S19572C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19572C15D0Ev,_ZThn36_N9S19572C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C15D1Ev,_ZTv0_n32_N9S19572C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19572C15D1Ev,_ZThn36_N9S19572C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C15D0Ev,_ZTv0_n16_N9S19572C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19572C15D0Ev,_ZThn28_N9S19572C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C15D1Ev,_ZTv0_n16_N9S19572C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19572C15D1Ev,_ZThn28_N9S19572C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19572C15D0Ev,_ZTv0_n48_N9S19572C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C15D0Ev,_ZThn16_N9S19572C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19572C15D1Ev,_ZTv0_n48_N9S19572C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C15D1Ev,_ZThn16_N9S19572C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C14D0Ev,_ZTv0_n20_N9S19572C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19572C14D0Ev,_ZThn64_N9S19572C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C14D1Ev,_ZTv0_n20_N9S19572C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19572C14D1Ev,_ZThn64_N9S19572C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C14D0Ev,_ZTv0_n32_N9S19572C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19572C14D0Ev,_ZThn36_N9S19572C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C14D1Ev,_ZTv0_n32_N9S19572C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19572C14D1Ev,_ZThn36_N9S19572C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C14D0Ev,_ZTv0_n16_N9S19572C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19572C14D0Ev,_ZThn28_N9S19572C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C14D1Ev,_ZTv0_n16_N9S19572C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19572C14D1Ev,_ZThn28_N9S19572C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19572C14D0Ev,_ZTv0_n48_N9S19572C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C14D0Ev,_ZThn16_N9S19572C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19572C14D1Ev,_ZTv0_n48_N9S19572C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C14D1Ev,_ZThn16_N9S19572C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19572C14 = {  "S19572C14", // class name
  bases_S19572C14, 27,
  &(vtc_S19572C14[0]), // expected_vtbl_contents
  &(vtt_S19572C14[0]), // expected_vtt_contents
  ABISELECT(240,144), // object size
  NSPAIRA(_ZTI9S19572C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19572C14),71, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19572C14),63, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names26,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19572C1  : virtual S19572C2 , S19572C7 , virtual S19572C14 {
  ~S19572C1(); // tgen
  S19572C1(); // tgen
};
//SIG(1 S19572C1) C1{ VBC2{ BC3{ VBC4{ VBC5{ m Fs:13}}} VBC6{ v1 Fi} Fp} BC7{ VBC8{ BC9{ BC10{ BC5} vd} VBC3 BC11{ VBC5 VBC10 BC12{ VBC10} BC13{ BC4 BC10 vd} BC4 vd FD[5]} vd Fi} v2 Fp} VBC14{ BC15{ VBC4 VBC16{ VBC13 VBC12 BC17{ VBC5 VBC3 VBC18{ VBC10 VBC12 VBC11 BC4 v3 FC19{ VBC20{ VBC5} VBC4 BC5 VBC10 vd Fi}} vd Fi} BC21{ VBC5 VBC4} VBC22{ m}} BC22 vd} BC6 VBC20 vd}}


S19572C1 ::~S19572C1(){ note_dtor("S19572C1", this);} // tgen
S19572C1 ::S19572C1(){ note_ctor("S19572C1", this);} // tgen

static void Test_S19572C1()
{
  extern Class_Descriptor cd_S19572C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(29,66)];
    init_test(&cd_S19572C1, buf);
    S19572C1 *dp, &lv = *(dp=new (buf) S19572C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,260), "sizeof(S19572C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19572C1)");
    /*is_ambiguous_... S19572C1::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(32,16), "S19572C1");
    /*is_ambiguous_... S19572C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C11*)(S19572C8*), ABISELECT(32,16), "S19572C1");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*)(S19572C11*)(S19572C8*), ABISELECT(32,16), "S19572C1");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C11*)(S19572C8*), ABISELECT(32,16), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*), ABISELECT(32,16), "S19572C1");
    /*is_ambiguous_... S19572C17::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C17*)(S19572C16*), ABISELECT(32,16), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C11 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C11*), ABISELECT(32,16), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C11 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(32,16), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C11 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C11*), ABISELECT(32,16), "S19572C1");
    /*is_ambiguous_... S19572C18::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C18*), ABISELECT(32,16), "S19572C1");
    check_base_class_offset(lv, (S19572C5*)(S19572C21*)(S19572C16*), ABISELECT(32,16), "S19572C1");
    check_base_class_offset(lv, (S19572C5*)(S19572C20*), ABISELECT(32,16), "S19572C1");
    check_base_class_offset(lv, (S19572C4*)(S19572C3*)(S19572C2*), ABISELECT(16,8), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C3 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C3*), ABISELECT(16,8), "S19572C1");
    /*is_ambiguous_... S19572C15::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C15*)(S19572C14*), ABISELECT(16,8), "S19572C1");
    check_base_class_offset(lv, (S19572C4*)(S19572C21*)(S19572C16*), ABISELECT(16,8), "S19572C1");
    check_base_class_offset(lv, (S19572C3*)(S19572C2*), ABISELECT(16,8), "S19572C1");
    check_base_class_offset(lv, (S19572C6*)(S19572C2*), ABISELECT(40,20), "S19572C1");
    check_base_class_offset(lv, (S19572C2*), ABISELECT(16,8), "S19572C1");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C9*)(S19572C8*), ABISELECT(72,32), "S19572C1");
    check_base_class_offset(lv, (S19572C10*)(S19572C9*)(S19572C8*), ABISELECT(72,32), "S19572C1");
    check_base_class_offset(lv, (S19572C9*)(S19572C8*), ABISELECT(64,28), "S19572C1");
    check_base_class_offset(lv, (S19572C3*)(S19572C8*), 0, "S19572C1");
    check_base_class_offset(lv, (S19572C3*)(S19572C17*)(S19572C16*), 0, "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(196,116), "S19572C1");
    /*is_ambiguous_... S19572C11::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C11*)(S19572C8*), ABISELECT(196,116), "S19572C1");
    check_base_class_offset(lv, (S19572C10*)(S19572C12*)(S19572C11*)(S19572C8*), ABISELECT(196,116), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C12*), ABISELECT(196,116), "S19572C1");
    /*is_ambiguous_... S19572C18::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C18*), ABISELECT(196,116), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C11 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C11*), ABISELECT(196,116), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C11 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C12*)(S19572C11*), ABISELECT(196,116), "S19572C1");
    check_base_class_offset(lv, (S19572C12*)(S19572C11*)(S19572C8*), ABISELECT(80,36), "S19572C1");
    check_base_class_offset(lv, (S19572C4*)(S19572C13*)(S19572C11*)(S19572C8*), ABISELECT(88,40), "S19572C1");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*)(S19572C11*)(S19572C8*), ABISELECT(96,44), "S19572C1");
    check_base_class_offset(lv, (S19572C10*)(S19572C13*)(S19572C11*)(S19572C8*), ABISELECT(96,44), "S19572C1");
    check_base_class_offset(lv, (S19572C13*)(S19572C11*)(S19572C8*), ABISELECT(88,40), "S19572C1");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C11*)(S19572C8*), ABISELECT(104,48), "S19572C1");
    check_base_class_offset(lv, (S19572C11*)(S19572C8*), ABISELECT(80,36), "S19572C1");
    check_base_class_offset(lv, (S19572C8*)(S19572C7*), ABISELECT(64,28), "S19572C1");
    check_base_class_offset(lv, (S19572C7*), 0, "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C13*), ABISELECT(248,144), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*), ABISELECT(256,148), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C13*), ABISELECT(256,148), "S19572C1");
    /*is_ambiguous_... S19572C16::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C13*)(S19572C16*), ABISELECT(248,144), "S19572C1");
    /*is_ambiguous_... S19572C16::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C12*)(S19572C16*), ABISELECT(200,120), "S19572C1");
    /*is_ambiguous_... S19572C18::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C12*)(S19572C18*), ABISELECT(200,120), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C11 */ AMB_check_base_class_offset(lv, (S19572C12*)(S19572C11*), ABISELECT(320,180), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C11 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(328,184), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C11 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(336,188), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C11 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(336,188), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C11 */ AMB_check_base_class_offset(lv, (S19572C13*)(S19572C11*), ABISELECT(328,184), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C11 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C11*), ABISELECT(344,192), "S19572C1");
    check_base_class_offset(lv, (S19572C11*)(S19572C18*), ABISELECT(320,180), "S19572C1");
    /*is_ambiguous_... S19572C18::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C18*), ABISELECT(264,152), "S19572C1");
    check_base_class_offset(lv, (S19572C18*)(S19572C17*)(S19572C16*), ABISELECT(264,152), "S19572C1");
    check_base_class_offset(lv, (S19572C17*)(S19572C16*), ABISELECT(224,132), "S19572C1");
    check_base_class_offset(lv, (S19572C21*)(S19572C16*), ABISELECT(240,140), "S19572C1");
    check_base_class_offset(lv, (S629C14*)(S19572C16*), 0, "S19572C1");
    check_base_class_offset(lv, (S19572C16*)(S19572C15*)(S19572C14*), ABISELECT(224,132), "S19572C1");
    /*is_ambiguous_... S19572C15::S629C14 */ AMB_check_base_class_offset(lv, (S629C14*)(S19572C15*)(S19572C14*), ABISELECT(200,120), "S19572C1");
    check_base_class_offset(lv, (S19572C15*)(S19572C14*), ABISELECT(200,120), "S19572C1");
    check_base_class_offset(lv, (S19572C6*)(S19572C14*), ABISELECT(208,124), "S19572C1");
    check_base_class_offset(lv, (S19572C20*)(S19572C14*), ABISELECT(432,256), "S19572C1");
    check_base_class_offset(lv, (S19572C14*), ABISELECT(200,120), "S19572C1");
    test_class_info(&lv, &cd_S19572C1);
    dp->~S19572C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C1(Test_S19572C1, "S19572C1", ABISELECT(448,260));

#else // __cplusplus

extern void _ZN8S19572C1C1Ev();
extern void _ZN8S19572C1D1Ev();
Name_Map name_map_S19572C1[] = {
  NSPAIR(_ZN8S19572C1C1Ev),
  NSPAIR(_ZN8S19572C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C3;
extern VTBL_ENTRY _ZTI8S19572C3[];
extern  VTBL_ENTRY _ZTV8S19572C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C3[];
extern Class_Descriptor cd_S19572C6;
extern VTBL_ENTRY _ZTI8S19572C6[];
extern  VTBL_ENTRY _ZTV8S19572C6[];
extern Class_Descriptor cd_S19572C2;
extern VTBL_ENTRY _ZTI8S19572C2[];
extern  VTBL_ENTRY _ZTV8S19572C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C2[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C9;
extern VTBL_ENTRY _ZTI8S19572C9[];
extern  VTBL_ENTRY _ZTV8S19572C9[];
extern Class_Descriptor cd_S19572C3;
extern VTBL_ENTRY _ZTI8S19572C3[];
extern  VTBL_ENTRY _ZTV8S19572C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C3[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C11;
extern VTBL_ENTRY _ZTI9S19572C11[];
extern  VTBL_ENTRY _ZTV9S19572C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C11[];
extern Class_Descriptor cd_S19572C8;
extern VTBL_ENTRY _ZTI8S19572C8[];
extern  VTBL_ENTRY _ZTV8S19572C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C8[];
extern Class_Descriptor cd_S19572C7;
extern VTBL_ENTRY _ZTI8S19572C7[];
extern  VTBL_ENTRY _ZTV8S19572C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C7[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C11;
extern VTBL_ENTRY _ZTI9S19572C11[];
extern  VTBL_ENTRY _ZTV9S19572C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C11[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C18;
extern VTBL_ENTRY _ZTI9S19572C18[];
extern  VTBL_ENTRY _ZTV9S19572C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C18[];
extern Class_Descriptor cd_S19572C17;
extern VTBL_ENTRY _ZTI9S19572C17[];
extern  VTBL_ENTRY _ZTV9S19572C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C17[];
extern Class_Descriptor cd_S19572C21;
extern VTBL_ENTRY _ZTI9S19572C21[];
extern  VTBL_ENTRY _ZTV9S19572C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C21[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S19572C16;
extern VTBL_ENTRY _ZTI9S19572C16[];
extern  VTBL_ENTRY _ZTV9S19572C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C16[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S19572C15;
extern VTBL_ENTRY _ZTI9S19572C15[];
extern  VTBL_ENTRY _ZTV9S19572C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C15[];
extern Class_Descriptor cd_S19572C6;
extern VTBL_ENTRY _ZTI8S19572C6[];
extern  VTBL_ENTRY _ZTV8S19572C6[];
extern Class_Descriptor cd_S19572C20;
extern VTBL_ENTRY _ZTI9S19572C20[];
extern  VTBL_ENTRY _ZTV9S19572C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C20[];
extern Class_Descriptor cd_S19572C14;
extern VTBL_ENTRY _ZTI9S19572C14[];
extern  VTBL_ENTRY _ZTV9S19572C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C14[];
static Base_Class bases_S19572C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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_S19572C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19572C3,    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
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19572C6,    ABISELECT(40,20), //bcp->offset
    25, //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
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19572C2,    ABISELECT(16,8), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    ABISELECT(72,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_S19572C10,    ABISELECT(72,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_S19572C9,    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
    6, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19572C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19572C5,    ABISELECT(196,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
    10, //immediately_derived
  0, 0},
  {&cd_S19572C10,    ABISELECT(196,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
    11, //immediately_derived
  0, 1},
  {&cd_S19572C12,    ABISELECT(80,36), //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
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(88,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(96,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
    14, //immediately_derived
  0, 0},
  {&cd_S19572C10,    ABISELECT(96,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
    15, //immediately_derived
  0, 0},
  {&cd_S19572C13,    ABISELECT(88,40), //bcp->offset
    44, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(104,48), //bcp->offset
    49, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19572C11,    ABISELECT(80,36), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19572C8,    ABISELECT(64,28), //bcp->offset
    29, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19572C7,    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
    30, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19572C4,    ABISELECT(248,144), //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
    13, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(256,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
    22, //immediately_derived
  0, 0},
  {&cd_S19572C10,    ABISELECT(256,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
    23, //immediately_derived
  0, 0},
  {&cd_S19572C13,    ABISELECT(248,144), //bcp->offset
    90, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    37, //immediately_derived
  0, 1},
  {&cd_S19572C12,    ABISELECT(200,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    94, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    33, //immediately_derived
  0, 1},
  {&cd_S19572C12,    ABISELECT(320,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    102, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(328,184), //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
    17, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    28, //immediately_derived
  0, 0},
  {&cd_S19572C10,    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
    29, //immediately_derived
  0, 0},
  {&cd_S19572C13,    ABISELECT(328,184), //bcp->offset
    114, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    103, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(344,192), //bcp->offset
    119, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    105, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19572C11,    ABISELECT(320,180), //bcp->offset
    107, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    101, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    33, //immediately_derived
  0, 1},
  {&cd_S19572C4,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    96, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S19572C18,    ABISELECT(264,152), //bcp->offset
    96, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    95, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    34, //immediately_derived
  0, 1},
  {&cd_S19572C17,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S19572C21,    ABISELECT(240,140), //bcp->offset
    86, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    81, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S629C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19572C16,    ABISELECT(224,132), //bcp->offset
    72, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    72, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    39, //immediately_derived
  0, 1},
  {&cd_S629C14,    ABISELECT(200,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
    39, //immediately_derived
  0, 0},
  {&cd_S19572C15,    ABISELECT(200,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S19572C6,    ABISELECT(208,124), //bcp->offset
    69, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S19572C20,    ABISELECT(432,256), //bcp->offset
    122, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    108, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    42, //immediately_derived
  0, 1},
  {&cd_S19572C14,    ABISELECT(200,120), //bcp->offset
    52, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19572C1[];
extern void _ZN8S19572C72v2Ev();
extern void _ZN8S19572C1D1Ev();
extern void _ZN8S19572C1D0Ev();
extern void _ZN8S19572C62v1Ev();
extern void ABISELECT(_ZTv0_n56_N8S19572C1D1Ev,_ZTv0_n28_N8S19572C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S19572C1D1Ev,_ZThn28_N8S19572C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19572C1D0Ev,_ZTv0_n28_N8S19572C1D0Ev)();
extern void ABISELECT(_ZThn64_N8S19572C1D0Ev,_ZThn28_N8S19572C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n56_N8S19572C1D1Ev,_ZTvn8_n28_N8S19572C1D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S19572C1D0Ev,_ZTvn8_n28_N8S19572C1D0Ev)();
extern void ABISELECT(_ZTvn24_n56_N8S19572C1D1Ev,_ZTvn12_n28_N8S19572C1D1Ev)();
extern void ABISELECT(_ZTvn24_n56_N8S19572C1D0Ev,_ZTvn12_n28_N8S19572C1D0Ev)();
extern void ABISELECT(_ZTv0_n112_N8S19572C1D1Ev,_ZTv0_n56_N8S19572C1D1Ev)();
extern void ABISELECT(_ZThn200_N8S19572C1D1Ev,_ZThn120_N8S19572C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S19572C1D0Ev,_ZTv0_n56_N8S19572C1D0Ev)();
extern void ABISELECT(_ZThn200_N8S19572C1D0Ev,_ZThn120_N8S19572C1D0Ev)() __attribute__((weak));
extern void _ZN8S19572C62v1Ev();
extern void ABISELECT(_ZTv0_n96_N8S19572C1D1Ev,_ZTv0_n48_N8S19572C1D1Ev)();
extern void ABISELECT(_ZThn224_N8S19572C1D1Ev,_ZThn132_N8S19572C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19572C1D0Ev,_ZTv0_n48_N8S19572C1D0Ev)();
extern void ABISELECT(_ZThn224_N8S19572C1D0Ev,_ZThn132_N8S19572C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19572C1D1Ev,_ZTv0_n16_N8S19572C1D1Ev)();
extern void ABISELECT(_ZThn248_N8S19572C1D1Ev,_ZThn144_N8S19572C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19572C1D0Ev,_ZTv0_n16_N8S19572C1D0Ev)();
extern void ABISELECT(_ZThn248_N8S19572C1D0Ev,_ZThn144_N8S19572C1D0Ev)() __attribute__((weak));
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19572C1D1Ev,_ZTv0_n32_N8S19572C1D1Ev)();
extern void ABISELECT(_ZThn264_N8S19572C1D1Ev,_ZThn152_N8S19572C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19572C1D0Ev,_ZTv0_n32_N8S19572C1D0Ev)();
extern void ABISELECT(_ZThn264_N8S19572C1D0Ev,_ZThn152_N8S19572C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19572C1D1Ev,_ZTv0_n20_N8S19572C1D1Ev)();
extern void ABISELECT(_ZThn320_N8S19572C1D1Ev,_ZThn180_N8S19572C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19572C1D0Ev,_ZTv0_n20_N8S19572C1D0Ev)();
extern void ABISELECT(_ZThn320_N8S19572C1D0Ev,_ZThn180_N8S19572C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N8S19572C1D1Ev,_ZTvn4_n20_N8S19572C1D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S19572C1D0Ev,_ZTvn4_n20_N8S19572C1D0Ev)();
static  VTBL_ENTRY vtc_S19572C1[] = {
  ABISELECT(432,256),
  0,
  ABISELECT(320,180),
  ABISELECT(264,152),
  ABISELECT(200,120),
  ABISELECT(248,144),
  ABISELECT(224,132),
  ABISELECT(200,120),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(196,116),
  0,
  ABISELECT(64,28),
  ABISELECT(16,8),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  (VTBL_ENTRY)&_ZN8S19572C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19572C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19572C1D0Ev,
  ABISELECT(24,12),
  0,
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  (VTBL_ENTRY)&_ZN8S19572C62v1Ev,
  ABISELECT(-64,-28),
  ABISELECT(132,88),
  ABISELECT(-32,-12),
  ABISELECT(-48,-20),
  ABISELECT(-64,-28),
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19572C1D1Ev,_ZTv0_n28_N8S19572C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19572C1D0Ev,_ZTv0_n28_N8S19572C1D0Ev),
  ABISELECT(-48,-20),
  ABISELECT(116,80),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S19572C1D1Ev,_ZTvn8_n28_N8S19572C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S19572C1D0Ev,_ZTvn8_n28_N8S19572C1D0Ev),
  ABISELECT(-56,-24),
  ABISELECT(-88,-40),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n56_N8S19572C1D1Ev,_ZTvn12_n28_N8S19572C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n56_N8S19572C1D0Ev,_ZTvn12_n28_N8S19572C1D0Ev),
  ABISELECT(-72,-32),
  ABISELECT(-104,-48),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  ABISELECT(8,4),
  ABISELECT(-200,-120),
  ABISELECT(232,136),
  ABISELECT(-200,-120),
  ABISELECT(120,60),
  ABISELECT(64,32),
  ABISELECT(-200,-120),
  0,
  ABISELECT(48,24),
  ABISELECT(24,12),
  ABISELECT(-168,-104),
  ABISELECT(-184,-112),
  -4,
  ABISELECT(-200,-120),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S19572C1D1Ev,_ZTv0_n56_N8S19572C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S19572C1D0Ev,_ZTv0_n56_N8S19572C1D0Ev),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  (VTBL_ENTRY)&_ZN8S19572C62v1Ev,
  ABISELECT(-224,-132),
  ABISELECT(-224,-132),
  ABISELECT(24,12),
  ABISELECT(96,48),
  ABISELECT(-24,-12),
  ABISELECT(-28,-16),
  ABISELECT(40,20),
  ABISELECT(-224,-132),
  ABISELECT(-208,-124),
  ABISELECT(-192,-116),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19572C1D1Ev,_ZTv0_n48_N8S19572C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19572C1D0Ev,_ZTv0_n48_N8S19572C1D0Ev),
  ABISELECT(-224,-132),
  ABISELECT(-208,-124),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  ABISELECT(-248,-144),
  ABISELECT(-216,-128),
  ABISELECT(-248,-144),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19572C1D1Ev,_ZTv0_n16_N8S19572C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19572C1D0Ev,_ZTv0_n16_N8S19572C1D0Ev),
  ABISELECT(-264,-152),
  0,
  ABISELECT(56,28),
  ABISELECT(-64,-32),
  ABISELECT(-68,-36),
  ABISELECT(-232,-136),
  ABISELECT(-264,-152),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19572C1D1Ev,_ZTv0_n32_N8S19572C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19572C1D0Ev,_ZTv0_n32_N8S19572C1D0Ev),
  ABISELECT(-320,-180),
  ABISELECT(-288,-164),
  ABISELECT(-124,-64),
  ABISELECT(-320,-180),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19572C1D1Ev,_ZTv0_n20_N8S19572C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19572C1D0Ev,_ZTv0_n20_N8S19572C1D0Ev),
  ABISELECT(-296,-168),
  ABISELECT(-328,-184),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S19572C1D1Ev,_ZTvn4_n20_N8S19572C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S19572C1D0Ev,_ZTvn4_n20_N8S19572C1D0Ev),
  ABISELECT(-312,-176),
  ABISELECT(-344,-192),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  ABISELECT(-400,-240),
  ABISELECT(-432,-256),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
};
extern VTBL_ENTRY _ZTV8S19572C1[];
extern void _ZN8S19572C72v2Ev();
extern void _ZN8S19572C7D1Ev();
extern void _ZN8S19572C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19572C7__8S19572C1[] = {
  ABISELECT(196,116),
  0,
  ABISELECT(64,28),
  ABISELECT(16,8),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C7[0]),
  (VTBL_ENTRY)&_ZN8S19572C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19572C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19572C7D0Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S19572C7D1Ev,_ZTv0_n28_N8S19572C7D1Ev)();
extern void ABISELECT(_ZThn64_N8S19572C7D1Ev,_ZThn28_N8S19572C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19572C7D0Ev,_ZTv0_n28_N8S19572C7D0Ev)();
extern void ABISELECT(_ZThn64_N8S19572C7D0Ev,_ZThn28_N8S19572C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19572C8__8S19572C7__8S19572C1[] = {
  ABISELECT(-64,-28),
  ABISELECT(132,88),
  ABISELECT(-32,-12),
  ABISELECT(-48,-20),
  ABISELECT(-64,-28),
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S19572C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19572C7D1Ev,_ZTv0_n28_N8S19572C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19572C7D0Ev,_ZTv0_n28_N8S19572C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__8S19572C7__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19572C7[0]),
};
extern void ABISELECT(_ZTvn16_n56_N8S19572C7D1Ev,_ZTvn8_n28_N8S19572C7D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S19572C7D0Ev,_ZTvn8_n28_N8S19572C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C118S19572C8__8S19572C7__8S19572C1[] = {
  ABISELECT(-48,-20),
  ABISELECT(116,80),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI8S19572C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S19572C7D1Ev,_ZTvn8_n28_N8S19572C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S19572C7D0Ev,_ZTvn8_n28_N8S19572C7D0Ev),
};
extern void ABISELECT(_ZTvn24_n56_N8S19572C7D1Ev,_ZTvn12_n28_N8S19572C7D1Ev)();
extern void ABISELECT(_ZTvn24_n56_N8S19572C7D0Ev,_ZTvn12_n28_N8S19572C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C118S19572C8__8S19572C7__8S19572C1[] = {
  ABISELECT(-56,-24),
  ABISELECT(-88,-40),
  (VTBL_ENTRY)&(_ZTI8S19572C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n56_N8S19572C7D1Ev,_ZTvn12_n28_N8S19572C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n56_N8S19572C7D0Ev,_ZTvn12_n28_N8S19572C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C118S19572C8__A2__8S19572C7__8S19572C1[] = {
  ABISELECT(-72,-32),
  ABISELECT(-104,-48),
  (VTBL_ENTRY)&(_ZTI8S19572C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C2__8S19572C1[] = {
  ABISELECT(24,12),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C38S19572C2__8S19572C1[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C3[0]),
};
extern void _ZN8S19572C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19572C6__8S19572C2__8S19572C1[] = {
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19572C2[0]),
  (VTBL_ENTRY)&_ZN8S19572C62v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__8S19572C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void _ZN8S19572C8D1Ev();
extern void _ZN8S19572C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19572C8__8S19572C1[] = {
  ABISELECT(132,88),
  ABISELECT(-32,-12),
  ABISELECT(-48,-20),
  ABISELECT(-64,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
  (VTBL_ENTRY)&_ZN8S19572C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19572C8D0Ev,
};
extern void _ZN9S19572C11D1Ev();
extern void _ZN9S19572C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C118S19572C8__8S19572C1[] = {
  ABISELECT(-48,-20),
  ABISELECT(116,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&_ZN9S19572C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19572C129S19572C118S19572C8__8S19572C1[] = {
  ABISELECT(116,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C118S19572C8__8S19572C1[] = {
  ABISELECT(-56,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C139S19572C118S19572C8__A1__8S19572C1[] = {
  ABISELECT(-56,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C118S19572C8__A2__8S19572C1[] = {
  ABISELECT(-72,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C118S19572C8__8S19572C1[] = {
  ABISELECT(-56,-24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__A1__9S19572C118S19572C8__8S19572C1[] = {
  ABISELECT(-72,-32),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C3__8S19572C8__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(32,16),
  ABISELECT(64,28),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__8S19572C8__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(48,20),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
};
extern void ABISELECT(_ZThn16_N8S19572C8D1Ev,_ZThn8_N8S19572C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19572C8D0Ev,_ZThn8_N8S19572C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C11__8S19572C8__8S19572C1[] = {
  ABISELECT(-48,-20),
  ABISELECT(116,80),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19572C8D1Ev,_ZThn8_N8S19572C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19572C8D0Ev,_ZThn8_N8S19572C8D0Ev),
};
extern void ABISELECT(_ZThn24_N8S19572C8D1Ev,_ZThn12_N8S19572C8D1Ev)();
extern void ABISELECT(_ZThn24_N8S19572C8D0Ev,_ZThn12_N8S19572C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__8S19572C8__8S19572C1[] = {
  ABISELECT(-56,-24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19572C8D1Ev,_ZThn12_N8S19572C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19572C8D0Ev,_ZThn12_N8S19572C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A2__8S19572C8__8S19572C1[] = {
  ABISELECT(-72,-32),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C3__A1__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__8S19572C3__A1__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19572C3[0]),
};
extern void _ZN9S19572C14D1Ev();
extern void _ZN9S19572C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C14__8S19572C1[] = {
  ABISELECT(232,136),
  ABISELECT(-200,-120),
  ABISELECT(120,60),
  ABISELECT(64,32),
  ABISELECT(-200,-120),
  0,
  ABISELECT(48,24),
  ABISELECT(24,12),
  ABISELECT(-168,-104),
  ABISELECT(-184,-112),
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&_ZN9S19572C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C14D0Ev,
};
extern void _ZN9S19572C15D1Ev();
extern void _ZN9S19572C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C159S19572C14__8S19572C1[] = {
  ABISELECT(-200,-120),
  ABISELECT(120,60),
  ABISELECT(64,32),
  ABISELECT(-200,-120),
  0,
  ABISELECT(48,24),
  ABISELECT(24,12),
  ABISELECT(-168,-104),
  ABISELECT(-184,-112),
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&_ZN9S19572C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C159S19572C14__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(184,112),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
};
extern void ABISELECT(_ZTv0_n96_N9S19572C15D1Ev,_ZTv0_n48_N9S19572C15D1Ev)();
extern void ABISELECT(_ZThn24_N9S19572C15D1Ev,_ZThn12_N9S19572C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19572C15D0Ev,_ZTv0_n48_N9S19572C15D0Ev)();
extern void ABISELECT(_ZThn24_N9S19572C15D0Ev,_ZThn12_N9S19572C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C16__9S19572C159S19572C14__8S19572C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-224,-132),
  ABISELECT(24,12),
  ABISELECT(96,48),
  ABISELECT(-24,-12),
  ABISELECT(-28,-16),
  ABISELECT(40,20),
  ABISELECT(-224,-132),
  ABISELECT(-208,-124),
  ABISELECT(-192,-116),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19572C15D1Ev,_ZTv0_n48_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19572C15D0Ev,_ZTv0_n48_N9S19572C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19572C15D1Ev,_ZTv0_n16_N9S19572C15D1Ev)();
extern void ABISELECT(_ZThn48_N9S19572C15D1Ev,_ZThn24_N9S19572C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19572C15D0Ev,_ZTv0_n16_N9S19572C15D0Ev)();
extern void ABISELECT(_ZThn48_N9S19572C15D0Ev,_ZThn24_N9S19572C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C159S19572C14__8S19572C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-216,-128),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C15D1Ev,_ZTv0_n16_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C15D0Ev,_ZTv0_n16_N9S19572C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C3__9S19572C159S19572C14__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(32,16),
  ABISELECT(200,120),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
};
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C15D1Ev,_ZTv0_n32_N9S19572C15D1Ev)();
extern void ABISELECT(_ZThn64_N9S19572C15D1Ev,_ZThn32_N9S19572C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C15D0Ev,_ZTv0_n32_N9S19572C15D0Ev)();
extern void ABISELECT(_ZThn64_N9S19572C15D0Ev,_ZThn32_N9S19572C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C159S19572C14__8S19572C1[] = {
  ABISELECT(-64,-32),
  0,
  ABISELECT(56,28),
  ABISELECT(-64,-32),
  ABISELECT(-68,-36),
  ABISELECT(-232,-136),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C15D1Ev,_ZTv0_n32_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C15D0Ev,_ZTv0_n32_N9S19572C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C15D1Ev,_ZTv0_n20_N9S19572C15D1Ev)();
extern void ABISELECT(_ZThn120_N9S19572C15D1Ev,_ZThn60_N9S19572C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C15D0Ev,_ZTv0_n20_N9S19572C15D0Ev)();
extern void ABISELECT(_ZThn120_N9S19572C15D0Ev,_ZThn60_N9S19572C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C159S19572C14__8S19572C1[] = {
  ABISELECT(-120,-60),
  ABISELECT(-288,-164),
  ABISELECT(-124,-64),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C15D1Ev,_ZTv0_n20_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C15D0Ev,_ZTv0_n20_N9S19572C15D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C15D1Ev,_ZTvn4_n20_N9S19572C15D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C15D0Ev,_ZTvn4_n20_N9S19572C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__A1__9S19572C159S19572C14__8S19572C1[] = {
  ABISELECT(-296,-168),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C15D1Ev,_ZTvn4_n20_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C15D0Ev,_ZTvn4_n20_N9S19572C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A3__9S19572C159S19572C14__8S19572C1[] = {
  ABISELECT(-312,-176),
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C219S19572C16__9S19572C159S19572C14__8S19572C1[] = {
  ABISELECT(-224,-132),
  ABISELECT(-208,-124),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C14__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(184,112),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
};
extern void ABISELECT(_ZTv0_n96_N9S19572C14D1Ev,_ZTv0_n48_N9S19572C14D1Ev)();
extern void ABISELECT(_ZThn24_N9S19572C14D1Ev,_ZThn12_N9S19572C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19572C14D0Ev,_ZTv0_n48_N9S19572C14D0Ev)();
extern void ABISELECT(_ZThn24_N9S19572C14D0Ev,_ZThn12_N9S19572C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C16__9S19572C14__8S19572C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-224,-132),
  ABISELECT(24,12),
  ABISELECT(96,48),
  ABISELECT(-24,-12),
  ABISELECT(-28,-16),
  ABISELECT(40,20),
  ABISELECT(-224,-132),
  ABISELECT(-208,-124),
  ABISELECT(-192,-116),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19572C14D1Ev,_ZTv0_n48_N9S19572C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19572C14D0Ev,_ZTv0_n48_N9S19572C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19572C14D1Ev,_ZTv0_n16_N9S19572C14D1Ev)();
extern void ABISELECT(_ZThn48_N9S19572C14D1Ev,_ZThn24_N9S19572C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19572C14D0Ev,_ZTv0_n16_N9S19572C14D0Ev)();
extern void ABISELECT(_ZThn48_N9S19572C14D0Ev,_ZThn24_N9S19572C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C14__8S19572C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-216,-128),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C14D1Ev,_ZTv0_n16_N9S19572C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C14D0Ev,_ZTv0_n16_N9S19572C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C3__9S19572C14__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(32,16),
  ABISELECT(200,120),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
};
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C14D1Ev,_ZTv0_n32_N9S19572C14D1Ev)();
extern void ABISELECT(_ZThn64_N9S19572C14D1Ev,_ZThn32_N9S19572C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C14D0Ev,_ZTv0_n32_N9S19572C14D0Ev)();
extern void ABISELECT(_ZThn64_N9S19572C14D0Ev,_ZThn32_N9S19572C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C14__8S19572C1[] = {
  ABISELECT(-64,-32),
  0,
  ABISELECT(56,28),
  ABISELECT(-64,-32),
  ABISELECT(-68,-36),
  ABISELECT(-232,-136),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C14D1Ev,_ZTv0_n32_N9S19572C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C14D0Ev,_ZTv0_n32_N9S19572C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C14D1Ev,_ZTv0_n20_N9S19572C14D1Ev)();
extern void ABISELECT(_ZThn120_N9S19572C14D1Ev,_ZThn60_N9S19572C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C14D0Ev,_ZTv0_n20_N9S19572C14D0Ev)();
extern void ABISELECT(_ZThn120_N9S19572C14D0Ev,_ZThn60_N9S19572C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C14__8S19572C1[] = {
  ABISELECT(-120,-60),
  ABISELECT(-288,-164),
  ABISELECT(-124,-64),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C14D1Ev,_ZTv0_n20_N9S19572C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C14D0Ev,_ZTv0_n20_N9S19572C14D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C14D1Ev,_ZTvn4_n20_N9S19572C14D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C14D0Ev,_ZTvn4_n20_N9S19572C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__A1__9S19572C14__8S19572C1[] = {
  ABISELECT(-296,-168),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C14D1Ev,_ZTvn4_n20_N9S19572C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C14D0Ev,_ZTvn4_n20_N9S19572C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A3__9S19572C14__8S19572C1[] = {
  ABISELECT(-312,-176),
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C219S19572C16__9S19572C14__8S19572C1[] = {
  ABISELECT(-224,-132),
  ABISELECT(-208,-124),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C20__9S19572C14__8S19572C1[] = {
  ABISELECT(-400,-240),
  ABISELECT(-232,-136),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
};
extern void _ZN9S19572C16D1Ev();
extern void _ZN9S19572C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C16__8S19572C1[] = {
  ABISELECT(-224,-132),
  ABISELECT(24,12),
  ABISELECT(96,48),
  ABISELECT(-24,-12),
  ABISELECT(-28,-16),
  ABISELECT(40,20),
  ABISELECT(-224,-132),
  ABISELECT(-208,-124),
  ABISELECT(-192,-116),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&_ZN9S19572C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C16D0Ev,
};
extern void _ZN9S19572C17D1Ev();
extern void _ZN9S19572C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C179S19572C16__8S19572C1[] = {
  ABISELECT(96,48),
  ABISELECT(-24,-12),
  ABISELECT(-28,-16),
  ABISELECT(40,20),
  ABISELECT(-224,-132),
  ABISELECT(-208,-124),
  ABISELECT(-192,-116),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&_ZN9S19572C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C3__9S19572C179S19572C16__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(32,16),
  ABISELECT(224,132),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C179S19572C16__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(208,124),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
};
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev)();
extern void ABISELECT(_ZThn40_N9S19572C17D1Ev,_ZThn20_N9S19572C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev)();
extern void ABISELECT(_ZThn40_N9S19572C17D0Ev,_ZThn20_N9S19572C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C179S19572C16__8S19572C1[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(56,28),
  ABISELECT(-64,-32),
  ABISELECT(-68,-36),
  ABISELECT(-232,-136),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C179S19572C16__8S19572C1[] = {
  -4,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev)();
extern void ABISELECT(_ZThn96_N9S19572C17D1Ev,_ZThn48_N9S19572C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev)();
extern void ABISELECT(_ZThn96_N9S19572C17D0Ev,_ZThn48_N9S19572C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C179S19572C16__8S19572C1[] = {
  ABISELECT(-96,-48),
  ABISELECT(-288,-164),
  ABISELECT(-124,-64),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C17D1Ev,_ZTvn4_n20_N9S19572C17D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C17D0Ev,_ZTvn4_n20_N9S19572C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__9S19572C179S19572C16__8S19572C1[] = {
  ABISELECT(-296,-168),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C17D1Ev,_ZTvn4_n20_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C17D0Ev,_ZTvn4_n20_N9S19572C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A2__9S19572C179S19572C16__8S19572C1[] = {
  ABISELECT(-312,-176),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C219S19572C16__8S19572C1[] = {
  ABISELECT(-224,-132),
  ABISELECT(-208,-124),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C219S19572C16__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(224,132),
  (VTBL_ENTRY)&(_ZTI9S19572C21[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19572C16D1Ev,_ZTv0_n16_N9S19572C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S19572C16D1Ev,_ZThn12_N9S19572C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19572C16D0Ev,_ZTv0_n16_N9S19572C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S19572C16D0Ev,_ZThn12_N9S19572C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C16__8S19572C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-216,-128),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C16D1Ev,_ZTv0_n16_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C16D0Ev,_ZTv0_n16_N9S19572C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C16__8S19572C1[] = {
  -4,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C3__9S19572C16__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(32,16),
  ABISELECT(224,132),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__A1__9S19572C16__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(208,124),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
};
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C16D1Ev,_ZTv0_n32_N9S19572C16D1Ev)();
extern void ABISELECT(_ZThn40_N9S19572C16D1Ev,_ZThn20_N9S19572C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C16D0Ev,_ZTv0_n32_N9S19572C16D0Ev)();
extern void ABISELECT(_ZThn40_N9S19572C16D0Ev,_ZThn20_N9S19572C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C16__8S19572C1[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(56,28),
  ABISELECT(-64,-32),
  ABISELECT(-68,-36),
  ABISELECT(-232,-136),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C16D1Ev,_ZTv0_n32_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C16D0Ev,_ZTv0_n32_N9S19572C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C16D1Ev,_ZTv0_n20_N9S19572C16D1Ev)();
extern void ABISELECT(_ZThn96_N9S19572C16D1Ev,_ZThn48_N9S19572C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C16D0Ev,_ZTv0_n20_N9S19572C16D0Ev)();
extern void ABISELECT(_ZThn96_N9S19572C16D0Ev,_ZThn48_N9S19572C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C16__8S19572C1[] = {
  ABISELECT(-96,-48),
  ABISELECT(-288,-164),
  ABISELECT(-124,-64),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C16D1Ev,_ZTv0_n20_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C16D0Ev,_ZTv0_n20_N9S19572C16D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C16D1Ev,_ZTvn4_n20_N9S19572C16D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C16D0Ev,_ZTvn4_n20_N9S19572C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__A1__9S19572C16__8S19572C1[] = {
  ABISELECT(-296,-168),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C16D1Ev,_ZTvn4_n20_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C16D0Ev,_ZTvn4_n20_N9S19572C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A3__9S19572C16__8S19572C1[] = {
  ABISELECT(-312,-176),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C21__9S19572C16__8S19572C1[] = {
  ABISELECT(-224,-132),
  ABISELECT(-208,-124),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C13__A1__8S19572C1[] = {
  ABISELECT(-216,-128),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C13__A3__8S19572C1[] = {
  ABISELECT(-216,-128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__A1__8S19572C1[] = {
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C182v3Ev();
extern void _ZN9S19572C18D1Ev();
extern void _ZN9S19572C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C18__8S19572C1[] = {
  ABISELECT(56,28),
  ABISELECT(-64,-32),
  ABISELECT(-68,-36),
  ABISELECT(-232,-136),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&_ZN9S19572C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C18D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C18__A6__8S19572C1[] = {
  ABISELECT(-232,-136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C18__8S19572C1[] = {
  -4,
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev)();
extern void ABISELECT(_ZThn56_N9S19572C18D1Ev,_ZThn28_N9S19572C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev)();
extern void ABISELECT(_ZThn56_N9S19572C18D0Ev,_ZThn28_N9S19572C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C18__8S19572C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-288,-164),
  ABISELECT(-124,-64),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C18D1Ev,_ZTvn4_n20_N9S19572C18D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C18D0Ev,_ZTvn4_n20_N9S19572C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__9S19572C18__8S19572C1[] = {
  ABISELECT(-296,-168),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C18D1Ev,_ZTvn4_n20_N9S19572C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C18D0Ev,_ZTvn4_n20_N9S19572C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A1__9S19572C18__8S19572C1[] = {
  ABISELECT(-312,-176),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
};
extern void _ZN9S19572C11D1Ev();
extern void _ZN9S19572C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C11__A1__8S19572C1[] = {
  ABISELECT(-288,-164),
  ABISELECT(-124,-64),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&_ZN9S19572C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19572C129S19572C11__A2__8S19572C1[] = {
  ABISELECT(-124,-64),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__A2__8S19572C1[] = {
  ABISELECT(-296,-168),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C139S19572C11__A4__8S19572C1[] = {
  ABISELECT(-296,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A5__8S19572C1[] = {
  ABISELECT(-312,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C11__A1__8S19572C1[] = {
  ABISELECT(-296,-168),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__A1__9S19572C11__A1__8S19572C1[] = {
  ABISELECT(-312,-176),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C20__8S19572C1[] = {
  ABISELECT(-400,-240),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C20[0]),
};
static  VTT_ENTRY vtt_S19572C1[] = {
  {&(_ZTV8S19572C1[17]),  17,125},
  {&(_tg__ZTV8S19572C7__8S19572C1[7]),  7,10},
  {&(_tg__ZTV8S19572C8__8S19572C7__8S19572C1[7]),  7,9},
  {&(_tg__ZTV8S19572C7__8S19572C1[7]),  7,10},
  {&(_tg__ZTV8S19572C4__8S19572C7__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C118S19572C8__8S19572C7__8S19572C1[4]),  4,6},
  {&(_tg__ZTV9S19572C139S19572C118S19572C8__8S19572C7__8S19572C1[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C118S19572C8__A2__8S19572C7__8S19572C1[3]),  3,3},
  {&(_ZTV8S19572C1[25]),  25,125},
  {&(_ZTV8S19572C1[25]),  25,125},
  {&(_ZTV8S19572C1[28]),  28,125},
  {&(_ZTV8S19572C1[36]),  36,125},
  {&(_ZTV8S19572C1[17]),  17,125},
  {&(_ZTV8S19572C1[42]),  42,125},
  {&(_ZTV8S19572C1[47]),  47,125},
  {&(_ZTV8S19572C1[52]),  52,125},
  {&(_ZTV8S19572C1[67]),  67,125},
  {&(_ZTV8S19572C1[84]),  84,125},
  {&(_ZTV8S19572C1[94]),  94,125},
  {&(_ZTV8S19572C1[67]),  67,125},
  {&(_ZTV8S19572C1[104]),  104,125},
  {&(_ZTV8S19572C1[112]),  112,125},
  {&(_ZTV8S19572C1[117]),  117,125},
  {&(_ZTV8S19572C1[122]),  122,125},
  {&(_ZTV8S19572C1[90]),  90,125},
  {&(_ZTV8S19572C1[71]),  71,125},
  {&(_ZTV8S19572C1[125]),  125,125},
  {&(_tg__ZTV8S19572C2__8S19572C1[5]),  5,5},
  {&(_tg__ZTV8S19572C38S19572C2__8S19572C1[4]),  4,4},
  {&(_tg__ZTV8S19572C38S19572C2__8S19572C1[4]),  4,4},
  {&(_tg__ZTV8S19572C2__8S19572C1[5]),  5,5},
  {&(_tg__ZTV8S19572C6__8S19572C2__8S19572C1[3]),  3,4},
  {&(_tg__ZTV8S19572C4__8S19572C1[3]),  3,3},
  {&(_tg__ZTV8S19572C8__8S19572C1[6]),  6,8},
  {&(_tg__ZTV9S19572C118S19572C8__8S19572C1[4]),  4,6},
  {&(_tg__ZTV9S19572C129S19572C118S19572C8__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C139S19572C118S19572C8__8S19572C1[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C139S19572C118S19572C8__A1__8S19572C1[3]),  3,3},
  {&(_tg__ZTV8S19572C49S19572C118S19572C8__A2__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C118S19572C8__8S19572C1[3]),  3,5},
  {&(_tg__ZTV8S19572C4__A1__9S19572C118S19572C8__8S19572C1[3]),  3,3},
  {&(_tg__ZTV8S19572C3__8S19572C8__8S19572C1[4]),  4,4},
  {&(_tg__ZTV8S19572C4__8S19572C8__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C11__8S19572C8__8S19572C1[4]),  4,6},
  {&(_tg__ZTV9S19572C139S19572C11__8S19572C8__8S19572C1[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A2__8S19572C8__8S19572C1[3]),  3,3},
  {&(_tg__ZTV8S19572C3__A1__8S19572C1[4]),  4,4},
  {&(_tg__ZTV8S19572C4__8S19572C3__A1__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C14__8S19572C1[13]),  13,15},
  {&(_tg__ZTV9S19572C159S19572C14__8S19572C1[12]),  12,14},
  {&(_tg__ZTV8S19572C4__9S19572C159S19572C14__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C16__9S19572C159S19572C14__8S19572C1[12]),  12,14},
  {&(_tg__ZTV9S19572C13__9S19572C159S19572C14__8S19572C1[4]),  4,6},
  {&(_tg__ZTV9S19572C159S19572C14__8S19572C1[12]),  12,14},
  {&(_tg__ZTV8S19572C3__9S19572C159S19572C14__8S19572C1[4]),  4,4},
  {&(_tg__ZTV9S19572C18__9S19572C159S19572C14__8S19572C1[8]),  8,11},
  {&(_tg__ZTV9S19572C11__9S19572C159S19572C14__8S19572C1[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__A1__9S19572C159S19572C14__8S19572C1[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A3__9S19572C159S19572C14__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C219S19572C16__9S19572C159S19572C14__8S19572C1[4]),  4,4},
  {&(_tg__ZTV8S19572C4__9S19572C14__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C16__9S19572C14__8S19572C1[12]),  12,14},
  {&(_tg__ZTV9S19572C13__9S19572C14__8S19572C1[4]),  4,6},
  {&(_tg__ZTV9S19572C14__8S19572C1[13]),  13,15},
  {&(_tg__ZTV8S19572C3__9S19572C14__8S19572C1[4]),  4,4},
  {&(_tg__ZTV9S19572C18__9S19572C14__8S19572C1[8]),  8,11},
  {&(_tg__ZTV9S19572C11__9S19572C14__8S19572C1[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__A1__9S19572C14__8S19572C1[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A3__9S19572C14__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C219S19572C16__9S19572C14__8S19572C1[4]),  4,4},
  {&(_tg__ZTV9S19572C20__9S19572C14__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C16__8S19572C1[11]),  11,13},
  {&(_tg__ZTV9S19572C179S19572C16__8S19572C1[9]),  9,11},
  {&(_tg__ZTV8S19572C3__9S19572C179S19572C16__8S19572C1[4]),  4,4},
  {&(_tg__ZTV8S19572C4__9S19572C179S19572C16__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C18__9S19572C179S19572C16__8S19572C1[8]),  8,11},
  {&(_tg__ZTV9S19572C12__9S19572C179S19572C16__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C179S19572C16__8S19572C1[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__9S19572C179S19572C16__8S19572C1[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A2__9S19572C179S19572C16__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C219S19572C16__8S19572C1[4]),  4,4},
  {&(_tg__ZTV8S19572C4__9S19572C219S19572C16__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C16__8S19572C1[4]),  4,6},
  {&(_tg__ZTV9S19572C12__9S19572C16__8S19572C1[3]),  3,3},
  {&(_tg__ZTV8S19572C3__9S19572C16__8S19572C1[4]),  4,4},
  {&(_tg__ZTV8S19572C4__A1__9S19572C16__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C18__9S19572C16__8S19572C1[8]),  8,11},
  {&(_tg__ZTV9S19572C11__9S19572C16__8S19572C1[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__A1__9S19572C16__8S19572C1[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A3__9S19572C16__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C21__9S19572C16__8S19572C1[4]),  4,4},
  {&(_tg__ZTV9S19572C13__A1__8S19572C1[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C13__A3__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C12__A1__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C18__8S19572C1[6]),  6,9},
  {&(_tg__ZTV8S19572C49S19572C18__A6__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C12__9S19572C18__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C18__8S19572C1[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__9S19572C18__8S19572C1[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A1__9S19572C18__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C11__A1__8S19572C1[4]),  4,6},
  {&(_tg__ZTV9S19572C129S19572C11__A2__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C139S19572C11__A2__8S19572C1[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C139S19572C11__A4__8S19572C1[3]),  3,3},
  {&(_tg__ZTV8S19572C49S19572C11__A5__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C11__A1__8S19572C1[3]),  3,5},
  {&(_tg__ZTV8S19572C4__A1__9S19572C11__A1__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C20__8S19572C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19572C1[];
extern  VTBL_ENTRY _ZTV8S19572C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C1[];
static VTBL_ENTRY alt_thunk_names27[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19572C18D0Ev,_ZThn28_N9S19572C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19572C18D1Ev,_ZThn28_N9S19572C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C16D0Ev,_ZTv0_n20_N9S19572C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19572C16D0Ev,_ZThn48_N9S19572C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C16D1Ev,_ZTv0_n20_N9S19572C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19572C16D1Ev,_ZThn48_N9S19572C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C16D0Ev,_ZTv0_n32_N9S19572C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C16D0Ev,_ZThn20_N9S19572C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C16D1Ev,_ZTv0_n32_N9S19572C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C16D1Ev,_ZThn20_N9S19572C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C16D0Ev,_ZTv0_n16_N9S19572C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C16D0Ev,_ZThn12_N9S19572C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C16D1Ev,_ZTv0_n16_N9S19572C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C16D1Ev,_ZThn12_N9S19572C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19572C17D0Ev,_ZThn48_N9S19572C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19572C17D1Ev,_ZThn48_N9S19572C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C17D0Ev,_ZThn20_N9S19572C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C17D1Ev,_ZThn20_N9S19572C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C14D0Ev,_ZTv0_n20_N9S19572C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19572C14D0Ev,_ZThn60_N9S19572C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C14D1Ev,_ZTv0_n20_N9S19572C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19572C14D1Ev,_ZThn60_N9S19572C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C14D0Ev,_ZTv0_n32_N9S19572C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19572C14D0Ev,_ZThn32_N9S19572C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C14D1Ev,_ZTv0_n32_N9S19572C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19572C14D1Ev,_ZThn32_N9S19572C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C14D0Ev,_ZTv0_n16_N9S19572C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19572C14D0Ev,_ZThn24_N9S19572C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C14D1Ev,_ZTv0_n16_N9S19572C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19572C14D1Ev,_ZThn24_N9S19572C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19572C14D0Ev,_ZTv0_n48_N9S19572C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C14D0Ev,_ZThn12_N9S19572C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19572C14D1Ev,_ZTv0_n48_N9S19572C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C14D1Ev,_ZThn12_N9S19572C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C15D0Ev,_ZTv0_n20_N9S19572C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19572C15D0Ev,_ZThn60_N9S19572C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C15D1Ev,_ZTv0_n20_N9S19572C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19572C15D1Ev,_ZThn60_N9S19572C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C15D0Ev,_ZTv0_n32_N9S19572C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19572C15D0Ev,_ZThn32_N9S19572C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C15D1Ev,_ZTv0_n32_N9S19572C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19572C15D1Ev,_ZThn32_N9S19572C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C15D0Ev,_ZTv0_n16_N9S19572C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19572C15D0Ev,_ZThn24_N9S19572C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C15D1Ev,_ZTv0_n16_N9S19572C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19572C15D1Ev,_ZThn24_N9S19572C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19572C15D0Ev,_ZTv0_n48_N9S19572C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C15D0Ev,_ZThn12_N9S19572C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19572C15D1Ev,_ZTv0_n48_N9S19572C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C15D1Ev,_ZThn12_N9S19572C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19572C7D0Ev,_ZTv0_n28_N8S19572C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19572C7D0Ev,_ZThn28_N8S19572C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19572C7D1Ev,_ZTv0_n28_N8S19572C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19572C7D1Ev,_ZThn28_N8S19572C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19572C1D0Ev,_ZTv0_n20_N8S19572C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S19572C1D0Ev,_ZThn180_N8S19572C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19572C1D1Ev,_ZTv0_n20_N8S19572C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S19572C1D1Ev,_ZThn180_N8S19572C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19572C1D0Ev,_ZTv0_n32_N8S19572C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19572C1D0Ev,_ZThn152_N8S19572C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19572C1D1Ev,_ZTv0_n32_N8S19572C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19572C1D1Ev,_ZThn152_N8S19572C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19572C1D0Ev,_ZTv0_n16_N8S19572C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19572C1D0Ev,_ZThn144_N8S19572C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19572C1D1Ev,_ZTv0_n16_N8S19572C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19572C1D1Ev,_ZThn144_N8S19572C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19572C1D0Ev,_ZTv0_n48_N8S19572C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19572C1D0Ev,_ZThn132_N8S19572C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19572C1D1Ev,_ZTv0_n48_N8S19572C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19572C1D1Ev,_ZThn132_N8S19572C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S19572C1D0Ev,_ZTv0_n56_N8S19572C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S19572C1D0Ev,_ZThn120_N8S19572C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S19572C1D1Ev,_ZTv0_n56_N8S19572C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S19572C1D1Ev,_ZThn120_N8S19572C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19572C1D0Ev,_ZTv0_n28_N8S19572C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19572C1D0Ev,_ZThn28_N8S19572C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19572C1D1Ev,_ZTv0_n28_N8S19572C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19572C1D1Ev,_ZThn28_N8S19572C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19572C1 = {  "S19572C1", // class name
  bases_S19572C1, 43,
  &(vtc_S19572C1[0]), // expected_vtbl_contents
  &(vtt_S19572C1[0]), // expected_vtt_contents
  ABISELECT(448,260), // object size
  NSPAIRA(_ZTI8S19572C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19572C1),125, //virtual function table var
  17, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19572C1),108, //virtual table table var
  30, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names27,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4266C3_nt  {
  virtual  ~S4266C3_nt(); // _ZN10S4266C3_ntD1Ev
  virtual void  v14(); // _ZN10S4266C3_nt3v14Ev
  virtual void  v15(); // _ZN10S4266C3_nt3v15Ev
  virtual void  v16(); // _ZN10S4266C3_nt3v16Ev
  virtual void  v17(); // _ZN10S4266C3_nt3v17Ev
  virtual void  v18(); // _ZN10S4266C3_nt3v18Ev
  virtual void  v19(); // _ZN10S4266C3_nt3v19Ev
  virtual void  v20(); // _ZN10S4266C3_nt3v20Ev
  virtual void  v21(); // _ZN10S4266C3_nt3v21Ev
  virtual void  v22(); // _ZN10S4266C3_nt3v22Ev
  virtual void  v23(); // _ZN10S4266C3_nt3v23Ev
  virtual void  v24(); // _ZN10S4266C3_nt3v24Ev
  virtual void  v25(); // _ZN10S4266C3_nt3v25Ev
  virtual void  v26(); // _ZN10S4266C3_nt3v26Ev
  virtual void  v27(); // _ZN10S4266C3_nt3v27Ev
  virtual void  v28(); // _ZN10S4266C3_nt3v28Ev
  virtual void  v29(); // _ZN10S4266C3_nt3v29Ev
  virtual void  v30(); // _ZN10S4266C3_nt3v30Ev
  virtual void  v31(); // _ZN10S4266C3_nt3v31Ev
  virtual void  v32(); // _ZN10S4266C3_nt3v32Ev
  virtual void  v33(); // _ZN10S4266C3_nt3v33Ev
  virtual void  v34(); // _ZN10S4266C3_nt3v34Ev
  virtual void  v35(); // _ZN10S4266C3_nt3v35Ev
  virtual void  v36(); // _ZN10S4266C3_nt3v36Ev
  virtual void  v37(); // _ZN10S4266C3_nt3v37Ev
  virtual void  v38(); // _ZN10S4266C3_nt3v38Ev
  virtual void  v39(); // _ZN10S4266C3_nt3v39Ev
  S4266C3_nt(); // tgen
};
//SIG(-1 S4266C3_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}


 S4266C3_nt ::~S4266C3_nt(){ note_dtor("S4266C3_nt", this);}
void  S4266C3_nt ::v14(){vfunc_called(this, "_ZN10S4266C3_nt3v14Ev");}
void  S4266C3_nt ::v15(){vfunc_called(this, "_ZN10S4266C3_nt3v15Ev");}
void  S4266C3_nt ::v16(){vfunc_called(this, "_ZN10S4266C3_nt3v16Ev");}
void  S4266C3_nt ::v17(){vfunc_called(this, "_ZN10S4266C3_nt3v17Ev");}
void  S4266C3_nt ::v18(){vfunc_called(this, "_ZN10S4266C3_nt3v18Ev");}
void  S4266C3_nt ::v19(){vfunc_called(this, "_ZN10S4266C3_nt3v19Ev");}
void  S4266C3_nt ::v20(){vfunc_called(this, "_ZN10S4266C3_nt3v20Ev");}
void  S4266C3_nt ::v21(){vfunc_called(this, "_ZN10S4266C3_nt3v21Ev");}
void  S4266C3_nt ::v22(){vfunc_called(this, "_ZN10S4266C3_nt3v22Ev");}
void  S4266C3_nt ::v23(){vfunc_called(this, "_ZN10S4266C3_nt3v23Ev");}
void  S4266C3_nt ::v24(){vfunc_called(this, "_ZN10S4266C3_nt3v24Ev");}
void  S4266C3_nt ::v25(){vfunc_called(this, "_ZN10S4266C3_nt3v25Ev");}
void  S4266C3_nt ::v26(){vfunc_called(this, "_ZN10S4266C3_nt3v26Ev");}
void  S4266C3_nt ::v27(){vfunc_called(this, "_ZN10S4266C3_nt3v27Ev");}
void  S4266C3_nt ::v28(){vfunc_called(this, "_ZN10S4266C3_nt3v28Ev");}
void  S4266C3_nt ::v29(){vfunc_called(this, "_ZN10S4266C3_nt3v29Ev");}
void  S4266C3_nt ::v30(){vfunc_called(this, "_ZN10S4266C3_nt3v30Ev");}
void  S4266C3_nt ::v31(){vfunc_called(this, "_ZN10S4266C3_nt3v31Ev");}
void  S4266C3_nt ::v32(){vfunc_called(this, "_ZN10S4266C3_nt3v32Ev");}
void  S4266C3_nt ::v33(){vfunc_called(this, "_ZN10S4266C3_nt3v33Ev");}
void  S4266C3_nt ::v34(){vfunc_called(this, "_ZN10S4266C3_nt3v34Ev");}
void  S4266C3_nt ::v35(){vfunc_called(this, "_ZN10S4266C3_nt3v35Ev");}
void  S4266C3_nt ::v36(){vfunc_called(this, "_ZN10S4266C3_nt3v36Ev");}
void  S4266C3_nt ::v37(){vfunc_called(this, "_ZN10S4266C3_nt3v37Ev");}
void  S4266C3_nt ::v38(){vfunc_called(this, "_ZN10S4266C3_nt3v38Ev");}
void  S4266C3_nt ::v39(){vfunc_called(this, "_ZN10S4266C3_nt3v39Ev");}
S4266C3_nt ::S4266C3_nt(){ note_ctor("S4266C3_nt", this);} // tgen

//skip512 S4266C3_nt

#else // __cplusplus

extern void _ZN10S4266C3_ntC1Ev();
extern void _ZN10S4266C3_ntD1Ev();
Name_Map name_map_S4266C3_nt[] = {
  NSPAIR(_ZN10S4266C3_ntC1Ev),
  NSPAIR(_ZN10S4266C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4266C3_nt[];
extern void _ZN10S4266C3_ntD1Ev();
extern void _ZN10S4266C3_ntD0Ev();
extern void _ZN10S4266C3_nt3v14Ev();
extern void _ZN10S4266C3_nt3v15Ev();
extern void _ZN10S4266C3_nt3v16Ev();
extern void _ZN10S4266C3_nt3v17Ev();
extern void _ZN10S4266C3_nt3v18Ev();
extern void _ZN10S4266C3_nt3v19Ev();
extern void _ZN10S4266C3_nt3v20Ev();
extern void _ZN10S4266C3_nt3v21Ev();
extern void _ZN10S4266C3_nt3v22Ev();
extern void _ZN10S4266C3_nt3v23Ev();
extern void _ZN10S4266C3_nt3v24Ev();
extern void _ZN10S4266C3_nt3v25Ev();
extern void _ZN10S4266C3_nt3v26Ev();
extern void _ZN10S4266C3_nt3v27Ev();
extern void _ZN10S4266C3_nt3v28Ev();
extern void _ZN10S4266C3_nt3v29Ev();
extern void _ZN10S4266C3_nt3v30Ev();
extern void _ZN10S4266C3_nt3v31Ev();
extern void _ZN10S4266C3_nt3v32Ev();
extern void _ZN10S4266C3_nt3v33Ev();
extern void _ZN10S4266C3_nt3v34Ev();
extern void _ZN10S4266C3_nt3v35Ev();
extern void _ZN10S4266C3_nt3v36Ev();
extern void _ZN10S4266C3_nt3v37Ev();
extern void _ZN10S4266C3_nt3v38Ev();
extern void _ZN10S4266C3_nt3v39Ev();
static  VTBL_ENTRY vtc_S4266C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4266C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S4266C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v39Ev,
};
extern VTBL_ENTRY _ZTI10S4266C3_nt[];
VTBL_ENTRY *P__ZTI10S4266C3_nt = _ZTI10S4266C3_nt; 
extern  VTBL_ENTRY _ZTV10S4266C3_nt[];
Class_Descriptor cd_S4266C3_nt = {  "S4266C3_nt", // class name
  0,0,//no base classes
  &(vtc_S4266C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4266C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4266C3_nt),30, //virtual function table var
  2, // 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  S4266C4_nt  {
  int s4266c4f0[2];
};
//SIG(-1 S4266C4_nt) C1{ Fi[2]}



//skip512 S4266C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4266C2_nt  : S4266C3_nt {
  void *s4266c2f0[2];
  int s4266c2f1[4];
  ::S4266C4_nt s4266c2f2;
  void *s4266c2f3;
  char s4266c2f4;
  void *s4266c2f5;
  virtual  ~S4266C2_nt(); // _ZN10S4266C2_ntD1Ev
  virtual void  v40(); // _ZN10S4266C2_nt3v40Ev
  virtual void  v41(); // _ZN10S4266C2_nt3v41Ev
  virtual void  v42(); // _ZN10S4266C2_nt3v42Ev
  virtual void  v43(); // _ZN10S4266C2_nt3v43Ev
  virtual void  v44(); // _ZN10S4266C2_nt3v44Ev
  virtual void  v45(); // _ZN10S4266C2_nt3v45Ev
  virtual void  v46(); // _ZN10S4266C2_nt3v46Ev
  virtual void  v47(); // _ZN10S4266C2_nt3v47Ev
  virtual void  v48(); // _ZN10S4266C2_nt3v48Ev
  virtual void  v49(); // _ZN10S4266C2_nt3v49Ev
  virtual void  v50(); // _ZN10S4266C2_nt3v50Ev
  virtual void  v51(); // _ZN10S4266C2_nt3v51Ev
  virtual void  v52(); // _ZN10S4266C2_nt3v52Ev
  virtual void  v53(); // _ZN10S4266C2_nt3v53Ev
  S4266C2_nt(); // tgen
};
//SIG(-1 S4266C2_nt) C1{ BC2{ 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} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4266C2_nt ::~S4266C2_nt(){ note_dtor("S4266C2_nt", this);}
void  S4266C2_nt ::v40(){vfunc_called(this, "_ZN10S4266C2_nt3v40Ev");}
void  S4266C2_nt ::v41(){vfunc_called(this, "_ZN10S4266C2_nt3v41Ev");}
void  S4266C2_nt ::v42(){vfunc_called(this, "_ZN10S4266C2_nt3v42Ev");}
void  S4266C2_nt ::v43(){vfunc_called(this, "_ZN10S4266C2_nt3v43Ev");}
void  S4266C2_nt ::v44(){vfunc_called(this, "_ZN10S4266C2_nt3v44Ev");}
void  S4266C2_nt ::v45(){vfunc_called(this, "_ZN10S4266C2_nt3v45Ev");}
void  S4266C2_nt ::v46(){vfunc_called(this, "_ZN10S4266C2_nt3v46Ev");}
void  S4266C2_nt ::v47(){vfunc_called(this, "_ZN10S4266C2_nt3v47Ev");}
void  S4266C2_nt ::v48(){vfunc_called(this, "_ZN10S4266C2_nt3v48Ev");}
void  S4266C2_nt ::v49(){vfunc_called(this, "_ZN10S4266C2_nt3v49Ev");}
void  S4266C2_nt ::v50(){vfunc_called(this, "_ZN10S4266C2_nt3v50Ev");}
void  S4266C2_nt ::v51(){vfunc_called(this, "_ZN10S4266C2_nt3v51Ev");}
void  S4266C2_nt ::v52(){vfunc_called(this, "_ZN10S4266C2_nt3v52Ev");}
void  S4266C2_nt ::v53(){vfunc_called(this, "_ZN10S4266C2_nt3v53Ev");}
S4266C2_nt ::S4266C2_nt(){ note_ctor("S4266C2_nt", this);} // tgen

//skip512 S4266C2_nt

#else // __cplusplus

extern void _ZN10S4266C2_ntC1Ev();
extern void _ZN10S4266C2_ntD1Ev();
Name_Map name_map_S4266C2_nt[] = {
  NSPAIR(_ZN10S4266C2_ntC1Ev),
  NSPAIR(_ZN10S4266C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4266C3_nt;
extern VTBL_ENTRY _ZTI10S4266C3_nt[];
extern  VTBL_ENTRY _ZTV10S4266C3_nt[];
static Base_Class bases_S4266C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4266C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S4266C2_nt[];
extern void _ZN10S4266C2_ntD1Ev();
extern void _ZN10S4266C2_ntD0Ev();
extern void _ZN10S4266C3_nt3v14Ev();
extern void _ZN10S4266C3_nt3v15Ev();
extern void _ZN10S4266C3_nt3v16Ev();
extern void _ZN10S4266C3_nt3v17Ev();
extern void _ZN10S4266C3_nt3v18Ev();
extern void _ZN10S4266C3_nt3v19Ev();
extern void _ZN10S4266C3_nt3v20Ev();
extern void _ZN10S4266C3_nt3v21Ev();
extern void _ZN10S4266C3_nt3v22Ev();
extern void _ZN10S4266C3_nt3v23Ev();
extern void _ZN10S4266C3_nt3v24Ev();
extern void _ZN10S4266C3_nt3v25Ev();
extern void _ZN10S4266C3_nt3v26Ev();
extern void _ZN10S4266C3_nt3v27Ev();
extern void _ZN10S4266C3_nt3v28Ev();
extern void _ZN10S4266C3_nt3v29Ev();
extern void _ZN10S4266C3_nt3v30Ev();
extern void _ZN10S4266C3_nt3v31Ev();
extern void _ZN10S4266C3_nt3v32Ev();
extern void _ZN10S4266C3_nt3v33Ev();
extern void _ZN10S4266C3_nt3v34Ev();
extern void _ZN10S4266C3_nt3v35Ev();
extern void _ZN10S4266C3_nt3v36Ev();
extern void _ZN10S4266C3_nt3v37Ev();
extern void _ZN10S4266C3_nt3v38Ev();
extern void _ZN10S4266C3_nt3v39Ev();
extern void _ZN10S4266C2_nt3v40Ev();
extern void _ZN10S4266C2_nt3v41Ev();
extern void _ZN10S4266C2_nt3v42Ev();
extern void _ZN10S4266C2_nt3v43Ev();
extern void _ZN10S4266C2_nt3v44Ev();
extern void _ZN10S4266C2_nt3v45Ev();
extern void _ZN10S4266C2_nt3v46Ev();
extern void _ZN10S4266C2_nt3v47Ev();
extern void _ZN10S4266C2_nt3v48Ev();
extern void _ZN10S4266C2_nt3v49Ev();
extern void _ZN10S4266C2_nt3v50Ev();
extern void _ZN10S4266C2_nt3v51Ev();
extern void _ZN10S4266C2_nt3v52Ev();
extern void _ZN10S4266C2_nt3v53Ev();
static  VTBL_ENTRY vtc_S4266C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4266C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4266C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v53Ev,
};
extern VTBL_ENTRY _ZTI10S4266C2_nt[];
VTBL_ENTRY *P__ZTI10S4266C2_nt = _ZTI10S4266C2_nt; 
extern  VTBL_ENTRY _ZTV10S4266C2_nt[];
Class_Descriptor cd_S4266C2_nt = {  "S4266C2_nt", // class name
  bases_S4266C2_nt, 1,
  &(vtc_S4266C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI10S4266C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S4266C2_nt),44, //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  S4266C5_nt  {
  void *s4266c5f0;
  char s4266c5f1[32];
  int s4266c5f2[6];
  char s4266c5f3;
  int s4266c5f4[2];
  virtual  ~S4266C5_nt(); // _ZN10S4266C5_ntD1Ev
  virtual void  v54(); // _ZN10S4266C5_nt3v54Ev
  virtual void  v55(); // _ZN10S4266C5_nt3v55Ev
  S4266C5_nt(); // tgen
};
//SIG(-1 S4266C5_nt) C1{ vd v1 v2 Fp Fc[32] Fi[6] Fc Fi[2]}


 S4266C5_nt ::~S4266C5_nt(){ note_dtor("S4266C5_nt", this);}
void  S4266C5_nt ::v54(){vfunc_called(this, "_ZN10S4266C5_nt3v54Ev");}
void  S4266C5_nt ::v55(){vfunc_called(this, "_ZN10S4266C5_nt3v55Ev");}
S4266C5_nt ::S4266C5_nt(){ note_ctor("S4266C5_nt", this);} // tgen

//skip512 S4266C5_nt

#else // __cplusplus

extern void _ZN10S4266C5_ntC1Ev();
extern void _ZN10S4266C5_ntD1Ev();
Name_Map name_map_S4266C5_nt[] = {
  NSPAIR(_ZN10S4266C5_ntC1Ev),
  NSPAIR(_ZN10S4266C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4266C5_nt[];
extern void _ZN10S4266C5_ntD1Ev();
extern void _ZN10S4266C5_ntD0Ev();
extern void _ZN10S4266C5_nt3v54Ev();
extern void _ZN10S4266C5_nt3v55Ev();
static  VTBL_ENTRY vtc_S4266C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4266C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S4266C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4266C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4266C5_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S4266C5_nt3v55Ev,
};
extern VTBL_ENTRY _ZTI10S4266C5_nt[];
VTBL_ENTRY *P__ZTI10S4266C5_nt = _ZTI10S4266C5_nt; 
extern  VTBL_ENTRY _ZTV10S4266C5_nt[];
Class_Descriptor cd_S4266C5_nt = {  "S4266C5_nt", // class name
  0,0,//no base classes
  &(vtc_S4266C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,76), // object size
  NSPAIRA(_ZTI10S4266C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4266C5_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  S4266C1  : S4266C2_nt , S4266C5_nt {
  void *s4266c1f0[2];
  int s4266c1f1[3];
  virtual  ~S4266C1(); // _ZN7S4266C1D1Ev
  virtual void  v1(); // _ZN7S4266C12v1Ev
  virtual void  v2(); // _ZN7S4266C12v2Ev
  virtual void  v3(); // _ZN7S4266C12v3Ev
  virtual void  v4(); // _ZN7S4266C12v4Ev
  virtual void  v5(); // _ZN7S4266C12v5Ev
  virtual void  v6(); // _ZN7S4266C12v6Ev
  virtual void  v7(); // _ZN7S4266C12v7Ev
  virtual void  v8(); // _ZN7S4266C12v8Ev
  virtual void  v9(); // _ZN7S4266C12v9Ev
  virtual void  v10(); // _ZN7S4266C13v10Ev
  virtual void  v11(); // _ZN7S4266C13v11Ev
  virtual void  v12(); // _ZN7S4266C13v12Ev
  virtual void  v13(); // _ZN7S4266C13v13Ev
  S4266C1(); // tgen
};
//SIG(1 S4266C1) C1{ BC2{ BC3{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39} vd v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v54 v55 Fp Fc[32] Fi[6] Fc Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp[2] Fi[3]}


 S4266C1 ::~S4266C1(){ note_dtor("S4266C1", this);}
void  S4266C1 ::v1(){vfunc_called(this, "_ZN7S4266C12v1Ev");}
void  S4266C1 ::v2(){vfunc_called(this, "_ZN7S4266C12v2Ev");}
void  S4266C1 ::v3(){vfunc_called(this, "_ZN7S4266C12v3Ev");}
void  S4266C1 ::v4(){vfunc_called(this, "_ZN7S4266C12v4Ev");}
void  S4266C1 ::v5(){vfunc_called(this, "_ZN7S4266C12v5Ev");}
void  S4266C1 ::v6(){vfunc_called(this, "_ZN7S4266C12v6Ev");}
void  S4266C1 ::v7(){vfunc_called(this, "_ZN7S4266C12v7Ev");}
void  S4266C1 ::v8(){vfunc_called(this, "_ZN7S4266C12v8Ev");}
void  S4266C1 ::v9(){vfunc_called(this, "_ZN7S4266C12v9Ev");}
void  S4266C1 ::v10(){vfunc_called(this, "_ZN7S4266C13v10Ev");}
void  S4266C1 ::v11(){vfunc_called(this, "_ZN7S4266C13v11Ev");}
void  S4266C1 ::v12(){vfunc_called(this, "_ZN7S4266C13v12Ev");}
void  S4266C1 ::v13(){vfunc_called(this, "_ZN7S4266C13v13Ev");}
S4266C1 ::S4266C1(){ note_ctor("S4266C1", this);} // tgen

static void Test_S4266C1()
{
  extern Class_Descriptor cd_S4266C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,37)];
    init_test(&cd_S4266C1, buf);
    S4266C1 *dp, &lv = *(dp=new (buf) S4266C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,144), "sizeof(S4266C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4266C1)");
    check_base_class_offset(lv, (S4266C3_nt*)(S4266C2_nt*), 0, "S4266C1");
    check_base_class_offset(lv, (S4266C2_nt*), 0, "S4266C1");
    check_base_class_offset(lv, (S4266C5_nt*), ABISELECT(72,48), "S4266C1");
    check_field_offset(lv, s4266c1f0, ABISELECT(160,124), "S4266C1.s4266c1f0");
    check_field_offset(lv, s4266c1f1, ABISELECT(176,132), "S4266C1.s4266c1f1");
    test_class_info(&lv, &cd_S4266C1);
    dp->~S4266C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4266C1(Test_S4266C1, "S4266C1", ABISELECT(192,144));

#else // __cplusplus

extern void _ZN7S4266C1C1Ev();
extern void _ZN7S4266C1D1Ev();
Name_Map name_map_S4266C1[] = {
  NSPAIR(_ZN7S4266C1C1Ev),
  NSPAIR(_ZN7S4266C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4266C3_nt;
extern VTBL_ENTRY _ZTI10S4266C3_nt[];
extern  VTBL_ENTRY _ZTV10S4266C3_nt[];
extern Class_Descriptor cd_S4266C2_nt;
extern VTBL_ENTRY _ZTI10S4266C2_nt[];
extern  VTBL_ENTRY _ZTV10S4266C2_nt[];
extern Class_Descriptor cd_S4266C5_nt;
extern VTBL_ENTRY _ZTI10S4266C5_nt[];
extern  VTBL_ENTRY _ZTV10S4266C5_nt[];
static Base_Class bases_S4266C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4266C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4266C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4266C5_nt,    ABISELECT(72,48), //bcp->offset
    57, //bcp->virtual_function_table_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 _ZTI7S4266C1[];
extern void _ZN7S4266C1D1Ev();
extern void _ZN7S4266C1D0Ev();
extern void _ZN10S4266C3_nt3v14Ev();
extern void _ZN10S4266C3_nt3v15Ev();
extern void _ZN10S4266C3_nt3v16Ev();
extern void _ZN10S4266C3_nt3v17Ev();
extern void _ZN10S4266C3_nt3v18Ev();
extern void _ZN10S4266C3_nt3v19Ev();
extern void _ZN10S4266C3_nt3v20Ev();
extern void _ZN10S4266C3_nt3v21Ev();
extern void _ZN10S4266C3_nt3v22Ev();
extern void _ZN10S4266C3_nt3v23Ev();
extern void _ZN10S4266C3_nt3v24Ev();
extern void _ZN10S4266C3_nt3v25Ev();
extern void _ZN10S4266C3_nt3v26Ev();
extern void _ZN10S4266C3_nt3v27Ev();
extern void _ZN10S4266C3_nt3v28Ev();
extern void _ZN10S4266C3_nt3v29Ev();
extern void _ZN10S4266C3_nt3v30Ev();
extern void _ZN10S4266C3_nt3v31Ev();
extern void _ZN10S4266C3_nt3v32Ev();
extern void _ZN10S4266C3_nt3v33Ev();
extern void _ZN10S4266C3_nt3v34Ev();
extern void _ZN10S4266C3_nt3v35Ev();
extern void _ZN10S4266C3_nt3v36Ev();
extern void _ZN10S4266C3_nt3v37Ev();
extern void _ZN10S4266C3_nt3v38Ev();
extern void _ZN10S4266C3_nt3v39Ev();
extern void _ZN10S4266C2_nt3v40Ev();
extern void _ZN10S4266C2_nt3v41Ev();
extern void _ZN10S4266C2_nt3v42Ev();
extern void _ZN10S4266C2_nt3v43Ev();
extern void _ZN10S4266C2_nt3v44Ev();
extern void _ZN10S4266C2_nt3v45Ev();
extern void _ZN10S4266C2_nt3v46Ev();
extern void _ZN10S4266C2_nt3v47Ev();
extern void _ZN10S4266C2_nt3v48Ev();
extern void _ZN10S4266C2_nt3v49Ev();
extern void _ZN10S4266C2_nt3v50Ev();
extern void _ZN10S4266C2_nt3v51Ev();
extern void _ZN10S4266C2_nt3v52Ev();
extern void _ZN10S4266C2_nt3v53Ev();
extern void _ZN7S4266C12v1Ev();
extern void _ZN7S4266C12v2Ev();
extern void _ZN7S4266C12v3Ev();
extern void _ZN7S4266C12v4Ev();
extern void _ZN7S4266C12v5Ev();
extern void _ZN7S4266C12v6Ev();
extern void _ZN7S4266C12v7Ev();
extern void _ZN7S4266C12v8Ev();
extern void _ZN7S4266C12v9Ev();
extern void _ZN7S4266C13v10Ev();
extern void _ZN7S4266C13v11Ev();
extern void _ZN7S4266C13v12Ev();
extern void _ZN7S4266C13v13Ev();
extern void ABISELECT(_ZThn72_N7S4266C1D1Ev,_ZThn48_N7S4266C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4266C1D0Ev,_ZThn48_N7S4266C1D0Ev)();
extern void _ZN10S4266C5_nt3v54Ev();
extern void _ZN10S4266C5_nt3v55Ev();
static  VTBL_ENTRY vtc_S4266C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4266C1[0]),
  (VTBL_ENTRY)&_ZN7S4266C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4266C1D0Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v53Ev,
  (VTBL_ENTRY)&_ZN7S4266C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4266C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4266C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4266C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4266C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4266C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4266C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4266C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4266C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4266C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4266C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4266C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4266C13v13Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4266C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4266C1D1Ev,_ZThn48_N7S4266C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4266C1D0Ev,_ZThn48_N7S4266C1D0Ev),
  (VTBL_ENTRY)&_ZN10S4266C5_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S4266C5_nt3v55Ev,
};
extern VTBL_ENTRY _ZTI7S4266C1[];
extern  VTBL_ENTRY _ZTV7S4266C1[];
Class_Descriptor cd_S4266C1 = {  "S4266C1", // class name
  bases_S4266C1, 3,
  &(vtc_S4266C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,144), // object size
  NSPAIRA(_ZTI7S4266C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4266C1),63, //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  S4474C4_nt  {
  void *s4474c4f0;
  virtual  ~S4474C4_nt(); // _ZN10S4474C4_ntD1Ev
  virtual void  v8(); // _ZN10S4474C4_nt2v8Ev
  virtual void  v9(); // _ZN10S4474C4_nt2v9Ev
  virtual void  v10(); // _ZN10S4474C4_nt3v10Ev
  virtual void  v11(); // _ZN10S4474C4_nt3v11Ev
  virtual void  v12(); // _ZN10S4474C4_nt3v12Ev
  virtual void  v13(); // _ZN10S4474C4_nt3v13Ev
  virtual void  v14(); // _ZN10S4474C4_nt3v14Ev
  virtual void  v15(); // _ZN10S4474C4_nt3v15Ev
  virtual void  v16(); // _ZN10S4474C4_nt3v16Ev
  S4474C4_nt(); // tgen
};
//SIG(-1 S4474C4_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp}


 S4474C4_nt ::~S4474C4_nt(){ note_dtor("S4474C4_nt", this);}
void  S4474C4_nt ::v8(){vfunc_called(this, "_ZN10S4474C4_nt2v8Ev");}
void  S4474C4_nt ::v9(){vfunc_called(this, "_ZN10S4474C4_nt2v9Ev");}
void  S4474C4_nt ::v10(){vfunc_called(this, "_ZN10S4474C4_nt3v10Ev");}
void  S4474C4_nt ::v11(){vfunc_called(this, "_ZN10S4474C4_nt3v11Ev");}
void  S4474C4_nt ::v12(){vfunc_called(this, "_ZN10S4474C4_nt3v12Ev");}
void  S4474C4_nt ::v13(){vfunc_called(this, "_ZN10S4474C4_nt3v13Ev");}
void  S4474C4_nt ::v14(){vfunc_called(this, "_ZN10S4474C4_nt3v14Ev");}
void  S4474C4_nt ::v15(){vfunc_called(this, "_ZN10S4474C4_nt3v15Ev");}
void  S4474C4_nt ::v16(){vfunc_called(this, "_ZN10S4474C4_nt3v16Ev");}
S4474C4_nt ::S4474C4_nt(){ note_ctor("S4474C4_nt", this);} // tgen

//skip512 S4474C4_nt

#else // __cplusplus

extern void _ZN10S4474C4_ntC1Ev();
extern void _ZN10S4474C4_ntD1Ev();
Name_Map name_map_S4474C4_nt[] = {
  NSPAIR(_ZN10S4474C4_ntC1Ev),
  NSPAIR(_ZN10S4474C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4474C4_nt[];
extern void _ZN10S4474C4_ntD1Ev();
extern void _ZN10S4474C4_ntD0Ev();
extern void _ZN10S4474C4_nt2v8Ev();
extern void _ZN10S4474C4_nt2v9Ev();
extern void _ZN10S4474C4_nt3v10Ev();
extern void _ZN10S4474C4_nt3v11Ev();
extern void _ZN10S4474C4_nt3v12Ev();
extern void _ZN10S4474C4_nt3v13Ev();
extern void _ZN10S4474C4_nt3v14Ev();
extern void _ZN10S4474C4_nt3v15Ev();
extern void _ZN10S4474C4_nt3v16Ev();
static  VTBL_ENTRY vtc_S4474C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4474C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S4474C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4474C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4474C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S4474C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S4474C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S4474C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S4474C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S4474C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S4474C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S4474C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S4474C4_nt3v16Ev,
};
extern VTBL_ENTRY _ZTI10S4474C4_nt[];
VTBL_ENTRY *P__ZTI10S4474C4_nt = _ZTI10S4474C4_nt; 
extern  VTBL_ENTRY _ZTV10S4474C4_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4474C5_nt  {
  int s4474c5f0[2];
  void  mf4474c5(); // _ZN10S4474C5_nt8mf4474c5Ev
  virtual  ~S4474C5_nt(); // _ZN10S4474C5_ntD1Ev
  S4474C5_nt(); // tgen
};
//SIG(-1 S4474C5_nt) C1{ vd m Fi[2]}


void  S4474C5_nt ::mf4474c5(){}
 S4474C5_nt ::~S4474C5_nt(){ note_dtor("S4474C5_nt", this);}
S4474C5_nt ::S4474C5_nt(){ note_ctor("S4474C5_nt", this);} // tgen

//skip512 S4474C5_nt

#else // __cplusplus

extern void _ZN10S4474C5_ntC1Ev();
extern void _ZN10S4474C5_ntD1Ev();
Name_Map name_map_S4474C5_nt[] = {
  NSPAIR(_ZN10S4474C5_ntC1Ev),
  NSPAIR(_ZN10S4474C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4474C5_nt[];
extern void _ZN10S4474C5_ntD1Ev();
extern void _ZN10S4474C5_ntD0Ev();
static  VTBL_ENTRY vtc_S4474C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4474C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S4474C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4474C5_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S4474C5_nt[];
VTBL_ENTRY *P__ZTI10S4474C5_nt = _ZTI10S4474C5_nt; 
extern  VTBL_ENTRY _ZTV10S4474C5_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4474C3_nt  {
  int s4474c3f0[4];
  ::S4474C4_nt s4474c3f1;
  int s4474c3f2;
  char s4474c3f3;
  ::S4474C5_nt s4474c3f4;
  int s4474c3f5;
  virtual  ~S4474C3_nt(); // _ZN10S4474C3_ntD1Ev
  virtual void  v2(); // _ZN10S4474C3_nt2v2Ev
  virtual void  v3(); // _ZN10S4474C3_nt2v3Ev
  virtual void  v4(); // _ZN10S4474C3_nt2v4Ev
  S4474C3_nt(); // tgen
};
//SIG(-1 S4474C3_nt) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4474C3_nt ::~S4474C3_nt(){ note_dtor("S4474C3_nt", this);}
void  S4474C3_nt ::v2(){vfunc_called(this, "_ZN10S4474C3_nt2v2Ev");}
void  S4474C3_nt ::v3(){vfunc_called(this, "_ZN10S4474C3_nt2v3Ev");}
void  S4474C3_nt ::v4(){vfunc_called(this, "_ZN10S4474C3_nt2v4Ev");}
S4474C3_nt ::S4474C3_nt(){ note_ctor("S4474C3_nt", this);} // tgen

//skip512 S4474C3_nt

#else // __cplusplus

extern void _ZN10S4474C3_ntC1Ev();
extern void _ZN10S4474C3_ntD1Ev();
Name_Map name_map_S4474C3_nt[] = {
  NSPAIR(_ZN10S4474C3_ntC1Ev),
  NSPAIR(_ZN10S4474C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4474C3_nt[];
extern void _ZN10S4474C3_ntD1Ev();
extern void _ZN10S4474C3_ntD0Ev();
extern void _ZN10S4474C3_nt2v2Ev();
extern void _ZN10S4474C3_nt2v3Ev();
extern void _ZN10S4474C3_nt2v4Ev();
static  VTBL_ENTRY vtc_S4474C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4474C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S4474C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4474C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4474C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S4474C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4474C3_nt2v4Ev,
};
extern VTBL_ENTRY _ZTI10S4474C3_nt[];
VTBL_ENTRY *P__ZTI10S4474C3_nt = _ZTI10S4474C3_nt; 
extern  VTBL_ENTRY _ZTV10S4474C3_nt[];
Class_Descriptor cd_S4474C3_nt = {  "S4474C3_nt", // class name
  0,0,//no base classes
  &(vtc_S4474C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI10S4474C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4474C3_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  S4474C6_nt  {
  virtual  ~S4474C6_nt(); // _ZN10S4474C6_ntD1Ev
  virtual void  v5(); // _ZN10S4474C6_nt2v5Ev
  S4474C6_nt(); // tgen
};
//SIG(-1 S4474C6_nt) C1{ vd v1}


 S4474C6_nt ::~S4474C6_nt(){ note_dtor("S4474C6_nt", this);}
void  S4474C6_nt ::v5(){vfunc_called(this, "_ZN10S4474C6_nt2v5Ev");}
S4474C6_nt ::S4474C6_nt(){ note_ctor("S4474C6_nt", this);} // tgen

//skip512 S4474C6_nt

#else // __cplusplus

extern void _ZN10S4474C6_ntC1Ev();
extern void _ZN10S4474C6_ntD1Ev();
Name_Map name_map_S4474C6_nt[] = {
  NSPAIR(_ZN10S4474C6_ntC1Ev),
  NSPAIR(_ZN10S4474C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4474C6_nt[];
extern void _ZN10S4474C6_ntD1Ev();
extern void _ZN10S4474C6_ntD0Ev();
extern void _ZN10S4474C6_nt2v5Ev();
static  VTBL_ENTRY vtc_S4474C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4474C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S4474C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4474C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4474C6_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S4474C6_nt[];
VTBL_ENTRY *P__ZTI10S4474C6_nt = _ZTI10S4474C6_nt; 
extern  VTBL_ENTRY _ZTV10S4474C6_nt[];
Class_Descriptor cd_S4474C6_nt = {  "S4474C6_nt", // class name
  0,0,//no base classes
  &(vtc_S4474C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4474C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4474C6_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  S4474C2  : S4474C3_nt , S4474C6_nt {
  void *s4474c2f0;
  int s4474c2f1;
  void *s4474c2f2;
  virtual  ~S4474C2(); // _ZN7S4474C2D1Ev
  virtual void  v6(); // _ZN7S4474C22v6Ev
  virtual void  v7(); // _ZN7S4474C22v7Ev
  S4474C2(); // tgen
};
//SIG(-1 S4474C2) C1{ BC2{ vd v3 v4 v5 Fi[4] FC3{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} BC5{ vd v6} vd v1 v2 Fp Fi Fp}


 S4474C2 ::~S4474C2(){ note_dtor("S4474C2", this);}
void  S4474C2 ::v6(){vfunc_called(this, "_ZN7S4474C22v6Ev");}
void  S4474C2 ::v7(){vfunc_called(this, "_ZN7S4474C22v7Ev");}
S4474C2 ::S4474C2(){ note_ctor("S4474C2", this);} // tgen

static void Test_S4474C2()
{
  extern Class_Descriptor cd_S4474C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4474C2, buf);
    S4474C2 *dp, &lv = *(dp=new (buf) S4474C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4474C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4474C2)");
    check_base_class_offset(lv, (S4474C3_nt*), 0, "S4474C2");
    check_base_class_offset(lv, (S4474C6_nt*), ABISELECT(72,52), "S4474C2");
    check_field_offset(lv, s4474c2f0, ABISELECT(80,56), "S4474C2.s4474c2f0");
    check_field_offset(lv, s4474c2f1, ABISELECT(88,60), "S4474C2.s4474c2f1");
    check_field_offset(lv, s4474c2f2, ABISELECT(96,64), "S4474C2.s4474c2f2");
    test_class_info(&lv, &cd_S4474C2);
    dp->~S4474C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4474C2(Test_S4474C2, "S4474C2", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4474C2C1Ev();
extern void _ZN7S4474C2D1Ev();
Name_Map name_map_S4474C2[] = {
  NSPAIR(_ZN7S4474C2C1Ev),
  NSPAIR(_ZN7S4474C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4474C3_nt;
extern VTBL_ENTRY _ZTI10S4474C3_nt[];
extern  VTBL_ENTRY _ZTV10S4474C3_nt[];
extern Class_Descriptor cd_S4474C6_nt;
extern VTBL_ENTRY _ZTI10S4474C6_nt[];
extern  VTBL_ENTRY _ZTV10S4474C6_nt[];
static Base_Class bases_S4474C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4474C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S4474C6_nt,    ABISELECT(72,52), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4474C2[];
extern void _ZN7S4474C2D1Ev();
extern void _ZN7S4474C2D0Ev();
extern void _ZN10S4474C3_nt2v2Ev();
extern void _ZN10S4474C3_nt2v3Ev();
extern void _ZN10S4474C3_nt2v4Ev();
extern void _ZN7S4474C22v6Ev();
extern void _ZN7S4474C22v7Ev();
extern void ABISELECT(_ZThn72_N7S4474C2D1Ev,_ZThn52_N7S4474C2D1Ev)();
extern void ABISELECT(_ZThn72_N7S4474C2D0Ev,_ZThn52_N7S4474C2D0Ev)();
extern void _ZN10S4474C6_nt2v5Ev();
static  VTBL_ENTRY vtc_S4474C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4474C2[0]),
  (VTBL_ENTRY)&_ZN7S4474C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4474C2D0Ev,
  (VTBL_ENTRY)&_ZN10S4474C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S4474C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4474C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S4474C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4474C22v7Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4474C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4474C2D1Ev,_ZThn52_N7S4474C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4474C2D0Ev,_ZThn52_N7S4474C2D0Ev),
  (VTBL_ENTRY)&_ZN10S4474C6_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI7S4474C2[];
extern  VTBL_ENTRY _ZTV7S4474C2[];
Class_Descriptor cd_S4474C2 = {  "S4474C2", // class name
  bases_S4474C2, 2,
  &(vtc_S4474C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4474C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4474C2),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4474C11_nt  {
  char s4474c11f0;
  void  mf4474c11(); // _ZN11S4474C11_nt9mf4474c11Ev
  virtual  ~S4474C11_nt(); // _ZN11S4474C11_ntD1Ev
  S4474C11_nt(); // tgen
};
//SIG(-1 S4474C11_nt) C1{ vd m Fc}


void  S4474C11_nt ::mf4474c11(){}
 S4474C11_nt ::~S4474C11_nt(){ note_dtor("S4474C11_nt", this);}
S4474C11_nt ::S4474C11_nt(){ note_ctor("S4474C11_nt", this);} // tgen

//skip512 S4474C11_nt

#else // __cplusplus

extern void _ZN11S4474C11_ntC1Ev();
extern void _ZN11S4474C11_ntD1Ev();
Name_Map name_map_S4474C11_nt[] = {
  NSPAIR(_ZN11S4474C11_ntC1Ev),
  NSPAIR(_ZN11S4474C11_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S4474C11_nt[];
extern void _ZN11S4474C11_ntD1Ev();
extern void _ZN11S4474C11_ntD0Ev();
static  VTBL_ENTRY vtc_S4474C11_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S4474C11_nt[0]),
  (VTBL_ENTRY)&_ZN11S4474C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S4474C11_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S4474C11_nt[];
VTBL_ENTRY *P__ZTI11S4474C11_nt = _ZTI11S4474C11_nt; 
extern  VTBL_ENTRY _ZTV11S4474C11_nt[];
Class_Descriptor cd_S4474C11_nt = {  "S4474C11_nt", // class name
  0,0,//no base classes
  &(vtc_S4474C11_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S4474C11_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S4474C11_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  S4474C10_nt  : S4474C11_nt {
  __tsi64 s4474c10f0[2];
  virtual  ~S4474C10_nt(); // _ZN11S4474C10_ntD1Ev
  S4474C10_nt(); // tgen
};
//SIG(-1 S4474C10_nt) C1{ BC2{ vd m Fc} vd FL[2]}


 S4474C10_nt ::~S4474C10_nt(){ note_dtor("S4474C10_nt", this);}
S4474C10_nt ::S4474C10_nt(){ note_ctor("S4474C10_nt", this);} // tgen

//skip512 S4474C10_nt

#else // __cplusplus

extern void _ZN11S4474C10_ntC1Ev();
extern void _ZN11S4474C10_ntD1Ev();
Name_Map name_map_S4474C10_nt[] = {
  NSPAIR(_ZN11S4474C10_ntC1Ev),
  NSPAIR(_ZN11S4474C10_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4474C11_nt;
extern VTBL_ENTRY _ZTI11S4474C11_nt[];
extern  VTBL_ENTRY _ZTV11S4474C11_nt[];
static Base_Class bases_S4474C10_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4474C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S4474C10_nt[];
extern void _ZN11S4474C10_ntD1Ev();
extern void _ZN11S4474C10_ntD0Ev();
static  VTBL_ENTRY vtc_S4474C10_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S4474C10_nt[0]),
  (VTBL_ENTRY)&_ZN11S4474C10_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S4474C10_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S4474C10_nt[];
VTBL_ENTRY *P__ZTI11S4474C10_nt = _ZTI11S4474C10_nt; 
extern  VTBL_ENTRY _ZTV11S4474C10_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4474C7_nt  {
  ::S2366C5_nt s4474c7f0;
  ::S4474C10_nt s4474c7f1;
  int s4474c7f2[2];
  void  mf4474c7(); // _ZN10S4474C7_nt8mf4474c7Ev
  virtual  ~S4474C7_nt(); // _ZN10S4474C7_ntD1Ev
  S4474C7_nt(); // tgen
};
//SIG(-1 S4474C7_nt) C1{ vd m FC2{ m Fp Fi FC3{ m}} FC4{ BC5{ vd m Fc} vd FL[2]} Fi[2]}


void  S4474C7_nt ::mf4474c7(){}
 S4474C7_nt ::~S4474C7_nt(){ note_dtor("S4474C7_nt", this);}
S4474C7_nt ::S4474C7_nt(){ note_ctor("S4474C7_nt", this);} // tgen

//skip512 S4474C7_nt

#else // __cplusplus

extern void _ZN10S4474C7_ntC1Ev();
extern void _ZN10S4474C7_ntD1Ev();
Name_Map name_map_S4474C7_nt[] = {
  NSPAIR(_ZN10S4474C7_ntC1Ev),
  NSPAIR(_ZN10S4474C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4474C7_nt[];
extern void _ZN10S4474C7_ntD1Ev();
extern void _ZN10S4474C7_ntD0Ev();
static  VTBL_ENTRY vtc_S4474C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4474C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S4474C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4474C7_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S4474C7_nt[];
VTBL_ENTRY *P__ZTI10S4474C7_nt = _ZTI10S4474C7_nt; 
extern  VTBL_ENTRY _ZTV10S4474C7_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4474C15_nt  {
  __tsi64 s4474c15f0;
  char s4474c15f1;
  void  mf4474c15(); // _ZN11S4474C15_nt9mf4474c15Ev
  virtual  ~S4474C15_nt(); // _ZN11S4474C15_ntD1Ev
  S4474C15_nt(); // tgen
};
//SIG(-1 S4474C15_nt) C1{ vd m FL Fc}


void  S4474C15_nt ::mf4474c15(){}
 S4474C15_nt ::~S4474C15_nt(){ note_dtor("S4474C15_nt", this);}
S4474C15_nt ::S4474C15_nt(){ note_ctor("S4474C15_nt", this);} // tgen

//skip512 S4474C15_nt

#else // __cplusplus

extern void _ZN11S4474C15_ntC1Ev();
extern void _ZN11S4474C15_ntD1Ev();
Name_Map name_map_S4474C15_nt[] = {
  NSPAIR(_ZN11S4474C15_ntC1Ev),
  NSPAIR(_ZN11S4474C15_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S4474C15_nt[];
extern void _ZN11S4474C15_ntD1Ev();
extern void _ZN11S4474C15_ntD0Ev();
static  VTBL_ENTRY vtc_S4474C15_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S4474C15_nt[0]),
  (VTBL_ENTRY)&_ZN11S4474C15_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S4474C15_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S4474C15_nt[];
VTBL_ENTRY *P__ZTI11S4474C15_nt = _ZTI11S4474C15_nt; 
extern  VTBL_ENTRY _ZTV11S4474C15_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4474C14_nt  {
  ::S4474C15_nt s4474c14f0;
  ::S4474C15_nt s4474c14f1;
  void  mf4474c14(); // _ZN11S4474C14_nt9mf4474c14Ev
};
//SIG(-1 S4474C14_nt) C1{ m FC2{ vd m FL Fc} FC2}


void  S4474C14_nt ::mf4474c14(){}

//skip512 S4474C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4474C13  {
  void *s4474c13f0;
  ::S4474C14_nt s4474c13f1;
  void *s4474c13f2;
  int s4474c13f3;
  char s4474c13f4;
  int s4474c13f5;
  void  mf4474c13(); // _ZN8S4474C139mf4474c13Ev
};
//SIG(-1 S4474C13) C1{ m Fp FC2{ m FC3{ vd m FL Fc} FC3} Fp Fi Fc Fi}


void  S4474C13 ::mf4474c13(){}

static void Test_S4474C13()
{
  {
    init_simple_test("S4474C13");
    S4474C13 lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S4474C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4474C13)");
    check_field_offset(lv, s4474c13f0, 0, "S4474C13.s4474c13f0");
    check_field_offset(lv, s4474c13f1, ABISELECT(8,4), "S4474C13.s4474c13f1");
    check_field_offset(lv, s4474c13f2, ABISELECT(56,36), "S4474C13.s4474c13f2");
    check_field_offset(lv, s4474c13f3, ABISELECT(64,40), "S4474C13.s4474c13f3");
    check_field_offset(lv, s4474c13f4, ABISELECT(68,44), "S4474C13.s4474c13f4");
    check_field_offset(lv, s4474c13f5, ABISELECT(72,48), "S4474C13.s4474c13f5");
  }
}
static Arrange_To_Call_Me vS4474C13(Test_S4474C13, "S4474C13", ABISELECT(80,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4474C17_nt  {
  void  mf4474c17(); // _ZN11S4474C17_nt9mf4474c17Ev
  virtual  ~S4474C17_nt(); // _ZN11S4474C17_ntD1Ev
  S4474C17_nt(); // tgen
};
//SIG(-1 S4474C17_nt) C1{ vd m}


void  S4474C17_nt ::mf4474c17(){}
 S4474C17_nt ::~S4474C17_nt(){ note_dtor("S4474C17_nt", this);}
S4474C17_nt ::S4474C17_nt(){ note_ctor("S4474C17_nt", this);} // tgen

//skip512 S4474C17_nt

#else // __cplusplus

extern void _ZN11S4474C17_ntC1Ev();
extern void _ZN11S4474C17_ntD1Ev();
Name_Map name_map_S4474C17_nt[] = {
  NSPAIR(_ZN11S4474C17_ntC1Ev),
  NSPAIR(_ZN11S4474C17_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S4474C17_nt[];
extern void _ZN11S4474C17_ntD1Ev();
extern void _ZN11S4474C17_ntD0Ev();
static  VTBL_ENTRY vtc_S4474C17_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S4474C17_nt[0]),
  (VTBL_ENTRY)&_ZN11S4474C17_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S4474C17_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S4474C17_nt[];
VTBL_ENTRY *P__ZTI11S4474C17_nt = _ZTI11S4474C17_nt; 
extern  VTBL_ENTRY _ZTV11S4474C17_nt[];
Class_Descriptor cd_S4474C17_nt = {  "S4474C17_nt", // class name
  0,0,//no base classes
  &(vtc_S4474C17_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S4474C17_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S4474C17_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  S4474C18  : S4474C17_nt {
  void *s4474c18f0;
  int s4474c18f1[2];
  virtual  ~S4474C18(); // _ZN8S4474C18D1Ev
  S4474C18(); // tgen
};
//SIG(-1 S4474C18) C1{ BC2{ vd m} vd Fp Fi[2]}


 S4474C18 ::~S4474C18(){ note_dtor("S4474C18", this);}
S4474C18 ::S4474C18(){ note_ctor("S4474C18", this);} // tgen

static void Test_S4474C18()
{
  extern Class_Descriptor cd_S4474C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S4474C18, buf);
    S4474C18 *dp, &lv = *(dp=new (buf) S4474C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4474C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4474C18)");
    check_base_class_offset(lv, (S4474C17_nt*), 0, "S4474C18");
    check_field_offset(lv, s4474c18f0, ABISELECT(8,4), "S4474C18.s4474c18f0");
    check_field_offset(lv, s4474c18f1, ABISELECT(16,8), "S4474C18.s4474c18f1");
    test_class_info(&lv, &cd_S4474C18);
    dp->~S4474C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4474C18(Test_S4474C18, "S4474C18", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S4474C18C1Ev();
extern void _ZN8S4474C18D1Ev();
Name_Map name_map_S4474C18[] = {
  NSPAIR(_ZN8S4474C18C1Ev),
  NSPAIR(_ZN8S4474C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4474C17_nt;
extern VTBL_ENTRY _ZTI11S4474C17_nt[];
extern  VTBL_ENTRY _ZTV11S4474C17_nt[];
static Base_Class bases_S4474C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4474C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S4474C18[];
extern void _ZN8S4474C18D1Ev();
extern void _ZN8S4474C18D0Ev();
static  VTBL_ENTRY vtc_S4474C18[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4474C18[0]),
  (VTBL_ENTRY)&_ZN8S4474C18D1Ev,
  (VTBL_ENTRY)&_ZN8S4474C18D0Ev,
};
extern VTBL_ENTRY _ZTI8S4474C18[];
extern  VTBL_ENTRY _ZTV8S4474C18[];
Class_Descriptor cd_S4474C18 = {  "S4474C18", // class name
  bases_S4474C18, 1,
  &(vtc_S4474C18[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S4474C18),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S4474C18),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  S4474C16  : S4474C17_nt {
  void *s4474c16f0;
  ::S4474C18 s4474c16f1;
  virtual  ~S4474C16(); // _ZN8S4474C16D1Ev
  S4474C16(); // tgen
};
//SIG(-1 S4474C16) C1{ BC2{ vd m} vd Fp FC3{ BC2 vd Fp Fi[2]}}


 S4474C16 ::~S4474C16(){ note_dtor("S4474C16", this);}
S4474C16 ::S4474C16(){ note_ctor("S4474C16", this);} // tgen

static void Test_S4474C16()
{
  extern Class_Descriptor cd_S4474C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S4474C16, buf);
    S4474C16 *dp, &lv = *(dp=new (buf) S4474C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S4474C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4474C16)");
    check_base_class_offset(lv, (S4474C17_nt*), 0, "S4474C16");
    check_field_offset(lv, s4474c16f0, ABISELECT(8,4), "S4474C16.s4474c16f0");
    check_field_offset(lv, s4474c16f1, ABISELECT(16,8), "S4474C16.s4474c16f1");
    test_class_info(&lv, &cd_S4474C16);
    dp->~S4474C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4474C16(Test_S4474C16, "S4474C16", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S4474C16C1Ev();
extern void _ZN8S4474C16D1Ev();
Name_Map name_map_S4474C16[] = {
  NSPAIR(_ZN8S4474C16C1Ev),
  NSPAIR(_ZN8S4474C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4474C17_nt;
extern VTBL_ENTRY _ZTI11S4474C17_nt[];
extern  VTBL_ENTRY _ZTV11S4474C17_nt[];
static Base_Class bases_S4474C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4474C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S4474C16[];
extern void _ZN8S4474C16D1Ev();
extern void _ZN8S4474C16D0Ev();
static  VTBL_ENTRY vtc_S4474C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4474C16[0]),
  (VTBL_ENTRY)&_ZN8S4474C16D1Ev,
  (VTBL_ENTRY)&_ZN8S4474C16D0Ev,
};
extern VTBL_ENTRY _ZTI8S4474C16[];
extern  VTBL_ENTRY _ZTV8S4474C16[];
Class_Descriptor cd_S4474C16 = {  "S4474C16", // class name
  bases_S4474C16, 1,
  &(vtc_S4474C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S4474C16),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S4474C16),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  S4474C1  : S4474C2 {
  ::S4474C7_nt s4474c1f0;
  void *s4474c1f1;
  ::S629C14 s4474c1f2;
  ::S4474C13 s4474c1f3;
  ::S4474C16 s4474c1f4;
  virtual  ~S4474C1(); // _ZN7S4474C1D1Ev
  virtual void  v1(); // _ZN7S4474C12v1Ev
  S4474C1(); // tgen
};
//SIG(1 S4474C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} BC6{ vd v5} vd v6 v7 Fp Fi Fp} vd v1 FC7{ vd m FC8{ m Fp Fi FC9{ m}} FC10{ BC11{ vd m Fc} vd FL[2]} Fi[2]} Fp FC9 FC12{ m Fp FC13{ m FC14{ vd m FL Fc} FC14} Fp Fi Fc Fi} FC15{ BC16{ vd m} vd Fp FC17{ BC16 vd Fp Fi[2]}}}


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

static void Test_S4474C1()
{
  extern Class_Descriptor cd_S4474C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,51)];
    init_test(&cd_S4474C1, buf);
    S4474C1 *dp, &lv = *(dp=new (buf) S4474C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,200), "sizeof(S4474C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4474C1)");
    check_base_class_offset(lv, (S4474C3_nt*)(S4474C2*), 0, "S4474C1");
    check_base_class_offset(lv, (S4474C6_nt*)(S4474C2*), ABISELECT(72,52), "S4474C1");
    check_base_class_offset(lv, (S4474C2*), 0, "S4474C1");
    check_field_offset(lv, s4474c1f0, ABISELECT(104,68), "S4474C1.s4474c1f0");
    check_field_offset(lv, s4474c1f1, ABISELECT(168,116), "S4474C1.s4474c1f1");
    check_field_offset(lv, s4474c1f2, ABISELECT(176,120), "S4474C1.s4474c1f2");
    check_field_offset(lv, s4474c1f3, ABISELECT(184,124), "S4474C1.s4474c1f3");
    check_field_offset(lv, s4474c1f4, ABISELECT(264,176), "S4474C1.s4474c1f4");
    test_class_info(&lv, &cd_S4474C1);
    dp->~S4474C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4474C1(Test_S4474C1, "S4474C1", ABISELECT(304,200));

#else // __cplusplus

extern void _ZN7S4474C1C1Ev();
extern void _ZN7S4474C1D1Ev();
Name_Map name_map_S4474C1[] = {
  NSPAIR(_ZN7S4474C1C1Ev),
  NSPAIR(_ZN7S4474C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4474C3_nt;
extern VTBL_ENTRY _ZTI10S4474C3_nt[];
extern  VTBL_ENTRY _ZTV10S4474C3_nt[];
extern Class_Descriptor cd_S4474C6_nt;
extern VTBL_ENTRY _ZTI10S4474C6_nt[];
extern  VTBL_ENTRY _ZTV10S4474C6_nt[];
extern Class_Descriptor cd_S4474C2;
extern VTBL_ENTRY _ZTI7S4474C2[];
extern  VTBL_ENTRY _ZTV7S4474C2[];
static Base_Class bases_S4474C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4474C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4474C6_nt,    ABISELECT(72,52), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S4474C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4474C1[];
extern void _ZN7S4474C1D1Ev();
extern void _ZN7S4474C1D0Ev();
extern void _ZN10S4474C3_nt2v2Ev();
extern void _ZN10S4474C3_nt2v3Ev();
extern void _ZN10S4474C3_nt2v4Ev();
extern void _ZN7S4474C22v6Ev();
extern void _ZN7S4474C22v7Ev();
extern void _ZN7S4474C12v1Ev();
extern void ABISELECT(_ZThn72_N7S4474C1D1Ev,_ZThn52_N7S4474C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4474C1D0Ev,_ZThn52_N7S4474C1D0Ev)();
extern void _ZN10S4474C6_nt2v5Ev();
static  VTBL_ENTRY vtc_S4474C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4474C1[0]),
  (VTBL_ENTRY)&_ZN7S4474C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4474C1D0Ev,
  (VTBL_ENTRY)&_ZN10S4474C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S4474C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4474C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S4474C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4474C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4474C12v1Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4474C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4474C1D1Ev,_ZThn52_N7S4474C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4474C1D0Ev,_ZThn52_N7S4474C1D0Ev),
  (VTBL_ENTRY)&_ZN10S4474C6_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI7S4474C1[];
extern  VTBL_ENTRY _ZTV7S4474C1[];
Class_Descriptor cd_S4474C1 = {  "S4474C1", // class name
  bases_S4474C1, 3,
  &(vtc_S4474C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,200), // object size
  NSPAIRA(_ZTI7S4474C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4474C1),15, //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  S4476C3  {
  int s4476c3f0[4];
  ::S4474C4_nt s4476c3f1;
  int s4476c3f2;
  char s4476c3f3;
  ::S4474C5_nt s4476c3f4;
  int s4476c3f5;
  virtual  ~S4476C3(); // _ZN7S4476C3D1Ev
  virtual void  v2(); // _ZN7S4476C32v2Ev
  virtual void  v3(); // _ZN7S4476C32v3Ev
  virtual void  v4(); // _ZN7S4476C32v4Ev
  S4476C3(); // tgen
};
//SIG(-1 S4476C3) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4476C3 ::~S4476C3(){ note_dtor("S4476C3", this);}
void  S4476C3 ::v2(){vfunc_called(this, "_ZN7S4476C32v2Ev");}
void  S4476C3 ::v3(){vfunc_called(this, "_ZN7S4476C32v3Ev");}
void  S4476C3 ::v4(){vfunc_called(this, "_ZN7S4476C32v4Ev");}
S4476C3 ::S4476C3(){ note_ctor("S4476C3", this);} // tgen

static void Test_S4476C3()
{
  extern Class_Descriptor cd_S4476C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4476C3, buf);
    S4476C3 *dp, &lv = *(dp=new (buf) S4476C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4476C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4476C3)");
    check_field_offset(lv, s4476c3f0, ABISELECT(8,4), "S4476C3.s4476c3f0");
    check_field_offset(lv, s4476c3f1, ABISELECT(24,20), "S4476C3.s4476c3f1");
    check_field_offset(lv, s4476c3f2, ABISELECT(40,28), "S4476C3.s4476c3f2");
    check_field_offset(lv, s4476c3f3, ABISELECT(44,32), "S4476C3.s4476c3f3");
    check_field_offset(lv, s4476c3f4, ABISELECT(48,36), "S4476C3.s4476c3f4");
    check_field_offset(lv, s4476c3f5, ABISELECT(64,48), "S4476C3.s4476c3f5");
    test_class_info(&lv, &cd_S4476C3);
    dp->~S4476C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4476C3(Test_S4476C3, "S4476C3", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4476C3C1Ev();
extern void _ZN7S4476C3D1Ev();
Name_Map name_map_S4476C3[] = {
  NSPAIR(_ZN7S4476C3C1Ev),
  NSPAIR(_ZN7S4476C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4476C3[];
extern void _ZN7S4476C3D1Ev();
extern void _ZN7S4476C3D0Ev();
extern void _ZN7S4476C32v2Ev();
extern void _ZN7S4476C32v3Ev();
extern void _ZN7S4476C32v4Ev();
static  VTBL_ENTRY vtc_S4476C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4476C3[0]),
  (VTBL_ENTRY)&_ZN7S4476C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4476C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4476C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4476C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4476C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4476C3[];
extern  VTBL_ENTRY _ZTV7S4476C3[];
Class_Descriptor cd_S4476C3 = {  "S4476C3", // class name
  0,0,//no base classes
  &(vtc_S4476C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4476C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4476C3),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  S4476C6  {
  virtual  ~S4476C6(); // _ZN7S4476C6D1Ev
  virtual void  v5(); // _ZN7S4476C62v5Ev
  S4476C6(); // tgen
};
//SIG(-1 S4476C6) C1{ vd v1}


 S4476C6 ::~S4476C6(){ note_dtor("S4476C6", this);}
void  S4476C6 ::v5(){vfunc_called(this, "_ZN7S4476C62v5Ev");}
S4476C6 ::S4476C6(){ note_ctor("S4476C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S4476C6C1Ev();
extern void _ZN7S4476C6D1Ev();
Name_Map name_map_S4476C6[] = {
  NSPAIR(_ZN7S4476C6C1Ev),
  NSPAIR(_ZN7S4476C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4476C6[];
extern void _ZN7S4476C6D1Ev();
extern void _ZN7S4476C6D0Ev();
extern void _ZN7S4476C62v5Ev();
static  VTBL_ENTRY vtc_S4476C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4476C6[0]),
  (VTBL_ENTRY)&_ZN7S4476C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4476C6D0Ev,
  (VTBL_ENTRY)&_ZN7S4476C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4476C6[];
extern  VTBL_ENTRY _ZTV7S4476C6[];
Class_Descriptor cd_S4476C6 = {  "S4476C6", // class name
  0,0,//no base classes
  &(vtc_S4476C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4476C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4476C6),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  S4476C2  : S4476C3 , S4476C6 {
  void *s4476c2f0;
  int s4476c2f1;
  void *s4476c2f2;
  virtual  ~S4476C2(); // _ZN7S4476C2D1Ev
  virtual void  v6(); // _ZN7S4476C22v6Ev
  virtual void  v7(); // _ZN7S4476C22v7Ev
  S4476C2(); // tgen
};
//SIG(-1 S4476C2) C1{ BC2{ vd v3 v4 v5 Fi[4] FC3{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} BC5{ vd v6} vd v1 v2 Fp Fi Fp}


 S4476C2 ::~S4476C2(){ note_dtor("S4476C2", this);}
void  S4476C2 ::v6(){vfunc_called(this, "_ZN7S4476C22v6Ev");}
void  S4476C2 ::v7(){vfunc_called(this, "_ZN7S4476C22v7Ev");}
S4476C2 ::S4476C2(){ note_ctor("S4476C2", this);} // tgen

static void Test_S4476C2()
{
  extern Class_Descriptor cd_S4476C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4476C2, buf);
    S4476C2 *dp, &lv = *(dp=new (buf) S4476C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4476C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4476C2)");
    check_base_class_offset(lv, (S4476C3*), 0, "S4476C2");
    check_base_class_offset(lv, (S4476C6*), ABISELECT(72,52), "S4476C2");
    check_field_offset(lv, s4476c2f0, ABISELECT(80,56), "S4476C2.s4476c2f0");
    check_field_offset(lv, s4476c2f1, ABISELECT(88,60), "S4476C2.s4476c2f1");
    check_field_offset(lv, s4476c2f2, ABISELECT(96,64), "S4476C2.s4476c2f2");
    test_class_info(&lv, &cd_S4476C2);
    dp->~S4476C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4476C2(Test_S4476C2, "S4476C2", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4476C2C1Ev();
extern void _ZN7S4476C2D1Ev();
Name_Map name_map_S4476C2[] = {
  NSPAIR(_ZN7S4476C2C1Ev),
  NSPAIR(_ZN7S4476C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4476C3;
extern VTBL_ENTRY _ZTI7S4476C3[];
extern  VTBL_ENTRY _ZTV7S4476C3[];
extern Class_Descriptor cd_S4476C6;
extern VTBL_ENTRY _ZTI7S4476C6[];
extern  VTBL_ENTRY _ZTV7S4476C6[];
static Base_Class bases_S4476C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4476C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S4476C6,    ABISELECT(72,52), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4476C2[];
extern void _ZN7S4476C2D1Ev();
extern void _ZN7S4476C2D0Ev();
extern void _ZN7S4476C32v2Ev();
extern void _ZN7S4476C32v3Ev();
extern void _ZN7S4476C32v4Ev();
extern void _ZN7S4476C22v6Ev();
extern void _ZN7S4476C22v7Ev();
extern void ABISELECT(_ZThn72_N7S4476C2D1Ev,_ZThn52_N7S4476C2D1Ev)();
extern void ABISELECT(_ZThn72_N7S4476C2D0Ev,_ZThn52_N7S4476C2D0Ev)();
extern void _ZN7S4476C62v5Ev();
static  VTBL_ENTRY vtc_S4476C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4476C2[0]),
  (VTBL_ENTRY)&_ZN7S4476C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4476C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4476C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4476C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4476C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4476C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4476C22v7Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4476C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4476C2D1Ev,_ZThn52_N7S4476C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4476C2D0Ev,_ZThn52_N7S4476C2D0Ev),
  (VTBL_ENTRY)&_ZN7S4476C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4476C2[];
extern  VTBL_ENTRY _ZTV7S4476C2[];
Class_Descriptor cd_S4476C2 = {  "S4476C2", // class name
  bases_S4476C2, 2,
  &(vtc_S4476C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4476C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4476C2),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4476C7_nt  {
  ::S2366C5_nt s4476c7f0;
  ::S2366C5_nt s4476c7f1;
  ::S4474C10_nt s4476c7f2;
  ::S4474C10_nt s4476c7f3;
  int s4476c7f4;
  char s4476c7f5;
  ::S2366C5_nt s4476c7f6;
  void  mf4476c7(); // _ZN10S4476C7_nt8mf4476c7Ev
  virtual  ~S4476C7_nt(); // _ZN10S4476C7_ntD1Ev
  S4476C7_nt(); // tgen
};
//SIG(-1 S4476C7_nt) C1{ vd m FC2{ m Fp Fi FC3{ m}} FC2 FC4{ BC5{ vd m Fc} vd FL[2]} FC4 Fi Fc FC2}


void  S4476C7_nt ::mf4476c7(){}
 S4476C7_nt ::~S4476C7_nt(){ note_dtor("S4476C7_nt", this);}
S4476C7_nt ::S4476C7_nt(){ note_ctor("S4476C7_nt", this);} // tgen

//skip512 S4476C7_nt

#else // __cplusplus

extern void _ZN10S4476C7_ntC1Ev();
extern void _ZN10S4476C7_ntD1Ev();
Name_Map name_map_S4476C7_nt[] = {
  NSPAIR(_ZN10S4476C7_ntC1Ev),
  NSPAIR(_ZN10S4476C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4476C7_nt[];
extern void _ZN10S4476C7_ntD1Ev();
extern void _ZN10S4476C7_ntD0Ev();
static  VTBL_ENTRY vtc_S4476C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4476C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S4476C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4476C7_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S4476C7_nt[];
VTBL_ENTRY *P__ZTI10S4476C7_nt = _ZTI10S4476C7_nt; 
extern  VTBL_ENTRY _ZTV10S4476C7_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4476C12  {
  void *s4476c12f0;
  int s4476c12f1;
  void *s4476c12f2;
  int s4476c12f3;
  ::S4474C14_nt s4476c12f4;
  ::S4474C14_nt s4476c12f5;
  int s4476c12f6[2];
  void *s4476c12f7;
  int s4476c12f8;
  char s4476c12f9[3];
  void  mf4476c12(); // _ZN8S4476C129mf4476c12Ev
};
//SIG(-1 S4476C12) C1{ m Fp Fi Fp Fi FC2{ m FC3{ vd m FL Fc} FC3} FC2 Fi[2] Fp Fi Fc[3]}


void  S4476C12 ::mf4476c12(){}

static void Test_S4476C12()
{
  {
    init_simple_test("S4476C12");
    S4476C12 lv;
    check2(sizeof(lv), ABISELECT(152,100), "sizeof(S4476C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4476C12)");
    check_field_offset(lv, s4476c12f0, 0, "S4476C12.s4476c12f0");
    check_field_offset(lv, s4476c12f1, ABISELECT(8,4), "S4476C12.s4476c12f1");
    check_field_offset(lv, s4476c12f2, ABISELECT(16,8), "S4476C12.s4476c12f2");
    check_field_offset(lv, s4476c12f3, ABISELECT(24,12), "S4476C12.s4476c12f3");
    check_field_offset(lv, s4476c12f4, ABISELECT(32,16), "S4476C12.s4476c12f4");
    check_field_offset(lv, s4476c12f5, ABISELECT(80,48), "S4476C12.s4476c12f5");
    check_field_offset(lv, s4476c12f6, ABISELECT(128,80), "S4476C12.s4476c12f6");
    check_field_offset(lv, s4476c12f7, ABISELECT(136,88), "S4476C12.s4476c12f7");
    check_field_offset(lv, s4476c12f8, ABISELECT(144,92), "S4476C12.s4476c12f8");
    check_field_offset(lv, s4476c12f9, ABISELECT(148,96), "S4476C12.s4476c12f9");
  }
}
static Arrange_To_Call_Me vS4476C12(Test_S4476C12, "S4476C12", ABISELECT(152,100));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4476C15_nt  {
  void *s4476c15f0[3];
  void  mf4476c15(); // _ZN11S4476C15_nt9mf4476c15Ev
  virtual  ~S4476C15_nt(); // _ZN11S4476C15_ntD1Ev
  S4476C15_nt(); // tgen
};
//SIG(-1 S4476C15_nt) C1{ vd m Fp[3]}


void  S4476C15_nt ::mf4476c15(){}
 S4476C15_nt ::~S4476C15_nt(){ note_dtor("S4476C15_nt", this);}
S4476C15_nt ::S4476C15_nt(){ note_ctor("S4476C15_nt", this);} // tgen

//skip512 S4476C15_nt

#else // __cplusplus

extern void _ZN11S4476C15_ntC1Ev();
extern void _ZN11S4476C15_ntD1Ev();
Name_Map name_map_S4476C15_nt[] = {
  NSPAIR(_ZN11S4476C15_ntC1Ev),
  NSPAIR(_ZN11S4476C15_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S4476C15_nt[];
extern void _ZN11S4476C15_ntD1Ev();
extern void _ZN11S4476C15_ntD0Ev();
static  VTBL_ENTRY vtc_S4476C15_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S4476C15_nt[0]),
  (VTBL_ENTRY)&_ZN11S4476C15_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S4476C15_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S4476C15_nt[];
VTBL_ENTRY *P__ZTI11S4476C15_nt = _ZTI11S4476C15_nt; 
extern  VTBL_ENTRY _ZTV11S4476C15_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4476C1  : S4476C2 {
  ::S4476C7_nt s4476c1f0;
  void *s4476c1f1;
  ::S4476C12 s4476c1f2;
  ::S4476C15_nt s4476c1f3;
  virtual  ~S4476C1(); // _ZN7S4476C1D1Ev
  virtual void  v1(); // _ZN7S4476C12v1Ev
  S4476C1(); // tgen
};
//SIG(1 S4476C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} BC6{ vd v5} vd v6 v7 Fp Fi Fp} vd v1 FC7{ vd m FC8{ m Fp Fi FC9{ m}} FC8 FC10{ BC11{ vd m Fc} vd FL[2]} FC10 Fi Fc FC8} Fp FC12{ m Fp Fi Fp Fi FC13{ m FC14{ vd m FL Fc} FC14} FC13 Fi[2] Fp Fi Fc[3]} FC15{ vd m Fp[3]}}


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

static void Test_S4476C1()
{
  extern Class_Descriptor cd_S4476C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(54,72)];
    init_test(&cd_S4476C1, buf);
    S4476C1 *dp, &lv = *(dp=new (buf) S4476C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(424,284), "sizeof(S4476C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4476C1)");
    check_base_class_offset(lv, (S4476C3*)(S4476C2*), 0, "S4476C1");
    check_base_class_offset(lv, (S4476C6*)(S4476C2*), ABISELECT(72,52), "S4476C1");
    check_base_class_offset(lv, (S4476C2*), 0, "S4476C1");
    check_field_offset(lv, s4476c1f0, ABISELECT(104,68), "S4476C1.s4476c1f0");
    check_field_offset(lv, s4476c1f1, ABISELECT(232,164), "S4476C1.s4476c1f1");
    check_field_offset(lv, s4476c1f2, ABISELECT(240,168), "S4476C1.s4476c1f2");
    check_field_offset(lv, s4476c1f3, ABISELECT(392,268), "S4476C1.s4476c1f3");
    test_class_info(&lv, &cd_S4476C1);
    dp->~S4476C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4476C1(Test_S4476C1, "S4476C1", ABISELECT(424,284));

#else // __cplusplus

extern void _ZN7S4476C1C1Ev();
extern void _ZN7S4476C1D1Ev();
Name_Map name_map_S4476C1[] = {
  NSPAIR(_ZN7S4476C1C1Ev),
  NSPAIR(_ZN7S4476C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4476C3;
extern VTBL_ENTRY _ZTI7S4476C3[];
extern  VTBL_ENTRY _ZTV7S4476C3[];
extern Class_Descriptor cd_S4476C6;
extern VTBL_ENTRY _ZTI7S4476C6[];
extern  VTBL_ENTRY _ZTV7S4476C6[];
extern Class_Descriptor cd_S4476C2;
extern VTBL_ENTRY _ZTI7S4476C2[];
extern  VTBL_ENTRY _ZTV7S4476C2[];
static Base_Class bases_S4476C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4476C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4476C6,    ABISELECT(72,52), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S4476C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4476C1[];
extern void _ZN7S4476C1D1Ev();
extern void _ZN7S4476C1D0Ev();
extern void _ZN7S4476C32v2Ev();
extern void _ZN7S4476C32v3Ev();
extern void _ZN7S4476C32v4Ev();
extern void _ZN7S4476C22v6Ev();
extern void _ZN7S4476C22v7Ev();
extern void _ZN7S4476C12v1Ev();
extern void ABISELECT(_ZThn72_N7S4476C1D1Ev,_ZThn52_N7S4476C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4476C1D0Ev,_ZThn52_N7S4476C1D0Ev)();
extern void _ZN7S4476C62v5Ev();
static  VTBL_ENTRY vtc_S4476C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4476C1[0]),
  (VTBL_ENTRY)&_ZN7S4476C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4476C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4476C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4476C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4476C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4476C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4476C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4476C12v1Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4476C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4476C1D1Ev,_ZThn52_N7S4476C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4476C1D0Ev,_ZThn52_N7S4476C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4476C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4476C1[];
extern  VTBL_ENTRY _ZTV7S4476C1[];
Class_Descriptor cd_S4476C1 = {  "S4476C1", // class name
  bases_S4476C1, 3,
  &(vtc_S4476C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(424,284), // object size
  NSPAIRA(_ZTI7S4476C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4476C1),15, //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  S130C7  {
  ::S2366C5_nt s130c7f0;
  int s130c7f1[2];
  char s130c7f2;
  virtual  ~S130C7(); // _ZN6S130C7D1Ev
  virtual void  v7(); // _ZN6S130C72v7Ev
  virtual void  v8(); // _ZN6S130C72v8Ev
  virtual void  v9(); // _ZN6S130C72v9Ev
  S130C7(); // tgen
};
//SIG(-1 S130C7) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S130C7 ::~S130C7(){ note_dtor("S130C7", this);}
void  S130C7 ::v7(){vfunc_called(this, "_ZN6S130C72v7Ev");}
void  S130C7 ::v8(){vfunc_called(this, "_ZN6S130C72v8Ev");}
void  S130C7 ::v9(){vfunc_called(this, "_ZN6S130C72v9Ev");}
S130C7 ::S130C7(){ note_ctor("S130C7", this);} // tgen

static void Test_S130C7()
{
  extern Class_Descriptor cd_S130C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S130C7, buf);
    S130C7 *dp, &lv = *(dp=new (buf) S130C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S130C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S130C7)");
    check_field_offset(lv, s130c7f0, ABISELECT(8,4), "S130C7.s130c7f0");
    check_field_offset(lv, s130c7f1, ABISELECT(24,16), "S130C7.s130c7f1");
    check_field_offset(lv, s130c7f2, ABISELECT(32,24), "S130C7.s130c7f2");
    test_class_info(&lv, &cd_S130C7);
    dp->~S130C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS130C7(Test_S130C7, "S130C7", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN6S130C7C1Ev();
extern void _ZN6S130C7D1Ev();
Name_Map name_map_S130C7[] = {
  NSPAIR(_ZN6S130C7C1Ev),
  NSPAIR(_ZN6S130C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S130C7[];
extern void _ZN6S130C7D1Ev();
extern void _ZN6S130C7D0Ev();
extern void _ZN6S130C72v7Ev();
extern void _ZN6S130C72v8Ev();
extern void _ZN6S130C72v9Ev();
static  VTBL_ENTRY vtc_S130C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S130C7[0]),
  (VTBL_ENTRY)&_ZN6S130C7D1Ev,
  (VTBL_ENTRY)&_ZN6S130C7D0Ev,
  (VTBL_ENTRY)&_ZN6S130C72v7Ev,
  (VTBL_ENTRY)&_ZN6S130C72v8Ev,
  (VTBL_ENTRY)&_ZN6S130C72v9Ev,
};
extern VTBL_ENTRY _ZTI6S130C7[];
extern  VTBL_ENTRY _ZTV6S130C7[];
Class_Descriptor cd_S130C7 = {  "S130C7", // class name
  0,0,//no base classes
  &(vtc_S130C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI6S130C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S130C7),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  S130C6  : S130C7 {
  void *s130c6f0;
  virtual void  v10(); // _ZN6S130C63v10Ev
  virtual void  v11(); // _ZN6S130C63v11Ev
  ~S130C6(); // tgen
  S130C6(); // tgen
};
//SIG(-1 S130C6) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S130C6 ::v10(){vfunc_called(this, "_ZN6S130C63v10Ev");}
void  S130C6 ::v11(){vfunc_called(this, "_ZN6S130C63v11Ev");}
S130C6 ::~S130C6(){ note_dtor("S130C6", this);} // tgen
S130C6 ::S130C6(){ note_ctor("S130C6", this);} // tgen

static void Test_S130C6()
{
  extern Class_Descriptor cd_S130C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S130C6, buf);
    S130C6 *dp, &lv = *(dp=new (buf) S130C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S130C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S130C6)");
    check_base_class_offset(lv, (S130C7*), 0, "S130C6");
    check_field_offset(lv, s130c6f0, ABISELECT(40,28), "S130C6.s130c6f0");
    test_class_info(&lv, &cd_S130C6);
    dp->~S130C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS130C6(Test_S130C6, "S130C6", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN6S130C6C1Ev();
extern void _ZN6S130C6D1Ev();
Name_Map name_map_S130C6[] = {
  NSPAIR(_ZN6S130C6C1Ev),
  NSPAIR(_ZN6S130C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S130C7;
extern VTBL_ENTRY _ZTI6S130C7[];
extern  VTBL_ENTRY _ZTV6S130C7[];
static Base_Class bases_S130C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S130C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S130C6[];
extern void _ZN6S130C6D1Ev();
extern void _ZN6S130C6D0Ev();
extern void _ZN6S130C72v7Ev();
extern void _ZN6S130C72v8Ev();
extern void _ZN6S130C72v9Ev();
extern void _ZN6S130C63v10Ev();
extern void _ZN6S130C63v11Ev();
static  VTBL_ENTRY vtc_S130C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S130C6[0]),
  (VTBL_ENTRY)&_ZN6S130C6D1Ev,
  (VTBL_ENTRY)&_ZN6S130C6D0Ev,
  (VTBL_ENTRY)&_ZN6S130C72v7Ev,
  (VTBL_ENTRY)&_ZN6S130C72v8Ev,
  (VTBL_ENTRY)&_ZN6S130C72v9Ev,
  (VTBL_ENTRY)&_ZN6S130C63v10Ev,
  (VTBL_ENTRY)&_ZN6S130C63v11Ev,
};
extern VTBL_ENTRY _ZTI6S130C6[];
extern  VTBL_ENTRY _ZTV6S130C6[];
Class_Descriptor cd_S130C6 = {  "S130C6", // class name
  bases_S130C6, 1,
  &(vtc_S130C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI6S130C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S130C6),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  S130C5  : S130C6 {
  void *s130c5f0;
  char s130c5f1;
  ::S2366C14_nt s130c5f2;
  virtual  ~S130C5(); // _ZN6S130C5D1Ev
  virtual void  v12(); // _ZN6S130C53v12Ev
  S130C5(); // tgen
};
//SIG(-1 S130C5) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1 Fp Fc FC6{ m Fi[2]}}


 S130C5 ::~S130C5(){ note_dtor("S130C5", this);}
void  S130C5 ::v12(){vfunc_called(this, "_ZN6S130C53v12Ev");}
S130C5 ::S130C5(){ note_ctor("S130C5", this);} // tgen

static void Test_S130C5()
{
  extern Class_Descriptor cd_S130C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S130C5, buf);
    S130C5 *dp, &lv = *(dp=new (buf) S130C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S130C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S130C5)");
    check_base_class_offset(lv, (S130C7*)(S130C6*), 0, "S130C5");
    check_base_class_offset(lv, (S130C6*), 0, "S130C5");
    check_field_offset(lv, s130c5f0, ABISELECT(48,32), "S130C5.s130c5f0");
    check_field_offset(lv, s130c5f1, ABISELECT(56,36), "S130C5.s130c5f1");
    check_field_offset(lv, s130c5f2, ABISELECT(60,40), "S130C5.s130c5f2");
    test_class_info(&lv, &cd_S130C5);
    dp->~S130C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS130C5(Test_S130C5, "S130C5", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN6S130C5C1Ev();
extern void _ZN6S130C5D1Ev();
Name_Map name_map_S130C5[] = {
  NSPAIR(_ZN6S130C5C1Ev),
  NSPAIR(_ZN6S130C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S130C7;
extern VTBL_ENTRY _ZTI6S130C7[];
extern  VTBL_ENTRY _ZTV6S130C7[];
extern Class_Descriptor cd_S130C6;
extern VTBL_ENTRY _ZTI6S130C6[];
extern  VTBL_ENTRY _ZTV6S130C6[];
static Base_Class bases_S130C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S130C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S130C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S130C5[];
extern void _ZN6S130C5D1Ev();
extern void _ZN6S130C5D0Ev();
extern void _ZN6S130C72v7Ev();
extern void _ZN6S130C72v8Ev();
extern void _ZN6S130C72v9Ev();
extern void _ZN6S130C63v10Ev();
extern void _ZN6S130C63v11Ev();
extern void _ZN6S130C53v12Ev();
static  VTBL_ENTRY vtc_S130C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S130C5[0]),
  (VTBL_ENTRY)&_ZN6S130C5D1Ev,
  (VTBL_ENTRY)&_ZN6S130C5D0Ev,
  (VTBL_ENTRY)&_ZN6S130C72v7Ev,
  (VTBL_ENTRY)&_ZN6S130C72v8Ev,
  (VTBL_ENTRY)&_ZN6S130C72v9Ev,
  (VTBL_ENTRY)&_ZN6S130C63v10Ev,
  (VTBL_ENTRY)&_ZN6S130C63v11Ev,
  (VTBL_ENTRY)&_ZN6S130C53v12Ev,
};
extern VTBL_ENTRY _ZTI6S130C5[];
extern  VTBL_ENTRY _ZTV6S130C5[];
Class_Descriptor cd_S130C5 = {  "S130C5", // class name
  bases_S130C5, 2,
  &(vtc_S130C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI6S130C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S130C5),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  S130C11_nt  {
  void *s130c11f0[2];
  void  mf130c11(); // _ZN10S130C11_nt8mf130c11Ev
};
//SIG(-1 S130C11_nt) C1{ m Fp[2]}


void  S130C11_nt ::mf130c11(){}

//skip512 S130C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S130C12_nt  {
  void *s130c12f0;
  int s130c12f1;
  void *s130c12f2;
};
//SIG(-1 S130C12_nt) C1{ Fp Fi Fp}



//skip512 S130C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S130C4  : S130C5 {
  void *s130c4f0;
  __tsi64 s130c4f1[2];
  ::S130C11_nt s130c4f2;
  __tsi64 s130c4f3;
  ::S130C12_nt s130c4f4;
  char s130c4f5;
  void *s130c4f6[2];
  virtual  ~S130C4(); // _ZN6S130C4D1Ev
  virtual void  v13(); // _ZN6S130C43v13Ev
  virtual void  v14(); // _ZN6S130C43v14Ev
  virtual void  v15(); // _ZN6S130C43v15Ev
  virtual void  v16(); // _ZN6S130C43v16Ev
  S130C4(); // tgen
};
//SIG(-1 S130C4) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v8 v9 Fp} vd v10 Fp Fc FC7{ m Fi[2]}} vd v1 v2 v3 v4 Fp FL[2] FC8{ m Fp[2]} FL FC9{ Fp Fi Fp} Fc Fp[2]}


 S130C4 ::~S130C4(){ note_dtor("S130C4", this);}
void  S130C4 ::v13(){vfunc_called(this, "_ZN6S130C43v13Ev");}
void  S130C4 ::v14(){vfunc_called(this, "_ZN6S130C43v14Ev");}
void  S130C4 ::v15(){vfunc_called(this, "_ZN6S130C43v15Ev");}
void  S130C4 ::v16(){vfunc_called(this, "_ZN6S130C43v16Ev");}
S130C4 ::S130C4(){ note_ctor("S130C4", this);} // tgen

static void Test_S130C4()
{
  extern Class_Descriptor cd_S130C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,28)];
    init_test(&cd_S130C4, buf);
    S130C4 *dp, &lv = *(dp=new (buf) S130C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,108), "sizeof(S130C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S130C4)");
    check_base_class_offset(lv, (S130C7*)(S130C6*)(S130C5*), 0, "S130C4");
    check_base_class_offset(lv, (S130C6*)(S130C5*), 0, "S130C4");
    check_base_class_offset(lv, (S130C5*), 0, "S130C4");
    check_field_offset(lv, s130c4f0, ABISELECT(72,48), "S130C4.s130c4f0");
    check_field_offset(lv, s130c4f1, ABISELECT(80,52), "S130C4.s130c4f1");
    check_field_offset(lv, s130c4f2, ABISELECT(96,68), "S130C4.s130c4f2");
    check_field_offset(lv, s130c4f3, ABISELECT(112,76), "S130C4.s130c4f3");
    check_field_offset(lv, s130c4f4, ABISELECT(120,84), "S130C4.s130c4f4");
    check_field_offset(lv, s130c4f5, ABISELECT(144,96), "S130C4.s130c4f5");
    check_field_offset(lv, s130c4f6, ABISELECT(152,100), "S130C4.s130c4f6");
    test_class_info(&lv, &cd_S130C4);
    dp->~S130C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS130C4(Test_S130C4, "S130C4", ABISELECT(168,108));

#else // __cplusplus

extern void _ZN6S130C4C1Ev();
extern void _ZN6S130C4D1Ev();
Name_Map name_map_S130C4[] = {
  NSPAIR(_ZN6S130C4C1Ev),
  NSPAIR(_ZN6S130C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S130C7;
extern VTBL_ENTRY _ZTI6S130C7[];
extern  VTBL_ENTRY _ZTV6S130C7[];
extern Class_Descriptor cd_S130C6;
extern VTBL_ENTRY _ZTI6S130C6[];
extern  VTBL_ENTRY _ZTV6S130C6[];
extern Class_Descriptor cd_S130C5;
extern VTBL_ENTRY _ZTI6S130C5[];
extern  VTBL_ENTRY _ZTV6S130C5[];
static Base_Class bases_S130C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S130C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S130C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S130C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S130C4[];
extern void _ZN6S130C4D1Ev();
extern void _ZN6S130C4D0Ev();
extern void _ZN6S130C72v7Ev();
extern void _ZN6S130C72v8Ev();
extern void _ZN6S130C72v9Ev();
extern void _ZN6S130C63v10Ev();
extern void _ZN6S130C63v11Ev();
extern void _ZN6S130C53v12Ev();
extern void _ZN6S130C43v13Ev();
extern void _ZN6S130C43v14Ev();
extern void _ZN6S130C43v15Ev();
extern void _ZN6S130C43v16Ev();
static  VTBL_ENTRY vtc_S130C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S130C4[0]),
  (VTBL_ENTRY)&_ZN6S130C4D1Ev,
  (VTBL_ENTRY)&_ZN6S130C4D0Ev,
  (VTBL_ENTRY)&_ZN6S130C72v7Ev,
  (VTBL_ENTRY)&_ZN6S130C72v8Ev,
  (VTBL_ENTRY)&_ZN6S130C72v9Ev,
  (VTBL_ENTRY)&_ZN6S130C63v10Ev,
  (VTBL_ENTRY)&_ZN6S130C63v11Ev,
  (VTBL_ENTRY)&_ZN6S130C53v12Ev,
  (VTBL_ENTRY)&_ZN6S130C43v13Ev,
  (VTBL_ENTRY)&_ZN6S130C43v14Ev,
  (VTBL_ENTRY)&_ZN6S130C43v15Ev,
  (VTBL_ENTRY)&_ZN6S130C43v16Ev,
};
extern VTBL_ENTRY _ZTI6S130C4[];
extern  VTBL_ENTRY _ZTV6S130C4[];
Class_Descriptor cd_S130C4 = {  "S130C4", // class name
  bases_S130C4, 3,
  &(vtc_S130C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,108), // object size
  NSPAIRA(_ZTI6S130C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S130C4),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S130C3  : S130C4 {
  char s130c3f0;
  void *s130c3f1[2];
  virtual  ~S130C3(); // _ZN6S130C3D1Ev
  virtual void  v17(); // _ZN6S130C33v17Ev
  virtual void  v18(); // _ZN6S130C33v18Ev
  virtual void  v19(); // _ZN6S130C33v19Ev
  virtual void  v20(); // _ZN6S130C33v20Ev
  virtual void  v21(); // _ZN6S130C33v21Ev
  virtual void  v22(); // _ZN6S130C33v22Ev
  virtual void  v23(); // _ZN6S130C33v23Ev
  virtual void  v24(); // _ZN6S130C33v24Ev
  S130C3(); // tgen
};
//SIG(-1 S130C3) C1{ BC2{ BC3{ BC4{ BC5{ vd v9 v10 v11 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} v12 v13 Fp} vd v14 Fp Fc FC8{ m Fi[2]}} vd v15 v16 v17 v18 Fp FL[2] FC9{ m Fp[2]} FL FC10{ Fp Fi Fp} Fc Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 Fc Fp[2]}


 S130C3 ::~S130C3(){ note_dtor("S130C3", this);}
void  S130C3 ::v17(){vfunc_called(this, "_ZN6S130C33v17Ev");}
void  S130C3 ::v18(){vfunc_called(this, "_ZN6S130C33v18Ev");}
void  S130C3 ::v19(){vfunc_called(this, "_ZN6S130C33v19Ev");}
void  S130C3 ::v20(){vfunc_called(this, "_ZN6S130C33v20Ev");}
void  S130C3 ::v21(){vfunc_called(this, "_ZN6S130C33v21Ev");}
void  S130C3 ::v22(){vfunc_called(this, "_ZN6S130C33v22Ev");}
void  S130C3 ::v23(){vfunc_called(this, "_ZN6S130C33v23Ev");}
void  S130C3 ::v24(){vfunc_called(this, "_ZN6S130C33v24Ev");}
S130C3 ::S130C3(){ note_ctor("S130C3", this);} // tgen

static void Test_S130C3()
{
  extern Class_Descriptor cd_S130C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,31)];
    init_test(&cd_S130C3, buf);
    S130C3 *dp, &lv = *(dp=new (buf) S130C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,120), "sizeof(S130C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S130C3)");
    check_base_class_offset(lv, (S130C7*)(S130C6*)(S130C5*)(S130C4*), 0, "S130C3");
    check_base_class_offset(lv, (S130C6*)(S130C5*)(S130C4*), 0, "S130C3");
    check_base_class_offset(lv, (S130C5*)(S130C4*), 0, "S130C3");
    check_base_class_offset(lv, (S130C4*), 0, "S130C3");
    check_field_offset(lv, s130c3f0, ABISELECT(168,108), "S130C3.s130c3f0");
    check_field_offset(lv, s130c3f1, ABISELECT(176,112), "S130C3.s130c3f1");
    test_class_info(&lv, &cd_S130C3);
    dp->~S130C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS130C3(Test_S130C3, "S130C3", ABISELECT(192,120));

#else // __cplusplus

extern void _ZN6S130C3C1Ev();
extern void _ZN6S130C3D1Ev();
Name_Map name_map_S130C3[] = {
  NSPAIR(_ZN6S130C3C1Ev),
  NSPAIR(_ZN6S130C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S130C7;
extern VTBL_ENTRY _ZTI6S130C7[];
extern  VTBL_ENTRY _ZTV6S130C7[];
extern Class_Descriptor cd_S130C6;
extern VTBL_ENTRY _ZTI6S130C6[];
extern  VTBL_ENTRY _ZTV6S130C6[];
extern Class_Descriptor cd_S130C5;
extern VTBL_ENTRY _ZTI6S130C5[];
extern  VTBL_ENTRY _ZTV6S130C5[];
extern Class_Descriptor cd_S130C4;
extern VTBL_ENTRY _ZTI6S130C4[];
extern  VTBL_ENTRY _ZTV6S130C4[];
static Base_Class bases_S130C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S130C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S130C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S130C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S130C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S130C3[];
extern void _ZN6S130C3D1Ev();
extern void _ZN6S130C3D0Ev();
extern void _ZN6S130C72v7Ev();
extern void _ZN6S130C72v8Ev();
extern void _ZN6S130C72v9Ev();
extern void _ZN6S130C63v10Ev();
extern void _ZN6S130C63v11Ev();
extern void _ZN6S130C53v12Ev();
extern void _ZN6S130C43v13Ev();
extern void _ZN6S130C43v14Ev();
extern void _ZN6S130C43v15Ev();
extern void _ZN6S130C43v16Ev();
extern void _ZN6S130C33v17Ev();
extern void _ZN6S130C33v18Ev();
extern void _ZN6S130C33v19Ev();
extern void _ZN6S130C33v20Ev();
extern void _ZN6S130C33v21Ev();
extern void _ZN6S130C33v22Ev();
extern void _ZN6S130C33v23Ev();
extern void _ZN6S130C33v24Ev();
static  VTBL_ENTRY vtc_S130C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S130C3[0]),
  (VTBL_ENTRY)&_ZN6S130C3D1Ev,
  (VTBL_ENTRY)&_ZN6S130C3D0Ev,
  (VTBL_ENTRY)&_ZN6S130C72v7Ev,
  (VTBL_ENTRY)&_ZN6S130C72v8Ev,
  (VTBL_ENTRY)&_ZN6S130C72v9Ev,
  (VTBL_ENTRY)&_ZN6S130C63v10Ev,
  (VTBL_ENTRY)&_ZN6S130C63v11Ev,
  (VTBL_ENTRY)&_ZN6S130C53v12Ev,
  (VTBL_ENTRY)&_ZN6S130C43v13Ev,
  (VTBL_ENTRY)&_ZN6S130C43v14Ev,
  (VTBL_ENTRY)&_ZN6S130C43v15Ev,
  (VTBL_ENTRY)&_ZN6S130C43v16Ev,
  (VTBL_ENTRY)&_ZN6S130C33v17Ev,
  (VTBL_ENTRY)&_ZN6S130C33v18Ev,
  (VTBL_ENTRY)&_ZN6S130C33v19Ev,
  (VTBL_ENTRY)&_ZN6S130C33v20Ev,
  (VTBL_ENTRY)&_ZN6S130C33v21Ev,
  (VTBL_ENTRY)&_ZN6S130C33v22Ev,
  (VTBL_ENTRY)&_ZN6S130C33v23Ev,
  (VTBL_ENTRY)&_ZN6S130C33v24Ev,
};
extern VTBL_ENTRY _ZTI6S130C3[];
extern  VTBL_ENTRY _ZTV6S130C3[];
Class_Descriptor cd_S130C3 = {  "S130C3", // class name
  bases_S130C3, 4,
  &(vtc_S130C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,120), // object size
  NSPAIRA(_ZTI6S130C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S130C3),22, //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  S130C2  : S130C3 {
  void *s130c2f0;
  int s130c2f1;
  __tsi64 s130c2f2;
  void *s130c2f3;
  virtual  ~S130C2(); // _ZN6S130C2D1Ev
  virtual void  v25(); // _ZN6S130C23v25Ev
  virtual void  v26(); // _ZN6S130C23v26Ev
  virtual void  v27(); // _ZN6S130C23v27Ev
  virtual void  v28(); // _ZN6S130C23v28Ev
  virtual void  v29(); // _ZN6S130C23v29Ev
  virtual void  v30(); // _ZN6S130C23v30Ev
  virtual void  v31(); // _ZN6S130C23v31Ev
  virtual void  v32(); // _ZN6S130C23v32Ev
  S130C2(); // tgen
};
//SIG(-1 S130C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v9 v10 v11 FC7{ m Fp Fi FC8{ m}} Fi[2] Fc} v12 v13 Fp} vd v14 Fp Fc FC9{ m Fi[2]}} vd v15 v16 v17 v18 Fp FL[2] FC10{ m Fp[2]} FL FC11{ Fp Fi Fp} Fc Fp[2]} vd v19 v20 v21 v22 v23 v24 v25 v26 Fc Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp Fi FL Fp}


 S130C2 ::~S130C2(){ note_dtor("S130C2", this);}
void  S130C2 ::v25(){vfunc_called(this, "_ZN6S130C23v25Ev");}
void  S130C2 ::v26(){vfunc_called(this, "_ZN6S130C23v26Ev");}
void  S130C2 ::v27(){vfunc_called(this, "_ZN6S130C23v27Ev");}
void  S130C2 ::v28(){vfunc_called(this, "_ZN6S130C23v28Ev");}
void  S130C2 ::v29(){vfunc_called(this, "_ZN6S130C23v29Ev");}
void  S130C2 ::v30(){vfunc_called(this, "_ZN6S130C23v30Ev");}
void  S130C2 ::v31(){vfunc_called(this, "_ZN6S130C23v31Ev");}
void  S130C2 ::v32(){vfunc_called(this, "_ZN6S130C23v32Ev");}
S130C2 ::S130C2(){ note_ctor("S130C2", this);} // tgen

static void Test_S130C2()
{
  extern Class_Descriptor cd_S130C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,36)];
    init_test(&cd_S130C2, buf);
    S130C2 *dp, &lv = *(dp=new (buf) S130C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,140), "sizeof(S130C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S130C2)");
    check_base_class_offset(lv, (S130C7*)(S130C6*)(S130C5*)(S130C4*)(S130C3*), 0, "S130C2");
    check_base_class_offset(lv, (S130C6*)(S130C5*)(S130C4*)(S130C3*), 0, "S130C2");
    check_base_class_offset(lv, (S130C5*)(S130C4*)(S130C3*), 0, "S130C2");
    check_base_class_offset(lv, (S130C4*)(S130C3*), 0, "S130C2");
    check_base_class_offset(lv, (S130C3*), 0, "S130C2");
    check_field_offset(lv, s130c2f0, ABISELECT(192,120), "S130C2.s130c2f0");
    check_field_offset(lv, s130c2f1, ABISELECT(200,124), "S130C2.s130c2f1");
    check_field_offset(lv, s130c2f2, ABISELECT(208,128), "S130C2.s130c2f2");
    check_field_offset(lv, s130c2f3, ABISELECT(216,136), "S130C2.s130c2f3");
    test_class_info(&lv, &cd_S130C2);
    dp->~S130C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS130C2(Test_S130C2, "S130C2", ABISELECT(224,140));

#else // __cplusplus

extern void _ZN6S130C2C1Ev();
extern void _ZN6S130C2D1Ev();
Name_Map name_map_S130C2[] = {
  NSPAIR(_ZN6S130C2C1Ev),
  NSPAIR(_ZN6S130C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S130C7;
extern VTBL_ENTRY _ZTI6S130C7[];
extern  VTBL_ENTRY _ZTV6S130C7[];
extern Class_Descriptor cd_S130C6;
extern VTBL_ENTRY _ZTI6S130C6[];
extern  VTBL_ENTRY _ZTV6S130C6[];
extern Class_Descriptor cd_S130C5;
extern VTBL_ENTRY _ZTI6S130C5[];
extern  VTBL_ENTRY _ZTV6S130C5[];
extern Class_Descriptor cd_S130C4;
extern VTBL_ENTRY _ZTI6S130C4[];
extern  VTBL_ENTRY _ZTV6S130C4[];
extern Class_Descriptor cd_S130C3;
extern VTBL_ENTRY _ZTI6S130C3[];
extern  VTBL_ENTRY _ZTV6S130C3[];
static Base_Class bases_S130C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S130C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S130C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S130C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S130C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S130C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S130C2[];
extern void _ZN6S130C2D1Ev();
extern void _ZN6S130C2D0Ev();
extern void _ZN6S130C72v7Ev();
extern void _ZN6S130C72v8Ev();
extern void _ZN6S130C72v9Ev();
extern void _ZN6S130C63v10Ev();
extern void _ZN6S130C63v11Ev();
extern void _ZN6S130C53v12Ev();
extern void _ZN6S130C43v13Ev();
extern void _ZN6S130C43v14Ev();
extern void _ZN6S130C43v15Ev();
extern void _ZN6S130C43v16Ev();
extern void _ZN6S130C33v17Ev();
extern void _ZN6S130C33v18Ev();
extern void _ZN6S130C33v19Ev();
extern void _ZN6S130C33v20Ev();
extern void _ZN6S130C33v21Ev();
extern void _ZN6S130C33v22Ev();
extern void _ZN6S130C33v23Ev();
extern void _ZN6S130C33v24Ev();
extern void _ZN6S130C23v25Ev();
extern void _ZN6S130C23v26Ev();
extern void _ZN6S130C23v27Ev();
extern void _ZN6S130C23v28Ev();
extern void _ZN6S130C23v29Ev();
extern void _ZN6S130C23v30Ev();
extern void _ZN6S130C23v31Ev();
extern void _ZN6S130C23v32Ev();
static  VTBL_ENTRY vtc_S130C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S130C2[0]),
  (VTBL_ENTRY)&_ZN6S130C2D1Ev,
  (VTBL_ENTRY)&_ZN6S130C2D0Ev,
  (VTBL_ENTRY)&_ZN6S130C72v7Ev,
  (VTBL_ENTRY)&_ZN6S130C72v8Ev,
  (VTBL_ENTRY)&_ZN6S130C72v9Ev,
  (VTBL_ENTRY)&_ZN6S130C63v10Ev,
  (VTBL_ENTRY)&_ZN6S130C63v11Ev,
  (VTBL_ENTRY)&_ZN6S130C53v12Ev,
  (VTBL_ENTRY)&_ZN6S130C43v13Ev,
  (VTBL_ENTRY)&_ZN6S130C43v14Ev,
  (VTBL_ENTRY)&_ZN6S130C43v15Ev,
  (VTBL_ENTRY)&_ZN6S130C43v16Ev,
  (VTBL_ENTRY)&_ZN6S130C33v17Ev,
  (VTBL_ENTRY)&_ZN6S130C33v18Ev,
  (VTBL_ENTRY)&_ZN6S130C33v19Ev,
  (VTBL_ENTRY)&_ZN6S130C33v20Ev,
  (VTBL_ENTRY)&_ZN6S130C33v21Ev,
  (VTBL_ENTRY)&_ZN6S130C33v22Ev,
  (VTBL_ENTRY)&_ZN6S130C33v23Ev,
  (VTBL_ENTRY)&_ZN6S130C33v24Ev,
  (VTBL_ENTRY)&_ZN6S130C23v25Ev,
  (VTBL_ENTRY)&_ZN6S130C23v26Ev,
  (VTBL_ENTRY)&_ZN6S130C23v27Ev,
  (VTBL_ENTRY)&_ZN6S130C23v28Ev,
  (VTBL_ENTRY)&_ZN6S130C23v29Ev,
  (VTBL_ENTRY)&_ZN6S130C23v30Ev,
  (VTBL_ENTRY)&_ZN6S130C23v31Ev,
  (VTBL_ENTRY)&_ZN6S130C23v32Ev,
};
extern VTBL_ENTRY _ZTI6S130C2[];
extern  VTBL_ENTRY _ZTV6S130C2[];
Class_Descriptor cd_S130C2 = {  "S130C2", // class name
  bases_S130C2, 5,
  &(vtc_S130C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,140), // object size
  NSPAIRA(_ZTI6S130C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S130C2),30, //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  S130C1  : S130C2 {
  void *s130c1f0[2];
  int s130c1f1;
  virtual  ~S130C1(); // _ZN6S130C1D1Ev
  virtual void  v1(); // _ZN6S130C12v1Ev
  virtual void  v2(); // _ZN6S130C12v2Ev
  virtual void  v3(); // _ZN6S130C12v3Ev
  virtual void  v4(); // _ZN6S130C12v4Ev
  virtual void  v5(); // _ZN6S130C12v5Ev
  virtual void  v6(); // _ZN6S130C12v6Ev
  S130C1(); // tgen
};
//SIG(1 S130C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd v7 v8 v9 FC8{ m Fp Fi FC9{ m}} Fi[2] Fc} v10 v11 Fp} vd v12 Fp Fc FC10{ m Fi[2]}} vd v13 v14 v15 v16 Fp FL[2] FC11{ m Fp[2]} FL FC12{ Fp Fi Fp} Fc Fp[2]} vd v17 v18 v19 v20 v21 v22 v23 v24 Fc Fp[2]} vd v25 v26 v27 v28 v29 v30 v31 v32 Fp Fi FL Fp} vd v1 v2 v3 v4 v5 v6 Fp[2] Fi}


 S130C1 ::~S130C1(){ note_dtor("S130C1", this);}
void  S130C1 ::v1(){vfunc_called(this, "_ZN6S130C12v1Ev");}
void  S130C1 ::v2(){vfunc_called(this, "_ZN6S130C12v2Ev");}
void  S130C1 ::v3(){vfunc_called(this, "_ZN6S130C12v3Ev");}
void  S130C1 ::v4(){vfunc_called(this, "_ZN6S130C12v4Ev");}
void  S130C1 ::v5(){vfunc_called(this, "_ZN6S130C12v5Ev");}
void  S130C1 ::v6(){vfunc_called(this, "_ZN6S130C12v6Ev");}
S130C1 ::S130C1(){ note_ctor("S130C1", this);} // tgen

static void Test_S130C1()
{
  extern Class_Descriptor cd_S130C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,39)];
    init_test(&cd_S130C1, buf);
    S130C1 *dp, &lv = *(dp=new (buf) S130C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,152), "sizeof(S130C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S130C1)");
    check_base_class_offset(lv, (S130C7*)(S130C6*)(S130C5*)(S130C4*)(S130C3*)(S130C2*), 0, "S130C1");
    check_base_class_offset(lv, (S130C6*)(S130C5*)(S130C4*)(S130C3*)(S130C2*), 0, "S130C1");
    check_base_class_offset(lv, (S130C5*)(S130C4*)(S130C3*)(S130C2*), 0, "S130C1");
    check_base_class_offset(lv, (S130C4*)(S130C3*)(S130C2*), 0, "S130C1");
    check_base_class_offset(lv, (S130C3*)(S130C2*), 0, "S130C1");
    check_base_class_offset(lv, (S130C2*), 0, "S130C1");
    check_field_offset(lv, s130c1f0, ABISELECT(224,140), "S130C1.s130c1f0");
    check_field_offset(lv, s130c1f1, ABISELECT(240,148), "S130C1.s130c1f1");
    test_class_info(&lv, &cd_S130C1);
    dp->~S130C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS130C1(Test_S130C1, "S130C1", ABISELECT(248,152));

#else // __cplusplus

extern void _ZN6S130C1C1Ev();
extern void _ZN6S130C1D1Ev();
Name_Map name_map_S130C1[] = {
  NSPAIR(_ZN6S130C1C1Ev),
  NSPAIR(_ZN6S130C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S130C7;
extern VTBL_ENTRY _ZTI6S130C7[];
extern  VTBL_ENTRY _ZTV6S130C7[];
extern Class_Descriptor cd_S130C6;
extern VTBL_ENTRY _ZTI6S130C6[];
extern  VTBL_ENTRY _ZTV6S130C6[];
extern Class_Descriptor cd_S130C5;
extern VTBL_ENTRY _ZTI6S130C5[];
extern  VTBL_ENTRY _ZTV6S130C5[];
extern Class_Descriptor cd_S130C4;
extern VTBL_ENTRY _ZTI6S130C4[];
extern  VTBL_ENTRY _ZTV6S130C4[];
extern Class_Descriptor cd_S130C3;
extern VTBL_ENTRY _ZTI6S130C3[];
extern  VTBL_ENTRY _ZTV6S130C3[];
extern Class_Descriptor cd_S130C2;
extern VTBL_ENTRY _ZTI6S130C2[];
extern  VTBL_ENTRY _ZTV6S130C2[];
static Base_Class bases_S130C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S130C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S130C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S130C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S130C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S130C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S130C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S130C1[];
extern void _ZN6S130C1D1Ev();
extern void _ZN6S130C1D0Ev();
extern void _ZN6S130C72v7Ev();
extern void _ZN6S130C72v8Ev();
extern void _ZN6S130C72v9Ev();
extern void _ZN6S130C63v10Ev();
extern void _ZN6S130C63v11Ev();
extern void _ZN6S130C53v12Ev();
extern void _ZN6S130C43v13Ev();
extern void _ZN6S130C43v14Ev();
extern void _ZN6S130C43v15Ev();
extern void _ZN6S130C43v16Ev();
extern void _ZN6S130C33v17Ev();
extern void _ZN6S130C33v18Ev();
extern void _ZN6S130C33v19Ev();
extern void _ZN6S130C33v20Ev();
extern void _ZN6S130C33v21Ev();
extern void _ZN6S130C33v22Ev();
extern void _ZN6S130C33v23Ev();
extern void _ZN6S130C33v24Ev();
extern void _ZN6S130C23v25Ev();
extern void _ZN6S130C23v26Ev();
extern void _ZN6S130C23v27Ev();
extern void _ZN6S130C23v28Ev();
extern void _ZN6S130C23v29Ev();
extern void _ZN6S130C23v30Ev();
extern void _ZN6S130C23v31Ev();
extern void _ZN6S130C23v32Ev();
extern void _ZN6S130C12v1Ev();
extern void _ZN6S130C12v2Ev();
extern void _ZN6S130C12v3Ev();
extern void _ZN6S130C12v4Ev();
extern void _ZN6S130C12v5Ev();
extern void _ZN6S130C12v6Ev();
static  VTBL_ENTRY vtc_S130C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S130C1[0]),
  (VTBL_ENTRY)&_ZN6S130C1D1Ev,
  (VTBL_ENTRY)&_ZN6S130C1D0Ev,
  (VTBL_ENTRY)&_ZN6S130C72v7Ev,
  (VTBL_ENTRY)&_ZN6S130C72v8Ev,
  (VTBL_ENTRY)&_ZN6S130C72v9Ev,
  (VTBL_ENTRY)&_ZN6S130C63v10Ev,
  (VTBL_ENTRY)&_ZN6S130C63v11Ev,
  (VTBL_ENTRY)&_ZN6S130C53v12Ev,
  (VTBL_ENTRY)&_ZN6S130C43v13Ev,
  (VTBL_ENTRY)&_ZN6S130C43v14Ev,
  (VTBL_ENTRY)&_ZN6S130C43v15Ev,
  (VTBL_ENTRY)&_ZN6S130C43v16Ev,
  (VTBL_ENTRY)&_ZN6S130C33v17Ev,
  (VTBL_ENTRY)&_ZN6S130C33v18Ev,
  (VTBL_ENTRY)&_ZN6S130C33v19Ev,
  (VTBL_ENTRY)&_ZN6S130C33v20Ev,
  (VTBL_ENTRY)&_ZN6S130C33v21Ev,
  (VTBL_ENTRY)&_ZN6S130C33v22Ev,
  (VTBL_ENTRY)&_ZN6S130C33v23Ev,
  (VTBL_ENTRY)&_ZN6S130C33v24Ev,
  (VTBL_ENTRY)&_ZN6S130C23v25Ev,
  (VTBL_ENTRY)&_ZN6S130C23v26Ev,
  (VTBL_ENTRY)&_ZN6S130C23v27Ev,
  (VTBL_ENTRY)&_ZN6S130C23v28Ev,
  (VTBL_ENTRY)&_ZN6S130C23v29Ev,
  (VTBL_ENTRY)&_ZN6S130C23v30Ev,
  (VTBL_ENTRY)&_ZN6S130C23v31Ev,
  (VTBL_ENTRY)&_ZN6S130C23v32Ev,
  (VTBL_ENTRY)&_ZN6S130C12v1Ev,
  (VTBL_ENTRY)&_ZN6S130C12v2Ev,
  (VTBL_ENTRY)&_ZN6S130C12v3Ev,
  (VTBL_ENTRY)&_ZN6S130C12v4Ev,
  (VTBL_ENTRY)&_ZN6S130C12v5Ev,
  (VTBL_ENTRY)&_ZN6S130C12v6Ev,
};
extern VTBL_ENTRY _ZTI6S130C1[];
extern  VTBL_ENTRY _ZTV6S130C1[];
Class_Descriptor cd_S130C1 = {  "S130C1", // class name
  bases_S130C1, 6,
  &(vtc_S130C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,152), // object size
  NSPAIRA(_ZTI6S130C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S130C1),36, //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  S20900C3  {
  void *s20900c3f0;
  long double s20900c3f1;
  int s20900c3f2;
  virtual void  v7(); // _ZN8S20900C32v7Ev
  virtual void  v8(); // _ZN8S20900C32v8Ev
  ~S20900C3(); // tgen
  S20900C3(); // tgen
};
//SIG(-1 S20900C3) C1{ v1 v2 Fp FD Fi}


void  S20900C3 ::v7(){vfunc_called(this, "_ZN8S20900C32v7Ev");}
void  S20900C3 ::v8(){vfunc_called(this, "_ZN8S20900C32v8Ev");}
S20900C3 ::~S20900C3(){ note_dtor("S20900C3", this);} // tgen
S20900C3 ::S20900C3(){ note_ctor("S20900C3", this);} // tgen

static void Test_S20900C3()
{
  extern Class_Descriptor cd_S20900C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S20900C3, buf);
    S20900C3 *dp, &lv = *(dp=new (buf) S20900C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20900C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20900C3)");
    check_field_offset(lv, s20900c3f0, ABISELECT(8,4), "S20900C3.s20900c3f0");
    check_field_offset(lv, s20900c3f1, ABISELECT(16,8), "S20900C3.s20900c3f1");
    check_field_offset(lv, s20900c3f2, ABISELECT(32,20), "S20900C3.s20900c3f2");
    test_class_info(&lv, &cd_S20900C3);
    dp->~S20900C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20900C3(Test_S20900C3, "S20900C3", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20900C3C1Ev();
extern void _ZN8S20900C3D1Ev();
Name_Map name_map_S20900C3[] = {
  NSPAIR(_ZN8S20900C3C1Ev),
  NSPAIR(_ZN8S20900C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20900C3[];
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
static  VTBL_ENTRY vtc_S20900C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C3[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
};
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
Class_Descriptor cd_S20900C3 = {  "S20900C3", // class name
  0,0,//no base classes
  &(vtc_S20900C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20900C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20900C3),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  S20900C6  : S20900C3 {
  virtual void  v12(); // _ZN8S20900C63v12Ev
  virtual void  v13(); // _ZN8S20900C63v13Ev
  ~S20900C6(); // tgen
  S20900C6(); // tgen
};
//SIG(-1 S20900C6) C1{ BC2{ v3 v4 Fp FD Fi} v1 v2}


void  S20900C6 ::v12(){vfunc_called(this, "_ZN8S20900C63v12Ev");}
void  S20900C6 ::v13(){vfunc_called(this, "_ZN8S20900C63v13Ev");}
S20900C6 ::~S20900C6(){ note_dtor("S20900C6", this);} // tgen
S20900C6 ::S20900C6(){ note_ctor("S20900C6", this);} // tgen

static void Test_S20900C6()
{
  extern Class_Descriptor cd_S20900C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S20900C6, buf);
    S20900C6 *dp, &lv = *(dp=new (buf) S20900C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20900C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20900C6)");
    check_base_class_offset(lv, (S20900C3*), 0, "S20900C6");
    test_class_info(&lv, &cd_S20900C6);
    dp->~S20900C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20900C6(Test_S20900C6, "S20900C6", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20900C6C1Ev();
extern void _ZN8S20900C6D1Ev();
Name_Map name_map_S20900C6[] = {
  NSPAIR(_ZN8S20900C6C1Ev),
  NSPAIR(_ZN8S20900C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
static Base_Class bases_S20900C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20900C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20900C6[];
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C63v12Ev();
extern void _ZN8S20900C63v13Ev();
static  VTBL_ENTRY vtc_S20900C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C6[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v13Ev,
};
extern VTBL_ENTRY _ZTI8S20900C6[];
extern  VTBL_ENTRY _ZTV8S20900C6[];
Class_Descriptor cd_S20900C6 = {  "S20900C6", // class name
  bases_S20900C6, 1,
  &(vtc_S20900C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20900C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20900C6),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  S20900C5  {
  ::S20900C6 s20900c5f0[3];
  void *s20900c5f1;
  short s20900c5f2:8;
  virtual void  v9(); // _ZN8S20900C52v9Ev
  virtual void  v10(); // _ZN8S20900C53v10Ev
  virtual void  v11(); // _ZN8S20900C53v11Ev
  ~S20900C5(); // tgen
  S20900C5(); // tgen
};
//SIG(-1 S20900C5) C1{ v1 v2 v3 FC2{ BC3{ v6 v7 Fp FD Fi} v4 v5}[3] Fp Fs:8}


void  S20900C5 ::v9(){vfunc_called(this, "_ZN8S20900C52v9Ev");}
void  S20900C5 ::v10(){vfunc_called(this, "_ZN8S20900C53v10Ev");}
void  S20900C5 ::v11(){vfunc_called(this, "_ZN8S20900C53v11Ev");}
S20900C5 ::~S20900C5(){ note_dtor("S20900C5", this);} // tgen
S20900C5 ::S20900C5(){ note_ctor("S20900C5", this);} // tgen

static void Test_S20900C5()
{
  extern Class_Descriptor cd_S20900C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,22)];
    init_test(&cd_S20900C5, buf);
    S20900C5 *dp, &lv = *(dp=new (buf) S20900C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,84), "sizeof(S20900C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20900C5)");
    check_field_offset(lv, s20900c5f0, ABISELECT(16,4), "S20900C5.s20900c5f0");
    check_field_offset(lv, s20900c5f1, ABISELECT(160,76), "S20900C5.s20900c5f1");
    set_bf_and_test(lv, s20900c5f2, ABISELECT(168,80), 0, 8, 1, "S20900C5");
    set_bf_and_test(lv, s20900c5f2, ABISELECT(168,80), 0, 8, hide_sll(1LL<<7), "S20900C5");
    test_class_info(&lv, &cd_S20900C5);
    dp->~S20900C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20900C5(Test_S20900C5, "S20900C5", ABISELECT(176,84));

#else // __cplusplus

extern void _ZN8S20900C5C1Ev();
extern void _ZN8S20900C5D1Ev();
Name_Map name_map_S20900C5[] = {
  NSPAIR(_ZN8S20900C5C1Ev),
  NSPAIR(_ZN8S20900C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20900C5[];
extern void _ZN8S20900C52v9Ev();
extern void _ZN8S20900C53v10Ev();
extern void _ZN8S20900C53v11Ev();
static  VTBL_ENTRY vtc_S20900C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C5[0]),
  (VTBL_ENTRY)&_ZN8S20900C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v11Ev,
};
extern VTBL_ENTRY _ZTI8S20900C5[];
extern  VTBL_ENTRY _ZTV8S20900C5[];
Class_Descriptor cd_S20900C5 = {  "S20900C5", // class name
  0,0,//no base classes
  &(vtc_S20900C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,84), // object size
  NSPAIRA(_ZTI8S20900C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20900C5),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  S20900C8  : S20900C6 , S20900C3 {
  virtual void  v14(); // _ZN8S20900C83v14Ev
  virtual void  v15(); // _ZN8S20900C83v15Ev
  virtual void  v16(); // _ZN8S20900C83v16Ev
  virtual void  v17(); // _ZN8S20900C83v17Ev
  ~S20900C8(); // tgen
  S20900C8(); // tgen
};
//SIG(-1 S20900C8) C1{ BC2{ BC3{ v5 v6 Fp FD Fi} v7 v8} BC3 v1 v2 v3 v4}


void  S20900C8 ::v14(){vfunc_called(this, "_ZN8S20900C83v14Ev");}
void  S20900C8 ::v15(){vfunc_called(this, "_ZN8S20900C83v15Ev");}
void  S20900C8 ::v16(){vfunc_called(this, "_ZN8S20900C83v16Ev");}
void  S20900C8 ::v17(){vfunc_called(this, "_ZN8S20900C83v17Ev");}
S20900C8 ::~S20900C8(){ note_dtor("S20900C8", this);} // tgen
S20900C8 ::S20900C8(){ note_ctor("S20900C8", this);} // tgen

static void Test_S20900C8()
{
  extern Class_Descriptor cd_S20900C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S20900C8, buf);
    S20900C8 *dp, &lv = *(dp=new (buf) S20900C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S20900C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20900C8)");
    check_base_class_offset(lv, (S20900C3*)(S20900C6*), 0, "S20900C8");
    check_base_class_offset(lv, (S20900C6*), 0, "S20900C8");
    /*is_ambiguous_... S20900C8::S20900C3 */ AMB_check_base_class_offset(lv, (S20900C3*), ABISELECT(48,24), "S20900C8");
    test_class_info(&lv, &cd_S20900C8);
    dp->~S20900C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20900C8(Test_S20900C8, "S20900C8", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S20900C8C1Ev();
extern void _ZN8S20900C8D1Ev();
Name_Map name_map_S20900C8[] = {
  NSPAIR(_ZN8S20900C8C1Ev),
  NSPAIR(_ZN8S20900C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
extern Class_Descriptor cd_S20900C6;
extern VTBL_ENTRY _ZTI8S20900C6[];
extern  VTBL_ENTRY _ZTV8S20900C6[];
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
static Base_Class bases_S20900C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20900C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20900C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20900C3,    ABISELECT(48,24), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20900C8[];
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C63v12Ev();
extern void _ZN8S20900C63v13Ev();
extern void _ZN8S20900C83v14Ev();
extern void _ZN8S20900C83v15Ev();
extern void _ZN8S20900C83v16Ev();
extern void _ZN8S20900C83v17Ev();
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
static  VTBL_ENTRY vtc_S20900C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C8[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v17Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20900C8[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
};
extern VTBL_ENTRY _ZTI8S20900C8[];
extern  VTBL_ENTRY _ZTV8S20900C8[];
Class_Descriptor cd_S20900C8 = {  "S20900C8", // class name
  bases_S20900C8, 3,
  &(vtc_S20900C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S20900C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20900C8),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  S20900C11  {
  ::S1400C17_nt s20900c11f0;
  void *s20900c11f1;
  virtual void  v18(); // _ZN9S20900C113v18Ev
  ~S20900C11(); // tgen
  S20900C11(); // tgen
};
//SIG(-1 S20900C11) C1{ v1 FC2{ v2 v3} Fp}


void  S20900C11 ::v18(){vfunc_called(this, "_ZN9S20900C113v18Ev");}
S20900C11 ::~S20900C11(){ note_dtor("S20900C11", this);} // tgen
S20900C11 ::S20900C11(){ note_ctor("S20900C11", this);} // tgen

static void Test_S20900C11()
{
  extern Class_Descriptor cd_S20900C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20900C11, buf);
    S20900C11 *dp, &lv = *(dp=new (buf) S20900C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20900C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20900C11)");
    check_field_offset(lv, s20900c11f0, ABISELECT(8,4), "S20900C11.s20900c11f0");
    check_field_offset(lv, s20900c11f1, ABISELECT(16,8), "S20900C11.s20900c11f1");
    test_class_info(&lv, &cd_S20900C11);
    dp->~S20900C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20900C11(Test_S20900C11, "S20900C11", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S20900C11C1Ev();
extern void _ZN9S20900C11D1Ev();
Name_Map name_map_S20900C11[] = {
  NSPAIR(_ZN9S20900C11C1Ev),
  NSPAIR(_ZN9S20900C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20900C11[];
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY vtc_S20900C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20900C11[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern VTBL_ENTRY _ZTI9S20900C11[];
extern  VTBL_ENTRY _ZTV9S20900C11[];
Class_Descriptor cd_S20900C11 = {  "S20900C11", // class name
  0,0,//no base classes
  &(vtc_S20900C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S20900C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20900C11),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  S20900C10  : virtual S20900C11 {
  virtual void  v19(); // _ZN9S20900C103v19Ev
  ~S20900C10(); // tgen
  S20900C10(); // tgen
};
//SIG(-1 S20900C10) C1{ VBC2{ v2 FC3{ v3 v4} Fp} v1}


void  S20900C10 ::v19(){vfunc_called(this, "_ZN9S20900C103v19Ev");}
S20900C10 ::~S20900C10(){ note_dtor("S20900C10", this);} // tgen
S20900C10 ::S20900C10(){ note_ctor("S20900C10", this);} // tgen

static void Test_S20900C10()
{
  extern Class_Descriptor cd_S20900C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20900C10, buf);
    S20900C10 *dp, &lv = *(dp=new (buf) S20900C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20900C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20900C10)");
    check_base_class_offset(lv, (S20900C11*), ABISELECT(8,4), "S20900C10");
    test_class_info(&lv, &cd_S20900C10);
    dp->~S20900C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20900C10(Test_S20900C10, "S20900C10", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S20900C10C1Ev();
extern void _ZN9S20900C10D1Ev();
Name_Map name_map_S20900C10[] = {
  NSPAIR(_ZN9S20900C10C1Ev),
  NSPAIR(_ZN9S20900C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20900C11;
extern VTBL_ENTRY _ZTI9S20900C11[];
extern  VTBL_ENTRY _ZTV9S20900C11[];
static Base_Class bases_S20900C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20900C11,    ABISELECT(8,4), //bcp->offset
    4, //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 _ZTI9S20900C10[];
extern void _ZN9S20900C103v19Ev();
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY vtc_S20900C10[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern VTBL_ENTRY _ZTV9S20900C10[];
static  VTT_ENTRY vtt_S20900C10[] = {
  {&(_ZTV9S20900C10[3]),  3,8},
  {&(_ZTV9S20900C10[7]),  7,8},
};
extern VTBL_ENTRY _ZTI9S20900C10[];
extern  VTBL_ENTRY _ZTV9S20900C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20900C10[];
Class_Descriptor cd_S20900C10 = {  "S20900C10", // class name
  bases_S20900C10, 1,
  &(vtc_S20900C10[0]), // expected_vtbl_contents
  &(vtt_S20900C10[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S20900C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20900C10),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20900C10),2, //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  S20900C9  : virtual S20900C10 {
  virtual void  v20(); // _ZN8S20900C93v20Ev
  virtual void  v21(); // _ZN8S20900C93v21Ev
  virtual void  v22(); // _ZN8S20900C93v22Ev
  ~S20900C9(); // tgen
  S20900C9(); // tgen
};
//SIG(-1 S20900C9) C1{ VBC2{ VBC3{ v4 FC4{ v6 v7} Fp} v5} v1 v2 v3}


void  S20900C9 ::v20(){vfunc_called(this, "_ZN8S20900C93v20Ev");}
void  S20900C9 ::v21(){vfunc_called(this, "_ZN8S20900C93v21Ev");}
void  S20900C9 ::v22(){vfunc_called(this, "_ZN8S20900C93v22Ev");}
S20900C9 ::~S20900C9(){ note_dtor("S20900C9", this);} // tgen
S20900C9 ::S20900C9(){ note_ctor("S20900C9", this);} // tgen

static void Test_S20900C9()
{
  extern Class_Descriptor cd_S20900C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20900C9, buf);
    S20900C9 *dp, &lv = *(dp=new (buf) S20900C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20900C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20900C9)");
    check_base_class_offset(lv, (S20900C11*)(S20900C10*), ABISELECT(8,4), "S20900C9");
    check_base_class_offset(lv, (S20900C10*), 0, "S20900C9");
    test_class_info(&lv, &cd_S20900C9);
    dp->~S20900C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20900C9(Test_S20900C9, "S20900C9", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20900C9C1Ev();
extern void _ZN8S20900C9D1Ev();
Name_Map name_map_S20900C9[] = {
  NSPAIR(_ZN8S20900C9C1Ev),
  NSPAIR(_ZN8S20900C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20900C11;
extern VTBL_ENTRY _ZTI9S20900C11[];
extern  VTBL_ENTRY _ZTV9S20900C11[];
extern Class_Descriptor cd_S20900C10;
extern VTBL_ENTRY _ZTI9S20900C10[];
extern  VTBL_ENTRY _ZTV9S20900C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20900C10[];
static Base_Class bases_S20900C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20900C11,    ABISELECT(8,4), //bcp->offset
    9, //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
    1, //immediately_derived
  0, 1},
  {&cd_S20900C10,    0, //bcp->offset
    -1, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S20900C9[];
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY vtc_S20900C9[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C9[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20900C9[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern VTBL_ENTRY _ZTV8S20900C9[];
extern void _ZN9S20900C103v19Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C10__8S20900C9[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__9S20900C10__8S20900C9[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
static  VTT_ENTRY vtt_S20900C9[] = {
  {&(_ZTV8S20900C9[5]),  5,13},
  {&(_ZTV8S20900C9[5]),  5,13},
  {&(_ZTV8S20900C9[12]),  12,13},
  {&(_tg__ZTV9S20900C10__8S20900C9[3]),  3,4},
  {&(_tg__ZTV9S20900C11__9S20900C10__8S20900C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20900C9[];
extern  VTBL_ENTRY _ZTV8S20900C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C9[];
Class_Descriptor cd_S20900C9 = {  "S20900C9", // class name
  bases_S20900C9, 2,
  &(vtc_S20900C9[0]), // expected_vtbl_contents
  &(vtt_S20900C9[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20900C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20900C9),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20900C9),5, //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  S20900C7  : S20900C8 , virtual S20900C9 {
  virtual void  v23(); // _ZN8S20900C73v23Ev
  virtual void  v24(); // _ZN8S20900C73v24Ev
  virtual void  v25(); // _ZN8S20900C73v25Ev
  ~S20900C7(); // tgen
  S20900C7(); // tgen
};
//SIG(-1 S20900C7) C1{ BC2{ BC3{ BC4{ v4 v5 Fp FD Fi} v6 v7} BC4 v8 v9 v10 v11} VBC5{ VBC6{ VBC7{ v12 FC8{ v17 v18} Fp} v13} v14 v15 v16} v1 v2 v3}


void  S20900C7 ::v23(){vfunc_called(this, "_ZN8S20900C73v23Ev");}
void  S20900C7 ::v24(){vfunc_called(this, "_ZN8S20900C73v24Ev");}
void  S20900C7 ::v25(){vfunc_called(this, "_ZN8S20900C73v25Ev");}
S20900C7 ::~S20900C7(){ note_dtor("S20900C7", this);} // tgen
S20900C7 ::S20900C7(){ note_ctor("S20900C7", this);} // tgen

static void Test_S20900C7()
{
  extern Class_Descriptor cd_S20900C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,17)];
    init_test(&cd_S20900C7, buf);
    S20900C7 *dp, &lv = *(dp=new (buf) S20900C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S20900C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20900C7)");
    check_base_class_offset(lv, (S20900C3*)(S20900C6*)(S20900C8*), 0, "S20900C7");
    check_base_class_offset(lv, (S20900C6*)(S20900C8*), 0, "S20900C7");
    /*is_ambiguous_... S20900C8::S20900C3 */ AMB_check_base_class_offset(lv, (S20900C3*)(S20900C8*), ABISELECT(48,24), "S20900C7");
    check_base_class_offset(lv, (S20900C8*), 0, "S20900C7");
    check_base_class_offset(lv, (S20900C11*)(S20900C10*), ABISELECT(96,52), "S20900C7");
    check_base_class_offset(lv, (S20900C10*)(S20900C9*), ABISELECT(88,48), "S20900C7");
    check_base_class_offset(lv, (S20900C9*), ABISELECT(88,48), "S20900C7");
    test_class_info(&lv, &cd_S20900C7);
    dp->~S20900C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20900C7(Test_S20900C7, "S20900C7", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S20900C7C1Ev();
extern void _ZN8S20900C7D1Ev();
Name_Map name_map_S20900C7[] = {
  NSPAIR(_ZN8S20900C7C1Ev),
  NSPAIR(_ZN8S20900C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
extern Class_Descriptor cd_S20900C6;
extern VTBL_ENTRY _ZTI8S20900C6[];
extern  VTBL_ENTRY _ZTV8S20900C6[];
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
extern Class_Descriptor cd_S20900C8;
extern VTBL_ENTRY _ZTI8S20900C8[];
extern  VTBL_ENTRY _ZTV8S20900C8[];
extern Class_Descriptor cd_S20900C11;
extern VTBL_ENTRY _ZTI9S20900C11[];
extern  VTBL_ENTRY _ZTV9S20900C11[];
extern Class_Descriptor cd_S20900C10;
extern VTBL_ENTRY _ZTI9S20900C10[];
extern  VTBL_ENTRY _ZTV9S20900C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20900C10[];
extern Class_Descriptor cd_S20900C9;
extern VTBL_ENTRY _ZTI8S20900C9[];
extern  VTBL_ENTRY _ZTV8S20900C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C9[];
static Base_Class bases_S20900C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20900C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S20900C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20900C3,    ABISELECT(48,24), //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
    6, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20900C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20900C11,    ABISELECT(96,52), //bcp->offset
    32, //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
    5, //immediately_derived
  0, 1},
  {&cd_S20900C10,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20900C9,    ABISELECT(88,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    8, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S20900C7[];
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C63v12Ev();
extern void _ZN8S20900C63v13Ev();
extern void _ZN8S20900C83v14Ev();
extern void _ZN8S20900C83v15Ev();
extern void _ZN8S20900C83v16Ev();
extern void _ZN8S20900C83v17Ev();
extern void _ZN8S20900C73v23Ev();
extern void _ZN8S20900C73v24Ev();
extern void _ZN8S20900C73v25Ev();
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY vtc_S20900C7[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v25Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern VTBL_ENTRY _ZTV8S20900C7[];
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C9__8S20900C7[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C9[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__8S20900C9__8S20900C7[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20900C9[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern void _ZN9S20900C103v19Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C10__8S20900C7[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__9S20900C10__8S20900C7[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
static  VTT_ENTRY vtt_S20900C7[] = {
  {&(_ZTV8S20900C7[5]),  5,36},
  {&(_ZTV8S20900C7[28]),  28,36},
  {&(_ZTV8S20900C7[28]),  28,36},
  {&(_ZTV8S20900C7[35]),  35,36},
  {&(_tg__ZTV8S20900C9__8S20900C7[5]),  5,9},
  {&(_tg__ZTV8S20900C9__8S20900C7[5]),  5,9},
  {&(_tg__ZTV9S20900C11__8S20900C9__8S20900C7[3]),  3,4},
  {&(_tg__ZTV9S20900C10__8S20900C7[3]),  3,4},
  {&(_tg__ZTV9S20900C11__9S20900C10__8S20900C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20900C7[];
extern  VTBL_ENTRY _ZTV8S20900C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C7[];
Class_Descriptor cd_S20900C7 = {  "S20900C7", // class name
  bases_S20900C7, 7,
  &(vtc_S20900C7[0]), // expected_vtbl_contents
  &(vtt_S20900C7[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S20900C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20900C7),36, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20900C7),9, //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  S20900C4  : S20900C5 , S20900C7 {
  virtual  ~S20900C4(); // _ZN8S20900C4D2Ev
  virtual void  v26(); // _ZN8S20900C43v26Ev
  virtual void  v27(); // _ZN8S20900C43v27Ev
  virtual void  v28(); // _ZN8S20900C43v28Ev
  virtual void  v29(); // _ZN8S20900C43v29Ev
  virtual void  v30(); // _ZN8S20900C43v30Ev
  virtual void  v31(); // _ZN8S20900C43v31Ev
  S20900C4(); // tgen
};
//SIG(-1 S20900C4) C1{ BC2{ v7 v8 v9 FC3{ BC4{ v10 v11 Fp FD Fi} v12 v13}[3] Fp Fs:8} BC5{ BC6{ BC3 BC4 v14 v15 v16 v17} VBC7{ VBC8{ VBC9{ v18 FC10{ v26 v27} Fp} v19} v20 v21 v22} v23 v24 v25} vd v1 v2 v3 v4 v5 v6}


 S20900C4 ::~S20900C4(){ note_dtor("S20900C4", this);}
void  S20900C4 ::v26(){vfunc_called(this, "_ZN8S20900C43v26Ev");}
void  S20900C4 ::v27(){vfunc_called(this, "_ZN8S20900C43v27Ev");}
void  S20900C4 ::v28(){vfunc_called(this, "_ZN8S20900C43v28Ev");}
void  S20900C4 ::v29(){vfunc_called(this, "_ZN8S20900C43v29Ev");}
void  S20900C4 ::v30(){vfunc_called(this, "_ZN8S20900C43v30Ev");}
void  S20900C4 ::v31(){vfunc_called(this, "_ZN8S20900C43v31Ev");}
S20900C4 ::S20900C4(){ note_ctor("S20900C4", this);} // tgen

static void Test_S20900C4()
{
  extern Class_Descriptor cd_S20900C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,38)];
    init_test(&cd_S20900C4, buf);
    S20900C4 *dp, &lv = *(dp=new (buf) S20900C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,148), "sizeof(S20900C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20900C4)");
    check_base_class_offset(lv, (S20900C5*), 0, "S20900C4");
    check_base_class_offset(lv, (S20900C3*)(S20900C6*)(S20900C8*)(S20900C7*), ABISELECT(176,84), "S20900C4");
    check_base_class_offset(lv, (S20900C6*)(S20900C8*)(S20900C7*), ABISELECT(176,84), "S20900C4");
    /*is_ambiguous_... S20900C8::S20900C3 */ AMB_check_base_class_offset(lv, (S20900C3*)(S20900C8*)(S20900C7*), ABISELECT(224,108), "S20900C4");
    check_base_class_offset(lv, (S20900C8*)(S20900C7*), ABISELECT(176,84), "S20900C4");
    check_base_class_offset(lv, (S20900C11*)(S20900C10*), ABISELECT(272,136), "S20900C4");
    check_base_class_offset(lv, (S20900C10*)(S20900C9*), ABISELECT(264,132), "S20900C4");
    check_base_class_offset(lv, (S20900C9*)(S20900C7*), ABISELECT(264,132), "S20900C4");
    check_base_class_offset(lv, (S20900C7*), ABISELECT(176,84), "S20900C4");
    test_class_info(&lv, &cd_S20900C4);
    dp->~S20900C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20900C4(Test_S20900C4, "S20900C4", ABISELECT(304,148));

#else // __cplusplus

extern void _ZN8S20900C4C1Ev();
extern void _ZN8S20900C4D2Ev();
Name_Map name_map_S20900C4[] = {
  NSPAIR(_ZN8S20900C4C1Ev),
  NSPAIR(_ZN8S20900C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20900C5;
extern VTBL_ENTRY _ZTI8S20900C5[];
extern  VTBL_ENTRY _ZTV8S20900C5[];
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
extern Class_Descriptor cd_S20900C6;
extern VTBL_ENTRY _ZTI8S20900C6[];
extern  VTBL_ENTRY _ZTV8S20900C6[];
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
extern Class_Descriptor cd_S20900C8;
extern VTBL_ENTRY _ZTI8S20900C8[];
extern  VTBL_ENTRY _ZTV8S20900C8[];
extern Class_Descriptor cd_S20900C11;
extern VTBL_ENTRY _ZTI9S20900C11[];
extern  VTBL_ENTRY _ZTV9S20900C11[];
extern Class_Descriptor cd_S20900C10;
extern VTBL_ENTRY _ZTI9S20900C10[];
extern  VTBL_ENTRY _ZTV9S20900C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20900C10[];
extern Class_Descriptor cd_S20900C9;
extern VTBL_ENTRY _ZTI8S20900C9[];
extern  VTBL_ENTRY _ZTV8S20900C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C9[];
extern Class_Descriptor cd_S20900C7;
extern VTBL_ENTRY _ZTI8S20900C7[];
extern  VTBL_ENTRY _ZTV8S20900C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C7[];
static Base_Class bases_S20900C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20900C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20900C3,    ABISELECT(176,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
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20900C6,    ABISELECT(176,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
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20900C3,    ABISELECT(224,108), //bcp->offset
    32, //bcp->virtual_function_table_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_S20900C8,    ABISELECT(176,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
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20900C11,    ABISELECT(272,136), //bcp->offset
    48, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20900C10,    ABISELECT(264,132), //bcp->offset
    -1, //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
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20900C9,    ABISELECT(264,132), //bcp->offset
    36, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20900C7,    ABISELECT(176,84), //bcp->offset
    16, //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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20900C4[];
extern void _ZN8S20900C52v9Ev();
extern void _ZN8S20900C53v10Ev();
extern void _ZN8S20900C53v11Ev();
extern void _ZN8S20900C4D1Ev();
extern void _ZN8S20900C4D0Ev();
extern void _ZN8S20900C43v26Ev();
extern void _ZN8S20900C43v27Ev();
extern void _ZN8S20900C43v28Ev();
extern void _ZN8S20900C43v29Ev();
extern void _ZN8S20900C43v30Ev();
extern void _ZN8S20900C43v31Ev();
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C63v12Ev();
extern void _ZN8S20900C63v13Ev();
extern void _ZN8S20900C83v14Ev();
extern void _ZN8S20900C83v15Ev();
extern void _ZN8S20900C83v16Ev();
extern void _ZN8S20900C83v17Ev();
extern void _ZN8S20900C73v23Ev();
extern void _ZN8S20900C73v24Ev();
extern void _ZN8S20900C73v25Ev();
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY vtc_S20900C4[] = {
  ABISELECT(272,136),
  ABISELECT(264,132),
  ABISELECT(264,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN8S20900C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20900C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20900C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v31Ev,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-176,-84),
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v25Ev,
  ABISELECT(-224,-108),
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-264,-132),
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
  0,
  ABISELECT(-272,-136),
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern VTBL_ENTRY _ZTV8S20900C4[];
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C63v12Ev();
extern void _ZN8S20900C63v13Ev();
extern void _ZN8S20900C83v14Ev();
extern void _ZN8S20900C83v15Ev();
extern void _ZN8S20900C83v16Ev();
extern void _ZN8S20900C83v17Ev();
extern void _ZN8S20900C73v23Ev();
extern void _ZN8S20900C73v24Ev();
extern void _ZN8S20900C73v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C7__8S20900C4[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v25Ev,
};
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C9__8S20900C7__8S20900C4[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__8S20900C7__8S20900C4[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C9__8S20900C4[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C9[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__8S20900C9__8S20900C4[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20900C9[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern void _ZN9S20900C103v19Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C10__8S20900C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__9S20900C10__8S20900C4[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
static  VTT_ENTRY vtt_S20900C4[] = {
  {&(_ZTV8S20900C4[5]),  5,52},
  {&(_tg__ZTV8S20900C7__8S20900C4[5]),  5,16},
  {&(_tg__ZTV8S20900C9__8S20900C7__8S20900C4[8]),  8,12},
  {&(_tg__ZTV8S20900C9__8S20900C7__8S20900C4[8]),  8,12},
  {&(_tg__ZTV9S20900C11__8S20900C7__8S20900C4[3]),  3,4},
  {&(_ZTV8S20900C4[21]),  21,52},
  {&(_ZTV8S20900C4[44]),  44,52},
  {&(_ZTV8S20900C4[44]),  44,52},
  {&(_ZTV8S20900C4[51]),  51,52},
  {&(_tg__ZTV8S20900C9__8S20900C4[5]),  5,9},
  {&(_tg__ZTV8S20900C9__8S20900C4[5]),  5,9},
  {&(_tg__ZTV9S20900C11__8S20900C9__8S20900C4[3]),  3,4},
  {&(_tg__ZTV9S20900C10__8S20900C4[3]),  3,4},
  {&(_tg__ZTV9S20900C11__9S20900C10__8S20900C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20900C4[];
extern  VTBL_ENTRY _ZTV8S20900C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C4[];
Class_Descriptor cd_S20900C4 = {  "S20900C4", // class name
  bases_S20900C4, 9,
  &(vtc_S20900C4[0]), // expected_vtbl_contents
  &(vtt_S20900C4[0]), // expected_vtt_contents
  ABISELECT(304,148), // object size
  NSPAIRA(_ZTI8S20900C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20900C4),52, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20900C4),14, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20900C2  : virtual S20900C3 , virtual S20900C4 {
  void *s20900c2f0;
  virtual  ~S20900C2(); // _ZN8S20900C2D2Ev
  virtual void  v32(); // _ZN8S20900C23v32Ev
  virtual void  v33(); // _ZN8S20900C23v33Ev
  virtual void  v34(); // _ZN8S20900C23v34Ev
  virtual void  v35(); // _ZN8S20900C23v35Ev
  virtual void  v36(); // _ZN8S20900C23v36Ev
  virtual void  v37(); // _ZN8S20900C23v37Ev
  virtual void  v38(); // _ZN8S20900C23v38Ev
  S20900C2(); // tgen
};
//SIG(-1 S20900C2) C1{ VBC2{ v8 v9 Fp FD Fi} VBC3{ BC4{ v10 v11 v12 FC5{ BC2 v13 v14}[3] Fp Fs:8} BC6{ BC7{ BC5 BC2 v15 v16 v17 v18} VBC8{ VBC9{ VBC10{ v19 FC11{ v33 v34} Fp} v20} v21 v22 v23} v24 v25 v26} vd v27 v28 v29 v30 v31 v32} vd v1 v2 v3 v4 v5 v6 v7 Fp}


 S20900C2 ::~S20900C2(){ note_dtor("S20900C2", this);}
void  S20900C2 ::v32(){vfunc_called(this, "_ZN8S20900C23v32Ev");}
void  S20900C2 ::v33(){vfunc_called(this, "_ZN8S20900C23v33Ev");}
void  S20900C2 ::v34(){vfunc_called(this, "_ZN8S20900C23v34Ev");}
void  S20900C2 ::v35(){vfunc_called(this, "_ZN8S20900C23v35Ev");}
void  S20900C2 ::v36(){vfunc_called(this, "_ZN8S20900C23v36Ev");}
void  S20900C2 ::v37(){vfunc_called(this, "_ZN8S20900C23v37Ev");}
void  S20900C2 ::v38(){vfunc_called(this, "_ZN8S20900C23v38Ev");}
S20900C2 ::S20900C2(){ note_ctor("S20900C2", this);} // tgen

static void Test_S20900C2()
{
  extern Class_Descriptor cd_S20900C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,45)];
    init_test(&cd_S20900C2, buf);
    S20900C2 *dp, &lv = *(dp=new (buf) S20900C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,176), "sizeof(S20900C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20900C2)");
    /*is_ambiguous_... S20900C2::S20900C3 */ AMB_check_base_class_offset(lv, (S20900C3*), ABISELECT(16,8), "S20900C2");
    check_base_class_offset(lv, (S20900C5*)(S20900C4*), ABISELECT(64,32), "S20900C2");
    check_base_class_offset(lv, (S20900C3*)(S20900C6*)(S20900C8*)(S20900C7*)(S20900C4*), ABISELECT(240,116), "S20900C2");
    check_base_class_offset(lv, (S20900C6*)(S20900C8*)(S20900C7*)(S20900C4*), ABISELECT(240,116), "S20900C2");
    /*is_ambiguous_... S20900C8::S20900C3 */ AMB_check_base_class_offset(lv, (S20900C3*)(S20900C8*)(S20900C7*)(S20900C4*), ABISELECT(288,140), "S20900C2");
    check_base_class_offset(lv, (S20900C8*)(S20900C7*)(S20900C4*), ABISELECT(240,116), "S20900C2");
    check_base_class_offset(lv, (S20900C11*)(S20900C10*), ABISELECT(328,164), "S20900C2");
    check_base_class_offset(lv, (S20900C10*)(S20900C9*), 0, "S20900C2");
    check_base_class_offset(lv, (S20900C9*)(S20900C7*)(S20900C4*), 0, "S20900C2");
    check_base_class_offset(lv, (S20900C7*)(S20900C4*), ABISELECT(240,116), "S20900C2");
    check_base_class_offset(lv, (S20900C4*), ABISELECT(64,32), "S20900C2");
    check_field_offset(lv, s20900c2f0, ABISELECT(8,4), "S20900C2.s20900c2f0");
    test_class_info(&lv, &cd_S20900C2);
    dp->~S20900C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20900C2(Test_S20900C2, "S20900C2", ABISELECT(352,176));

#else // __cplusplus

extern void _ZN8S20900C2C1Ev();
extern void _ZN8S20900C2D2Ev();
Name_Map name_map_S20900C2[] = {
  NSPAIR(_ZN8S20900C2C1Ev),
  NSPAIR(_ZN8S20900C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
extern Class_Descriptor cd_S20900C5;
extern VTBL_ENTRY _ZTI8S20900C5[];
extern  VTBL_ENTRY _ZTV8S20900C5[];
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
extern Class_Descriptor cd_S20900C6;
extern VTBL_ENTRY _ZTI8S20900C6[];
extern  VTBL_ENTRY _ZTV8S20900C6[];
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
extern Class_Descriptor cd_S20900C8;
extern VTBL_ENTRY _ZTI8S20900C8[];
extern  VTBL_ENTRY _ZTV8S20900C8[];
extern Class_Descriptor cd_S20900C11;
extern VTBL_ENTRY _ZTI9S20900C11[];
extern  VTBL_ENTRY _ZTV9S20900C11[];
extern Class_Descriptor cd_S20900C10;
extern VTBL_ENTRY _ZTI9S20900C10[];
extern  VTBL_ENTRY _ZTV9S20900C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20900C10[];
extern Class_Descriptor cd_S20900C9;
extern VTBL_ENTRY _ZTI8S20900C9[];
extern  VTBL_ENTRY _ZTV8S20900C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C9[];
extern Class_Descriptor cd_S20900C7;
extern VTBL_ENTRY _ZTI8S20900C7[];
extern  VTBL_ENTRY _ZTV8S20900C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C7[];
extern Class_Descriptor cd_S20900C4;
extern VTBL_ENTRY _ZTI8S20900C4[];
extern  VTBL_ENTRY _ZTV8S20900C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C4[];
static Base_Class bases_S20900C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20900C3,    ABISELECT(16,8), //bcp->offset
    24, //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_S20900C5,    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
    10, //immediately_derived
  0, 0},
  {&cd_S20900C3,    ABISELECT(240,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
    6, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20900C6,    ABISELECT(240,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
    7, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20900C3,    ABISELECT(288,140), //bcp->offset
    83, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20900C8,    ABISELECT(240,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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20900C11,    ABISELECT(328,164), //bcp->offset
    87, //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
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20900C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20900C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20900C7,    ABISELECT(240,116), //bcp->offset
    67, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20900C4,    ABISELECT(64,32), //bcp->offset
    30, //bcp->virtual_function_table_offset
    26, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20900C2[];
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
extern void _ZN8S20900C2D1Ev();
extern void _ZN8S20900C2D0Ev();
extern void _ZN8S20900C23v32Ev();
extern void _ZN8S20900C23v33Ev();
extern void _ZN8S20900C23v34Ev();
extern void _ZN8S20900C23v35Ev();
extern void _ZN8S20900C23v36Ev();
extern void _ZN8S20900C23v37Ev();
extern void _ZN8S20900C23v38Ev();
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C52v9Ev();
extern void _ZN8S20900C53v10Ev();
extern void _ZN8S20900C53v11Ev();
extern void ABISELECT(_ZTv0_n72_N8S20900C2D1Ev,_ZTv0_n36_N8S20900C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S20900C2D1Ev,_ZThn32_N8S20900C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20900C2D0Ev,_ZTv0_n36_N8S20900C2D0Ev)();
extern void ABISELECT(_ZThn64_N8S20900C2D0Ev,_ZThn32_N8S20900C2D0Ev)() __attribute__((weak));
extern void _ZN8S20900C43v26Ev();
extern void _ZN8S20900C43v27Ev();
extern void _ZN8S20900C43v28Ev();
extern void _ZN8S20900C43v29Ev();
extern void _ZN8S20900C43v30Ev();
extern void _ZN8S20900C43v31Ev();
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C63v12Ev();
extern void _ZN8S20900C63v13Ev();
extern void _ZN8S20900C83v14Ev();
extern void _ZN8S20900C83v15Ev();
extern void _ZN8S20900C83v16Ev();
extern void _ZN8S20900C83v17Ev();
extern void _ZN8S20900C73v23Ev();
extern void _ZN8S20900C73v24Ev();
extern void _ZN8S20900C73v25Ev();
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY vtc_S20900C2[] = {
  0,
  ABISELECT(64,32),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(328,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20900C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20900C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v32Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v33Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v34Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v35Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v36Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v37Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v38Ev,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  0,
  0,
  0,
  ABISELECT(264,132),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN8S20900C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20900C2D1Ev,_ZTv0_n36_N8S20900C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20900C2D0Ev,_ZTv0_n36_N8S20900C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20900C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v31Ev,
  ABISELECT(88,48),
  ABISELECT(-240,-116),
  ABISELECT(-240,-116),
  ABISELECT(-240,-116),
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v25Ev,
  ABISELECT(-288,-140),
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  0,
  ABISELECT(-328,-164),
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern VTBL_ENTRY _ZTV8S20900C2[];
extern void _ZN8S20900C52v9Ev();
extern void _ZN8S20900C53v10Ev();
extern void _ZN8S20900C53v11Ev();
extern void _ZN8S20900C4D1Ev();
extern void _ZN8S20900C4D0Ev();
extern void _ZN8S20900C43v26Ev();
extern void _ZN8S20900C43v27Ev();
extern void _ZN8S20900C43v28Ev();
extern void _ZN8S20900C43v29Ev();
extern void _ZN8S20900C43v30Ev();
extern void _ZN8S20900C43v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C4__8S20900C2[] = {
  ABISELECT(264,132),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN8S20900C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20900C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20900C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v31Ev,
};
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C63v12Ev();
extern void _ZN8S20900C63v13Ev();
extern void _ZN8S20900C83v14Ev();
extern void _ZN8S20900C83v15Ev();
extern void _ZN8S20900C83v16Ev();
extern void _ZN8S20900C83v17Ev();
extern void _ZN8S20900C73v23Ev();
extern void _ZN8S20900C73v24Ev();
extern void _ZN8S20900C73v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C78S20900C4__8S20900C2[] = {
  ABISELECT(88,48),
  ABISELECT(-240,-116),
  ABISELECT(-240,-116),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v25Ev,
};
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C9__8S20900C78S20900C4__8S20900C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(328,164),
  ABISELECT(240,116),
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__8S20900C78S20900C4__8S20900C2[] = {
  0,
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C63v12Ev();
extern void _ZN8S20900C63v13Ev();
extern void _ZN8S20900C83v14Ev();
extern void _ZN8S20900C83v15Ev();
extern void _ZN8S20900C83v16Ev();
extern void _ZN8S20900C83v17Ev();
extern void _ZN8S20900C73v23Ev();
extern void _ZN8S20900C73v24Ev();
extern void _ZN8S20900C73v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C7__8S20900C4__8S20900C2[] = {
  ABISELECT(88,48),
  ABISELECT(-240,-116),
  ABISELECT(-240,-116),
  ABISELECT(-176,-84),
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v25Ev,
};
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C9__8S20900C4__8S20900C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(328,164),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__8S20900C4__8S20900C2[] = {
  0,
  ABISELECT(-264,-132),
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C9__8S20900C2[] = {
  0,
  0,
  ABISELECT(328,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C9[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__8S20900C9__8S20900C2[] = {
  0,
  ABISELECT(-328,-164),
  (VTBL_ENTRY)&(_ZTI8S20900C9[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern void _ZN9S20900C103v19Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C10__8S20900C2[] = {
  ABISELECT(328,164),
  0,
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__9S20900C10__8S20900C2[] = {
  0,
  ABISELECT(-328,-164),
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
static  VTT_ENTRY vtt_S20900C2[] = {
  {&(_ZTV8S20900C2[11]),  11,91},
  {&(_ZTV8S20900C2[28]),  28,91},
  {&(_ZTV8S20900C2[56]),  56,91},
  {&(_ZTV8S20900C2[72]),  72,91},
  {&(_ZTV8S20900C2[85]),  85,91},
  {&(_ZTV8S20900C2[11]),  11,91},
  {&(_ZTV8S20900C2[11]),  11,91},
  {&(_ZTV8S20900C2[90]),  90,91},
  {&(_tg__ZTV8S20900C4__8S20900C2[5]),  5,16},
  {&(_tg__ZTV8S20900C78S20900C4__8S20900C2[5]),  5,16},
  {&(_tg__ZTV8S20900C9__8S20900C78S20900C4__8S20900C2[8]),  8,12},
  {&(_tg__ZTV8S20900C9__8S20900C78S20900C4__8S20900C2[8]),  8,12},
  {&(_tg__ZTV9S20900C11__8S20900C78S20900C4__8S20900C2[3]),  3,4},
  {&(_tg__ZTV8S20900C7__8S20900C4__8S20900C2[5]),  5,16},
  {&(_tg__ZTV8S20900C9__8S20900C4__8S20900C2[8]),  8,12},
  {&(_tg__ZTV8S20900C9__8S20900C4__8S20900C2[8]),  8,12},
  {&(_tg__ZTV9S20900C11__8S20900C4__8S20900C2[3]),  3,4},
  {&(_tg__ZTV8S20900C9__8S20900C2[5]),  5,9},
  {&(_tg__ZTV8S20900C9__8S20900C2[5]),  5,9},
  {&(_tg__ZTV9S20900C11__8S20900C9__8S20900C2[3]),  3,4},
  {&(_tg__ZTV9S20900C10__8S20900C2[3]),  3,4},
  {&(_tg__ZTV9S20900C11__9S20900C10__8S20900C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20900C2[];
extern  VTBL_ENTRY _ZTV8S20900C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C2[];
static VTBL_ENTRY alt_thunk_names28[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20900C2D0Ev,_ZTv0_n36_N8S20900C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20900C2D0Ev,_ZThn32_N8S20900C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20900C2D1Ev,_ZTv0_n36_N8S20900C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20900C2D1Ev,_ZThn32_N8S20900C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20900C2 = {  "S20900C2", // class name
  bases_S20900C2, 11,
  &(vtc_S20900C2[0]), // expected_vtbl_contents
  &(vtt_S20900C2[0]), // expected_vtt_contents
  ABISELECT(352,176), // object size
  NSPAIRA(_ZTI8S20900C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20900C2),91, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20900C2),22, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names28,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20900C13  : S20900C11 , S20900C10 {
  int s20900c13f0;
  virtual  ~S20900C13(); // _ZN9S20900C13D2Ev
  virtual void  v39(); // _ZN9S20900C133v39Ev
  S20900C13(); // tgen
};
//SIG(-1 S20900C13) C1{ BC2{ v2 FC3{ v4 v5} Fp} BC4{ VBC2 v3} vd v1 Fi}


 S20900C13 ::~S20900C13(){ note_dtor("S20900C13", this);}
void  S20900C13 ::v39(){vfunc_called(this, "_ZN9S20900C133v39Ev");}
S20900C13 ::S20900C13(){ note_ctor("S20900C13", this);} // tgen

static void Test_S20900C13()
{
  extern Class_Descriptor cd_S20900C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20900C13, buf);
    S20900C13 *dp, &lv = *(dp=new (buf) S20900C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20900C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20900C13)");
    /*is_ambiguous_... S20900C13::S20900C11 */ AMB_check_base_class_offset(lv, (S20900C11*), 0, "S20900C13");
    check_base_class_offset(lv, (S20900C11*)(S20900C10*), ABISELECT(40,20), "S20900C13");
    check_base_class_offset(lv, (S20900C10*), ABISELECT(24,12), "S20900C13");
    check_field_offset(lv, s20900c13f0, ABISELECT(32,16), "S20900C13.s20900c13f0");
    test_class_info(&lv, &cd_S20900C13);
    dp->~S20900C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20900C13(Test_S20900C13, "S20900C13", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN9S20900C13C1Ev();
extern void _ZN9S20900C13D2Ev();
Name_Map name_map_S20900C13[] = {
  NSPAIR(_ZN9S20900C13C1Ev),
  NSPAIR(_ZN9S20900C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20900C11;
extern VTBL_ENTRY _ZTI9S20900C11[];
extern  VTBL_ENTRY _ZTV9S20900C11[];
extern Class_Descriptor cd_S20900C11;
extern VTBL_ENTRY _ZTI9S20900C11[];
extern  VTBL_ENTRY _ZTV9S20900C11[];
extern Class_Descriptor cd_S20900C10;
extern VTBL_ENTRY _ZTI9S20900C10[];
extern  VTBL_ENTRY _ZTV9S20900C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20900C10[];
static Base_Class bases_S20900C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20900C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20900C11,    ABISELECT(40,20), //bcp->offset
    11, //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
    2, //immediately_derived
  0, 1},
  {&cd_S20900C10,    ABISELECT(24,12), //bcp->offset
    7, //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20900C13[];
extern void _ZN9S20900C113v18Ev();
extern void _ZN9S20900C13D1Ev();
extern void _ZN9S20900C13D0Ev();
extern void _ZN9S20900C133v39Ev();
extern void _ZN9S20900C103v19Ev();
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY vtc_S20900C13[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20900C13[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
  (VTBL_ENTRY)&_ZN9S20900C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20900C13D0Ev,
  (VTBL_ENTRY)&_ZN9S20900C133v39Ev,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20900C13[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20900C13[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern VTBL_ENTRY _ZTV9S20900C13[];
extern void _ZN9S20900C103v19Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C10__9S20900C13[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__9S20900C10__9S20900C13[] = {
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
static  VTT_ENTRY vtt_S20900C13[] = {
  {&(_ZTV9S20900C13[3]),  3,15},
  {&(_tg__ZTV9S20900C10__9S20900C13[3]),  3,4},
  {&(_tg__ZTV9S20900C11__9S20900C10__9S20900C13[3]),  3,4},
  {&(_ZTV9S20900C13[10]),  10,15},
  {&(_ZTV9S20900C13[14]),  14,15},
};
extern VTBL_ENTRY _ZTI9S20900C13[];
extern  VTBL_ENTRY _ZTV9S20900C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20900C13[];
Class_Descriptor cd_S20900C13 = {  "S20900C13", // class name
  bases_S20900C13, 3,
  &(vtc_S20900C13[0]), // expected_vtbl_contents
  &(vtt_S20900C13[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI9S20900C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20900C13),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20900C13),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  S20900C1  : virtual S20900C2 {
  ::S20900C13 s20900c1f0;
  long s20900c1f1;
  virtual void  v1(); // _ZN8S20900C12v1Ev
  virtual void  v2(); // _ZN8S20900C12v2Ev
  virtual void  v3(); // _ZN8S20900C12v3Ev
  virtual void  v4(); // _ZN8S20900C12v4Ev
  virtual void  v5(); // _ZN8S20900C12v5Ev
  virtual void  v6(); // _ZN8S20900C12v6Ev
  ~S20900C1(); // tgen
  S20900C1(); // tgen
};
//SIG(1 S20900C1) C1{ VBC2{ VBC3{ v7 v8 Fp FD Fi} VBC4{ BC5{ v9 v10 v11 FC6{ BC3 v12 v13}[3] Fp Fs:8} BC7{ BC8{ BC6 BC3 v14 v15 v16 v17} VBC9{ VBC10{ VBC11{ v18 FC12{ v40 v41} Fp} v19} v20 v21 v22} v23 v24 v25} vd v26 v27 v28 v29 v30 v31} vd v32 v33 v34 v35 v36 v37 v38 Fp} v1 v2 v3 v4 v5 v6 FC13{ BC11 BC10 vd v39 Fi} Fl}


void  S20900C1 ::v1(){vfunc_called(this, "_ZN8S20900C12v1Ev");}
void  S20900C1 ::v2(){vfunc_called(this, "_ZN8S20900C12v2Ev");}
void  S20900C1 ::v3(){vfunc_called(this, "_ZN8S20900C12v3Ev");}
void  S20900C1 ::v4(){vfunc_called(this, "_ZN8S20900C12v4Ev");}
void  S20900C1 ::v5(){vfunc_called(this, "_ZN8S20900C12v5Ev");}
void  S20900C1 ::v6(){vfunc_called(this, "_ZN8S20900C12v6Ev");}
S20900C1 ::~S20900C1(){ note_dtor("S20900C1", this);} // tgen
S20900C1 ::S20900C1(){ note_ctor("S20900C1", this);} // tgen

static void Test_S20900C1()
{
  extern Class_Descriptor cd_S20900C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,55)];
    init_test(&cd_S20900C1, buf);
    S20900C1 *dp, &lv = *(dp=new (buf) S20900C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,216), "sizeof(S20900C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20900C1)");
    /*is_ambiguous_... S20900C2::S20900C3 */ AMB_check_base_class_offset(lv, (S20900C3*)(S20900C2*), ABISELECT(96,48), "S20900C1");
    check_base_class_offset(lv, (S20900C5*)(S20900C4*), ABISELECT(144,72), "S20900C1");
    check_base_class_offset(lv, (S20900C3*)(S20900C6*)(S20900C8*)(S20900C7*)(S20900C4*), ABISELECT(320,156), "S20900C1");
    check_base_class_offset(lv, (S20900C6*)(S20900C8*)(S20900C7*)(S20900C4*), ABISELECT(320,156), "S20900C1");
    /*is_ambiguous_... S20900C8::S20900C3 */ AMB_check_base_class_offset(lv, (S20900C3*)(S20900C8*)(S20900C7*)(S20900C4*), ABISELECT(368,180), "S20900C1");
    check_base_class_offset(lv, (S20900C8*)(S20900C7*)(S20900C4*), ABISELECT(320,156), "S20900C1");
    check_base_class_offset(lv, (S20900C11*)(S20900C10*), ABISELECT(408,204), "S20900C1");
    check_base_class_offset(lv, (S20900C10*)(S20900C9*), 0, "S20900C1");
    check_base_class_offset(lv, (S20900C9*)(S20900C7*)(S20900C4*), 0, "S20900C1");
    check_base_class_offset(lv, (S20900C7*)(S20900C4*), ABISELECT(320,156), "S20900C1");
    check_base_class_offset(lv, (S20900C4*)(S20900C2*), ABISELECT(144,72), "S20900C1");
    check_base_class_offset(lv, (S20900C2*), ABISELECT(80,40), "S20900C1");
    check_field_offset(lv, s20900c1f0, ABISELECT(8,4), "S20900C1.s20900c1f0");
    check_field_offset(lv, s20900c1f1, ABISELECT(72,36), "S20900C1.s20900c1f1");
    test_class_info(&lv, &cd_S20900C1);
    dp->~S20900C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20900C1(Test_S20900C1, "S20900C1", ABISELECT(432,216));

#else // __cplusplus

extern void _ZN8S20900C1C1Ev();
extern void _ZN8S20900C1D1Ev();
Name_Map name_map_S20900C1[] = {
  NSPAIR(_ZN8S20900C1C1Ev),
  NSPAIR(_ZN8S20900C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
extern Class_Descriptor cd_S20900C5;
extern VTBL_ENTRY _ZTI8S20900C5[];
extern  VTBL_ENTRY _ZTV8S20900C5[];
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
extern Class_Descriptor cd_S20900C6;
extern VTBL_ENTRY _ZTI8S20900C6[];
extern  VTBL_ENTRY _ZTV8S20900C6[];
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
extern Class_Descriptor cd_S20900C8;
extern VTBL_ENTRY _ZTI8S20900C8[];
extern  VTBL_ENTRY _ZTV8S20900C8[];
extern Class_Descriptor cd_S20900C11;
extern VTBL_ENTRY _ZTI9S20900C11[];
extern  VTBL_ENTRY _ZTV9S20900C11[];
extern Class_Descriptor cd_S20900C10;
extern VTBL_ENTRY _ZTI9S20900C10[];
extern  VTBL_ENTRY _ZTV9S20900C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20900C10[];
extern Class_Descriptor cd_S20900C9;
extern VTBL_ENTRY _ZTI8S20900C9[];
extern  VTBL_ENTRY _ZTV8S20900C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C9[];
extern Class_Descriptor cd_S20900C7;
extern VTBL_ENTRY _ZTI8S20900C7[];
extern  VTBL_ENTRY _ZTV8S20900C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C7[];
extern Class_Descriptor cd_S20900C4;
extern VTBL_ENTRY _ZTI8S20900C4[];
extern  VTBL_ENTRY _ZTV8S20900C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C4[];
extern Class_Descriptor cd_S20900C2;
extern VTBL_ENTRY _ZTI8S20900C2[];
extern  VTBL_ENTRY _ZTV8S20900C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C2[];
static Base_Class bases_S20900C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20900C3,    ABISELECT(96,48), //bcp->offset
    56, //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
    11, //immediately_derived
  0, 1},
  {&cd_S20900C5,    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
    10, //immediately_derived
  0, 0},
  {&cd_S20900C3,    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
    6, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20900C6,    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
    7, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20900C3,    ABISELECT(368,180), //bcp->offset
    115, //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
    5, //immediately_derived
  0, 0},
  {&cd_S20900C8,    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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20900C11,    ABISELECT(408,204), //bcp->offset
    119, //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
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20900C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20900C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20900C7,    ABISELECT(320,156), //bcp->offset
    99, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20900C4,    ABISELECT(144,72), //bcp->offset
    62, //bcp->virtual_function_table_offset
    26, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20900C2,    ABISELECT(80,40), //bcp->offset
    24, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20900C1[];
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
extern void _ZN8S20900C12v1Ev();
extern void _ZN8S20900C12v2Ev();
extern void _ZN8S20900C12v3Ev();
extern void _ZN8S20900C12v4Ev();
extern void _ZN8S20900C12v5Ev();
extern void _ZN8S20900C12v6Ev();
extern void _ZN8S20900C1D1Ev();
extern void _ZN8S20900C1D0Ev();
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
extern void ABISELECT(_ZTv0_n96_N8S20900C1D1Ev,_ZTv0_n48_N8S20900C1D1Ev)();
extern void ABISELECT(_ZThn80_N8S20900C1D1Ev,_ZThn40_N8S20900C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S20900C1D0Ev,_ZTv0_n48_N8S20900C1D0Ev)();
extern void ABISELECT(_ZThn80_N8S20900C1D0Ev,_ZThn40_N8S20900C1D0Ev)() __attribute__((weak));
extern void _ZN8S20900C23v32Ev();
extern void _ZN8S20900C23v33Ev();
extern void _ZN8S20900C23v34Ev();
extern void _ZN8S20900C23v35Ev();
extern void _ZN8S20900C23v36Ev();
extern void _ZN8S20900C23v37Ev();
extern void _ZN8S20900C23v38Ev();
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C52v9Ev();
extern void _ZN8S20900C53v10Ev();
extern void _ZN8S20900C53v11Ev();
extern void ABISELECT(_ZTv0_n72_N8S20900C1D1Ev,_ZTv0_n36_N8S20900C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S20900C1D1Ev,_ZThn72_N8S20900C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20900C1D0Ev,_ZTv0_n36_N8S20900C1D0Ev)();
extern void ABISELECT(_ZThn144_N8S20900C1D0Ev,_ZThn72_N8S20900C1D0Ev)() __attribute__((weak));
extern void _ZN8S20900C43v26Ev();
extern void _ZN8S20900C43v27Ev();
extern void _ZN8S20900C43v28Ev();
extern void _ZN8S20900C43v29Ev();
extern void _ZN8S20900C43v30Ev();
extern void _ZN8S20900C43v31Ev();
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C63v12Ev();
extern void _ZN8S20900C63v13Ev();
extern void _ZN8S20900C83v14Ev();
extern void _ZN8S20900C83v15Ev();
extern void _ZN8S20900C83v16Ev();
extern void _ZN8S20900C83v17Ev();
extern void _ZN8S20900C73v23Ev();
extern void _ZN8S20900C73v24Ev();
extern void _ZN8S20900C73v25Ev();
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY vtc_S20900C1[] = {
  0,
  ABISELECT(144,72),
  ABISELECT(96,48),
  ABISELECT(80,40),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(408,204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C1[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20900C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20900C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20900C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20900C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20900C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20900C12v6Ev,
  (VTBL_ENTRY)&_ZN8S20900C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20900C1D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(64,32),
  ABISELECT(16,8),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(328,164),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S20900C1[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20900C1D1Ev,_ZTv0_n48_N8S20900C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20900C1D0Ev,_ZTv0_n48_N8S20900C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20900C23v32Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v33Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v34Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v35Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v36Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v37Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v38Ev,
  0,
  0,
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S20900C1[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-72),
  0,
  0,
  0,
  ABISELECT(264,132),
  ABISELECT(-144,-72),
  ABISELECT(-144,-72),
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI8S20900C1[0]),
  (VTBL_ENTRY)&_ZN8S20900C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20900C1D1Ev,_ZTv0_n36_N8S20900C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20900C1D0Ev,_ZTv0_n36_N8S20900C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20900C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v31Ev,
  ABISELECT(88,48),
  ABISELECT(-320,-156),
  ABISELECT(-320,-156),
  ABISELECT(-320,-156),
  (VTBL_ENTRY)&(_ZTI8S20900C1[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v25Ev,
  ABISELECT(-368,-180),
  (VTBL_ENTRY)&(_ZTI8S20900C1[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  0,
  ABISELECT(-408,-204),
  (VTBL_ENTRY)&(_ZTI8S20900C1[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern VTBL_ENTRY _ZTV8S20900C1[];
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
extern void _ZN8S20900C2D1Ev();
extern void _ZN8S20900C2D0Ev();
extern void _ZN8S20900C23v32Ev();
extern void _ZN8S20900C23v33Ev();
extern void _ZN8S20900C23v34Ev();
extern void _ZN8S20900C23v35Ev();
extern void _ZN8S20900C23v36Ev();
extern void _ZN8S20900C23v37Ev();
extern void _ZN8S20900C23v38Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C2__8S20900C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(64,32),
  ABISELECT(16,8),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(328,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20900C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20900C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v32Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v33Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v34Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v35Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v36Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v37Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v38Ev,
};
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C3__8S20900C2__8S20900C1[] = {
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
};
extern void _ZN8S20900C52v9Ev();
extern void _ZN8S20900C53v10Ev();
extern void _ZN8S20900C53v11Ev();
extern void ABISELECT(_ZTv0_n72_N8S20900C2D1Ev,_ZTv0_n36_N8S20900C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S20900C2D1Ev,_ZThn32_N8S20900C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20900C2D0Ev,_ZTv0_n36_N8S20900C2D0Ev)();
extern void ABISELECT(_ZThn64_N8S20900C2D0Ev,_ZThn32_N8S20900C2D0Ev)() __attribute__((weak));
extern void _ZN8S20900C43v26Ev();
extern void _ZN8S20900C43v27Ev();
extern void _ZN8S20900C43v28Ev();
extern void _ZN8S20900C43v29Ev();
extern void _ZN8S20900C43v30Ev();
extern void _ZN8S20900C43v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C4__8S20900C2__8S20900C1[] = {
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  0,
  0,
  0,
  ABISELECT(264,132),
  ABISELECT(-144,-72),
  ABISELECT(-144,-72),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN8S20900C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20900C2D1Ev,_ZTv0_n36_N8S20900C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20900C2D0Ev,_ZTv0_n36_N8S20900C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20900C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v31Ev,
};
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C63v12Ev();
extern void _ZN8S20900C63v13Ev();
extern void _ZN8S20900C83v14Ev();
extern void _ZN8S20900C83v15Ev();
extern void _ZN8S20900C83v16Ev();
extern void _ZN8S20900C83v17Ev();
extern void _ZN8S20900C73v23Ev();
extern void _ZN8S20900C73v24Ev();
extern void _ZN8S20900C73v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C78S20900C4__8S20900C2__8S20900C1[] = {
  ABISELECT(88,48),
  ABISELECT(-320,-156),
  ABISELECT(-320,-156),
  ABISELECT(-240,-116),
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v25Ev,
};
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C38S20900C88S20900C78S20900C4__A2__8S20900C2__8S20900C1[] = {
  ABISELECT(-288,-140),
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
};
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C9__8S20900C2__8S20900C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(408,204),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__8S20900C2__8S20900C1[] = {
  0,
  ABISELECT(-328,-164),
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern void _ZN8S20900C52v9Ev();
extern void _ZN8S20900C53v10Ev();
extern void _ZN8S20900C53v11Ev();
extern void _ZN8S20900C4D1Ev();
extern void _ZN8S20900C4D0Ev();
extern void _ZN8S20900C43v26Ev();
extern void _ZN8S20900C43v27Ev();
extern void _ZN8S20900C43v28Ev();
extern void _ZN8S20900C43v29Ev();
extern void _ZN8S20900C43v30Ev();
extern void _ZN8S20900C43v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C4__8S20900C1[] = {
  ABISELECT(264,132),
  ABISELECT(-144,-72),
  ABISELECT(-144,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN8S20900C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20900C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20900C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v31Ev,
};
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C63v12Ev();
extern void _ZN8S20900C63v13Ev();
extern void _ZN8S20900C83v14Ev();
extern void _ZN8S20900C83v15Ev();
extern void _ZN8S20900C83v16Ev();
extern void _ZN8S20900C83v17Ev();
extern void _ZN8S20900C73v23Ev();
extern void _ZN8S20900C73v24Ev();
extern void _ZN8S20900C73v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C78S20900C4__8S20900C1[] = {
  ABISELECT(88,48),
  ABISELECT(-320,-156),
  ABISELECT(-320,-156),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v25Ev,
};
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C9__8S20900C78S20900C4__8S20900C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(408,204),
  ABISELECT(320,156),
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__8S20900C78S20900C4__8S20900C1[] = {
  0,
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C63v12Ev();
extern void _ZN8S20900C63v13Ev();
extern void _ZN8S20900C83v14Ev();
extern void _ZN8S20900C83v15Ev();
extern void _ZN8S20900C83v16Ev();
extern void _ZN8S20900C83v17Ev();
extern void _ZN8S20900C73v23Ev();
extern void _ZN8S20900C73v24Ev();
extern void _ZN8S20900C73v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C7__8S20900C4__8S20900C1[] = {
  ABISELECT(88,48),
  ABISELECT(-320,-156),
  ABISELECT(-320,-156),
  ABISELECT(-176,-84),
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v25Ev,
};
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C9__8S20900C4__8S20900C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(408,204),
  ABISELECT(144,72),
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__8S20900C4__8S20900C1[] = {
  0,
  ABISELECT(-264,-132),
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C9__8S20900C1[] = {
  0,
  0,
  ABISELECT(408,204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C9[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__8S20900C9__8S20900C1[] = {
  0,
  ABISELECT(-408,-204),
  (VTBL_ENTRY)&(_ZTI8S20900C9[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern void _ZN9S20900C103v19Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C10__8S20900C1[] = {
  ABISELECT(408,204),
  0,
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__9S20900C10__8S20900C1[] = {
  0,
  ABISELECT(-408,-204),
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
static  VTT_ENTRY vtt_S20900C1[] = {
  {&(_ZTV8S20900C1[12]),  12,123},
  {&(_ZTV8S20900C1[43]),  43,123},
  {&(_ZTV8S20900C1[60]),  60,123},
  {&(_ZTV8S20900C1[88]),  88,123},
  {&(_ZTV8S20900C1[104]),  104,123},
  {&(_ZTV8S20900C1[117]),  117,123},
  {&(_ZTV8S20900C1[12]),  12,123},
  {&(_ZTV8S20900C1[12]),  12,123},
  {&(_ZTV8S20900C1[122]),  122,123},
  {&(_tg__ZTV8S20900C2__8S20900C1[11]),  11,24},
  {&(_tg__ZTV8S20900C3__8S20900C2__8S20900C1[4]),  4,6},
  {&(_tg__ZTV8S20900C4__8S20900C2__8S20900C1[26]),  26,37},
  {&(_tg__ZTV8S20900C78S20900C4__8S20900C2__8S20900C1[5]),  5,16},
  {&(_tg__ZTV8S20900C38S20900C88S20900C78S20900C4__A2__8S20900C2__8S20900C1[2]),  2,4},
  {&(_tg__ZTV8S20900C9__8S20900C2__8S20900C1[8]),  8,12},
  {&(_tg__ZTV8S20900C9__8S20900C2__8S20900C1[8]),  8,12},
  {&(_tg__ZTV9S20900C11__8S20900C2__8S20900C1[3]),  3,4},
  {&(_tg__ZTV8S20900C4__8S20900C1[5]),  5,16},
  {&(_tg__ZTV8S20900C78S20900C4__8S20900C1[5]),  5,16},
  {&(_tg__ZTV8S20900C9__8S20900C78S20900C4__8S20900C1[8]),  8,12},
  {&(_tg__ZTV8S20900C9__8S20900C78S20900C4__8S20900C1[8]),  8,12},
  {&(_tg__ZTV9S20900C11__8S20900C78S20900C4__8S20900C1[3]),  3,4},
  {&(_tg__ZTV8S20900C7__8S20900C4__8S20900C1[5]),  5,16},
  {&(_tg__ZTV8S20900C9__8S20900C4__8S20900C1[8]),  8,12},
  {&(_tg__ZTV8S20900C9__8S20900C4__8S20900C1[8]),  8,12},
  {&(_tg__ZTV9S20900C11__8S20900C4__8S20900C1[3]),  3,4},
  {&(_tg__ZTV8S20900C9__8S20900C1[5]),  5,9},
  {&(_tg__ZTV8S20900C9__8S20900C1[5]),  5,9},
  {&(_tg__ZTV9S20900C11__8S20900C9__8S20900C1[3]),  3,4},
  {&(_tg__ZTV9S20900C10__8S20900C1[3]),  3,4},
  {&(_tg__ZTV9S20900C11__9S20900C10__8S20900C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20900C1[];
extern  VTBL_ENTRY _ZTV8S20900C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C1[];
static VTBL_ENTRY alt_thunk_names29[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20900C2D0Ev,_ZTv0_n36_N8S20900C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20900C2D0Ev,_ZThn32_N8S20900C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20900C2D1Ev,_ZTv0_n36_N8S20900C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20900C2D1Ev,_ZThn32_N8S20900C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20900C1D0Ev,_ZTv0_n36_N8S20900C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20900C1D0Ev,_ZThn72_N8S20900C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20900C1D1Ev,_ZTv0_n36_N8S20900C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20900C1D1Ev,_ZThn72_N8S20900C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S20900C1D0Ev,_ZTv0_n48_N8S20900C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20900C1D0Ev,_ZThn40_N8S20900C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S20900C1D1Ev,_ZTv0_n48_N8S20900C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20900C1D1Ev,_ZThn40_N8S20900C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20900C1 = {  "S20900C1", // class name
  bases_S20900C1, 12,
  &(vtc_S20900C1[0]), // expected_vtbl_contents
  &(vtt_S20900C1[0]), // expected_vtt_contents
  ABISELECT(432,216), // object size
  NSPAIRA(_ZTI8S20900C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20900C1),123, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20900C1),31, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names29,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4465C3  {
  int s4465c3f0[4];
  ::S4474C4_nt s4465c3f1;
  int s4465c3f2;
  char s4465c3f3;
  ::S4474C5_nt s4465c3f4;
  int s4465c3f5;
  virtual  ~S4465C3(); // _ZN7S4465C3D1Ev
  virtual void  v2(); // _ZN7S4465C32v2Ev
  virtual void  v3(); // _ZN7S4465C32v3Ev
  virtual void  v4(); // _ZN7S4465C32v4Ev
  S4465C3(); // tgen
};
//SIG(-1 S4465C3) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4465C3 ::~S4465C3(){ note_dtor("S4465C3", this);}
void  S4465C3 ::v2(){vfunc_called(this, "_ZN7S4465C32v2Ev");}
void  S4465C3 ::v3(){vfunc_called(this, "_ZN7S4465C32v3Ev");}
void  S4465C3 ::v4(){vfunc_called(this, "_ZN7S4465C32v4Ev");}
S4465C3 ::S4465C3(){ note_ctor("S4465C3", this);} // tgen

static void Test_S4465C3()
{
  extern Class_Descriptor cd_S4465C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4465C3, buf);
    S4465C3 *dp, &lv = *(dp=new (buf) S4465C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4465C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4465C3)");
    check_field_offset(lv, s4465c3f0, ABISELECT(8,4), "S4465C3.s4465c3f0");
    check_field_offset(lv, s4465c3f1, ABISELECT(24,20), "S4465C3.s4465c3f1");
    check_field_offset(lv, s4465c3f2, ABISELECT(40,28), "S4465C3.s4465c3f2");
    check_field_offset(lv, s4465c3f3, ABISELECT(44,32), "S4465C3.s4465c3f3");
    check_field_offset(lv, s4465c3f4, ABISELECT(48,36), "S4465C3.s4465c3f4");
    check_field_offset(lv, s4465c3f5, ABISELECT(64,48), "S4465C3.s4465c3f5");
    test_class_info(&lv, &cd_S4465C3);
    dp->~S4465C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4465C3(Test_S4465C3, "S4465C3", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4465C3C1Ev();
extern void _ZN7S4465C3D1Ev();
Name_Map name_map_S4465C3[] = {
  NSPAIR(_ZN7S4465C3C1Ev),
  NSPAIR(_ZN7S4465C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4465C3[];
extern void _ZN7S4465C3D1Ev();
extern void _ZN7S4465C3D0Ev();
extern void _ZN7S4465C32v2Ev();
extern void _ZN7S4465C32v3Ev();
extern void _ZN7S4465C32v4Ev();
static  VTBL_ENTRY vtc_S4465C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4465C3[0]),
  (VTBL_ENTRY)&_ZN7S4465C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4465C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4465C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4465C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4465C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4465C3[];
extern  VTBL_ENTRY _ZTV7S4465C3[];
Class_Descriptor cd_S4465C3 = {  "S4465C3", // class name
  0,0,//no base classes
  &(vtc_S4465C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4465C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4465C3),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  S4465C2_nt  : S4465C3 {
  virtual  ~S4465C2_nt(); // _ZN10S4465C2_ntD1Ev
  virtual void  v5(); // _ZN10S4465C2_nt2v5Ev
  S4465C2_nt(); // tgen
};
//SIG(-1 S4465C2_nt) C1{ BC2{ vd v2 v3 v4 Fi[4] FC3{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} vd v1}


 S4465C2_nt ::~S4465C2_nt(){ note_dtor("S4465C2_nt", this);}
void  S4465C2_nt ::v5(){vfunc_called(this, "_ZN10S4465C2_nt2v5Ev");}
S4465C2_nt ::S4465C2_nt(){ note_ctor("S4465C2_nt", this);} // tgen

//skip512 S4465C2_nt

#else // __cplusplus

extern void _ZN10S4465C2_ntC1Ev();
extern void _ZN10S4465C2_ntD1Ev();
Name_Map name_map_S4465C2_nt[] = {
  NSPAIR(_ZN10S4465C2_ntC1Ev),
  NSPAIR(_ZN10S4465C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4465C3;
extern VTBL_ENTRY _ZTI7S4465C3[];
extern  VTBL_ENTRY _ZTV7S4465C3[];
static Base_Class bases_S4465C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4465C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S4465C2_nt[];
extern void _ZN10S4465C2_ntD1Ev();
extern void _ZN10S4465C2_ntD0Ev();
extern void _ZN7S4465C32v2Ev();
extern void _ZN7S4465C32v3Ev();
extern void _ZN7S4465C32v4Ev();
extern void _ZN10S4465C2_nt2v5Ev();
static  VTBL_ENTRY vtc_S4465C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4465C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4465C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4465C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S4465C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4465C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4465C32v4Ev,
  (VTBL_ENTRY)&_ZN10S4465C2_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S4465C2_nt[];
VTBL_ENTRY *P__ZTI10S4465C2_nt = _ZTI10S4465C2_nt; 
extern  VTBL_ENTRY _ZTV10S4465C2_nt[];
Class_Descriptor cd_S4465C2_nt = {  "S4465C2_nt", // class name
  bases_S4465C2_nt, 1,
  &(vtc_S4465C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI10S4465C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S4465C2_nt),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4465C14_nt  {
  void *s4465c14f0;
  int s4465c14f1;
  ::S629C14 s4465c14f2;
  ::S629C8_nt s4465c14f3;
  void  mf4465c14(); // _ZN11S4465C14_nt9mf4465c14Ev
};
//SIG(-1 S4465C14_nt) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S4465C14_nt ::mf4465c14(){}

//skip512 S4465C14_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S4465C11  {
  ::S2366C5_nt s4465c11f0;
  ::S4474C14_nt s4465c11f1;
  int s4465c11f2;
  ::S4465C14_nt s4465c11f3;
  void  mf4465c11(); // _ZN8S4465C119mf4465c11Ev
};
//SIG(-1 S4465C11) C1{ m FC2{ m Fp Fi FC3{ m}} FC4{ m FC5{ vd m FL Fc} FC5} Fi FC6{ m Fp Fi FC3 FC7{ m}}}


void  S4465C11 ::mf4465c11(){}

static void Test_S4465C11()
{
  {
    init_simple_test("S4465C11");
    S4465C11 lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S4465C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4465C11)");
    check_field_offset(lv, s4465c11f0, 0, "S4465C11.s4465c11f0");
    check_field_offset(lv, s4465c11f1, ABISELECT(16,12), "S4465C11.s4465c11f1");
    check_field_offset(lv, s4465c11f2, ABISELECT(64,44), "S4465C11.s4465c11f2");
    check_field_offset(lv, s4465c11f3, ABISELECT(72,48), "S4465C11.s4465c11f3");
  }
}
static Arrange_To_Call_Me vS4465C11(Test_S4465C11, "S4465C11", ABISELECT(88,60));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4465C17  {
  ::S4465C14_nt s4465c17f0;
  int s4465c17f1;
  void  mf4465c17(); // _ZN8S4465C179mf4465c17Ev
};
//SIG(-1 S4465C17) C1{ m FC2{ m Fp Fi FC3{ m} FC4{ m}} Fi}


void  S4465C17 ::mf4465c17(){}

static void Test_S4465C17()
{
  {
    init_simple_test("S4465C17");
    S4465C17 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4465C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4465C17)");
    check_field_offset(lv, s4465c17f0, 0, "S4465C17.s4465c17f0");
    check_field_offset(lv, s4465c17f1, ABISELECT(16,12), "S4465C17.s4465c17f1");
  }
}
static Arrange_To_Call_Me vS4465C17(Test_S4465C17, "S4465C17", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4465C1  : S4465C2_nt {
  ::S4474C7_nt s4465c1f0;
  void *s4465c1f1;
  ::S4465C11 s4465c1f2;
  ::S4465C17 s4465c1f3;
  virtual  ~S4465C1(); // _ZN7S4465C1D1Ev
  virtual void  v1(); // _ZN7S4465C12v1Ev
  S4465C1(); // tgen
};
//SIG(1 S4465C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} vd v5} vd v1 FC6{ vd m FC7{ m Fp Fi FC8{ m}} FC9{ BC10{ vd m Fc} vd FL[2]} Fi[2]} Fp FC11{ m FC7 FC12{ m FC13{ vd m FL Fc} FC13} Fi FC14{ m Fp Fi FC8 FC15{ m}}} FC16{ m FC14 Fi}}


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

static void Test_S4465C1()
{
  extern Class_Descriptor cd_S4465C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,46)];
    init_test(&cd_S4465C1, buf);
    S4465C1 *dp, &lv = *(dp=new (buf) S4465C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,180), "sizeof(S4465C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4465C1)");
    check_base_class_offset(lv, (S4465C3*)(S4465C2_nt*), 0, "S4465C1");
    check_base_class_offset(lv, (S4465C2_nt*), 0, "S4465C1");
    check_field_offset(lv, s4465c1f0, ABISELECT(72,52), "S4465C1.s4465c1f0");
    check_field_offset(lv, s4465c1f1, ABISELECT(136,100), "S4465C1.s4465c1f1");
    check_field_offset(lv, s4465c1f2, ABISELECT(144,104), "S4465C1.s4465c1f2");
    check_field_offset(lv, s4465c1f3, ABISELECT(232,164), "S4465C1.s4465c1f3");
    test_class_info(&lv, &cd_S4465C1);
    dp->~S4465C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4465C1(Test_S4465C1, "S4465C1", ABISELECT(256,180));

#else // __cplusplus

extern void _ZN7S4465C1C1Ev();
extern void _ZN7S4465C1D1Ev();
Name_Map name_map_S4465C1[] = {
  NSPAIR(_ZN7S4465C1C1Ev),
  NSPAIR(_ZN7S4465C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4465C3;
extern VTBL_ENTRY _ZTI7S4465C3[];
extern  VTBL_ENTRY _ZTV7S4465C3[];
extern Class_Descriptor cd_S4465C2_nt;
extern VTBL_ENTRY _ZTI10S4465C2_nt[];
extern  VTBL_ENTRY _ZTV10S4465C2_nt[];
static Base_Class bases_S4465C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4465C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4465C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4465C1[];
extern void _ZN7S4465C1D1Ev();
extern void _ZN7S4465C1D0Ev();
extern void _ZN7S4465C32v2Ev();
extern void _ZN7S4465C32v3Ev();
extern void _ZN7S4465C32v4Ev();
extern void _ZN10S4465C2_nt2v5Ev();
extern void _ZN7S4465C12v1Ev();
static  VTBL_ENTRY vtc_S4465C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4465C1[0]),
  (VTBL_ENTRY)&_ZN7S4465C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4465C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4465C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4465C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4465C32v4Ev,
  (VTBL_ENTRY)&_ZN10S4465C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S4465C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4465C1[];
extern  VTBL_ENTRY _ZTV7S4465C1[];
Class_Descriptor cd_S4465C1 = {  "S4465C1", // class name
  bases_S4465C1, 2,
  &(vtc_S4465C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,180), // object size
  NSPAIRA(_ZTI7S4465C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4465C1),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  S20901C3  {
  void *s20901c3f0;
  long double s20901c3f1;
  int s20901c3f2;
  virtual void  v7(); // _ZN8S20901C32v7Ev
  virtual void  v8(); // _ZN8S20901C32v8Ev
  ~S20901C3(); // tgen
  S20901C3(); // tgen
};
//SIG(-1 S20901C3) C1{ v1 v2 Fp FD Fi}


void  S20901C3 ::v7(){vfunc_called(this, "_ZN8S20901C32v7Ev");}
void  S20901C3 ::v8(){vfunc_called(this, "_ZN8S20901C32v8Ev");}
S20901C3 ::~S20901C3(){ note_dtor("S20901C3", this);} // tgen
S20901C3 ::S20901C3(){ note_ctor("S20901C3", this);} // tgen

static void Test_S20901C3()
{
  extern Class_Descriptor cd_S20901C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S20901C3, buf);
    S20901C3 *dp, &lv = *(dp=new (buf) S20901C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20901C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20901C3)");
    check_field_offset(lv, s20901c3f0, ABISELECT(8,4), "S20901C3.s20901c3f0");
    check_field_offset(lv, s20901c3f1, ABISELECT(16,8), "S20901C3.s20901c3f1");
    check_field_offset(lv, s20901c3f2, ABISELECT(32,20), "S20901C3.s20901c3f2");
    test_class_info(&lv, &cd_S20901C3);
    dp->~S20901C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20901C3(Test_S20901C3, "S20901C3", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20901C3C1Ev();
extern void _ZN8S20901C3D1Ev();
Name_Map name_map_S20901C3[] = {
  NSPAIR(_ZN8S20901C3C1Ev),
  NSPAIR(_ZN8S20901C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20901C3[];
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
static  VTBL_ENTRY vtc_S20901C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C3[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
};
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
Class_Descriptor cd_S20901C3 = {  "S20901C3", // class name
  0,0,//no base classes
  &(vtc_S20901C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20901C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20901C3),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  S20901C6  : S20901C3 {
  virtual void  v12(); // _ZN8S20901C63v12Ev
  virtual void  v13(); // _ZN8S20901C63v13Ev
  ~S20901C6(); // tgen
  S20901C6(); // tgen
};
//SIG(-1 S20901C6) C1{ BC2{ v3 v4 Fp FD Fi} v1 v2}


void  S20901C6 ::v12(){vfunc_called(this, "_ZN8S20901C63v12Ev");}
void  S20901C6 ::v13(){vfunc_called(this, "_ZN8S20901C63v13Ev");}
S20901C6 ::~S20901C6(){ note_dtor("S20901C6", this);} // tgen
S20901C6 ::S20901C6(){ note_ctor("S20901C6", this);} // tgen

static void Test_S20901C6()
{
  extern Class_Descriptor cd_S20901C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S20901C6, buf);
    S20901C6 *dp, &lv = *(dp=new (buf) S20901C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20901C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20901C6)");
    check_base_class_offset(lv, (S20901C3*), 0, "S20901C6");
    test_class_info(&lv, &cd_S20901C6);
    dp->~S20901C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20901C6(Test_S20901C6, "S20901C6", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20901C6C1Ev();
extern void _ZN8S20901C6D1Ev();
Name_Map name_map_S20901C6[] = {
  NSPAIR(_ZN8S20901C6C1Ev),
  NSPAIR(_ZN8S20901C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
static Base_Class bases_S20901C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20901C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20901C6[];
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C63v12Ev();
extern void _ZN8S20901C63v13Ev();
static  VTBL_ENTRY vtc_S20901C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C6[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v13Ev,
};
extern VTBL_ENTRY _ZTI8S20901C6[];
extern  VTBL_ENTRY _ZTV8S20901C6[];
Class_Descriptor cd_S20901C6 = {  "S20901C6", // class name
  bases_S20901C6, 1,
  &(vtc_S20901C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20901C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20901C6),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  S20901C5  {
  ::S20901C6 s20901c5f0[3];
  void *s20901c5f1;
  short s20901c5f2:8;
  virtual void  v9(); // _ZN8S20901C52v9Ev
  virtual void  v10(); // _ZN8S20901C53v10Ev
  virtual void  v11(); // _ZN8S20901C53v11Ev
  ~S20901C5(); // tgen
  S20901C5(); // tgen
};
//SIG(-1 S20901C5) C1{ v1 v2 v3 FC2{ BC3{ v6 v7 Fp FD Fi} v4 v5}[3] Fp Fs:8}


void  S20901C5 ::v9(){vfunc_called(this, "_ZN8S20901C52v9Ev");}
void  S20901C5 ::v10(){vfunc_called(this, "_ZN8S20901C53v10Ev");}
void  S20901C5 ::v11(){vfunc_called(this, "_ZN8S20901C53v11Ev");}
S20901C5 ::~S20901C5(){ note_dtor("S20901C5", this);} // tgen
S20901C5 ::S20901C5(){ note_ctor("S20901C5", this);} // tgen

static void Test_S20901C5()
{
  extern Class_Descriptor cd_S20901C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,22)];
    init_test(&cd_S20901C5, buf);
    S20901C5 *dp, &lv = *(dp=new (buf) S20901C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,84), "sizeof(S20901C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20901C5)");
    check_field_offset(lv, s20901c5f0, ABISELECT(16,4), "S20901C5.s20901c5f0");
    check_field_offset(lv, s20901c5f1, ABISELECT(160,76), "S20901C5.s20901c5f1");
    set_bf_and_test(lv, s20901c5f2, ABISELECT(168,80), 0, 8, 1, "S20901C5");
    set_bf_and_test(lv, s20901c5f2, ABISELECT(168,80), 0, 8, hide_sll(1LL<<7), "S20901C5");
    test_class_info(&lv, &cd_S20901C5);
    dp->~S20901C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20901C5(Test_S20901C5, "S20901C5", ABISELECT(176,84));

#else // __cplusplus

extern void _ZN8S20901C5C1Ev();
extern void _ZN8S20901C5D1Ev();
Name_Map name_map_S20901C5[] = {
  NSPAIR(_ZN8S20901C5C1Ev),
  NSPAIR(_ZN8S20901C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20901C5[];
extern void _ZN8S20901C52v9Ev();
extern void _ZN8S20901C53v10Ev();
extern void _ZN8S20901C53v11Ev();
static  VTBL_ENTRY vtc_S20901C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C5[0]),
  (VTBL_ENTRY)&_ZN8S20901C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v11Ev,
};
extern VTBL_ENTRY _ZTI8S20901C5[];
extern  VTBL_ENTRY _ZTV8S20901C5[];
Class_Descriptor cd_S20901C5 = {  "S20901C5", // class name
  0,0,//no base classes
  &(vtc_S20901C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,84), // object size
  NSPAIRA(_ZTI8S20901C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20901C5),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  S20901C8  : S20901C6 , S20901C3 {
  virtual void  v14(); // _ZN8S20901C83v14Ev
  virtual void  v15(); // _ZN8S20901C83v15Ev
  virtual void  v16(); // _ZN8S20901C83v16Ev
  virtual void  v17(); // _ZN8S20901C83v17Ev
  ~S20901C8(); // tgen
  S20901C8(); // tgen
};
//SIG(-1 S20901C8) C1{ BC2{ BC3{ v5 v6 Fp FD Fi} v7 v8} BC3 v1 v2 v3 v4}


void  S20901C8 ::v14(){vfunc_called(this, "_ZN8S20901C83v14Ev");}
void  S20901C8 ::v15(){vfunc_called(this, "_ZN8S20901C83v15Ev");}
void  S20901C8 ::v16(){vfunc_called(this, "_ZN8S20901C83v16Ev");}
void  S20901C8 ::v17(){vfunc_called(this, "_ZN8S20901C83v17Ev");}
S20901C8 ::~S20901C8(){ note_dtor("S20901C8", this);} // tgen
S20901C8 ::S20901C8(){ note_ctor("S20901C8", this);} // tgen

static void Test_S20901C8()
{
  extern Class_Descriptor cd_S20901C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S20901C8, buf);
    S20901C8 *dp, &lv = *(dp=new (buf) S20901C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S20901C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20901C8)");
    check_base_class_offset(lv, (S20901C3*)(S20901C6*), 0, "S20901C8");
    check_base_class_offset(lv, (S20901C6*), 0, "S20901C8");
    /*is_ambiguous_... S20901C8::S20901C3 */ AMB_check_base_class_offset(lv, (S20901C3*), ABISELECT(48,24), "S20901C8");
    test_class_info(&lv, &cd_S20901C8);
    dp->~S20901C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20901C8(Test_S20901C8, "S20901C8", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S20901C8C1Ev();
extern void _ZN8S20901C8D1Ev();
Name_Map name_map_S20901C8[] = {
  NSPAIR(_ZN8S20901C8C1Ev),
  NSPAIR(_ZN8S20901C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
extern Class_Descriptor cd_S20901C6;
extern VTBL_ENTRY _ZTI8S20901C6[];
extern  VTBL_ENTRY _ZTV8S20901C6[];
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
static Base_Class bases_S20901C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20901C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20901C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20901C3,    ABISELECT(48,24), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20901C8[];
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C63v12Ev();
extern void _ZN8S20901C63v13Ev();
extern void _ZN8S20901C83v14Ev();
extern void _ZN8S20901C83v15Ev();
extern void _ZN8S20901C83v16Ev();
extern void _ZN8S20901C83v17Ev();
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
static  VTBL_ENTRY vtc_S20901C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C8[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v17Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20901C8[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
};
extern VTBL_ENTRY _ZTI8S20901C8[];
extern  VTBL_ENTRY _ZTV8S20901C8[];
Class_Descriptor cd_S20901C8 = {  "S20901C8", // class name
  bases_S20901C8, 3,
  &(vtc_S20901C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S20901C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20901C8),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  S20901C11  {
  ::S1400C17_nt s20901c11f0;
  void *s20901c11f1;
  virtual void  v18(); // _ZN9S20901C113v18Ev
  ~S20901C11(); // tgen
  S20901C11(); // tgen
};
//SIG(-1 S20901C11) C1{ v1 FC2{ v2 v3} Fp}


void  S20901C11 ::v18(){vfunc_called(this, "_ZN9S20901C113v18Ev");}
S20901C11 ::~S20901C11(){ note_dtor("S20901C11", this);} // tgen
S20901C11 ::S20901C11(){ note_ctor("S20901C11", this);} // tgen

static void Test_S20901C11()
{
  extern Class_Descriptor cd_S20901C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20901C11, buf);
    S20901C11 *dp, &lv = *(dp=new (buf) S20901C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20901C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20901C11)");
    check_field_offset(lv, s20901c11f0, ABISELECT(8,4), "S20901C11.s20901c11f0");
    check_field_offset(lv, s20901c11f1, ABISELECT(16,8), "S20901C11.s20901c11f1");
    test_class_info(&lv, &cd_S20901C11);
    dp->~S20901C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20901C11(Test_S20901C11, "S20901C11", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S20901C11C1Ev();
extern void _ZN9S20901C11D1Ev();
Name_Map name_map_S20901C11[] = {
  NSPAIR(_ZN9S20901C11C1Ev),
  NSPAIR(_ZN9S20901C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20901C11[];
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY vtc_S20901C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20901C11[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern VTBL_ENTRY _ZTI9S20901C11[];
extern  VTBL_ENTRY _ZTV9S20901C11[];
Class_Descriptor cd_S20901C11 = {  "S20901C11", // class name
  0,0,//no base classes
  &(vtc_S20901C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S20901C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20901C11),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  S20901C10  : virtual S20901C11 {
  virtual void  v19(); // _ZN9S20901C103v19Ev
  ~S20901C10(); // tgen
  S20901C10(); // tgen
};
//SIG(-1 S20901C10) C1{ VBC2{ v2 FC3{ v3 v4} Fp} v1}


void  S20901C10 ::v19(){vfunc_called(this, "_ZN9S20901C103v19Ev");}
S20901C10 ::~S20901C10(){ note_dtor("S20901C10", this);} // tgen
S20901C10 ::S20901C10(){ note_ctor("S20901C10", this);} // tgen

static void Test_S20901C10()
{
  extern Class_Descriptor cd_S20901C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20901C10, buf);
    S20901C10 *dp, &lv = *(dp=new (buf) S20901C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20901C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20901C10)");
    check_base_class_offset(lv, (S20901C11*), ABISELECT(8,4), "S20901C10");
    test_class_info(&lv, &cd_S20901C10);
    dp->~S20901C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20901C10(Test_S20901C10, "S20901C10", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S20901C10C1Ev();
extern void _ZN9S20901C10D1Ev();
Name_Map name_map_S20901C10[] = {
  NSPAIR(_ZN9S20901C10C1Ev),
  NSPAIR(_ZN9S20901C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20901C11;
extern VTBL_ENTRY _ZTI9S20901C11[];
extern  VTBL_ENTRY _ZTV9S20901C11[];
static Base_Class bases_S20901C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20901C11,    ABISELECT(8,4), //bcp->offset
    4, //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 _ZTI9S20901C10[];
extern void _ZN9S20901C103v19Ev();
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY vtc_S20901C10[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20901C10[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20901C10[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern VTBL_ENTRY _ZTV9S20901C10[];
static  VTT_ENTRY vtt_S20901C10[] = {
  {&(_ZTV9S20901C10[3]),  3,8},
  {&(_ZTV9S20901C10[7]),  7,8},
};
extern VTBL_ENTRY _ZTI9S20901C10[];
extern  VTBL_ENTRY _ZTV9S20901C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20901C10[];
Class_Descriptor cd_S20901C10 = {  "S20901C10", // class name
  bases_S20901C10, 1,
  &(vtc_S20901C10[0]), // expected_vtbl_contents
  &(vtt_S20901C10[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S20901C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20901C10),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20901C10),2, //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  S20901C9  : virtual S20901C10 {
  virtual void  v20(); // _ZN8S20901C93v20Ev
  virtual void  v21(); // _ZN8S20901C93v21Ev
  virtual void  v22(); // _ZN8S20901C93v22Ev
  ~S20901C9(); // tgen
  S20901C9(); // tgen
};
//SIG(-1 S20901C9) C1{ VBC2{ VBC3{ v4 FC4{ v6 v7} Fp} v5} v1 v2 v3}


void  S20901C9 ::v20(){vfunc_called(this, "_ZN8S20901C93v20Ev");}
void  S20901C9 ::v21(){vfunc_called(this, "_ZN8S20901C93v21Ev");}
void  S20901C9 ::v22(){vfunc_called(this, "_ZN8S20901C93v22Ev");}
S20901C9 ::~S20901C9(){ note_dtor("S20901C9", this);} // tgen
S20901C9 ::S20901C9(){ note_ctor("S20901C9", this);} // tgen

static void Test_S20901C9()
{
  extern Class_Descriptor cd_S20901C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20901C9, buf);
    S20901C9 *dp, &lv = *(dp=new (buf) S20901C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20901C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20901C9)");
    check_base_class_offset(lv, (S20901C11*)(S20901C10*), ABISELECT(8,4), "S20901C9");
    check_base_class_offset(lv, (S20901C10*), 0, "S20901C9");
    test_class_info(&lv, &cd_S20901C9);
    dp->~S20901C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20901C9(Test_S20901C9, "S20901C9", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20901C9C1Ev();
extern void _ZN8S20901C9D1Ev();
Name_Map name_map_S20901C9[] = {
  NSPAIR(_ZN8S20901C9C1Ev),
  NSPAIR(_ZN8S20901C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20901C11;
extern VTBL_ENTRY _ZTI9S20901C11[];
extern  VTBL_ENTRY _ZTV9S20901C11[];
extern Class_Descriptor cd_S20901C10;
extern VTBL_ENTRY _ZTI9S20901C10[];
extern  VTBL_ENTRY _ZTV9S20901C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20901C10[];
static Base_Class bases_S20901C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20901C11,    ABISELECT(8,4), //bcp->offset
    9, //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
    1, //immediately_derived
  0, 1},
  {&cd_S20901C10,    0, //bcp->offset
    -1, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S20901C9[];
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY vtc_S20901C9[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C9[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20901C9[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern VTBL_ENTRY _ZTV8S20901C9[];
extern void _ZN9S20901C103v19Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C10__8S20901C9[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20901C10[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__9S20901C10__8S20901C9[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20901C10[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
static  VTT_ENTRY vtt_S20901C9[] = {
  {&(_ZTV8S20901C9[5]),  5,13},
  {&(_ZTV8S20901C9[5]),  5,13},
  {&(_ZTV8S20901C9[12]),  12,13},
  {&(_tg__ZTV9S20901C10__8S20901C9[3]),  3,4},
  {&(_tg__ZTV9S20901C11__9S20901C10__8S20901C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20901C9[];
extern  VTBL_ENTRY _ZTV8S20901C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C9[];
Class_Descriptor cd_S20901C9 = {  "S20901C9", // class name
  bases_S20901C9, 2,
  &(vtc_S20901C9[0]), // expected_vtbl_contents
  &(vtt_S20901C9[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20901C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20901C9),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20901C9),5, //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  S20901C7  : S20901C8 , virtual S20901C9 {
  virtual void  v23(); // _ZN8S20901C73v23Ev
  virtual void  v24(); // _ZN8S20901C73v24Ev
  virtual void  v25(); // _ZN8S20901C73v25Ev
  ~S20901C7(); // tgen
  S20901C7(); // tgen
};
//SIG(-1 S20901C7) C1{ BC2{ BC3{ BC4{ v4 v5 Fp FD Fi} v6 v7} BC4 v8 v9 v10 v11} VBC5{ VBC6{ VBC7{ v12 FC8{ v17 v18} Fp} v13} v14 v15 v16} v1 v2 v3}


void  S20901C7 ::v23(){vfunc_called(this, "_ZN8S20901C73v23Ev");}
void  S20901C7 ::v24(){vfunc_called(this, "_ZN8S20901C73v24Ev");}
void  S20901C7 ::v25(){vfunc_called(this, "_ZN8S20901C73v25Ev");}
S20901C7 ::~S20901C7(){ note_dtor("S20901C7", this);} // tgen
S20901C7 ::S20901C7(){ note_ctor("S20901C7", this);} // tgen

static void Test_S20901C7()
{
  extern Class_Descriptor cd_S20901C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,17)];
    init_test(&cd_S20901C7, buf);
    S20901C7 *dp, &lv = *(dp=new (buf) S20901C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S20901C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20901C7)");
    check_base_class_offset(lv, (S20901C3*)(S20901C6*)(S20901C8*), 0, "S20901C7");
    check_base_class_offset(lv, (S20901C6*)(S20901C8*), 0, "S20901C7");
    /*is_ambiguous_... S20901C8::S20901C3 */ AMB_check_base_class_offset(lv, (S20901C3*)(S20901C8*), ABISELECT(48,24), "S20901C7");
    check_base_class_offset(lv, (S20901C8*), 0, "S20901C7");
    check_base_class_offset(lv, (S20901C11*)(S20901C10*), ABISELECT(96,52), "S20901C7");
    check_base_class_offset(lv, (S20901C10*)(S20901C9*), ABISELECT(88,48), "S20901C7");
    check_base_class_offset(lv, (S20901C9*), ABISELECT(88,48), "S20901C7");
    test_class_info(&lv, &cd_S20901C7);
    dp->~S20901C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20901C7(Test_S20901C7, "S20901C7", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S20901C7C1Ev();
extern void _ZN8S20901C7D1Ev();
Name_Map name_map_S20901C7[] = {
  NSPAIR(_ZN8S20901C7C1Ev),
  NSPAIR(_ZN8S20901C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
extern Class_Descriptor cd_S20901C6;
extern VTBL_ENTRY _ZTI8S20901C6[];
extern  VTBL_ENTRY _ZTV8S20901C6[];
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
extern Class_Descriptor cd_S20901C8;
extern VTBL_ENTRY _ZTI8S20901C8[];
extern  VTBL_ENTRY _ZTV8S20901C8[];
extern Class_Descriptor cd_S20901C11;
extern VTBL_ENTRY _ZTI9S20901C11[];
extern  VTBL_ENTRY _ZTV9S20901C11[];
extern Class_Descriptor cd_S20901C10;
extern VTBL_ENTRY _ZTI9S20901C10[];
extern  VTBL_ENTRY _ZTV9S20901C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20901C10[];
extern Class_Descriptor cd_S20901C9;
extern VTBL_ENTRY _ZTI8S20901C9[];
extern  VTBL_ENTRY _ZTV8S20901C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C9[];
static Base_Class bases_S20901C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20901C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S20901C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20901C3,    ABISELECT(48,24), //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
    6, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20901C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20901C11,    ABISELECT(96,52), //bcp->offset
    32, //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
    5, //immediately_derived
  0, 1},
  {&cd_S20901C10,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20901C9,    ABISELECT(88,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    8, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S20901C7[];
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C63v12Ev();
extern void _ZN8S20901C63v13Ev();
extern void _ZN8S20901C83v14Ev();
extern void _ZN8S20901C83v15Ev();
extern void _ZN8S20901C83v16Ev();
extern void _ZN8S20901C83v17Ev();
extern void _ZN8S20901C73v23Ev();
extern void _ZN8S20901C73v24Ev();
extern void _ZN8S20901C73v25Ev();
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY vtc_S20901C7[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v25Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern VTBL_ENTRY _ZTV8S20901C7[];
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C9__8S20901C7[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C9[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__8S20901C9__8S20901C7[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20901C9[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern void _ZN9S20901C103v19Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C10__8S20901C7[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20901C10[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__9S20901C10__8S20901C7[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20901C10[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
static  VTT_ENTRY vtt_S20901C7[] = {
  {&(_ZTV8S20901C7[5]),  5,36},
  {&(_ZTV8S20901C7[28]),  28,36},
  {&(_ZTV8S20901C7[28]),  28,36},
  {&(_ZTV8S20901C7[35]),  35,36},
  {&(_tg__ZTV8S20901C9__8S20901C7[5]),  5,9},
  {&(_tg__ZTV8S20901C9__8S20901C7[5]),  5,9},
  {&(_tg__ZTV9S20901C11__8S20901C9__8S20901C7[3]),  3,4},
  {&(_tg__ZTV9S20901C10__8S20901C7[3]),  3,4},
  {&(_tg__ZTV9S20901C11__9S20901C10__8S20901C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20901C7[];
extern  VTBL_ENTRY _ZTV8S20901C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C7[];
Class_Descriptor cd_S20901C7 = {  "S20901C7", // class name
  bases_S20901C7, 7,
  &(vtc_S20901C7[0]), // expected_vtbl_contents
  &(vtt_S20901C7[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S20901C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20901C7),36, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20901C7),9, //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  S20901C4  : S20901C5 , S20901C7 {
  virtual  ~S20901C4(); // _ZN8S20901C4D2Ev
  virtual void  v26(); // _ZN8S20901C43v26Ev
  virtual void  v27(); // _ZN8S20901C43v27Ev
  virtual void  v28(); // _ZN8S20901C43v28Ev
  virtual void  v29(); // _ZN8S20901C43v29Ev
  virtual void  v30(); // _ZN8S20901C43v30Ev
  virtual void  v31(); // _ZN8S20901C43v31Ev
  S20901C4(); // tgen
};
//SIG(-1 S20901C4) C1{ BC2{ v7 v8 v9 FC3{ BC4{ v10 v11 Fp FD Fi} v12 v13}[3] Fp Fs:8} BC5{ BC6{ BC3 BC4 v14 v15 v16 v17} VBC7{ VBC8{ VBC9{ v18 FC10{ v26 v27} Fp} v19} v20 v21 v22} v23 v24 v25} vd v1 v2 v3 v4 v5 v6}


 S20901C4 ::~S20901C4(){ note_dtor("S20901C4", this);}
void  S20901C4 ::v26(){vfunc_called(this, "_ZN8S20901C43v26Ev");}
void  S20901C4 ::v27(){vfunc_called(this, "_ZN8S20901C43v27Ev");}
void  S20901C4 ::v28(){vfunc_called(this, "_ZN8S20901C43v28Ev");}
void  S20901C4 ::v29(){vfunc_called(this, "_ZN8S20901C43v29Ev");}
void  S20901C4 ::v30(){vfunc_called(this, "_ZN8S20901C43v30Ev");}
void  S20901C4 ::v31(){vfunc_called(this, "_ZN8S20901C43v31Ev");}
S20901C4 ::S20901C4(){ note_ctor("S20901C4", this);} // tgen

static void Test_S20901C4()
{
  extern Class_Descriptor cd_S20901C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,38)];
    init_test(&cd_S20901C4, buf);
    S20901C4 *dp, &lv = *(dp=new (buf) S20901C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,148), "sizeof(S20901C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20901C4)");
    check_base_class_offset(lv, (S20901C5*), 0, "S20901C4");
    check_base_class_offset(lv, (S20901C3*)(S20901C6*)(S20901C8*)(S20901C7*), ABISELECT(176,84), "S20901C4");
    check_base_class_offset(lv, (S20901C6*)(S20901C8*)(S20901C7*), ABISELECT(176,84), "S20901C4");
    /*is_ambiguous_... S20901C8::S20901C3 */ AMB_check_base_class_offset(lv, (S20901C3*)(S20901C8*)(S20901C7*), ABISELECT(224,108), "S20901C4");
    check_base_class_offset(lv, (S20901C8*)(S20901C7*), ABISELECT(176,84), "S20901C4");
    check_base_class_offset(lv, (S20901C11*)(S20901C10*), ABISELECT(272,136), "S20901C4");
    check_base_class_offset(lv, (S20901C10*)(S20901C9*), ABISELECT(264,132), "S20901C4");
    check_base_class_offset(lv, (S20901C9*)(S20901C7*), ABISELECT(264,132), "S20901C4");
    check_base_class_offset(lv, (S20901C7*), ABISELECT(176,84), "S20901C4");
    test_class_info(&lv, &cd_S20901C4);
    dp->~S20901C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20901C4(Test_S20901C4, "S20901C4", ABISELECT(304,148));

#else // __cplusplus

extern void _ZN8S20901C4C1Ev();
extern void _ZN8S20901C4D2Ev();
Name_Map name_map_S20901C4[] = {
  NSPAIR(_ZN8S20901C4C1Ev),
  NSPAIR(_ZN8S20901C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20901C5;
extern VTBL_ENTRY _ZTI8S20901C5[];
extern  VTBL_ENTRY _ZTV8S20901C5[];
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
extern Class_Descriptor cd_S20901C6;
extern VTBL_ENTRY _ZTI8S20901C6[];
extern  VTBL_ENTRY _ZTV8S20901C6[];
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
extern Class_Descriptor cd_S20901C8;
extern VTBL_ENTRY _ZTI8S20901C8[];
extern  VTBL_ENTRY _ZTV8S20901C8[];
extern Class_Descriptor cd_S20901C11;
extern VTBL_ENTRY _ZTI9S20901C11[];
extern  VTBL_ENTRY _ZTV9S20901C11[];
extern Class_Descriptor cd_S20901C10;
extern VTBL_ENTRY _ZTI9S20901C10[];
extern  VTBL_ENTRY _ZTV9S20901C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20901C10[];
extern Class_Descriptor cd_S20901C9;
extern VTBL_ENTRY _ZTI8S20901C9[];
extern  VTBL_ENTRY _ZTV8S20901C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C9[];
extern Class_Descriptor cd_S20901C7;
extern VTBL_ENTRY _ZTI8S20901C7[];
extern  VTBL_ENTRY _ZTV8S20901C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C7[];
static Base_Class bases_S20901C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20901C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20901C3,    ABISELECT(176,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
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20901C6,    ABISELECT(176,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
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20901C3,    ABISELECT(224,108), //bcp->offset
    32, //bcp->virtual_function_table_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_S20901C8,    ABISELECT(176,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
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20901C11,    ABISELECT(272,136), //bcp->offset
    48, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20901C10,    ABISELECT(264,132), //bcp->offset
    -1, //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
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20901C9,    ABISELECT(264,132), //bcp->offset
    36, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20901C7,    ABISELECT(176,84), //bcp->offset
    16, //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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20901C4[];
extern void _ZN8S20901C52v9Ev();
extern void _ZN8S20901C53v10Ev();
extern void _ZN8S20901C53v11Ev();
extern void _ZN8S20901C4D1Ev();
extern void _ZN8S20901C4D0Ev();
extern void _ZN8S20901C43v26Ev();
extern void _ZN8S20901C43v27Ev();
extern void _ZN8S20901C43v28Ev();
extern void _ZN8S20901C43v29Ev();
extern void _ZN8S20901C43v30Ev();
extern void _ZN8S20901C43v31Ev();
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C63v12Ev();
extern void _ZN8S20901C63v13Ev();
extern void _ZN8S20901C83v14Ev();
extern void _ZN8S20901C83v15Ev();
extern void _ZN8S20901C83v16Ev();
extern void _ZN8S20901C83v17Ev();
extern void _ZN8S20901C73v23Ev();
extern void _ZN8S20901C73v24Ev();
extern void _ZN8S20901C73v25Ev();
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY vtc_S20901C4[] = {
  ABISELECT(272,136),
  ABISELECT(264,132),
  ABISELECT(264,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN8S20901C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20901C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20901C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v31Ev,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-176,-84),
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v25Ev,
  ABISELECT(-224,-108),
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-264,-132),
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
  0,
  ABISELECT(-272,-136),
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern VTBL_ENTRY _ZTV8S20901C4[];
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C63v12Ev();
extern void _ZN8S20901C63v13Ev();
extern void _ZN8S20901C83v14Ev();
extern void _ZN8S20901C83v15Ev();
extern void _ZN8S20901C83v16Ev();
extern void _ZN8S20901C83v17Ev();
extern void _ZN8S20901C73v23Ev();
extern void _ZN8S20901C73v24Ev();
extern void _ZN8S20901C73v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C7__8S20901C4[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v25Ev,
};
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C9__8S20901C7__8S20901C4[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__8S20901C7__8S20901C4[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C9__8S20901C4[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C9[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__8S20901C9__8S20901C4[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20901C9[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern void _ZN9S20901C103v19Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C10__8S20901C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20901C10[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__9S20901C10__8S20901C4[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20901C10[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
static  VTT_ENTRY vtt_S20901C4[] = {
  {&(_ZTV8S20901C4[5]),  5,52},
  {&(_tg__ZTV8S20901C7__8S20901C4[5]),  5,16},
  {&(_tg__ZTV8S20901C9__8S20901C7__8S20901C4[8]),  8,12},
  {&(_tg__ZTV8S20901C9__8S20901C7__8S20901C4[8]),  8,12},
  {&(_tg__ZTV9S20901C11__8S20901C7__8S20901C4[3]),  3,4},
  {&(_ZTV8S20901C4[21]),  21,52},
  {&(_ZTV8S20901C4[44]),  44,52},
  {&(_ZTV8S20901C4[44]),  44,52},
  {&(_ZTV8S20901C4[51]),  51,52},
  {&(_tg__ZTV8S20901C9__8S20901C4[5]),  5,9},
  {&(_tg__ZTV8S20901C9__8S20901C4[5]),  5,9},
  {&(_tg__ZTV9S20901C11__8S20901C9__8S20901C4[3]),  3,4},
  {&(_tg__ZTV9S20901C10__8S20901C4[3]),  3,4},
  {&(_tg__ZTV9S20901C11__9S20901C10__8S20901C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20901C4[];
extern  VTBL_ENTRY _ZTV8S20901C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C4[];
Class_Descriptor cd_S20901C4 = {  "S20901C4", // class name
  bases_S20901C4, 9,
  &(vtc_S20901C4[0]), // expected_vtbl_contents
  &(vtt_S20901C4[0]), // expected_vtt_contents
  ABISELECT(304,148), // object size
  NSPAIRA(_ZTI8S20901C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20901C4),52, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20901C4),14, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20901C2  : virtual S20901C3 , virtual S20901C4 {
  void *s20901c2f0;
  virtual  ~S20901C2(); // _ZN8S20901C2D2Ev
  virtual void  v32(); // _ZN8S20901C23v32Ev
  virtual void  v33(); // _ZN8S20901C23v33Ev
  virtual void  v34(); // _ZN8S20901C23v34Ev
  virtual void  v35(); // _ZN8S20901C23v35Ev
  virtual void  v36(); // _ZN8S20901C23v36Ev
  virtual void  v37(); // _ZN8S20901C23v37Ev
  virtual void  v38(); // _ZN8S20901C23v38Ev
  S20901C2(); // tgen
};
//SIG(-1 S20901C2) C1{ VBC2{ v8 v9 Fp FD Fi} VBC3{ BC4{ v10 v11 v12 FC5{ BC2 v13 v14}[3] Fp Fs:8} BC6{ BC7{ BC5 BC2 v15 v16 v17 v18} VBC8{ VBC9{ VBC10{ v19 FC11{ v33 v34} Fp} v20} v21 v22 v23} v24 v25 v26} vd v27 v28 v29 v30 v31 v32} vd v1 v2 v3 v4 v5 v6 v7 Fp}


 S20901C2 ::~S20901C2(){ note_dtor("S20901C2", this);}
void  S20901C2 ::v32(){vfunc_called(this, "_ZN8S20901C23v32Ev");}
void  S20901C2 ::v33(){vfunc_called(this, "_ZN8S20901C23v33Ev");}
void  S20901C2 ::v34(){vfunc_called(this, "_ZN8S20901C23v34Ev");}
void  S20901C2 ::v35(){vfunc_called(this, "_ZN8S20901C23v35Ev");}
void  S20901C2 ::v36(){vfunc_called(this, "_ZN8S20901C23v36Ev");}
void  S20901C2 ::v37(){vfunc_called(this, "_ZN8S20901C23v37Ev");}
void  S20901C2 ::v38(){vfunc_called(this, "_ZN8S20901C23v38Ev");}
S20901C2 ::S20901C2(){ note_ctor("S20901C2", this);} // tgen

static void Test_S20901C2()
{
  extern Class_Descriptor cd_S20901C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,45)];
    init_test(&cd_S20901C2, buf);
    S20901C2 *dp, &lv = *(dp=new (buf) S20901C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,176), "sizeof(S20901C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20901C2)");
    /*is_ambiguous_... S20901C2::S20901C3 */ AMB_check_base_class_offset(lv, (S20901C3*), ABISELECT(16,8), "S20901C2");
    check_base_class_offset(lv, (S20901C5*)(S20901C4*), ABISELECT(64,32), "S20901C2");
    check_base_class_offset(lv, (S20901C3*)(S20901C6*)(S20901C8*)(S20901C7*)(S20901C4*), ABISELECT(240,116), "S20901C2");
    check_base_class_offset(lv, (S20901C6*)(S20901C8*)(S20901C7*)(S20901C4*), ABISELECT(240,116), "S20901C2");
    /*is_ambiguous_... S20901C8::S20901C3 */ AMB_check_base_class_offset(lv, (S20901C3*)(S20901C8*)(S20901C7*)(S20901C4*), ABISELECT(288,140), "S20901C2");
    check_base_class_offset(lv, (S20901C8*)(S20901C7*)(S20901C4*), ABISELECT(240,116), "S20901C2");
    check_base_class_offset(lv, (S20901C11*)(S20901C10*), ABISELECT(328,164), "S20901C2");
    check_base_class_offset(lv, (S20901C10*)(S20901C9*), 0, "S20901C2");
    check_base_class_offset(lv, (S20901C9*)(S20901C7*)(S20901C4*), 0, "S20901C2");
    check_base_class_offset(lv, (S20901C7*)(S20901C4*), ABISELECT(240,116), "S20901C2");
    check_base_class_offset(lv, (S20901C4*), ABISELECT(64,32), "S20901C2");
    check_field_offset(lv, s20901c2f0, ABISELECT(8,4), "S20901C2.s20901c2f0");
    test_class_info(&lv, &cd_S20901C2);
    dp->~S20901C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20901C2(Test_S20901C2, "S20901C2", ABISELECT(352,176));

#else // __cplusplus

extern void _ZN8S20901C2C1Ev();
extern void _ZN8S20901C2D2Ev();
Name_Map name_map_S20901C2[] = {
  NSPAIR(_ZN8S20901C2C1Ev),
  NSPAIR(_ZN8S20901C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
extern Class_Descriptor cd_S20901C5;
extern VTBL_ENTRY _ZTI8S20901C5[];
extern  VTBL_ENTRY _ZTV8S20901C5[];
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
extern Class_Descriptor cd_S20901C6;
extern VTBL_ENTRY _ZTI8S20901C6[];
extern  VTBL_ENTRY _ZTV8S20901C6[];
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
extern Class_Descriptor cd_S20901C8;
extern VTBL_ENTRY _ZTI8S20901C8[];
extern  VTBL_ENTRY _ZTV8S20901C8[];
extern Class_Descriptor cd_S20901C11;
extern VTBL_ENTRY _ZTI9S20901C11[];
extern  VTBL_ENTRY _ZTV9S20901C11[];
extern Class_Descriptor cd_S20901C10;
extern VTBL_ENTRY _ZTI9S20901C10[];
extern  VTBL_ENTRY _ZTV9S20901C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20901C10[];
extern Class_Descriptor cd_S20901C9;
extern VTBL_ENTRY _ZTI8S20901C9[];
extern  VTBL_ENTRY _ZTV8S20901C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C9[];
extern Class_Descriptor cd_S20901C7;
extern VTBL_ENTRY _ZTI8S20901C7[];
extern  VTBL_ENTRY _ZTV8S20901C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C7[];
extern Class_Descriptor cd_S20901C4;
extern VTBL_ENTRY _ZTI8S20901C4[];
extern  VTBL_ENTRY _ZTV8S20901C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C4[];
static Base_Class bases_S20901C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20901C3,    ABISELECT(16,8), //bcp->offset
    24, //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_S20901C5,    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
    10, //immediately_derived
  0, 0},
  {&cd_S20901C3,    ABISELECT(240,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
    6, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20901C6,    ABISELECT(240,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
    7, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20901C3,    ABISELECT(288,140), //bcp->offset
    83, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20901C8,    ABISELECT(240,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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20901C11,    ABISELECT(328,164), //bcp->offset
    87, //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
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20901C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20901C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20901C7,    ABISELECT(240,116), //bcp->offset
    67, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20901C4,    ABISELECT(64,32), //bcp->offset
    30, //bcp->virtual_function_table_offset
    26, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20901C2[];
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
extern void _ZN8S20901C2D1Ev();
extern void _ZN8S20901C2D0Ev();
extern void _ZN8S20901C23v32Ev();
extern void _ZN8S20901C23v33Ev();
extern void _ZN8S20901C23v34Ev();
extern void _ZN8S20901C23v35Ev();
extern void _ZN8S20901C23v36Ev();
extern void _ZN8S20901C23v37Ev();
extern void _ZN8S20901C23v38Ev();
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C52v9Ev();
extern void _ZN8S20901C53v10Ev();
extern void _ZN8S20901C53v11Ev();
extern void ABISELECT(_ZTv0_n72_N8S20901C2D1Ev,_ZTv0_n36_N8S20901C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S20901C2D1Ev,_ZThn32_N8S20901C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20901C2D0Ev,_ZTv0_n36_N8S20901C2D0Ev)();
extern void ABISELECT(_ZThn64_N8S20901C2D0Ev,_ZThn32_N8S20901C2D0Ev)() __attribute__((weak));
extern void _ZN8S20901C43v26Ev();
extern void _ZN8S20901C43v27Ev();
extern void _ZN8S20901C43v28Ev();
extern void _ZN8S20901C43v29Ev();
extern void _ZN8S20901C43v30Ev();
extern void _ZN8S20901C43v31Ev();
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C63v12Ev();
extern void _ZN8S20901C63v13Ev();
extern void _ZN8S20901C83v14Ev();
extern void _ZN8S20901C83v15Ev();
extern void _ZN8S20901C83v16Ev();
extern void _ZN8S20901C83v17Ev();
extern void _ZN8S20901C73v23Ev();
extern void _ZN8S20901C73v24Ev();
extern void _ZN8S20901C73v25Ev();
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY vtc_S20901C2[] = {
  0,
  ABISELECT(64,32),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(328,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20901C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20901C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v32Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v33Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v34Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v35Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v36Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v37Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v38Ev,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  0,
  0,
  0,
  ABISELECT(264,132),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN8S20901C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20901C2D1Ev,_ZTv0_n36_N8S20901C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20901C2D0Ev,_ZTv0_n36_N8S20901C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20901C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v31Ev,
  ABISELECT(88,48),
  ABISELECT(-240,-116),
  ABISELECT(-240,-116),
  ABISELECT(-240,-116),
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v25Ev,
  ABISELECT(-288,-140),
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  0,
  ABISELECT(-328,-164),
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern VTBL_ENTRY _ZTV8S20901C2[];
extern void _ZN8S20901C52v9Ev();
extern void _ZN8S20901C53v10Ev();
extern void _ZN8S20901C53v11Ev();
extern void _ZN8S20901C4D1Ev();
extern void _ZN8S20901C4D0Ev();
extern void _ZN8S20901C43v26Ev();
extern void _ZN8S20901C43v27Ev();
extern void _ZN8S20901C43v28Ev();
extern void _ZN8S20901C43v29Ev();
extern void _ZN8S20901C43v30Ev();
extern void _ZN8S20901C43v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C4__8S20901C2[] = {
  ABISELECT(264,132),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN8S20901C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20901C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20901C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v31Ev,
};
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C63v12Ev();
extern void _ZN8S20901C63v13Ev();
extern void _ZN8S20901C83v14Ev();
extern void _ZN8S20901C83v15Ev();
extern void _ZN8S20901C83v16Ev();
extern void _ZN8S20901C83v17Ev();
extern void _ZN8S20901C73v23Ev();
extern void _ZN8S20901C73v24Ev();
extern void _ZN8S20901C73v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C78S20901C4__8S20901C2[] = {
  ABISELECT(88,48),
  ABISELECT(-240,-116),
  ABISELECT(-240,-116),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v25Ev,
};
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C9__8S20901C78S20901C4__8S20901C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(328,164),
  ABISELECT(240,116),
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__8S20901C78S20901C4__8S20901C2[] = {
  0,
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C63v12Ev();
extern void _ZN8S20901C63v13Ev();
extern void _ZN8S20901C83v14Ev();
extern void _ZN8S20901C83v15Ev();
extern void _ZN8S20901C83v16Ev();
extern void _ZN8S20901C83v17Ev();
extern void _ZN8S20901C73v23Ev();
extern void _ZN8S20901C73v24Ev();
extern void _ZN8S20901C73v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C7__8S20901C4__8S20901C2[] = {
  ABISELECT(88,48),
  ABISELECT(-240,-116),
  ABISELECT(-240,-116),
  ABISELECT(-176,-84),
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v25Ev,
};
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C9__8S20901C4__8S20901C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(328,164),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__8S20901C4__8S20901C2[] = {
  0,
  ABISELECT(-264,-132),
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C9__8S20901C2[] = {
  0,
  0,
  ABISELECT(328,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C9[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__8S20901C9__8S20901C2[] = {
  0,
  ABISELECT(-328,-164),
  (VTBL_ENTRY)&(_ZTI8S20901C9[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern void _ZN9S20901C103v19Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C10__8S20901C2[] = {
  ABISELECT(328,164),
  0,
  (VTBL_ENTRY)&(_ZTI9S20901C10[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__9S20901C10__8S20901C2[] = {
  0,
  ABISELECT(-328,-164),
  (VTBL_ENTRY)&(_ZTI9S20901C10[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
static  VTT_ENTRY vtt_S20901C2[] = {
  {&(_ZTV8S20901C2[11]),  11,91},
  {&(_ZTV8S20901C2[28]),  28,91},
  {&(_ZTV8S20901C2[56]),  56,91},
  {&(_ZTV8S20901C2[72]),  72,91},
  {&(_ZTV8S20901C2[85]),  85,91},
  {&(_ZTV8S20901C2[11]),  11,91},
  {&(_ZTV8S20901C2[11]),  11,91},
  {&(_ZTV8S20901C2[90]),  90,91},
  {&(_tg__ZTV8S20901C4__8S20901C2[5]),  5,16},
  {&(_tg__ZTV8S20901C78S20901C4__8S20901C2[5]),  5,16},
  {&(_tg__ZTV8S20901C9__8S20901C78S20901C4__8S20901C2[8]),  8,12},
  {&(_tg__ZTV8S20901C9__8S20901C78S20901C4__8S20901C2[8]),  8,12},
  {&(_tg__ZTV9S20901C11__8S20901C78S20901C4__8S20901C2[3]),  3,4},
  {&(_tg__ZTV8S20901C7__8S20901C4__8S20901C2[5]),  5,16},
  {&(_tg__ZTV8S20901C9__8S20901C4__8S20901C2[8]),  8,12},
  {&(_tg__ZTV8S20901C9__8S20901C4__8S20901C2[8]),  8,12},
  {&(_tg__ZTV9S20901C11__8S20901C4__8S20901C2[3]),  3,4},
  {&(_tg__ZTV8S20901C9__8S20901C2[5]),  5,9},
  {&(_tg__ZTV8S20901C9__8S20901C2[5]),  5,9},
  {&(_tg__ZTV9S20901C11__8S20901C9__8S20901C2[3]),  3,4},
  {&(_tg__ZTV9S20901C10__8S20901C2[3]),  3,4},
  {&(_tg__ZTV9S20901C11__9S20901C10__8S20901C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20901C2[];
extern  VTBL_ENTRY _ZTV8S20901C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C2[];
static VTBL_ENTRY alt_thunk_names30[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20901C2D0Ev,_ZTv0_n36_N8S20901C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20901C2D0Ev,_ZThn32_N8S20901C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20901C2D1Ev,_ZTv0_n36_N8S20901C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20901C2D1Ev,_ZThn32_N8S20901C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20901C2 = {  "S20901C2", // class name
  bases_S20901C2, 11,
  &(vtc_S20901C2[0]), // expected_vtbl_contents
  &(vtt_S20901C2[0]), // expected_vtt_contents
  ABISELECT(352,176), // object size
  NSPAIRA(_ZTI8S20901C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20901C2),91, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20901C2),22, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names30,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20901C1  : virtual S20901C2 {
  ::S20900C13 s20901c1f0;
  __tsi64 s20901c1f1;
  virtual void  v1(); // _ZN8S20901C12v1Ev
  virtual void  v2(); // _ZN8S20901C12v2Ev
  virtual void  v3(); // _ZN8S20901C12v3Ev
  virtual void  v4(); // _ZN8S20901C12v4Ev
  virtual void  v5(); // _ZN8S20901C12v5Ev
  virtual void  v6(); // _ZN8S20901C12v6Ev
  ~S20901C1(); // tgen
  S20901C1(); // tgen
};
//SIG(1 S20901C1) C1{ VBC2{ VBC3{ v7 v8 Fp FD Fi} VBC4{ BC5{ v9 v10 v11 FC6{ BC3 v12 v13}[3] Fp Fs:8} BC7{ BC8{ BC6 BC3 v14 v15 v16 v17} VBC9{ VBC10{ VBC11{ v18 FC12{ v42 v43} Fp} v19} v20 v21 v22} v23 v24 v25} vd v26 v27 v28 v29 v30 v31} vd v32 v33 v34 v35 v36 v37 v38 Fp} v1 v2 v3 v4 v5 v6 FC13{ BC14{ v40 FC12 Fp} BC15{ VBC14 v41} vd v39 Fi} FL}


void  S20901C1 ::v1(){vfunc_called(this, "_ZN8S20901C12v1Ev");}
void  S20901C1 ::v2(){vfunc_called(this, "_ZN8S20901C12v2Ev");}
void  S20901C1 ::v3(){vfunc_called(this, "_ZN8S20901C12v3Ev");}
void  S20901C1 ::v4(){vfunc_called(this, "_ZN8S20901C12v4Ev");}
void  S20901C1 ::v5(){vfunc_called(this, "_ZN8S20901C12v5Ev");}
void  S20901C1 ::v6(){vfunc_called(this, "_ZN8S20901C12v6Ev");}
S20901C1 ::~S20901C1(){ note_dtor("S20901C1", this);} // tgen
S20901C1 ::S20901C1(){ note_ctor("S20901C1", this);} // tgen

static void Test_S20901C1()
{
  extern Class_Descriptor cd_S20901C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,56)];
    init_test(&cd_S20901C1, buf);
    S20901C1 *dp, &lv = *(dp=new (buf) S20901C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,220), "sizeof(S20901C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20901C1)");
    /*is_ambiguous_... S20901C2::S20901C3 */ AMB_check_base_class_offset(lv, (S20901C3*)(S20901C2*), ABISELECT(96,52), "S20901C1");
    check_base_class_offset(lv, (S20901C5*)(S20901C4*), ABISELECT(144,76), "S20901C1");
    check_base_class_offset(lv, (S20901C3*)(S20901C6*)(S20901C8*)(S20901C7*)(S20901C4*), ABISELECT(320,160), "S20901C1");
    check_base_class_offset(lv, (S20901C6*)(S20901C8*)(S20901C7*)(S20901C4*), ABISELECT(320,160), "S20901C1");
    /*is_ambiguous_... S20901C8::S20901C3 */ AMB_check_base_class_offset(lv, (S20901C3*)(S20901C8*)(S20901C7*)(S20901C4*), ABISELECT(368,184), "S20901C1");
    check_base_class_offset(lv, (S20901C8*)(S20901C7*)(S20901C4*), ABISELECT(320,160), "S20901C1");
    check_base_class_offset(lv, (S20901C11*)(S20901C10*), ABISELECT(408,208), "S20901C1");
    check_base_class_offset(lv, (S20901C10*)(S20901C9*), 0, "S20901C1");
    check_base_class_offset(lv, (S20901C9*)(S20901C7*)(S20901C4*), 0, "S20901C1");
    check_base_class_offset(lv, (S20901C7*)(S20901C4*), ABISELECT(320,160), "S20901C1");
    check_base_class_offset(lv, (S20901C4*)(S20901C2*), ABISELECT(144,76), "S20901C1");
    check_base_class_offset(lv, (S20901C2*), ABISELECT(80,44), "S20901C1");
    check_field_offset(lv, s20901c1f0, ABISELECT(8,4), "S20901C1.s20901c1f0");
    check_field_offset(lv, s20901c1f1, ABISELECT(72,36), "S20901C1.s20901c1f1");
    test_class_info(&lv, &cd_S20901C1);
    dp->~S20901C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20901C1(Test_S20901C1, "S20901C1", ABISELECT(432,220));

#else // __cplusplus

extern void _ZN8S20901C1C1Ev();
extern void _ZN8S20901C1D1Ev();
Name_Map name_map_S20901C1[] = {
  NSPAIR(_ZN8S20901C1C1Ev),
  NSPAIR(_ZN8S20901C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
extern Class_Descriptor cd_S20901C5;
extern VTBL_ENTRY _ZTI8S20901C5[];
extern  VTBL_ENTRY _ZTV8S20901C5[];
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
extern Class_Descriptor cd_S20901C6;
extern VTBL_ENTRY _ZTI8S20901C6[];
extern  VTBL_ENTRY _ZTV8S20901C6[];
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
extern Class_Descriptor cd_S20901C8;
extern VTBL_ENTRY _ZTI8S20901C8[];
extern  VTBL_ENTRY _ZTV8S20901C8[];
extern Class_Descriptor cd_S20901C11;
extern VTBL_ENTRY _ZTI9S20901C11[];
extern  VTBL_ENTRY _ZTV9S20901C11[];
extern Class_Descriptor cd_S20901C10;
extern VTBL_ENTRY _ZTI9S20901C10[];
extern  VTBL_ENTRY _ZTV9S20901C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20901C10[];
extern Class_Descriptor cd_S20901C9;
extern VTBL_ENTRY _ZTI8S20901C9[];
extern  VTBL_ENTRY _ZTV8S20901C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C9[];
extern Class_Descriptor cd_S20901C7;
extern VTBL_ENTRY _ZTI8S20901C7[];
extern  VTBL_ENTRY _ZTV8S20901C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C7[];
extern Class_Descriptor cd_S20901C4;
extern VTBL_ENTRY _ZTI8S20901C4[];
extern  VTBL_ENTRY _ZTV8S20901C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C4[];
extern Class_Descriptor cd_S20901C2;
extern VTBL_ENTRY _ZTI8S20901C2[];
extern  VTBL_ENTRY _ZTV8S20901C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C2[];
static Base_Class bases_S20901C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20901C3,    ABISELECT(96,52), //bcp->offset
    56, //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
    11, //immediately_derived
  0, 1},
  {&cd_S20901C5,    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
    10, //immediately_derived
  0, 0},
  {&cd_S20901C3,    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
    6, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20901C6,    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
    7, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20901C3,    ABISELECT(368,184), //bcp->offset
    115, //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
    5, //immediately_derived
  0, 0},
  {&cd_S20901C8,    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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20901C11,    ABISELECT(408,208), //bcp->offset
    119, //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
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20901C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20901C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20901C7,    ABISELECT(320,160), //bcp->offset
    99, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20901C4,    ABISELECT(144,76), //bcp->offset
    62, //bcp->virtual_function_table_offset
    26, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20901C2,    ABISELECT(80,44), //bcp->offset
    24, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20901C1[];
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
extern void _ZN8S20901C12v1Ev();
extern void _ZN8S20901C12v2Ev();
extern void _ZN8S20901C12v3Ev();
extern void _ZN8S20901C12v4Ev();
extern void _ZN8S20901C12v5Ev();
extern void _ZN8S20901C12v6Ev();
extern void _ZN8S20901C1D1Ev();
extern void _ZN8S20901C1D0Ev();
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
extern void ABISELECT(_ZTv0_n96_N8S20901C1D1Ev,_ZTv0_n48_N8S20901C1D1Ev)();
extern void ABISELECT(_ZThn80_N8S20901C1D1Ev,_ZThn44_N8S20901C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S20901C1D0Ev,_ZTv0_n48_N8S20901C1D0Ev)();
extern void ABISELECT(_ZThn80_N8S20901C1D0Ev,_ZThn44_N8S20901C1D0Ev)() __attribute__((weak));
extern void _ZN8S20901C23v32Ev();
extern void _ZN8S20901C23v33Ev();
extern void _ZN8S20901C23v34Ev();
extern void _ZN8S20901C23v35Ev();
extern void _ZN8S20901C23v36Ev();
extern void _ZN8S20901C23v37Ev();
extern void _ZN8S20901C23v38Ev();
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C52v9Ev();
extern void _ZN8S20901C53v10Ev();
extern void _ZN8S20901C53v11Ev();
extern void ABISELECT(_ZTv0_n72_N8S20901C1D1Ev,_ZTv0_n36_N8S20901C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S20901C1D1Ev,_ZThn76_N8S20901C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20901C1D0Ev,_ZTv0_n36_N8S20901C1D0Ev)();
extern void ABISELECT(_ZThn144_N8S20901C1D0Ev,_ZThn76_N8S20901C1D0Ev)() __attribute__((weak));
extern void _ZN8S20901C43v26Ev();
extern void _ZN8S20901C43v27Ev();
extern void _ZN8S20901C43v28Ev();
extern void _ZN8S20901C43v29Ev();
extern void _ZN8S20901C43v30Ev();
extern void _ZN8S20901C43v31Ev();
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C63v12Ev();
extern void _ZN8S20901C63v13Ev();
extern void _ZN8S20901C83v14Ev();
extern void _ZN8S20901C83v15Ev();
extern void _ZN8S20901C83v16Ev();
extern void _ZN8S20901C83v17Ev();
extern void _ZN8S20901C73v23Ev();
extern void _ZN8S20901C73v24Ev();
extern void _ZN8S20901C73v25Ev();
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY vtc_S20901C1[] = {
  0,
  ABISELECT(144,76),
  ABISELECT(96,52),
  ABISELECT(80,44),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(408,208),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C1[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20901C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20901C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20901C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20901C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20901C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20901C12v6Ev,
  (VTBL_ENTRY)&_ZN8S20901C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20901C1D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(64,32),
  ABISELECT(16,8),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(328,164),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S20901C1[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20901C1D1Ev,_ZTv0_n48_N8S20901C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20901C1D0Ev,_ZTv0_n48_N8S20901C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20901C23v32Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v33Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v34Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v35Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v36Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v37Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v38Ev,
  0,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20901C1[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-76),
  0,
  0,
  0,
  ABISELECT(264,132),
  ABISELECT(-144,-76),
  ABISELECT(-144,-76),
  ABISELECT(-144,-76),
  (VTBL_ENTRY)&(_ZTI8S20901C1[0]),
  (VTBL_ENTRY)&_ZN8S20901C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20901C1D1Ev,_ZTv0_n36_N8S20901C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20901C1D0Ev,_ZTv0_n36_N8S20901C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20901C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v31Ev,
  ABISELECT(88,48),
  ABISELECT(-320,-160),
  ABISELECT(-320,-160),
  ABISELECT(-320,-160),
  (VTBL_ENTRY)&(_ZTI8S20901C1[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v25Ev,
  ABISELECT(-368,-184),
  (VTBL_ENTRY)&(_ZTI8S20901C1[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  0,
  ABISELECT(-408,-208),
  (VTBL_ENTRY)&(_ZTI8S20901C1[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern VTBL_ENTRY _ZTV8S20901C1[];
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
extern void _ZN8S20901C2D1Ev();
extern void _ZN8S20901C2D0Ev();
extern void _ZN8S20901C23v32Ev();
extern void _ZN8S20901C23v33Ev();
extern void _ZN8S20901C23v34Ev();
extern void _ZN8S20901C23v35Ev();
extern void _ZN8S20901C23v36Ev();
extern void _ZN8S20901C23v37Ev();
extern void _ZN8S20901C23v38Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C2__8S20901C1[] = {
  ABISELECT(-80,-44),
  ABISELECT(64,32),
  ABISELECT(16,8),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(328,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20901C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20901C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v32Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v33Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v34Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v35Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v36Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v37Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v38Ev,
};
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C3__8S20901C2__8S20901C1[] = {
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
};
extern void _ZN8S20901C52v9Ev();
extern void _ZN8S20901C53v10Ev();
extern void _ZN8S20901C53v11Ev();
extern void ABISELECT(_ZTv0_n72_N8S20901C2D1Ev,_ZTv0_n36_N8S20901C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S20901C2D1Ev,_ZThn32_N8S20901C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20901C2D0Ev,_ZTv0_n36_N8S20901C2D0Ev)();
extern void ABISELECT(_ZThn64_N8S20901C2D0Ev,_ZThn32_N8S20901C2D0Ev)() __attribute__((weak));
extern void _ZN8S20901C43v26Ev();
extern void _ZN8S20901C43v27Ev();
extern void _ZN8S20901C43v28Ev();
extern void _ZN8S20901C43v29Ev();
extern void _ZN8S20901C43v30Ev();
extern void _ZN8S20901C43v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C4__8S20901C2__8S20901C1[] = {
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  0,
  0,
  0,
  ABISELECT(264,132),
  ABISELECT(-144,-76),
  ABISELECT(-144,-76),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN8S20901C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20901C2D1Ev,_ZTv0_n36_N8S20901C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20901C2D0Ev,_ZTv0_n36_N8S20901C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20901C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v31Ev,
};
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C63v12Ev();
extern void _ZN8S20901C63v13Ev();
extern void _ZN8S20901C83v14Ev();
extern void _ZN8S20901C83v15Ev();
extern void _ZN8S20901C83v16Ev();
extern void _ZN8S20901C83v17Ev();
extern void _ZN8S20901C73v23Ev();
extern void _ZN8S20901C73v24Ev();
extern void _ZN8S20901C73v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C78S20901C4__8S20901C2__8S20901C1[] = {
  ABISELECT(88,48),
  ABISELECT(-320,-160),
  ABISELECT(-320,-160),
  ABISELECT(-240,-116),
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v25Ev,
};
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C38S20901C88S20901C78S20901C4__A2__8S20901C2__8S20901C1[] = {
  ABISELECT(-288,-140),
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
};
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C9__8S20901C2__8S20901C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(408,208),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__8S20901C2__8S20901C1[] = {
  0,
  ABISELECT(-328,-164),
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern void _ZN8S20901C52v9Ev();
extern void _ZN8S20901C53v10Ev();
extern void _ZN8S20901C53v11Ev();
extern void _ZN8S20901C4D1Ev();
extern void _ZN8S20901C4D0Ev();
extern void _ZN8S20901C43v26Ev();
extern void _ZN8S20901C43v27Ev();
extern void _ZN8S20901C43v28Ev();
extern void _ZN8S20901C43v29Ev();
extern void _ZN8S20901C43v30Ev();
extern void _ZN8S20901C43v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C4__8S20901C1[] = {
  ABISELECT(264,132),
  ABISELECT(-144,-76),
  ABISELECT(-144,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN8S20901C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20901C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20901C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v31Ev,
};
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C63v12Ev();
extern void _ZN8S20901C63v13Ev();
extern void _ZN8S20901C83v14Ev();
extern void _ZN8S20901C83v15Ev();
extern void _ZN8S20901C83v16Ev();
extern void _ZN8S20901C83v17Ev();
extern void _ZN8S20901C73v23Ev();
extern void _ZN8S20901C73v24Ev();
extern void _ZN8S20901C73v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C78S20901C4__8S20901C1[] = {
  ABISELECT(88,48),
  ABISELECT(-320,-160),
  ABISELECT(-320,-160),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v25Ev,
};
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C9__8S20901C78S20901C4__8S20901C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(408,208),
  ABISELECT(320,160),
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__8S20901C78S20901C4__8S20901C1[] = {
  0,
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C63v12Ev();
extern void _ZN8S20901C63v13Ev();
extern void _ZN8S20901C83v14Ev();
extern void _ZN8S20901C83v15Ev();
extern void _ZN8S20901C83v16Ev();
extern void _ZN8S20901C83v17Ev();
extern void _ZN8S20901C73v23Ev();
extern void _ZN8S20901C73v24Ev();
extern void _ZN8S20901C73v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C7__8S20901C4__8S20901C1[] = {
  ABISELECT(88,48),
  ABISELECT(-320,-160),
  ABISELECT(-320,-160),
  ABISELECT(-176,-84),
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v25Ev,
};
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C9__8S20901C4__8S20901C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(408,208),
  ABISELECT(144,76),
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__8S20901C4__8S20901C1[] = {
  0,
  ABISELECT(-264,-132),
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C9__8S20901C1[] = {
  0,
  0,
  ABISELECT(408,208),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C9[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__8S20901C9__8S20901C1[] = {
  0,
  ABISELECT(-408,-208),
  (VTBL_ENTRY)&(_ZTI8S20901C9[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern void _ZN9S20901C103v19Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C10__8S20901C1[] = {
  ABISELECT(408,208),
  0,
  (VTBL_ENTRY)&(_ZTI9S20901C10[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__9S20901C10__8S20901C1[] = {
  0,
  ABISELECT(-408,-208),
  (VTBL_ENTRY)&(_ZTI9S20901C10[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
static  VTT_ENTRY vtt_S20901C1[] = {
  {&(_ZTV8S20901C1[12]),  12,123},
  {&(_ZTV8S20901C1[43]),  43,123},
  {&(_ZTV8S20901C1[60]),  60,123},
  {&(_ZTV8S20901C1[88]),  88,123},
  {&(_ZTV8S20901C1[104]),  104,123},
  {&(_ZTV8S20901C1[117]),  117,123},
  {&(_ZTV8S20901C1[12]),  12,123},
  {&(_ZTV8S20901C1[12]),  12,123},
  {&(_ZTV8S20901C1[122]),  122,123},
  {&(_tg__ZTV8S20901C2__8S20901C1[11]),  11,24},
  {&(_tg__ZTV8S20901C3__8S20901C2__8S20901C1[4]),  4,6},
  {&(_tg__ZTV8S20901C4__8S20901C2__8S20901C1[26]),  26,37},
  {&(_tg__ZTV8S20901C78S20901C4__8S20901C2__8S20901C1[5]),  5,16},
  {&(_tg__ZTV8S20901C38S20901C88S20901C78S20901C4__A2__8S20901C2__8S20901C1[2]),  2,4},
  {&(_tg__ZTV8S20901C9__8S20901C2__8S20901C1[8]),  8,12},
  {&(_tg__ZTV8S20901C9__8S20901C2__8S20901C1[8]),  8,12},
  {&(_tg__ZTV9S20901C11__8S20901C2__8S20901C1[3]),  3,4},
  {&(_tg__ZTV8S20901C4__8S20901C1[5]),  5,16},
  {&(_tg__ZTV8S20901C78S20901C4__8S20901C1[5]),  5,16},
  {&(_tg__ZTV8S20901C9__8S20901C78S20901C4__8S20901C1[8]),  8,12},
  {&(_tg__ZTV8S20901C9__8S20901C78S20901C4__8S20901C1[8]),  8,12},
  {&(_tg__ZTV9S20901C11__8S20901C78S20901C4__8S20901C1[3]),  3,4},
  {&(_tg__ZTV8S20901C7__8S20901C4__8S20901C1[5]),  5,16},
  {&(_tg__ZTV8S20901C9__8S20901C4__8S20901C1[8]),  8,12},
  {&(_tg__ZTV8S20901C9__8S20901C4__8S20901C1[8]),  8,12},
  {&(_tg__ZTV9S20901C11__8S20901C4__8S20901C1[3]),  3,4},
  {&(_tg__ZTV8S20901C9__8S20901C1[5]),  5,9},
  {&(_tg__ZTV8S20901C9__8S20901C1[5]),  5,9},
  {&(_tg__ZTV9S20901C11__8S20901C9__8S20901C1[3]),  3,4},
  {&(_tg__ZTV9S20901C10__8S20901C1[3]),  3,4},
  {&(_tg__ZTV9S20901C11__9S20901C10__8S20901C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20901C1[];
extern  VTBL_ENTRY _ZTV8S20901C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C1[];
static VTBL_ENTRY alt_thunk_names31[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20901C2D0Ev,_ZTv0_n36_N8S20901C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20901C2D0Ev,_ZThn32_N8S20901C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20901C2D1Ev,_ZTv0_n36_N8S20901C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20901C2D1Ev,_ZThn32_N8S20901C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20901C1D0Ev,_ZTv0_n36_N8S20901C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20901C1D0Ev,_ZThn76_N8S20901C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20901C1D1Ev,_ZTv0_n36_N8S20901C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20901C1D1Ev,_ZThn76_N8S20901C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S20901C1D0Ev,_ZTv0_n48_N8S20901C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20901C1D0Ev,_ZThn44_N8S20901C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S20901C1D1Ev,_ZTv0_n48_N8S20901C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20901C1D1Ev,_ZThn44_N8S20901C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20901C1 = {  "S20901C1", // class name
  bases_S20901C1, 12,
  &(vtc_S20901C1[0]), // expected_vtbl_contents
  &(vtt_S20901C1[0]), // expected_vtt_contents
  ABISELECT(432,220), // object size
  NSPAIRA(_ZTI8S20901C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20901C1),123, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20901C1),31, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names31,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4475C3  {
  int s4475c3f0[4];
  ::S4474C4_nt s4475c3f1;
  int s4475c3f2;
  char s4475c3f3;
  ::S4474C5_nt s4475c3f4;
  int s4475c3f5;
  virtual  ~S4475C3(); // _ZN7S4475C3D1Ev
  virtual void  v2(); // _ZN7S4475C32v2Ev
  virtual void  v3(); // _ZN7S4475C32v3Ev
  virtual void  v4(); // _ZN7S4475C32v4Ev
  S4475C3(); // tgen
};
//SIG(-1 S4475C3) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4475C3 ::~S4475C3(){ note_dtor("S4475C3", this);}
void  S4475C3 ::v2(){vfunc_called(this, "_ZN7S4475C32v2Ev");}
void  S4475C3 ::v3(){vfunc_called(this, "_ZN7S4475C32v3Ev");}
void  S4475C3 ::v4(){vfunc_called(this, "_ZN7S4475C32v4Ev");}
S4475C3 ::S4475C3(){ note_ctor("S4475C3", this);} // tgen

static void Test_S4475C3()
{
  extern Class_Descriptor cd_S4475C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4475C3, buf);
    S4475C3 *dp, &lv = *(dp=new (buf) S4475C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4475C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4475C3)");
    check_field_offset(lv, s4475c3f0, ABISELECT(8,4), "S4475C3.s4475c3f0");
    check_field_offset(lv, s4475c3f1, ABISELECT(24,20), "S4475C3.s4475c3f1");
    check_field_offset(lv, s4475c3f2, ABISELECT(40,28), "S4475C3.s4475c3f2");
    check_field_offset(lv, s4475c3f3, ABISELECT(44,32), "S4475C3.s4475c3f3");
    check_field_offset(lv, s4475c3f4, ABISELECT(48,36), "S4475C3.s4475c3f4");
    check_field_offset(lv, s4475c3f5, ABISELECT(64,48), "S4475C3.s4475c3f5");
    test_class_info(&lv, &cd_S4475C3);
    dp->~S4475C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4475C3(Test_S4475C3, "S4475C3", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4475C3C1Ev();
extern void _ZN7S4475C3D1Ev();
Name_Map name_map_S4475C3[] = {
  NSPAIR(_ZN7S4475C3C1Ev),
  NSPAIR(_ZN7S4475C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4475C3[];
extern void _ZN7S4475C3D1Ev();
extern void _ZN7S4475C3D0Ev();
extern void _ZN7S4475C32v2Ev();
extern void _ZN7S4475C32v3Ev();
extern void _ZN7S4475C32v4Ev();
static  VTBL_ENTRY vtc_S4475C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4475C3[0]),
  (VTBL_ENTRY)&_ZN7S4475C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4475C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4475C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4475C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4475C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4475C3[];
extern  VTBL_ENTRY _ZTV7S4475C3[];
Class_Descriptor cd_S4475C3 = {  "S4475C3", // class name
  0,0,//no base classes
  &(vtc_S4475C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4475C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4475C3),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  S4475C6  {
  virtual  ~S4475C6(); // _ZN7S4475C6D1Ev
  virtual void  v5(); // _ZN7S4475C62v5Ev
  S4475C6(); // tgen
};
//SIG(-1 S4475C6) C1{ vd v1}


 S4475C6 ::~S4475C6(){ note_dtor("S4475C6", this);}
void  S4475C6 ::v5(){vfunc_called(this, "_ZN7S4475C62v5Ev");}
S4475C6 ::S4475C6(){ note_ctor("S4475C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S4475C6C1Ev();
extern void _ZN7S4475C6D1Ev();
Name_Map name_map_S4475C6[] = {
  NSPAIR(_ZN7S4475C6C1Ev),
  NSPAIR(_ZN7S4475C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4475C6[];
extern void _ZN7S4475C6D1Ev();
extern void _ZN7S4475C6D0Ev();
extern void _ZN7S4475C62v5Ev();
static  VTBL_ENTRY vtc_S4475C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4475C6[0]),
  (VTBL_ENTRY)&_ZN7S4475C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4475C6D0Ev,
  (VTBL_ENTRY)&_ZN7S4475C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4475C6[];
extern  VTBL_ENTRY _ZTV7S4475C6[];
Class_Descriptor cd_S4475C6 = {  "S4475C6", // class name
  0,0,//no base classes
  &(vtc_S4475C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4475C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4475C6),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  S4475C2  : S4475C3 , S4475C6 {
  void *s4475c2f0;
  int s4475c2f1;
  void *s4475c2f2;
  virtual  ~S4475C2(); // _ZN7S4475C2D1Ev
  virtual void  v6(); // _ZN7S4475C22v6Ev
  virtual void  v7(); // _ZN7S4475C22v7Ev
  S4475C2(); // tgen
};
//SIG(-1 S4475C2) C1{ BC2{ vd v3 v4 v5 Fi[4] FC3{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} BC5{ vd v6} vd v1 v2 Fp Fi Fp}


 S4475C2 ::~S4475C2(){ note_dtor("S4475C2", this);}
void  S4475C2 ::v6(){vfunc_called(this, "_ZN7S4475C22v6Ev");}
void  S4475C2 ::v7(){vfunc_called(this, "_ZN7S4475C22v7Ev");}
S4475C2 ::S4475C2(){ note_ctor("S4475C2", this);} // tgen

static void Test_S4475C2()
{
  extern Class_Descriptor cd_S4475C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4475C2, buf);
    S4475C2 *dp, &lv = *(dp=new (buf) S4475C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4475C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4475C2)");
    check_base_class_offset(lv, (S4475C3*), 0, "S4475C2");
    check_base_class_offset(lv, (S4475C6*), ABISELECT(72,52), "S4475C2");
    check_field_offset(lv, s4475c2f0, ABISELECT(80,56), "S4475C2.s4475c2f0");
    check_field_offset(lv, s4475c2f1, ABISELECT(88,60), "S4475C2.s4475c2f1");
    check_field_offset(lv, s4475c2f2, ABISELECT(96,64), "S4475C2.s4475c2f2");
    test_class_info(&lv, &cd_S4475C2);
    dp->~S4475C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4475C2(Test_S4475C2, "S4475C2", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4475C2C1Ev();
extern void _ZN7S4475C2D1Ev();
Name_Map name_map_S4475C2[] = {
  NSPAIR(_ZN7S4475C2C1Ev),
  NSPAIR(_ZN7S4475C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4475C3;
extern VTBL_ENTRY _ZTI7S4475C3[];
extern  VTBL_ENTRY _ZTV7S4475C3[];
extern Class_Descriptor cd_S4475C6;
extern VTBL_ENTRY _ZTI7S4475C6[];
extern  VTBL_ENTRY _ZTV7S4475C6[];
static Base_Class bases_S4475C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4475C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S4475C6,    ABISELECT(72,52), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4475C2[];
extern void _ZN7S4475C2D1Ev();
extern void _ZN7S4475C2D0Ev();
extern void _ZN7S4475C32v2Ev();
extern void _ZN7S4475C32v3Ev();
extern void _ZN7S4475C32v4Ev();
extern void _ZN7S4475C22v6Ev();
extern void _ZN7S4475C22v7Ev();
extern void ABISELECT(_ZThn72_N7S4475C2D1Ev,_ZThn52_N7S4475C2D1Ev)();
extern void ABISELECT(_ZThn72_N7S4475C2D0Ev,_ZThn52_N7S4475C2D0Ev)();
extern void _ZN7S4475C62v5Ev();
static  VTBL_ENTRY vtc_S4475C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4475C2[0]),
  (VTBL_ENTRY)&_ZN7S4475C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4475C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4475C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4475C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4475C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4475C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4475C22v7Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4475C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4475C2D1Ev,_ZThn52_N7S4475C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4475C2D0Ev,_ZThn52_N7S4475C2D0Ev),
  (VTBL_ENTRY)&_ZN7S4475C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4475C2[];
extern  VTBL_ENTRY _ZTV7S4475C2[];
Class_Descriptor cd_S4475C2 = {  "S4475C2", // class name
  bases_S4475C2, 2,
  &(vtc_S4475C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4475C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4475C2),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4475C13  {
  void *s4475c13f0;
  ::S4474C14_nt s4475c13f1;
  void *s4475c13f2;
  int s4475c13f3;
  char s4475c13f4;
  void  mf4475c13(); // _ZN8S4475C139mf4475c13Ev
};
//SIG(-1 S4475C13) C1{ m Fp FC2{ m FC3{ vd m FL Fc} FC3} Fp Fi Fc}


void  S4475C13 ::mf4475c13(){}

static void Test_S4475C13()
{
  {
    init_simple_test("S4475C13");
    S4475C13 lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4475C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4475C13)");
    check_field_offset(lv, s4475c13f0, 0, "S4475C13.s4475c13f0");
    check_field_offset(lv, s4475c13f1, ABISELECT(8,4), "S4475C13.s4475c13f1");
    check_field_offset(lv, s4475c13f2, ABISELECT(56,36), "S4475C13.s4475c13f2");
    check_field_offset(lv, s4475c13f3, ABISELECT(64,40), "S4475C13.s4475c13f3");
    check_field_offset(lv, s4475c13f4, ABISELECT(68,44), "S4475C13.s4475c13f4");
  }
}
static Arrange_To_Call_Me vS4475C13(Test_S4475C13, "S4475C13", ABISELECT(72,48));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4475C16_nt  : S4474C17_nt {
  void *s4475c16f0;
  virtual  ~S4475C16_nt(); // _ZN11S4475C16_ntD1Ev
  S4475C16_nt(); // tgen
};
//SIG(-1 S4475C16_nt) C1{ BC2{ vd m} vd Fp}


 S4475C16_nt ::~S4475C16_nt(){ note_dtor("S4475C16_nt", this);}
S4475C16_nt ::S4475C16_nt(){ note_ctor("S4475C16_nt", this);} // tgen

//skip512 S4475C16_nt

#else // __cplusplus

extern void _ZN11S4475C16_ntC1Ev();
extern void _ZN11S4475C16_ntD1Ev();
Name_Map name_map_S4475C16_nt[] = {
  NSPAIR(_ZN11S4475C16_ntC1Ev),
  NSPAIR(_ZN11S4475C16_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4474C17_nt;
extern VTBL_ENTRY _ZTI11S4474C17_nt[];
extern  VTBL_ENTRY _ZTV11S4474C17_nt[];
static Base_Class bases_S4475C16_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4474C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S4475C16_nt[];
extern void _ZN11S4475C16_ntD1Ev();
extern void _ZN11S4475C16_ntD0Ev();
static  VTBL_ENTRY vtc_S4475C16_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S4475C16_nt[0]),
  (VTBL_ENTRY)&_ZN11S4475C16_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S4475C16_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S4475C16_nt[];
VTBL_ENTRY *P__ZTI11S4475C16_nt = _ZTI11S4475C16_nt; 
extern  VTBL_ENTRY _ZTV11S4475C16_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4475C1  : S4475C2 {
  ::S4474C7_nt s4475c1f0;
  void *s4475c1f1;
  ::S629C14 s4475c1f2;
  ::S4475C13 s4475c1f3;
  ::S4475C16_nt s4475c1f4;
  virtual  ~S4475C1(); // _ZN7S4475C1D1Ev
  virtual void  v1(); // _ZN7S4475C12v1Ev
  S4475C1(); // tgen
};
//SIG(1 S4475C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} BC6{ vd v5} vd v6 v7 Fp Fi Fp} vd v1 FC7{ vd m FC8{ m Fp Fi FC9{ m}} FC10{ BC11{ vd m Fc} vd FL[2]} Fi[2]} Fp FC9 FC12{ m Fp FC13{ m FC14{ vd m FL Fc} FC14} Fp Fi Fc} FC15{ BC16{ vd m} vd Fp}}


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

static void Test_S4475C1()
{
  extern Class_Descriptor cd_S4475C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,46)];
    init_test(&cd_S4475C1, buf);
    S4475C1 *dp, &lv = *(dp=new (buf) S4475C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,180), "sizeof(S4475C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4475C1)");
    check_base_class_offset(lv, (S4475C3*)(S4475C2*), 0, "S4475C1");
    check_base_class_offset(lv, (S4475C6*)(S4475C2*), ABISELECT(72,52), "S4475C1");
    check_base_class_offset(lv, (S4475C2*), 0, "S4475C1");
    check_field_offset(lv, s4475c1f0, ABISELECT(104,68), "S4475C1.s4475c1f0");
    check_field_offset(lv, s4475c1f1, ABISELECT(168,116), "S4475C1.s4475c1f1");
    check_field_offset(lv, s4475c1f2, ABISELECT(176,120), "S4475C1.s4475c1f2");
    check_field_offset(lv, s4475c1f3, ABISELECT(184,124), "S4475C1.s4475c1f3");
    check_field_offset(lv, s4475c1f4, ABISELECT(256,172), "S4475C1.s4475c1f4");
    test_class_info(&lv, &cd_S4475C1);
    dp->~S4475C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4475C1(Test_S4475C1, "S4475C1", ABISELECT(272,180));

#else // __cplusplus

extern void _ZN7S4475C1C1Ev();
extern void _ZN7S4475C1D1Ev();
Name_Map name_map_S4475C1[] = {
  NSPAIR(_ZN7S4475C1C1Ev),
  NSPAIR(_ZN7S4475C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4475C3;
extern VTBL_ENTRY _ZTI7S4475C3[];
extern  VTBL_ENTRY _ZTV7S4475C3[];
extern Class_Descriptor cd_S4475C6;
extern VTBL_ENTRY _ZTI7S4475C6[];
extern  VTBL_ENTRY _ZTV7S4475C6[];
extern Class_Descriptor cd_S4475C2;
extern VTBL_ENTRY _ZTI7S4475C2[];
extern  VTBL_ENTRY _ZTV7S4475C2[];
static Base_Class bases_S4475C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4475C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4475C6,    ABISELECT(72,52), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S4475C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4475C1[];
extern void _ZN7S4475C1D1Ev();
extern void _ZN7S4475C1D0Ev();
extern void _ZN7S4475C32v2Ev();
extern void _ZN7S4475C32v3Ev();
extern void _ZN7S4475C32v4Ev();
extern void _ZN7S4475C22v6Ev();
extern void _ZN7S4475C22v7Ev();
extern void _ZN7S4475C12v1Ev();
extern void ABISELECT(_ZThn72_N7S4475C1D1Ev,_ZThn52_N7S4475C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4475C1D0Ev,_ZThn52_N7S4475C1D0Ev)();
extern void _ZN7S4475C62v5Ev();
static  VTBL_ENTRY vtc_S4475C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4475C1[0]),
  (VTBL_ENTRY)&_ZN7S4475C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4475C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4475C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4475C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4475C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4475C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4475C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4475C12v1Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4475C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4475C1D1Ev,_ZThn52_N7S4475C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4475C1D0Ev,_ZThn52_N7S4475C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4475C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4475C1[];
extern  VTBL_ENTRY _ZTV7S4475C1[];
Class_Descriptor cd_S4475C1 = {  "S4475C1", // class name
  bases_S4475C1, 3,
  &(vtc_S4475C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,180), // object size
  NSPAIRA(_ZTI7S4475C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4475C1),15, //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  S7319C4  {
  void *s7319c4f0;
  long double s7319c4f1;
  int s7319c4f2;
  virtual void  v4(); // _ZN7S7319C42v4Ev
  virtual void  v5(); // _ZN7S7319C42v5Ev
  ~S7319C4(); // tgen
  S7319C4(); // tgen
};
//SIG(-1 S7319C4) C1{ v1 v2 Fp FD Fi}


void  S7319C4 ::v4(){vfunc_called(this, "_ZN7S7319C42v4Ev");}
void  S7319C4 ::v5(){vfunc_called(this, "_ZN7S7319C42v5Ev");}
S7319C4 ::~S7319C4(){ note_dtor("S7319C4", this);} // tgen
S7319C4 ::S7319C4(){ note_ctor("S7319C4", this);} // tgen

static void Test_S7319C4()
{
  extern Class_Descriptor cd_S7319C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S7319C4, buf);
    S7319C4 *dp, &lv = *(dp=new (buf) S7319C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7319C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7319C4)");
    check_field_offset(lv, s7319c4f0, ABISELECT(8,4), "S7319C4.s7319c4f0");
    check_field_offset(lv, s7319c4f1, ABISELECT(16,8), "S7319C4.s7319c4f1");
    check_field_offset(lv, s7319c4f2, ABISELECT(32,20), "S7319C4.s7319c4f2");
    test_class_info(&lv, &cd_S7319C4);
    dp->~S7319C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7319C4(Test_S7319C4, "S7319C4", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S7319C4C1Ev();
extern void _ZN7S7319C4D1Ev();
Name_Map name_map_S7319C4[] = {
  NSPAIR(_ZN7S7319C4C1Ev),
  NSPAIR(_ZN7S7319C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7319C4[];
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
static  VTBL_ENTRY vtc_S7319C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C4[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
Class_Descriptor cd_S7319C4 = {  "S7319C4", // class name
  0,0,//no base classes
  &(vtc_S7319C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S7319C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7319C4),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  S7319C6  : S7319C4 {
  virtual void  v6(); // _ZN7S7319C62v6Ev
  virtual void  v7(); // _ZN7S7319C62v7Ev
  ~S7319C6(); // tgen
  S7319C6(); // tgen
};
//SIG(-1 S7319C6) C1{ BC2{ v3 v4 Fp FD Fi} v1 v2}


void  S7319C6 ::v6(){vfunc_called(this, "_ZN7S7319C62v6Ev");}
void  S7319C6 ::v7(){vfunc_called(this, "_ZN7S7319C62v7Ev");}
S7319C6 ::~S7319C6(){ note_dtor("S7319C6", this);} // tgen
S7319C6 ::S7319C6(){ note_ctor("S7319C6", this);} // tgen

static void Test_S7319C6()
{
  extern Class_Descriptor cd_S7319C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S7319C6, buf);
    S7319C6 *dp, &lv = *(dp=new (buf) S7319C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7319C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7319C6)");
    check_base_class_offset(lv, (S7319C4*), 0, "S7319C6");
    test_class_info(&lv, &cd_S7319C6);
    dp->~S7319C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7319C6(Test_S7319C6, "S7319C6", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S7319C6C1Ev();
extern void _ZN7S7319C6D1Ev();
Name_Map name_map_S7319C6[] = {
  NSPAIR(_ZN7S7319C6C1Ev),
  NSPAIR(_ZN7S7319C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
static Base_Class bases_S7319C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7319C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7319C6[];
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
static  VTBL_ENTRY vtc_S7319C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C6[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
};
extern VTBL_ENTRY _ZTI7S7319C6[];
extern  VTBL_ENTRY _ZTV7S7319C6[];
Class_Descriptor cd_S7319C6 = {  "S7319C6", // class name
  bases_S7319C6, 1,
  &(vtc_S7319C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S7319C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7319C6),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  S7319C5  : S7319C6 , S7319C4 {
  virtual void  v8(); // _ZN7S7319C52v8Ev
  virtual void  v9(); // _ZN7S7319C52v9Ev
  virtual void  v10(); // _ZN7S7319C53v10Ev
  virtual void  v11(); // _ZN7S7319C53v11Ev
  ~S7319C5(); // tgen
  S7319C5(); // tgen
};
//SIG(-1 S7319C5) C1{ BC2{ BC3{ v5 v6 Fp FD Fi} v7 v8} BC3 v1 v2 v3 v4}


void  S7319C5 ::v8(){vfunc_called(this, "_ZN7S7319C52v8Ev");}
void  S7319C5 ::v9(){vfunc_called(this, "_ZN7S7319C52v9Ev");}
void  S7319C5 ::v10(){vfunc_called(this, "_ZN7S7319C53v10Ev");}
void  S7319C5 ::v11(){vfunc_called(this, "_ZN7S7319C53v11Ev");}
S7319C5 ::~S7319C5(){ note_dtor("S7319C5", this);} // tgen
S7319C5 ::S7319C5(){ note_ctor("S7319C5", this);} // tgen

static void Test_S7319C5()
{
  extern Class_Descriptor cd_S7319C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S7319C5, buf);
    S7319C5 *dp, &lv = *(dp=new (buf) S7319C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S7319C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7319C5)");
    check_base_class_offset(lv, (S7319C4*)(S7319C6*), 0, "S7319C5");
    check_base_class_offset(lv, (S7319C6*), 0, "S7319C5");
    /*is_ambiguous_... S7319C5::S7319C4 */ AMB_check_base_class_offset(lv, (S7319C4*), ABISELECT(48,24), "S7319C5");
    test_class_info(&lv, &cd_S7319C5);
    dp->~S7319C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7319C5(Test_S7319C5, "S7319C5", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN7S7319C5C1Ev();
extern void _ZN7S7319C5D1Ev();
Name_Map name_map_S7319C5[] = {
  NSPAIR(_ZN7S7319C5C1Ev),
  NSPAIR(_ZN7S7319C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C6;
extern VTBL_ENTRY _ZTI7S7319C6[];
extern  VTBL_ENTRY _ZTV7S7319C6[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
static Base_Class bases_S7319C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7319C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7319C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7319C4,    ABISELECT(48,24), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7319C5[];
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
static  VTBL_ENTRY vtc_S7319C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C5[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7319C5[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S7319C5[];
extern  VTBL_ENTRY _ZTV7S7319C5[];
Class_Descriptor cd_S7319C5 = {  "S7319C5", // class name
  bases_S7319C5, 3,
  &(vtc_S7319C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI7S7319C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7319C5),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  S7319C3  : S7319C4 , virtual S7319C5 {
  __tsi64 s7319c3f0;
  int s7319c3f1;
  virtual  ~S7319C3(); // _ZN7S7319C3D2Ev
  virtual void  v12(); // _ZN7S7319C33v12Ev
  S7319C3(); // tgen
};
//SIG(-1 S7319C3) C1{ BC2{ v2 v3 Fp FD Fi} VBC3{ BC4{ BC2 v4 v5} BC2 v6 v7 v8 v9} vd v1 FL Fi}


 S7319C3 ::~S7319C3(){ note_dtor("S7319C3", this);}
void  S7319C3 ::v12(){vfunc_called(this, "_ZN7S7319C33v12Ev");}
S7319C3 ::S7319C3(){ note_ctor("S7319C3", this);} // tgen

static void Test_S7319C3()
{
  extern Class_Descriptor cd_S7319C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,22)];
    init_test(&cd_S7319C3, buf);
    S7319C3 *dp, &lv = *(dp=new (buf) S7319C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,84), "sizeof(S7319C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7319C3)");
    /*is_ambiguous_... S7319C3::S7319C4 */ AMB_check_base_class_offset(lv, (S7319C4*), 0, "S7319C3");
    check_base_class_offset(lv, (S7319C4*)(S7319C6*)(S7319C5*), ABISELECT(64,36), "S7319C3");
    check_base_class_offset(lv, (S7319C6*)(S7319C5*), ABISELECT(64,36), "S7319C3");
    /*is_ambiguous_... S7319C5::S7319C4 */ AMB_check_base_class_offset(lv, (S7319C4*)(S7319C5*), ABISELECT(112,60), "S7319C3");
    check_base_class_offset(lv, (S7319C5*), ABISELECT(64,36), "S7319C3");
    check_field_offset(lv, s7319c3f0, ABISELECT(40,24), "S7319C3.s7319c3f0");
    check_field_offset(lv, s7319c3f1, ABISELECT(48,32), "S7319C3.s7319c3f1");
    test_class_info(&lv, &cd_S7319C3);
    dp->~S7319C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7319C3(Test_S7319C3, "S7319C3", ABISELECT(160,84));

#else // __cplusplus

extern void _ZN7S7319C3C1Ev();
extern void _ZN7S7319C3D2Ev();
Name_Map name_map_S7319C3[] = {
  NSPAIR(_ZN7S7319C3C1Ev),
  NSPAIR(_ZN7S7319C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C6;
extern VTBL_ENTRY _ZTI7S7319C6[];
extern  VTBL_ENTRY _ZTV7S7319C6[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C5;
extern VTBL_ENTRY _ZTI7S7319C5[];
extern  VTBL_ENTRY _ZTV7S7319C5[];
static Base_Class bases_S7319C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7319C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7319C4,    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
    2, //immediately_derived
  0, 0},
  {&cd_S7319C6,    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
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7319C4,    ABISELECT(112,60), //bcp->offset
    26, //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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7319C5,    ABISELECT(64,36), //bcp->offset
    8, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S7319C3[];
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C3D1Ev();
extern void _ZN7S7319C3D0Ev();
extern void _ZN7S7319C33v12Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
static  VTBL_ENTRY vtc_S7319C3[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C3[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7319C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7319C33v12Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7319C3[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S7319C3[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
};
extern VTBL_ENTRY _ZTV7S7319C3[];
static  VTT_ENTRY vtt_S7319C3[] = {
  {&(_ZTV7S7319C3[3]),  3,30},
  {&(_ZTV7S7319C3[18]),  18,30},
  {&(_ZTV7S7319C3[28]),  28,30},
};
extern VTBL_ENTRY _ZTI7S7319C3[];
extern  VTBL_ENTRY _ZTV7S7319C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7319C3[];
Class_Descriptor cd_S7319C3 = {  "S7319C3", // class name
  bases_S7319C3, 5,
  &(vtc_S7319C3[0]), // expected_vtbl_contents
  &(vtt_S7319C3[0]), // expected_vtt_contents
  ABISELECT(160,84), // object size
  NSPAIRA(_ZTI7S7319C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7319C3),30, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7319C3),3, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7319C2  : virtual S7319C3 , virtual S7319C4 {
  void *s7319c2f0[2];
  virtual  ~S7319C2(); // _ZN7S7319C2D2Ev
  virtual void  v13(); // _ZN7S7319C23v13Ev
  virtual void  v14(); // _ZN7S7319C23v14Ev
  virtual void  v15(); // _ZN7S7319C23v15Ev
  virtual void  v16(); // _ZN7S7319C23v16Ev
  virtual void  v17(); // _ZN7S7319C23v17Ev
  virtual void  v18(); // _ZN7S7319C23v18Ev
  S7319C2(); // tgen
};
//SIG(-1 S7319C2) C1{ VBC2{ BC3{ v7 v8 Fp FD Fi} VBC4{ BC5{ BC3 v9 v10} BC3 v11 v12 v13 v14} vd v15 FL Fi} VBC3 vd v1 v2 v3 v4 v5 v6 Fp[2]}


 S7319C2 ::~S7319C2(){ note_dtor("S7319C2", this);}
void  S7319C2 ::v13(){vfunc_called(this, "_ZN7S7319C23v13Ev");}
void  S7319C2 ::v14(){vfunc_called(this, "_ZN7S7319C23v14Ev");}
void  S7319C2 ::v15(){vfunc_called(this, "_ZN7S7319C23v15Ev");}
void  S7319C2 ::v16(){vfunc_called(this, "_ZN7S7319C23v16Ev");}
void  S7319C2 ::v17(){vfunc_called(this, "_ZN7S7319C23v17Ev");}
void  S7319C2 ::v18(){vfunc_called(this, "_ZN7S7319C23v18Ev");}
S7319C2 ::S7319C2(){ note_ctor("S7319C2", this);} // tgen

static void Test_S7319C2()
{
  extern Class_Descriptor cd_S7319C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,31)];
    init_test(&cd_S7319C2, buf);
    S7319C2 *dp, &lv = *(dp=new (buf) S7319C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,120), "sizeof(S7319C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7319C2)");
    /*is_ambiguous_... S7319C3::S7319C4 */ AMB_check_base_class_offset(lv, (S7319C4*)(S7319C3*), ABISELECT(32,12), "S7319C2");
    check_base_class_offset(lv, (S7319C4*)(S7319C6*)(S7319C5*), ABISELECT(96,48), "S7319C2");
    check_base_class_offset(lv, (S7319C6*)(S7319C5*), ABISELECT(96,48), "S7319C2");
    /*is_ambiguous_... S7319C5::S7319C4 */ AMB_check_base_class_offset(lv, (S7319C4*)(S7319C5*), ABISELECT(144,72), "S7319C2");
    check_base_class_offset(lv, (S7319C5*)(S7319C3*), ABISELECT(96,48), "S7319C2");
    check_base_class_offset(lv, (S7319C3*), ABISELECT(32,12), "S7319C2");
    /*is_ambiguous_... S7319C2::S7319C4 */ AMB_check_base_class_offset(lv, (S7319C4*), ABISELECT(192,96), "S7319C2");
    check_field_offset(lv, s7319c2f0, ABISELECT(8,4), "S7319C2.s7319c2f0");
    test_class_info(&lv, &cd_S7319C2);
    dp->~S7319C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7319C2(Test_S7319C2, "S7319C2", ABISELECT(240,120));

#else // __cplusplus

extern void _ZN7S7319C2C1Ev();
extern void _ZN7S7319C2D2Ev();
Name_Map name_map_S7319C2[] = {
  NSPAIR(_ZN7S7319C2C1Ev),
  NSPAIR(_ZN7S7319C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C6;
extern VTBL_ENTRY _ZTI7S7319C6[];
extern  VTBL_ENTRY _ZTV7S7319C6[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C5;
extern VTBL_ENTRY _ZTI7S7319C5[];
extern  VTBL_ENTRY _ZTV7S7319C5[];
extern Class_Descriptor cd_S7319C3;
extern VTBL_ENTRY _ZTI7S7319C3[];
extern  VTBL_ENTRY _ZTV7S7319C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7319C3[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
static Base_Class bases_S7319C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7319C4,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7319C4,    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
    2, //immediately_derived
  0, 0},
  {&cd_S7319C6,    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
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7319C4,    ABISELECT(144,72), //bcp->offset
    43, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7319C5,    ABISELECT(96,48), //bcp->offset
    25, //bcp->virtual_function_table_offset
    10, //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
    5, //immediately_derived
  0, 1},
  {&cd_S7319C3,    ABISELECT(32,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //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},
  {&cd_S7319C4,    ABISELECT(192,96), //bcp->offset
    47, //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
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7319C2[];
extern void _ZN7S7319C2D1Ev();
extern void _ZN7S7319C2D0Ev();
extern void _ZN7S7319C23v13Ev();
extern void _ZN7S7319C23v14Ev();
extern void _ZN7S7319C23v15Ev();
extern void _ZN7S7319C23v16Ev();
extern void _ZN7S7319C23v17Ev();
extern void _ZN7S7319C23v18Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void ABISELECT(_ZTv0_n48_N7S7319C2D1Ev,_ZTv0_n24_N7S7319C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S7319C2D1Ev,_ZThn12_N7S7319C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7319C2D0Ev,_ZTv0_n24_N7S7319C2D0Ev)();
extern void ABISELECT(_ZThn32_N7S7319C2D0Ev,_ZThn12_N7S7319C2D0Ev)() __attribute__((weak));
extern void _ZN7S7319C33v12Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
static  VTBL_ENTRY vtc_S7319C2[] = {
  ABISELECT(192,96),
  ABISELECT(96,48),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C2[0]),
  (VTBL_ENTRY)&_ZN7S7319C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7319C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v18Ev,
  0,
  ABISELECT(-32,-12),
  0,
  0,
  ABISELECT(64,36),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S7319C2[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7319C2D1Ev,_ZTv0_n24_N7S7319C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7319C2D0Ev,_ZTv0_n24_N7S7319C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7319C33v12Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S7319C2[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI7S7319C2[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  0,
  0,
  ABISELECT(-192,-96),
  (VTBL_ENTRY)&(_ZTI7S7319C2[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
};
extern VTBL_ENTRY _ZTV7S7319C2[];
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C3D1Ev();
extern void _ZN7S7319C3D0Ev();
extern void _ZN7S7319C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C3__7S7319C2[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C3[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7319C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7319C33v12Ev,
};
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C5__7S7319C3__7S7319C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7319C3[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
};
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C47S7319C5__A2__7S7319C3__7S7319C2[] = {
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S7319C3[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
};
static  VTT_ENTRY vtt_S7319C2[] = {
  {&(_ZTV7S7319C2[5]),  5,53},
  {&(_ZTV7S7319C2[20]),  20,53},
  {&(_ZTV7S7319C2[35]),  35,53},
  {&(_ZTV7S7319C2[45]),  45,53},
  {&(_ZTV7S7319C2[51]),  51,53},
  {&(_tg__ZTV7S7319C3__7S7319C2[3]),  3,8},
  {&(_tg__ZTV7S7319C5__7S7319C3__7S7319C2[10]),  10,18},
  {&(_tg__ZTV7S7319C47S7319C5__A2__7S7319C3__7S7319C2[2]),  2,4},
};
extern VTBL_ENTRY _ZTI7S7319C2[];
extern  VTBL_ENTRY _ZTV7S7319C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7319C2[];
static VTBL_ENTRY alt_thunk_names32[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7319C2D0Ev,_ZTv0_n24_N7S7319C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7319C2D0Ev,_ZThn12_N7S7319C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7319C2D1Ev,_ZTv0_n24_N7S7319C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7319C2D1Ev,_ZThn12_N7S7319C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7319C2 = {  "S7319C2", // class name
  bases_S7319C2, 7,
  &(vtc_S7319C2[0]), // expected_vtbl_contents
  &(vtt_S7319C2[0]), // expected_vtt_contents
  ABISELECT(240,120), // object size
  NSPAIRA(_ZTI7S7319C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7319C2),53, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7319C2),8, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names32,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7319C8_nt  {
  virtual void  v19(); // _ZN10S7319C8_nt3v19Ev
  virtual void  v20(); // _ZN10S7319C8_nt3v20Ev
  virtual void  v21(); // _ZN10S7319C8_nt3v21Ev
  virtual void  v22(); // _ZN10S7319C8_nt3v22Ev
  virtual void  v23(); // _ZN10S7319C8_nt3v23Ev
  virtual void  v24(); // _ZN10S7319C8_nt3v24Ev
  ~S7319C8_nt(); // tgen
  S7319C8_nt(); // tgen
};
//SIG(-1 S7319C8_nt) C1{ v1 v2 v3 v4 v5 v6}


void  S7319C8_nt ::v19(){vfunc_called(this, "_ZN10S7319C8_nt3v19Ev");}
void  S7319C8_nt ::v20(){vfunc_called(this, "_ZN10S7319C8_nt3v20Ev");}
void  S7319C8_nt ::v21(){vfunc_called(this, "_ZN10S7319C8_nt3v21Ev");}
void  S7319C8_nt ::v22(){vfunc_called(this, "_ZN10S7319C8_nt3v22Ev");}
void  S7319C8_nt ::v23(){vfunc_called(this, "_ZN10S7319C8_nt3v23Ev");}
void  S7319C8_nt ::v24(){vfunc_called(this, "_ZN10S7319C8_nt3v24Ev");}
S7319C8_nt ::~S7319C8_nt(){ note_dtor("S7319C8_nt", this);} // tgen
S7319C8_nt ::S7319C8_nt(){ note_ctor("S7319C8_nt", this);} // tgen

//skip512 S7319C8_nt

#else // __cplusplus

extern void _ZN10S7319C8_ntC1Ev();
extern void _ZN10S7319C8_ntD1Ev();
Name_Map name_map_S7319C8_nt[] = {
  NSPAIR(_ZN10S7319C8_ntC1Ev),
  NSPAIR(_ZN10S7319C8_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7319C8_nt[];
extern void _ZN10S7319C8_nt3v19Ev();
extern void _ZN10S7319C8_nt3v20Ev();
extern void _ZN10S7319C8_nt3v21Ev();
extern void _ZN10S7319C8_nt3v22Ev();
extern void _ZN10S7319C8_nt3v23Ev();
extern void _ZN10S7319C8_nt3v24Ev();
static  VTBL_ENTRY vtc_S7319C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7319C8_nt[0]),
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v24Ev,
};
extern VTBL_ENTRY _ZTI10S7319C8_nt[];
VTBL_ENTRY *P__ZTI10S7319C8_nt = _ZTI10S7319C8_nt; 
extern  VTBL_ENTRY _ZTV10S7319C8_nt[];
Class_Descriptor cd_S7319C8_nt = {  "S7319C8_nt", // class name
  0,0,//no base classes
  &(vtc_S7319C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7319C8_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7319C8_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  S7319C12  {
  ::S1400C17_nt s7319c12f0;
  void *s7319c12f1;
  virtual void  v25(); // _ZN8S7319C123v25Ev
  ~S7319C12(); // tgen
  S7319C12(); // tgen
};
//SIG(-1 S7319C12) C1{ v1 FC2{ v2 v3} Fp}


void  S7319C12 ::v25(){vfunc_called(this, "_ZN8S7319C123v25Ev");}
S7319C12 ::~S7319C12(){ note_dtor("S7319C12", this);} // tgen
S7319C12 ::S7319C12(){ note_ctor("S7319C12", this);} // tgen

static void Test_S7319C12()
{
  extern Class_Descriptor cd_S7319C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7319C12, buf);
    S7319C12 *dp, &lv = *(dp=new (buf) S7319C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7319C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7319C12)");
    check_field_offset(lv, s7319c12f0, ABISELECT(8,4), "S7319C12.s7319c12f0");
    check_field_offset(lv, s7319c12f1, ABISELECT(16,8), "S7319C12.s7319c12f1");
    test_class_info(&lv, &cd_S7319C12);
    dp->~S7319C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7319C12(Test_S7319C12, "S7319C12", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S7319C12C1Ev();
extern void _ZN8S7319C12D1Ev();
Name_Map name_map_S7319C12[] = {
  NSPAIR(_ZN8S7319C12C1Ev),
  NSPAIR(_ZN8S7319C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7319C12[];
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY vtc_S7319C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7319C12[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
extern VTBL_ENTRY _ZTI8S7319C12[];
extern  VTBL_ENTRY _ZTV8S7319C12[];
Class_Descriptor cd_S7319C12 = {  "S7319C12", // class name
  0,0,//no base classes
  &(vtc_S7319C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S7319C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7319C12),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  S7319C11  : virtual S7319C12 {
  virtual void  v26(); // _ZN8S7319C113v26Ev
  ~S7319C11(); // tgen
  S7319C11(); // tgen
};
//SIG(-1 S7319C11) C1{ VBC2{ v2 FC3{ v3 v4} Fp} v1}


void  S7319C11 ::v26(){vfunc_called(this, "_ZN8S7319C113v26Ev");}
S7319C11 ::~S7319C11(){ note_dtor("S7319C11", this);} // tgen
S7319C11 ::S7319C11(){ note_ctor("S7319C11", this);} // tgen

static void Test_S7319C11()
{
  extern Class_Descriptor cd_S7319C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7319C11, buf);
    S7319C11 *dp, &lv = *(dp=new (buf) S7319C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7319C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7319C11)");
    check_base_class_offset(lv, (S7319C12*), ABISELECT(8,4), "S7319C11");
    test_class_info(&lv, &cd_S7319C11);
    dp->~S7319C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7319C11(Test_S7319C11, "S7319C11", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S7319C11C1Ev();
extern void _ZN8S7319C11D1Ev();
Name_Map name_map_S7319C11[] = {
  NSPAIR(_ZN8S7319C11C1Ev),
  NSPAIR(_ZN8S7319C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7319C12;
extern VTBL_ENTRY _ZTI8S7319C12[];
extern  VTBL_ENTRY _ZTV8S7319C12[];
static Base_Class bases_S7319C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7319C12,    ABISELECT(8,4), //bcp->offset
    4, //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 _ZTI8S7319C11[];
extern void _ZN8S7319C113v26Ev();
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY vtc_S7319C11[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7319C11[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7319C11[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
extern VTBL_ENTRY _ZTV8S7319C11[];
static  VTT_ENTRY vtt_S7319C11[] = {
  {&(_ZTV8S7319C11[3]),  3,8},
  {&(_ZTV8S7319C11[7]),  7,8},
};
extern VTBL_ENTRY _ZTI8S7319C11[];
extern  VTBL_ENTRY _ZTV8S7319C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7319C11[];
Class_Descriptor cd_S7319C11 = {  "S7319C11", // class name
  bases_S7319C11, 1,
  &(vtc_S7319C11[0]), // expected_vtbl_contents
  &(vtt_S7319C11[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S7319C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7319C11),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7319C11),2, //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  S7319C10  : virtual S7319C11 {
  virtual void  v27(); // _ZN8S7319C103v27Ev
  virtual void  v28(); // _ZN8S7319C103v28Ev
  virtual void  v29(); // _ZN8S7319C103v29Ev
  ~S7319C10(); // tgen
  S7319C10(); // tgen
};
//SIG(-1 S7319C10) C1{ VBC2{ VBC3{ v4 FC4{ v6 v7} Fp} v5} v1 v2 v3}


void  S7319C10 ::v27(){vfunc_called(this, "_ZN8S7319C103v27Ev");}
void  S7319C10 ::v28(){vfunc_called(this, "_ZN8S7319C103v28Ev");}
void  S7319C10 ::v29(){vfunc_called(this, "_ZN8S7319C103v29Ev");}
S7319C10 ::~S7319C10(){ note_dtor("S7319C10", this);} // tgen
S7319C10 ::S7319C10(){ note_ctor("S7319C10", this);} // tgen

static void Test_S7319C10()
{
  extern Class_Descriptor cd_S7319C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7319C10, buf);
    S7319C10 *dp, &lv = *(dp=new (buf) S7319C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7319C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7319C10)");
    check_base_class_offset(lv, (S7319C12*)(S7319C11*), ABISELECT(8,4), "S7319C10");
    check_base_class_offset(lv, (S7319C11*), 0, "S7319C10");
    test_class_info(&lv, &cd_S7319C10);
    dp->~S7319C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7319C10(Test_S7319C10, "S7319C10", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S7319C10C1Ev();
extern void _ZN8S7319C10D1Ev();
Name_Map name_map_S7319C10[] = {
  NSPAIR(_ZN8S7319C10C1Ev),
  NSPAIR(_ZN8S7319C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7319C12;
extern VTBL_ENTRY _ZTI8S7319C12[];
extern  VTBL_ENTRY _ZTV8S7319C12[];
extern Class_Descriptor cd_S7319C11;
extern VTBL_ENTRY _ZTI8S7319C11[];
extern  VTBL_ENTRY _ZTV8S7319C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7319C11[];
static Base_Class bases_S7319C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7319C12,    ABISELECT(8,4), //bcp->offset
    9, //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
    1, //immediately_derived
  0, 1},
  {&cd_S7319C11,    0, //bcp->offset
    -1, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S7319C10[];
extern void _ZN8S7319C113v26Ev();
extern void _ZN8S7319C103v27Ev();
extern void _ZN8S7319C103v28Ev();
extern void _ZN8S7319C103v29Ev();
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY vtc_S7319C10[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7319C10[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v27Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v28Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v29Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7319C10[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
extern VTBL_ENTRY _ZTV8S7319C10[];
extern void _ZN8S7319C113v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C11__8S7319C10[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7319C11[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
};
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C12__8S7319C11__8S7319C10[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7319C11[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
static  VTT_ENTRY vtt_S7319C10[] = {
  {&(_ZTV8S7319C10[5]),  5,13},
  {&(_ZTV8S7319C10[5]),  5,13},
  {&(_ZTV8S7319C10[12]),  12,13},
  {&(_tg__ZTV8S7319C11__8S7319C10[3]),  3,4},
  {&(_tg__ZTV8S7319C12__8S7319C11__8S7319C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S7319C10[];
extern  VTBL_ENTRY _ZTV8S7319C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7319C10[];
Class_Descriptor cd_S7319C10 = {  "S7319C10", // class name
  bases_S7319C10, 2,
  &(vtc_S7319C10[0]), // expected_vtbl_contents
  &(vtt_S7319C10[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S7319C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7319C10),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7319C10),5, //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  S7319C9  : S7319C5 , virtual S7319C10 {
  virtual void  v30(); // _ZN7S7319C93v30Ev
  virtual void  v31(); // _ZN7S7319C93v31Ev
  virtual void  v32(); // _ZN7S7319C93v32Ev
  ~S7319C9(); // tgen
  S7319C9(); // tgen
};
//SIG(-1 S7319C9) C1{ BC2{ BC3{ BC4{ v4 v5 Fp FD Fi} v6 v7} BC4 v8 v9 v10 v11} VBC5{ VBC6{ VBC7{ v12 FC8{ v17 v18} Fp} v13} v14 v15 v16} v1 v2 v3}


void  S7319C9 ::v30(){vfunc_called(this, "_ZN7S7319C93v30Ev");}
void  S7319C9 ::v31(){vfunc_called(this, "_ZN7S7319C93v31Ev");}
void  S7319C9 ::v32(){vfunc_called(this, "_ZN7S7319C93v32Ev");}
S7319C9 ::~S7319C9(){ note_dtor("S7319C9", this);} // tgen
S7319C9 ::S7319C9(){ note_ctor("S7319C9", this);} // tgen

static void Test_S7319C9()
{
  extern Class_Descriptor cd_S7319C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,17)];
    init_test(&cd_S7319C9, buf);
    S7319C9 *dp, &lv = *(dp=new (buf) S7319C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S7319C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7319C9)");
    check_base_class_offset(lv, (S7319C4*)(S7319C6*)(S7319C5*), 0, "S7319C9");
    check_base_class_offset(lv, (S7319C6*)(S7319C5*), 0, "S7319C9");
    /*is_ambiguous_... S7319C5::S7319C4 */ AMB_check_base_class_offset(lv, (S7319C4*)(S7319C5*), ABISELECT(48,24), "S7319C9");
    check_base_class_offset(lv, (S7319C5*), 0, "S7319C9");
    check_base_class_offset(lv, (S7319C12*)(S7319C11*), ABISELECT(96,52), "S7319C9");
    check_base_class_offset(lv, (S7319C11*)(S7319C10*), ABISELECT(88,48), "S7319C9");
    check_base_class_offset(lv, (S7319C10*), ABISELECT(88,48), "S7319C9");
    test_class_info(&lv, &cd_S7319C9);
    dp->~S7319C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7319C9(Test_S7319C9, "S7319C9", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN7S7319C9C1Ev();
extern void _ZN7S7319C9D1Ev();
Name_Map name_map_S7319C9[] = {
  NSPAIR(_ZN7S7319C9C1Ev),
  NSPAIR(_ZN7S7319C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C6;
extern VTBL_ENTRY _ZTI7S7319C6[];
extern  VTBL_ENTRY _ZTV7S7319C6[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C5;
extern VTBL_ENTRY _ZTI7S7319C5[];
extern  VTBL_ENTRY _ZTV7S7319C5[];
extern Class_Descriptor cd_S7319C12;
extern VTBL_ENTRY _ZTI8S7319C12[];
extern  VTBL_ENTRY _ZTV8S7319C12[];
extern Class_Descriptor cd_S7319C11;
extern VTBL_ENTRY _ZTI8S7319C11[];
extern  VTBL_ENTRY _ZTV8S7319C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7319C11[];
extern Class_Descriptor cd_S7319C10;
extern VTBL_ENTRY _ZTI8S7319C10[];
extern  VTBL_ENTRY _ZTV8S7319C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7319C10[];
static Base_Class bases_S7319C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7319C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S7319C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7319C4,    ABISELECT(48,24), //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
    6, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7319C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7319C12,    ABISELECT(96,52), //bcp->offset
    32, //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
    5, //immediately_derived
  0, 1},
  {&cd_S7319C11,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7319C10,    ABISELECT(88,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    8, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S7319C9[];
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
extern void _ZN7S7319C93v30Ev();
extern void _ZN7S7319C93v31Ev();
extern void _ZN7S7319C93v32Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN8S7319C113v26Ev();
extern void _ZN8S7319C103v27Ev();
extern void _ZN8S7319C103v28Ev();
extern void _ZN8S7319C103v29Ev();
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY vtc_S7319C9[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C9[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v32Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7319C9[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S7319C9[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v27Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v28Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v29Ev,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7319C9[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
extern VTBL_ENTRY _ZTV7S7319C9[];
extern void _ZN8S7319C113v26Ev();
extern void _ZN8S7319C103v27Ev();
extern void _ZN8S7319C103v28Ev();
extern void _ZN8S7319C103v29Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C10__7S7319C9[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7319C10[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v27Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v28Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v29Ev,
};
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C12__8S7319C10__7S7319C9[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7319C10[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
extern void _ZN8S7319C113v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C11__7S7319C9[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7319C11[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
};
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C12__8S7319C11__7S7319C9[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7319C11[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
static  VTT_ENTRY vtt_S7319C9[] = {
  {&(_ZTV7S7319C9[5]),  5,36},
  {&(_ZTV7S7319C9[28]),  28,36},
  {&(_ZTV7S7319C9[28]),  28,36},
  {&(_ZTV7S7319C9[35]),  35,36},
  {&(_tg__ZTV8S7319C10__7S7319C9[5]),  5,9},
  {&(_tg__ZTV8S7319C10__7S7319C9[5]),  5,9},
  {&(_tg__ZTV8S7319C12__8S7319C10__7S7319C9[3]),  3,4},
  {&(_tg__ZTV8S7319C11__7S7319C9[3]),  3,4},
  {&(_tg__ZTV8S7319C12__8S7319C11__7S7319C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7319C9[];
extern  VTBL_ENTRY _ZTV7S7319C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7319C9[];
Class_Descriptor cd_S7319C9 = {  "S7319C9", // class name
  bases_S7319C9, 7,
  &(vtc_S7319C9[0]), // expected_vtbl_contents
  &(vtt_S7319C9[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI7S7319C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7319C9),36, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7319C9),9, //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  S7319C7  : S7319C8_nt , virtual S7319C9 {
  void *s7319c7f0;
  __tsi64 s7319c7f1:5;
  virtual  ~S7319C7(); // _ZN7S7319C7D2Ev
  virtual void  v33(); // _ZN7S7319C73v33Ev
  S7319C7(); // tgen
};
//SIG(-1 S7319C7) C1{ BC2{ v2 v3 v4 v5 v6 v7} VBC3{ BC4{ BC5{ BC6{ v8 v9 Fp FD Fi} v10 v11} BC6 v12 v13 v14 v15} VBC7{ VBC8{ VBC9{ v16 FC10{ v24 v25} Fp} v17} v18 v19 v20} v21 v22 v23} vd v1 Fp FL:5}


 S7319C7 ::~S7319C7(){ note_dtor("S7319C7", this);}
void  S7319C7 ::v33(){vfunc_called(this, "_ZN7S7319C73v33Ev");}
S7319C7 ::S7319C7(){ note_ctor("S7319C7", this);} // tgen

static void Test_S7319C7()
{
  extern Class_Descriptor cd_S7319C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,20)];
    init_test(&cd_S7319C7, buf);
    S7319C7 *dp, &lv = *(dp=new (buf) S7319C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,76), "sizeof(S7319C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7319C7)");
    check_base_class_offset(lv, (S7319C8_nt*), 0, "S7319C7");
    check_base_class_offset(lv, (S7319C4*)(S7319C6*)(S7319C5*)(S7319C9*), ABISELECT(32,12), "S7319C7");
    check_base_class_offset(lv, (S7319C6*)(S7319C5*)(S7319C9*), ABISELECT(32,12), "S7319C7");
    /*is_ambiguous_... S7319C5::S7319C4 */ AMB_check_base_class_offset(lv, (S7319C4*)(S7319C5*)(S7319C9*), ABISELECT(80,36), "S7319C7");
    check_base_class_offset(lv, (S7319C5*)(S7319C9*), ABISELECT(32,12), "S7319C7");
    check_base_class_offset(lv, (S7319C12*)(S7319C11*), ABISELECT(128,64), "S7319C7");
    check_base_class_offset(lv, (S7319C11*)(S7319C10*), ABISELECT(120,60), "S7319C7");
    check_base_class_offset(lv, (S7319C10*)(S7319C9*), ABISELECT(120,60), "S7319C7");
    check_base_class_offset(lv, (S7319C9*), ABISELECT(32,12), "S7319C7");
    check_field_offset(lv, s7319c7f0, ABISELECT(8,4), "S7319C7.s7319c7f0");
    set_bf_and_test(lv, s7319c7f1, ABISELECT(16,8), 0, 5, 1, "S7319C7");
    set_bf_and_test(lv, s7319c7f1, ABISELECT(16,8), 0, 5, hide_sll(1LL<<4), "S7319C7");
    test_class_info(&lv, &cd_S7319C7);
    dp->~S7319C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7319C7(Test_S7319C7, "S7319C7", ABISELECT(160,76));

#else // __cplusplus

extern void _ZN7S7319C7C1Ev();
extern void _ZN7S7319C7D2Ev();
Name_Map name_map_S7319C7[] = {
  NSPAIR(_ZN7S7319C7C1Ev),
  NSPAIR(_ZN7S7319C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7319C8_nt;
extern VTBL_ENTRY _ZTI10S7319C8_nt[];
extern  VTBL_ENTRY _ZTV10S7319C8_nt[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C6;
extern VTBL_ENTRY _ZTI7S7319C6[];
extern  VTBL_ENTRY _ZTV7S7319C6[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C5;
extern VTBL_ENTRY _ZTI7S7319C5[];
extern  VTBL_ENTRY _ZTV7S7319C5[];
extern Class_Descriptor cd_S7319C12;
extern VTBL_ENTRY _ZTI8S7319C12[];
extern  VTBL_ENTRY _ZTV8S7319C12[];
extern Class_Descriptor cd_S7319C11;
extern VTBL_ENTRY _ZTI8S7319C11[];
extern  VTBL_ENTRY _ZTV8S7319C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7319C11[];
extern Class_Descriptor cd_S7319C10;
extern VTBL_ENTRY _ZTI8S7319C10[];
extern  VTBL_ENTRY _ZTV8S7319C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7319C10[];
extern Class_Descriptor cd_S7319C9;
extern VTBL_ENTRY _ZTI7S7319C9[];
extern  VTBL_ENTRY _ZTV7S7319C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7319C9[];
static Base_Class bases_S7319C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7319C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7319C4,    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
    4, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7319C6,    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
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7319C4,    ABISELECT(80,36), //bcp->offset
    42, //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
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7319C5,    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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7319C12,    ABISELECT(128,64), //bcp->offset
    58, //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
    6, //immediately_derived
  0, 1},
  {&cd_S7319C11,    ABISELECT(120,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7319C10,    ABISELECT(120,60), //bcp->offset
    46, //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
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7319C9,    ABISELECT(32,12), //bcp->offset
    15, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7319C7[];
extern void _ZN10S7319C8_nt3v19Ev();
extern void _ZN10S7319C8_nt3v20Ev();
extern void _ZN10S7319C8_nt3v21Ev();
extern void _ZN10S7319C8_nt3v22Ev();
extern void _ZN10S7319C8_nt3v23Ev();
extern void _ZN10S7319C8_nt3v24Ev();
extern void _ZN7S7319C7D1Ev();
extern void _ZN7S7319C7D0Ev();
extern void _ZN7S7319C73v33Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
extern void _ZN7S7319C93v30Ev();
extern void _ZN7S7319C93v31Ev();
extern void _ZN7S7319C93v32Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN8S7319C113v26Ev();
extern void _ZN8S7319C103v27Ev();
extern void _ZN8S7319C103v28Ev();
extern void _ZN8S7319C103v29Ev();
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY vtc_S7319C7[] = {
  ABISELECT(128,64),
  ABISELECT(120,60),
  ABISELECT(120,60),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C7[0]),
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v24Ev,
  (VTBL_ENTRY)&_ZN7S7319C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7319C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7319C73v33Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S7319C7[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v32Ev,
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI7S7319C7[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7319C7[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v27Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v28Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v29Ev,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S7319C7[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
extern VTBL_ENTRY _ZTV7S7319C7[];
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
extern void _ZN7S7319C93v30Ev();
extern void _ZN7S7319C93v31Ev();
extern void _ZN7S7319C93v32Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C9__7S7319C7[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C9[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v32Ev,
};
extern void _ZN8S7319C113v26Ev();
extern void _ZN8S7319C103v27Ev();
extern void _ZN8S7319C103v28Ev();
extern void _ZN8S7319C103v29Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C10__7S7319C9__7S7319C7[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S7319C9[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v27Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v28Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v29Ev,
};
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C12__7S7319C9__7S7319C7[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7319C9[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
extern void _ZN8S7319C113v26Ev();
extern void _ZN8S7319C103v27Ev();
extern void _ZN8S7319C103v28Ev();
extern void _ZN8S7319C103v29Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C10__7S7319C7[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7319C10[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v27Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v28Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v29Ev,
};
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C12__8S7319C10__7S7319C7[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7319C10[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
extern void _ZN8S7319C113v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C11__7S7319C7[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7319C11[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
};
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C12__8S7319C11__7S7319C7[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7319C11[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
static  VTT_ENTRY vtt_S7319C7[] = {
  {&(_ZTV7S7319C7[6]),  6,62},
  {&(_ZTV7S7319C7[31]),  31,62},
  {&(_ZTV7S7319C7[44]),  44,62},
  {&(_ZTV7S7319C7[54]),  54,62},
  {&(_ZTV7S7319C7[54]),  54,62},
  {&(_ZTV7S7319C7[61]),  61,62},
  {&(_tg__ZTV7S7319C9__7S7319C7[5]),  5,16},
  {&(_tg__ZTV8S7319C10__7S7319C9__7S7319C7[8]),  8,12},
  {&(_tg__ZTV8S7319C10__7S7319C9__7S7319C7[8]),  8,12},
  {&(_tg__ZTV8S7319C12__7S7319C9__7S7319C7[3]),  3,4},
  {&(_tg__ZTV8S7319C10__7S7319C7[5]),  5,9},
  {&(_tg__ZTV8S7319C10__7S7319C7[5]),  5,9},
  {&(_tg__ZTV8S7319C12__8S7319C10__7S7319C7[3]),  3,4},
  {&(_tg__ZTV8S7319C11__7S7319C7[3]),  3,4},
  {&(_tg__ZTV8S7319C12__8S7319C11__7S7319C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7319C7[];
extern  VTBL_ENTRY _ZTV7S7319C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7319C7[];
Class_Descriptor cd_S7319C7 = {  "S7319C7", // class name
  bases_S7319C7, 9,
  &(vtc_S7319C7[0]), // expected_vtbl_contents
  &(vtt_S7319C7[0]), // expected_vtt_contents
  ABISELECT(160,76), // object size
  NSPAIRA(_ZTI7S7319C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7319C7),62, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7319C7),15, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7319C1  : S7319C2 , virtual S7319C7 {
  char s7319c1f0;
  virtual  ~S7319C1(); // _ZN7S7319C1D2Ev
  virtual void  v1(); // _ZN7S7319C12v1Ev
  virtual void  v2(); // _ZN7S7319C12v2Ev
  virtual void  v3(); // _ZN7S7319C12v3Ev
  S7319C1(); // tgen
};
//SIG(1 S7319C1) C1{ BC2{ VBC3{ BC4{ v4 v5 Fp FD Fi} VBC5{ BC6{ BC4 v6 v7} BC4 v8 v9 v10 v11} vd v12 FL Fi} VBC4 vd v13 v14 v15 v16 v17 v18 Fp[2]} VBC7{ BC8{ v19 v20 v21 v22 v23 v24} VBC9{ BC5 VBC10{ VBC11{ VBC12{ v25 FC13{ v34 v35} Fp} v26} v27 v28 v29} v30 v31 v32} vd v33 Fp FL:5} vd v1 v2 v3 Fc}


 S7319C1 ::~S7319C1(){ note_dtor("S7319C1", this);}
void  S7319C1 ::v1(){vfunc_called(this, "_ZN7S7319C12v1Ev");}
void  S7319C1 ::v2(){vfunc_called(this, "_ZN7S7319C12v2Ev");}
void  S7319C1 ::v3(){vfunc_called(this, "_ZN7S7319C12v3Ev");}
S7319C1 ::S7319C1(){ note_ctor("S7319C1", this);} // tgen

static void Test_S7319C1()
{
  extern Class_Descriptor cd_S7319C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,51)];
    init_test(&cd_S7319C1, buf);
    S7319C1 *dp, &lv = *(dp=new (buf) S7319C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,200), "sizeof(S7319C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7319C1)");
    /*is_ambiguous_... S7319C3::S7319C4 */ AMB_check_base_class_offset(lv, (S7319C4*)(S7319C3*), ABISELECT(32,16), "S7319C1");
    /*is_ambiguous_... S7319C1::S7319C5 */ AMB_check_base_class_offset(lv, (S7319C4*)(S7319C6*)(S7319C5*), ABISELECT(96,52), "S7319C1");
    /*is_ambiguous_... S7319C1::S7319C5 */ AMB_check_base_class_offset(lv, (S7319C6*)(S7319C5*), ABISELECT(96,52), "S7319C1");
    /*is_ambiguous_... S7319C1::S7319C5 */ AMB_check_base_class_offset(lv, (S7319C4*)(S7319C5*), ABISELECT(144,76), "S7319C1");
    check_base_class_offset(lv, (S7319C5*)(S7319C3*), ABISELECT(96,52), "S7319C1");
    check_base_class_offset(lv, (S7319C3*)(S7319C2*), ABISELECT(32,16), "S7319C1");
    /*is_ambiguous_... S7319C2::S7319C4 */ AMB_check_base_class_offset(lv, (S7319C4*)(S7319C2*), ABISELECT(192,100), "S7319C1");
    check_base_class_offset(lv, (S7319C2*), 0, "S7319C1");
    check_base_class_offset(lv, (S7319C8_nt*)(S7319C7*), ABISELECT(232,124), "S7319C1");
    check_base_class_offset(lv, (S7319C4*)(S7319C6*)(S7319C5*)(S7319C9*), ABISELECT(256,136), "S7319C1");
    check_base_class_offset(lv, (S7319C6*)(S7319C5*)(S7319C9*), ABISELECT(256,136), "S7319C1");
    /*is_ambiguous_... S7319C5::S7319C4 */ AMB_check_base_class_offset(lv, (S7319C4*)(S7319C5*)(S7319C9*), ABISELECT(304,160), "S7319C1");
    check_base_class_offset(lv, (S7319C5*)(S7319C9*), ABISELECT(256,136), "S7319C1");
    check_base_class_offset(lv, (S7319C12*)(S7319C11*), ABISELECT(352,188), "S7319C1");
    check_base_class_offset(lv, (S7319C11*)(S7319C10*), ABISELECT(344,184), "S7319C1");
    check_base_class_offset(lv, (S7319C10*)(S7319C9*), ABISELECT(344,184), "S7319C1");
    check_base_class_offset(lv, (S7319C9*)(S7319C7*), ABISELECT(256,136), "S7319C1");
    check_base_class_offset(lv, (S7319C7*), ABISELECT(232,124), "S7319C1");
    check_field_offset(lv, s7319c1f0, ABISELECT(24,12), "S7319C1.s7319c1f0");
    test_class_info(&lv, &cd_S7319C1);
    dp->~S7319C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7319C1(Test_S7319C1, "S7319C1", ABISELECT(384,200));

#else // __cplusplus

extern void _ZN7S7319C1C1Ev();
extern void _ZN7S7319C1D2Ev();
Name_Map name_map_S7319C1[] = {
  NSPAIR(_ZN7S7319C1C1Ev),
  NSPAIR(_ZN7S7319C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C6;
extern VTBL_ENTRY _ZTI7S7319C6[];
extern  VTBL_ENTRY _ZTV7S7319C6[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C5;
extern VTBL_ENTRY _ZTI7S7319C5[];
extern  VTBL_ENTRY _ZTV7S7319C5[];
extern Class_Descriptor cd_S7319C3;
extern VTBL_ENTRY _ZTI7S7319C3[];
extern  VTBL_ENTRY _ZTV7S7319C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7319C3[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C2;
extern VTBL_ENTRY _ZTI7S7319C2[];
extern  VTBL_ENTRY _ZTV7S7319C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7319C2[];
extern Class_Descriptor cd_S7319C8_nt;
extern VTBL_ENTRY _ZTI10S7319C8_nt[];
extern  VTBL_ENTRY _ZTV10S7319C8_nt[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C6;
extern VTBL_ENTRY _ZTI7S7319C6[];
extern  VTBL_ENTRY _ZTV7S7319C6[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C5;
extern VTBL_ENTRY _ZTI7S7319C5[];
extern  VTBL_ENTRY _ZTV7S7319C5[];
extern Class_Descriptor cd_S7319C12;
extern VTBL_ENTRY _ZTI8S7319C12[];
extern  VTBL_ENTRY _ZTV8S7319C12[];
extern Class_Descriptor cd_S7319C11;
extern VTBL_ENTRY _ZTI8S7319C11[];
extern  VTBL_ENTRY _ZTV8S7319C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7319C11[];
extern Class_Descriptor cd_S7319C10;
extern VTBL_ENTRY _ZTI8S7319C10[];
extern  VTBL_ENTRY _ZTV8S7319C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7319C10[];
extern Class_Descriptor cd_S7319C9;
extern VTBL_ENTRY _ZTI7S7319C9[];
extern  VTBL_ENTRY _ZTV7S7319C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7319C9[];
extern Class_Descriptor cd_S7319C7;
extern VTBL_ENTRY _ZTI7S7319C7[];
extern  VTBL_ENTRY _ZTV7S7319C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7319C7[];
static Base_Class bases_S7319C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7319C4,    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
    5, //immediately_derived
  0, 0},
  {&cd_S7319C4,    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
    2, //immediately_derived
  0, 0},
  {&cd_S7319C6,    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
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7319C4,    ABISELECT(144,76), //bcp->offset
    51, //bcp->virtual_function_table_offset
    2, //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
    4, //immediately_derived
  0, 0},
  {&cd_S7319C5,    ABISELECT(96,52), //bcp->offset
    33, //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
    5, //immediately_derived
  0, 1},
  {&cd_S7319C3,    ABISELECT(32,16), //bcp->offset
    21, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7319C4,    ABISELECT(192,100), //bcp->offset
    55, //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
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7319C2,    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
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7319C8_nt,    ABISELECT(232,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
    16, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7319C4,    ABISELECT(256,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
    11, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7319C6,    ABISELECT(256,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
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7319C4,    ABISELECT(304,160), //bcp->offset
    111, //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
    13, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7319C5,    ABISELECT(256,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
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7319C12,    ABISELECT(352,188), //bcp->offset
    127, //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
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7319C11,    ABISELECT(344,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7319C10,    ABISELECT(344,184), //bcp->offset
    115, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7319C9,    ABISELECT(256,136), //bcp->offset
    84, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7319C7,    ABISELECT(232,124), //bcp->offset
    61, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7319C1[];
extern void _ZN7S7319C1D1Ev();
extern void _ZN7S7319C1D0Ev();
extern void _ZN7S7319C23v13Ev();
extern void _ZN7S7319C23v14Ev();
extern void _ZN7S7319C23v15Ev();
extern void _ZN7S7319C23v16Ev();
extern void _ZN7S7319C23v17Ev();
extern void _ZN7S7319C23v18Ev();
extern void _ZN7S7319C12v1Ev();
extern void _ZN7S7319C12v2Ev();
extern void _ZN7S7319C12v3Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void ABISELECT(_ZTv0_n48_N7S7319C1D1Ev,_ZTv0_n24_N7S7319C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7319C1D1Ev,_ZThn16_N7S7319C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7319C1D0Ev,_ZTv0_n24_N7S7319C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S7319C1D0Ev,_ZThn16_N7S7319C1D0Ev)() __attribute__((weak));
extern void _ZN7S7319C33v12Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN10S7319C8_nt3v19Ev();
extern void _ZN10S7319C8_nt3v20Ev();
extern void _ZN10S7319C8_nt3v21Ev();
extern void _ZN10S7319C8_nt3v22Ev();
extern void _ZN10S7319C8_nt3v23Ev();
extern void _ZN10S7319C8_nt3v24Ev();
extern void ABISELECT(_ZTv0_n104_N7S7319C1D1Ev,_ZTv0_n52_N7S7319C1D1Ev)();
extern void ABISELECT(_ZThn232_N7S7319C1D1Ev,_ZThn124_N7S7319C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7319C1D0Ev,_ZTv0_n52_N7S7319C1D0Ev)();
extern void ABISELECT(_ZThn232_N7S7319C1D0Ev,_ZThn124_N7S7319C1D0Ev)() __attribute__((weak));
extern void _ZN7S7319C73v33Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
extern void _ZN7S7319C93v30Ev();
extern void _ZN7S7319C93v31Ev();
extern void _ZN7S7319C93v32Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN8S7319C113v26Ev();
extern void _ZN8S7319C103v27Ev();
extern void _ZN8S7319C103v28Ev();
extern void _ZN8S7319C103v29Ev();
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY vtc_S7319C1[] = {
  ABISELECT(352,188),
  ABISELECT(344,184),
  ABISELECT(344,184),
  ABISELECT(256,136),
  ABISELECT(232,124),
  ABISELECT(192,100),
  ABISELECT(96,52),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C1[0]),
  (VTBL_ENTRY)&_ZN7S7319C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7319C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7319C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7319C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7319C12v3Ev,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  ABISELECT(64,36),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7319C1[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7319C1D1Ev,_ZTv0_n24_N7S7319C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7319C1D0Ev,_ZTv0_n24_N7S7319C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7319C33v12Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7319C1[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
  ABISELECT(-144,-76),
  (VTBL_ENTRY)&(_ZTI7S7319C1[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  0,
  0,
  ABISELECT(-192,-100),
  (VTBL_ENTRY)&(_ZTI7S7319C1[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  0,
  ABISELECT(-232,-124),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,64),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(24,12),
  ABISELECT(-232,-124),
  (VTBL_ENTRY)&(_ZTI7S7319C1[0]),
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v24Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7319C1D1Ev,_ZTv0_n52_N7S7319C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7319C1D0Ev,_ZTv0_n52_N7S7319C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7319C73v33Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-256,-136),
  (VTBL_ENTRY)&(_ZTI7S7319C1[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v32Ev,
  ABISELECT(-304,-160),
  (VTBL_ENTRY)&(_ZTI7S7319C1[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-344,-184),
  (VTBL_ENTRY)&(_ZTI7S7319C1[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v27Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v28Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v29Ev,
  0,
  ABISELECT(-352,-188),
  (VTBL_ENTRY)&(_ZTI7S7319C1[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
extern VTBL_ENTRY _ZTV7S7319C1[];
extern void _ZN7S7319C2D1Ev();
extern void _ZN7S7319C2D0Ev();
extern void _ZN7S7319C23v13Ev();
extern void _ZN7S7319C23v14Ev();
extern void _ZN7S7319C23v15Ev();
extern void _ZN7S7319C23v16Ev();
extern void _ZN7S7319C23v17Ev();
extern void _ZN7S7319C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C2__7S7319C1[] = {
  ABISELECT(192,100),
  ABISELECT(96,52),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C2[0]),
  (VTBL_ENTRY)&_ZN7S7319C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7319C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v18Ev,
};
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void ABISELECT(_ZTv0_n48_N7S7319C2D1Ev,_ZTv0_n24_N7S7319C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S7319C2D1Ev,_ZThn16_N7S7319C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7319C2D0Ev,_ZTv0_n24_N7S7319C2D0Ev)();
extern void ABISELECT(_ZThn32_N7S7319C2D0Ev,_ZThn16_N7S7319C2D0Ev)() __attribute__((weak));
extern void _ZN7S7319C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C3__7S7319C2__7S7319C1[] = {
  0,
  ABISELECT(-32,-16),
  0,
  0,
  ABISELECT(64,36),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7319C2[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7319C2D1Ev,_ZTv0_n24_N7S7319C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7319C2D0Ev,_ZTv0_n24_N7S7319C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7319C33v12Ev,
};
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C5__7S7319C2__7S7319C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7319C2[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
};
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C47S7319C5__A2__7S7319C2__7S7319C1[] = {
  ABISELECT(-144,-76),
  (VTBL_ENTRY)&(_ZTI7S7319C2[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
};
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C4__A3__7S7319C2__7S7319C1[] = {
  0,
  0,
  ABISELECT(-192,-100),
  (VTBL_ENTRY)&(_ZTI7S7319C2[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
};
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C3D1Ev();
extern void _ZN7S7319C3D0Ev();
extern void _ZN7S7319C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C3__7S7319C1[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C3[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7319C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7319C33v12Ev,
};
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C5__7S7319C3__7S7319C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7319C3[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
};
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C47S7319C5__A2__7S7319C3__7S7319C1[] = {
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S7319C3[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
};
extern void _ZN10S7319C8_nt3v19Ev();
extern void _ZN10S7319C8_nt3v20Ev();
extern void _ZN10S7319C8_nt3v21Ev();
extern void _ZN10S7319C8_nt3v22Ev();
extern void _ZN10S7319C8_nt3v23Ev();
extern void _ZN10S7319C8_nt3v24Ev();
extern void _ZN7S7319C7D1Ev();
extern void _ZN7S7319C7D0Ev();
extern void _ZN7S7319C73v33Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C7__7S7319C1[] = {
  ABISELECT(120,64),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C7[0]),
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v24Ev,
  (VTBL_ENTRY)&_ZN7S7319C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7319C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7319C73v33Ev,
};
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
extern void _ZN7S7319C93v30Ev();
extern void _ZN7S7319C93v31Ev();
extern void _ZN7S7319C93v32Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C9__7S7319C7__7S7319C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7319C7[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v32Ev,
};
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C47S7319C57S7319C9__A1__7S7319C7__7S7319C1[] = {
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S7319C7[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
};
extern void _ZN8S7319C113v26Ev();
extern void _ZN8S7319C103v27Ev();
extern void _ZN8S7319C103v28Ev();
extern void _ZN8S7319C103v29Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C10__7S7319C7__7S7319C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S7319C7[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v27Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v28Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v29Ev,
};
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C12__7S7319C7__7S7319C1[] = {
  0,
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S7319C7[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
extern void _ZN7S7319C93v30Ev();
extern void _ZN7S7319C93v31Ev();
extern void _ZN7S7319C93v32Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C9__7S7319C1[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C9[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v32Ev,
};
extern void _ZN8S7319C113v26Ev();
extern void _ZN8S7319C103v27Ev();
extern void _ZN8S7319C103v28Ev();
extern void _ZN8S7319C103v29Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C10__7S7319C9__7S7319C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S7319C9[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v27Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v28Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v29Ev,
};
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C12__7S7319C9__7S7319C1[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7319C9[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
extern void _ZN8S7319C113v26Ev();
extern void _ZN8S7319C103v27Ev();
extern void _ZN8S7319C103v28Ev();
extern void _ZN8S7319C103v29Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C10__7S7319C1[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7319C10[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v27Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v28Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v29Ev,
};
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C12__8S7319C10__7S7319C1[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7319C10[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
extern void _ZN8S7319C113v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C11__7S7319C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7319C11[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
};
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C12__8S7319C11__7S7319C1[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7319C11[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
static  VTT_ENTRY vtt_S7319C1[] = {
  {&(_ZTV7S7319C1[10]),  10,131},
  {&(_tg__ZTV7S7319C2__7S7319C1[5]),  5,13},
  {&(_tg__ZTV7S7319C3__7S7319C2__7S7319C1[7]),  7,12},
  {&(_tg__ZTV7S7319C5__7S7319C2__7S7319C1[10]),  10,18},
  {&(_tg__ZTV7S7319C47S7319C5__A2__7S7319C2__7S7319C1[2]),  2,4},
  {&(_tg__ZTV7S7319C4__A3__7S7319C2__7S7319C1[4]),  4,6},
  {&(_ZTV7S7319C1[28]),  28,131},
  {&(_ZTV7S7319C1[43]),  43,131},
  {&(_ZTV7S7319C1[53]),  53,131},
  {&(_ZTV7S7319C1[59]),  59,131},
  {&(_ZTV7S7319C1[75]),  75,131},
  {&(_ZTV7S7319C1[100]),  100,131},
  {&(_ZTV7S7319C1[113]),  113,131},
  {&(_ZTV7S7319C1[123]),  123,131},
  {&(_ZTV7S7319C1[123]),  123,131},
  {&(_ZTV7S7319C1[130]),  130,131},
  {&(_tg__ZTV7S7319C3__7S7319C1[3]),  3,8},
  {&(_tg__ZTV7S7319C5__7S7319C3__7S7319C1[10]),  10,18},
  {&(_tg__ZTV7S7319C47S7319C5__A2__7S7319C3__7S7319C1[2]),  2,4},
  {&(_tg__ZTV7S7319C7__7S7319C1[6]),  6,15},
  {&(_tg__ZTV7S7319C9__7S7319C7__7S7319C1[16]),  16,27},
  {&(_tg__ZTV7S7319C47S7319C57S7319C9__A1__7S7319C7__7S7319C1[2]),  2,4},
  {&(_tg__ZTV8S7319C10__7S7319C7__7S7319C1[8]),  8,12},
  {&(_tg__ZTV8S7319C10__7S7319C7__7S7319C1[8]),  8,12},
  {&(_tg__ZTV8S7319C12__7S7319C7__7S7319C1[3]),  3,4},
  {&(_tg__ZTV7S7319C9__7S7319C1[5]),  5,16},
  {&(_tg__ZTV8S7319C10__7S7319C9__7S7319C1[8]),  8,12},
  {&(_tg__ZTV8S7319C10__7S7319C9__7S7319C1[8]),  8,12},
  {&(_tg__ZTV8S7319C12__7S7319C9__7S7319C1[3]),  3,4},
  {&(_tg__ZTV8S7319C10__7S7319C1[5]),  5,9},
  {&(_tg__ZTV8S7319C10__7S7319C1[5]),  5,9},
  {&(_tg__ZTV8S7319C12__8S7319C10__7S7319C1[3]),  3,4},
  {&(_tg__ZTV8S7319C11__7S7319C1[3]),  3,4},
  {&(_tg__ZTV8S7319C12__8S7319C11__7S7319C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7319C1[];
extern  VTBL_ENTRY _ZTV7S7319C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7319C1[];
static VTBL_ENTRY alt_thunk_names33[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7319C2D0Ev,_ZTv0_n24_N7S7319C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7319C2D0Ev,_ZThn16_N7S7319C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7319C2D1Ev,_ZTv0_n24_N7S7319C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7319C2D1Ev,_ZThn16_N7S7319C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7319C1D0Ev,_ZTv0_n52_N7S7319C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N7S7319C1D0Ev,_ZThn124_N7S7319C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7319C1D1Ev,_ZTv0_n52_N7S7319C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N7S7319C1D1Ev,_ZThn124_N7S7319C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7319C1D0Ev,_ZTv0_n24_N7S7319C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7319C1D0Ev,_ZThn16_N7S7319C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7319C1D1Ev,_ZTv0_n24_N7S7319C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7319C1D1Ev,_ZThn16_N7S7319C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7319C1 = {  "S7319C1", // class name
  bases_S7319C1, 18,
  &(vtc_S7319C1[0]), // expected_vtbl_contents
  &(vtt_S7319C1[0]), // expected_vtt_contents
  ABISELECT(384,200), // object size
  NSPAIRA(_ZTI7S7319C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7319C1),131, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7319C1),34, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names33,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4477C3  {
  int s4477c3f0[4];
  ::S4474C4_nt s4477c3f1;
  int s4477c3f2;
  char s4477c3f3;
  ::S4474C5_nt s4477c3f4;
  int s4477c3f5;
  virtual  ~S4477C3(); // _ZN7S4477C3D1Ev
  virtual void  v2(); // _ZN7S4477C32v2Ev
  virtual void  v3(); // _ZN7S4477C32v3Ev
  virtual void  v4(); // _ZN7S4477C32v4Ev
  S4477C3(); // tgen
};
//SIG(-1 S4477C3) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4477C3 ::~S4477C3(){ note_dtor("S4477C3", this);}
void  S4477C3 ::v2(){vfunc_called(this, "_ZN7S4477C32v2Ev");}
void  S4477C3 ::v3(){vfunc_called(this, "_ZN7S4477C32v3Ev");}
void  S4477C3 ::v4(){vfunc_called(this, "_ZN7S4477C32v4Ev");}
S4477C3 ::S4477C3(){ note_ctor("S4477C3", this);} // tgen

static void Test_S4477C3()
{
  extern Class_Descriptor cd_S4477C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4477C3, buf);
    S4477C3 *dp, &lv = *(dp=new (buf) S4477C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4477C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4477C3)");
    check_field_offset(lv, s4477c3f0, ABISELECT(8,4), "S4477C3.s4477c3f0");
    check_field_offset(lv, s4477c3f1, ABISELECT(24,20), "S4477C3.s4477c3f1");
    check_field_offset(lv, s4477c3f2, ABISELECT(40,28), "S4477C3.s4477c3f2");
    check_field_offset(lv, s4477c3f3, ABISELECT(44,32), "S4477C3.s4477c3f3");
    check_field_offset(lv, s4477c3f4, ABISELECT(48,36), "S4477C3.s4477c3f4");
    check_field_offset(lv, s4477c3f5, ABISELECT(64,48), "S4477C3.s4477c3f5");
    test_class_info(&lv, &cd_S4477C3);
    dp->~S4477C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4477C3(Test_S4477C3, "S4477C3", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4477C3C1Ev();
extern void _ZN7S4477C3D1Ev();
Name_Map name_map_S4477C3[] = {
  NSPAIR(_ZN7S4477C3C1Ev),
  NSPAIR(_ZN7S4477C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4477C3[];
extern void _ZN7S4477C3D1Ev();
extern void _ZN7S4477C3D0Ev();
extern void _ZN7S4477C32v2Ev();
extern void _ZN7S4477C32v3Ev();
extern void _ZN7S4477C32v4Ev();
static  VTBL_ENTRY vtc_S4477C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4477C3[0]),
  (VTBL_ENTRY)&_ZN7S4477C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4477C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4477C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4477C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4477C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4477C3[];
extern  VTBL_ENTRY _ZTV7S4477C3[];
Class_Descriptor cd_S4477C3 = {  "S4477C3", // class name
  0,0,//no base classes
  &(vtc_S4477C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4477C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4477C3),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  S4477C6  {
  virtual  ~S4477C6(); // _ZN7S4477C6D1Ev
  virtual void  v5(); // _ZN7S4477C62v5Ev
  S4477C6(); // tgen
};
//SIG(-1 S4477C6) C1{ vd v1}


 S4477C6 ::~S4477C6(){ note_dtor("S4477C6", this);}
void  S4477C6 ::v5(){vfunc_called(this, "_ZN7S4477C62v5Ev");}
S4477C6 ::S4477C6(){ note_ctor("S4477C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S4477C6C1Ev();
extern void _ZN7S4477C6D1Ev();
Name_Map name_map_S4477C6[] = {
  NSPAIR(_ZN7S4477C6C1Ev),
  NSPAIR(_ZN7S4477C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4477C6[];
extern void _ZN7S4477C6D1Ev();
extern void _ZN7S4477C6D0Ev();
extern void _ZN7S4477C62v5Ev();
static  VTBL_ENTRY vtc_S4477C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4477C6[0]),
  (VTBL_ENTRY)&_ZN7S4477C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4477C6D0Ev,
  (VTBL_ENTRY)&_ZN7S4477C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4477C6[];
extern  VTBL_ENTRY _ZTV7S4477C6[];
Class_Descriptor cd_S4477C6 = {  "S4477C6", // class name
  0,0,//no base classes
  &(vtc_S4477C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4477C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4477C6),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  S4477C2  : S4477C3 , S4477C6 {
  void *s4477c2f0;
  int s4477c2f1;
  void *s4477c2f2;
  virtual  ~S4477C2(); // _ZN7S4477C2D1Ev
  virtual void  v6(); // _ZN7S4477C22v6Ev
  virtual void  v7(); // _ZN7S4477C22v7Ev
  S4477C2(); // tgen
};
//SIG(-1 S4477C2) C1{ BC2{ vd v3 v4 v5 Fi[4] FC3{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} BC5{ vd v6} vd v1 v2 Fp Fi Fp}


 S4477C2 ::~S4477C2(){ note_dtor("S4477C2", this);}
void  S4477C2 ::v6(){vfunc_called(this, "_ZN7S4477C22v6Ev");}
void  S4477C2 ::v7(){vfunc_called(this, "_ZN7S4477C22v7Ev");}
S4477C2 ::S4477C2(){ note_ctor("S4477C2", this);} // tgen

static void Test_S4477C2()
{
  extern Class_Descriptor cd_S4477C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4477C2, buf);
    S4477C2 *dp, &lv = *(dp=new (buf) S4477C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4477C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4477C2)");
    check_base_class_offset(lv, (S4477C3*), 0, "S4477C2");
    check_base_class_offset(lv, (S4477C6*), ABISELECT(72,52), "S4477C2");
    check_field_offset(lv, s4477c2f0, ABISELECT(80,56), "S4477C2.s4477c2f0");
    check_field_offset(lv, s4477c2f1, ABISELECT(88,60), "S4477C2.s4477c2f1");
    check_field_offset(lv, s4477c2f2, ABISELECT(96,64), "S4477C2.s4477c2f2");
    test_class_info(&lv, &cd_S4477C2);
    dp->~S4477C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4477C2(Test_S4477C2, "S4477C2", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4477C2C1Ev();
extern void _ZN7S4477C2D1Ev();
Name_Map name_map_S4477C2[] = {
  NSPAIR(_ZN7S4477C2C1Ev),
  NSPAIR(_ZN7S4477C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4477C3;
extern VTBL_ENTRY _ZTI7S4477C3[];
extern  VTBL_ENTRY _ZTV7S4477C3[];
extern Class_Descriptor cd_S4477C6;
extern VTBL_ENTRY _ZTI7S4477C6[];
extern  VTBL_ENTRY _ZTV7S4477C6[];
static Base_Class bases_S4477C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4477C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S4477C6,    ABISELECT(72,52), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4477C2[];
extern void _ZN7S4477C2D1Ev();
extern void _ZN7S4477C2D0Ev();
extern void _ZN7S4477C32v2Ev();
extern void _ZN7S4477C32v3Ev();
extern void _ZN7S4477C32v4Ev();
extern void _ZN7S4477C22v6Ev();
extern void _ZN7S4477C22v7Ev();
extern void ABISELECT(_ZThn72_N7S4477C2D1Ev,_ZThn52_N7S4477C2D1Ev)();
extern void ABISELECT(_ZThn72_N7S4477C2D0Ev,_ZThn52_N7S4477C2D0Ev)();
extern void _ZN7S4477C62v5Ev();
static  VTBL_ENTRY vtc_S4477C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4477C2[0]),
  (VTBL_ENTRY)&_ZN7S4477C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4477C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4477C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4477C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4477C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4477C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4477C22v7Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4477C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4477C2D1Ev,_ZThn52_N7S4477C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4477C2D0Ev,_ZThn52_N7S4477C2D0Ev),
  (VTBL_ENTRY)&_ZN7S4477C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4477C2[];
extern  VTBL_ENTRY _ZTV7S4477C2[];
Class_Descriptor cd_S4477C2 = {  "S4477C2", // class name
  bases_S4477C2, 2,
  &(vtc_S4477C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4477C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4477C2),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4477C7_nt  {
  ::S2366C5_nt s4477c7f0;
  int s4477c7f1;
  ::S4474C10_nt s4477c7f2;
  void  mf4477c7(); // _ZN10S4477C7_nt8mf4477c7Ev
  virtual  ~S4477C7_nt(); // _ZN10S4477C7_ntD1Ev
  S4477C7_nt(); // tgen
};
//SIG(-1 S4477C7_nt) C1{ vd m FC2{ m Fp Fi FC3{ m}} Fi FC4{ BC5{ vd m Fc} vd FL[2]}}


void  S4477C7_nt ::mf4477c7(){}
 S4477C7_nt ::~S4477C7_nt(){ note_dtor("S4477C7_nt", this);}
S4477C7_nt ::S4477C7_nt(){ note_ctor("S4477C7_nt", this);} // tgen

//skip512 S4477C7_nt

#else // __cplusplus

extern void _ZN10S4477C7_ntC1Ev();
extern void _ZN10S4477C7_ntD1Ev();
Name_Map name_map_S4477C7_nt[] = {
  NSPAIR(_ZN10S4477C7_ntC1Ev),
  NSPAIR(_ZN10S4477C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4477C7_nt[];
extern void _ZN10S4477C7_ntD1Ev();
extern void _ZN10S4477C7_ntD0Ev();
static  VTBL_ENTRY vtc_S4477C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4477C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S4477C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4477C7_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S4477C7_nt[];
VTBL_ENTRY *P__ZTI10S4477C7_nt = _ZTI10S4477C7_nt; 
extern  VTBL_ENTRY _ZTV10S4477C7_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4477C14_nt  {
  void *s4477c14f0;
  int s4477c14f1;
  ::S4474C14_nt s4477c14f2;
  void *s4477c14f3[2];
  char s4477c14f4;
  ::S4474C14_nt s4477c14f5;
  void  mf4477c14(); // _ZN11S4477C14_nt9mf4477c14Ev
};
//SIG(-1 S4477C14_nt) C1{ m Fp Fi FC2{ m FC3{ vd m FL Fc} FC3} Fp[2] Fc FC2}


void  S4477C14_nt ::mf4477c14(){}

//skip512 S4477C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4477C1  : S4477C2 {
  ::S4477C7_nt s4477c1f0;
  void *s4477c1f1;
  ::S4474C14_nt s4477c1f2;
  ::S4477C14_nt s4477c1f3;
  void *s4477c1f4;
  virtual  ~S4477C1(); // _ZN7S4477C1D1Ev
  virtual void  v1(); // _ZN7S4477C12v1Ev
  S4477C1(); // tgen
};
//SIG(1 S4477C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} BC6{ vd v5} vd v6 v7 Fp Fi Fp} vd v1 FC7{ vd m FC8{ m Fp Fi FC9{ m}} Fi FC10{ BC11{ vd m Fc} vd FL[2]}} Fp FC12{ m FC13{ vd m FL Fc} FC13} FC14{ m Fp Fi FC12 Fp[2] Fc FC12} Fp}


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

static void Test_S4477C1()
{
  extern Class_Descriptor cd_S4477C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,60)];
    init_test(&cd_S4477C1, buf);
    S4477C1 *dp, &lv = *(dp=new (buf) S4477C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,236), "sizeof(S4477C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4477C1)");
    check_base_class_offset(lv, (S4477C3*)(S4477C2*), 0, "S4477C1");
    check_base_class_offset(lv, (S4477C6*)(S4477C2*), ABISELECT(72,52), "S4477C1");
    check_base_class_offset(lv, (S4477C2*), 0, "S4477C1");
    check_field_offset(lv, s4477c1f0, ABISELECT(104,68), "S4477C1.s4477c1f0");
    check_field_offset(lv, s4477c1f1, ABISELECT(168,112), "S4477C1.s4477c1f1");
    check_field_offset(lv, s4477c1f2, ABISELECT(176,116), "S4477C1.s4477c1f2");
    check_field_offset(lv, s4477c1f3, ABISELECT(224,148), "S4477C1.s4477c1f3");
    check_field_offset(lv, s4477c1f4, ABISELECT(360,232), "S4477C1.s4477c1f4");
    test_class_info(&lv, &cd_S4477C1);
    dp->~S4477C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4477C1(Test_S4477C1, "S4477C1", ABISELECT(368,236));

#else // __cplusplus

extern void _ZN7S4477C1C1Ev();
extern void _ZN7S4477C1D1Ev();
Name_Map name_map_S4477C1[] = {
  NSPAIR(_ZN7S4477C1C1Ev),
  NSPAIR(_ZN7S4477C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4477C3;
extern VTBL_ENTRY _ZTI7S4477C3[];
extern  VTBL_ENTRY _ZTV7S4477C3[];
extern Class_Descriptor cd_S4477C6;
extern VTBL_ENTRY _ZTI7S4477C6[];
extern  VTBL_ENTRY _ZTV7S4477C6[];
extern Class_Descriptor cd_S4477C2;
extern VTBL_ENTRY _ZTI7S4477C2[];
extern  VTBL_ENTRY _ZTV7S4477C2[];
static Base_Class bases_S4477C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4477C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4477C6,    ABISELECT(72,52), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S4477C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4477C1[];
extern void _ZN7S4477C1D1Ev();
extern void _ZN7S4477C1D0Ev();
extern void _ZN7S4477C32v2Ev();
extern void _ZN7S4477C32v3Ev();
extern void _ZN7S4477C32v4Ev();
extern void _ZN7S4477C22v6Ev();
extern void _ZN7S4477C22v7Ev();
extern void _ZN7S4477C12v1Ev();
extern void ABISELECT(_ZThn72_N7S4477C1D1Ev,_ZThn52_N7S4477C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4477C1D0Ev,_ZThn52_N7S4477C1D0Ev)();
extern void _ZN7S4477C62v5Ev();
static  VTBL_ENTRY vtc_S4477C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4477C1[0]),
  (VTBL_ENTRY)&_ZN7S4477C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4477C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4477C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4477C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4477C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4477C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4477C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4477C12v1Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4477C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4477C1D1Ev,_ZThn52_N7S4477C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4477C1D0Ev,_ZThn52_N7S4477C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4477C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4477C1[];
extern  VTBL_ENTRY _ZTV7S4477C1[];
Class_Descriptor cd_S4477C1 = {  "S4477C1", // class name
  bases_S4477C1, 3,
  &(vtc_S4477C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,236), // object size
  NSPAIRA(_ZTI7S4477C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4477C1),15, //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  S4466C3  {
  int s4466c3f0[4];
  ::S4474C4_nt s4466c3f1;
  int s4466c3f2;
  char s4466c3f3;
  ::S4474C5_nt s4466c3f4;
  int s4466c3f5;
  virtual  ~S4466C3(); // _ZN7S4466C3D1Ev
  virtual void  v2(); // _ZN7S4466C32v2Ev
  virtual void  v3(); // _ZN7S4466C32v3Ev
  virtual void  v4(); // _ZN7S4466C32v4Ev
  S4466C3(); // tgen
};
//SIG(-1 S4466C3) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4466C3 ::~S4466C3(){ note_dtor("S4466C3", this);}
void  S4466C3 ::v2(){vfunc_called(this, "_ZN7S4466C32v2Ev");}
void  S4466C3 ::v3(){vfunc_called(this, "_ZN7S4466C32v3Ev");}
void  S4466C3 ::v4(){vfunc_called(this, "_ZN7S4466C32v4Ev");}
S4466C3 ::S4466C3(){ note_ctor("S4466C3", this);} // tgen

static void Test_S4466C3()
{
  extern Class_Descriptor cd_S4466C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4466C3, buf);
    S4466C3 *dp, &lv = *(dp=new (buf) S4466C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4466C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4466C3)");
    check_field_offset(lv, s4466c3f0, ABISELECT(8,4), "S4466C3.s4466c3f0");
    check_field_offset(lv, s4466c3f1, ABISELECT(24,20), "S4466C3.s4466c3f1");
    check_field_offset(lv, s4466c3f2, ABISELECT(40,28), "S4466C3.s4466c3f2");
    check_field_offset(lv, s4466c3f3, ABISELECT(44,32), "S4466C3.s4466c3f3");
    check_field_offset(lv, s4466c3f4, ABISELECT(48,36), "S4466C3.s4466c3f4");
    check_field_offset(lv, s4466c3f5, ABISELECT(64,48), "S4466C3.s4466c3f5");
    test_class_info(&lv, &cd_S4466C3);
    dp->~S4466C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4466C3(Test_S4466C3, "S4466C3", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4466C3C1Ev();
extern void _ZN7S4466C3D1Ev();
Name_Map name_map_S4466C3[] = {
  NSPAIR(_ZN7S4466C3C1Ev),
  NSPAIR(_ZN7S4466C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4466C3[];
extern void _ZN7S4466C3D1Ev();
extern void _ZN7S4466C3D0Ev();
extern void _ZN7S4466C32v2Ev();
extern void _ZN7S4466C32v3Ev();
extern void _ZN7S4466C32v4Ev();
static  VTBL_ENTRY vtc_S4466C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4466C3[0]),
  (VTBL_ENTRY)&_ZN7S4466C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4466C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4466C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4466C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4466C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4466C3[];
extern  VTBL_ENTRY _ZTV7S4466C3[];
Class_Descriptor cd_S4466C3 = {  "S4466C3", // class name
  0,0,//no base classes
  &(vtc_S4466C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4466C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4466C3),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  S4466C2  : S4466C3 {
  virtual  ~S4466C2(); // _ZN7S4466C2D1Ev
  virtual void  v5(); // _ZN7S4466C22v5Ev
  S4466C2(); // tgen
};
//SIG(-1 S4466C2) C1{ BC2{ vd v2 v3 v4 Fi[4] FC3{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} vd v1}


 S4466C2 ::~S4466C2(){ note_dtor("S4466C2", this);}
void  S4466C2 ::v5(){vfunc_called(this, "_ZN7S4466C22v5Ev");}
S4466C2 ::S4466C2(){ note_ctor("S4466C2", this);} // tgen

static void Test_S4466C2()
{
  extern Class_Descriptor cd_S4466C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4466C2, buf);
    S4466C2 *dp, &lv = *(dp=new (buf) S4466C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4466C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4466C2)");
    check_base_class_offset(lv, (S4466C3*), 0, "S4466C2");
    test_class_info(&lv, &cd_S4466C2);
    dp->~S4466C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4466C2(Test_S4466C2, "S4466C2", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4466C2C1Ev();
extern void _ZN7S4466C2D1Ev();
Name_Map name_map_S4466C2[] = {
  NSPAIR(_ZN7S4466C2C1Ev),
  NSPAIR(_ZN7S4466C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4466C3;
extern VTBL_ENTRY _ZTI7S4466C3[];
extern  VTBL_ENTRY _ZTV7S4466C3[];
static Base_Class bases_S4466C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4466C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4466C2[];
extern void _ZN7S4466C2D1Ev();
extern void _ZN7S4466C2D0Ev();
extern void _ZN7S4466C32v2Ev();
extern void _ZN7S4466C32v3Ev();
extern void _ZN7S4466C32v4Ev();
extern void _ZN7S4466C22v5Ev();
static  VTBL_ENTRY vtc_S4466C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4466C2[0]),
  (VTBL_ENTRY)&_ZN7S4466C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4466C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4466C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4466C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4466C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4466C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4466C2[];
extern  VTBL_ENTRY _ZTV7S4466C2[];
Class_Descriptor cd_S4466C2 = {  "S4466C2", // class name
  bases_S4466C2, 1,
  &(vtc_S4466C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4466C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4466C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4466C11  {
  ::S2366C5_nt s4466c11f0;
  ::S2366C5_nt s4466c11f1;
  ::S4474C14_nt s4466c11f2;
  int s4466c11f3;
  void  mf4466c11(); // _ZN8S4466C119mf4466c11Ev
};
//SIG(-1 S4466C11) C1{ m FC2{ m Fp Fi FC3{ m}} FC2 FC4{ m FC5{ vd m FL Fc} FC5} Fi}


void  S4466C11 ::mf4466c11(){}

static void Test_S4466C11()
{
  {
    init_simple_test("S4466C11");
    S4466C11 lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S4466C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4466C11)");
    check_field_offset(lv, s4466c11f0, 0, "S4466C11.s4466c11f0");
    check_field_offset(lv, s4466c11f1, ABISELECT(16,12), "S4466C11.s4466c11f1");
    check_field_offset(lv, s4466c11f2, ABISELECT(32,24), "S4466C11.s4466c11f2");
    check_field_offset(lv, s4466c11f3, ABISELECT(80,56), "S4466C11.s4466c11f3");
  }
}
static Arrange_To_Call_Me vS4466C11(Test_S4466C11, "S4466C11", ABISELECT(88,60));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4466C1  : S4466C2 {
  ::S4474C7_nt s4466c1f0;
  void *s4466c1f1;
  ::S4466C11 s4466c1f2;
  ::S4465C17 s4466c1f3;
  virtual  ~S4466C1(); // _ZN7S4466C1D1Ev
  virtual void  v1(); // _ZN7S4466C12v1Ev
  S4466C1(); // tgen
};
//SIG(1 S4466C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} vd v5} vd v1 FC6{ vd m FC7{ m Fp Fi FC8{ m}} FC9{ BC10{ vd m Fc} vd FL[2]} Fi[2]} Fp FC11{ m FC7 FC7 FC12{ m FC13{ vd m FL Fc} FC13} Fi} FC14{ m FC15{ m Fp Fi FC8 FC16{ m}} Fi}}


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

static void Test_S4466C1()
{
  extern Class_Descriptor cd_S4466C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,46)];
    init_test(&cd_S4466C1, buf);
    S4466C1 *dp, &lv = *(dp=new (buf) S4466C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,180), "sizeof(S4466C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4466C1)");
    check_base_class_offset(lv, (S4466C3*)(S4466C2*), 0, "S4466C1");
    check_base_class_offset(lv, (S4466C2*), 0, "S4466C1");
    check_field_offset(lv, s4466c1f0, ABISELECT(72,52), "S4466C1.s4466c1f0");
    check_field_offset(lv, s4466c1f1, ABISELECT(136,100), "S4466C1.s4466c1f1");
    check_field_offset(lv, s4466c1f2, ABISELECT(144,104), "S4466C1.s4466c1f2");
    check_field_offset(lv, s4466c1f3, ABISELECT(232,164), "S4466C1.s4466c1f3");
    test_class_info(&lv, &cd_S4466C1);
    dp->~S4466C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4466C1(Test_S4466C1, "S4466C1", ABISELECT(256,180));

#else // __cplusplus

extern void _ZN7S4466C1C1Ev();
extern void _ZN7S4466C1D1Ev();
Name_Map name_map_S4466C1[] = {
  NSPAIR(_ZN7S4466C1C1Ev),
  NSPAIR(_ZN7S4466C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4466C3;
extern VTBL_ENTRY _ZTI7S4466C3[];
extern  VTBL_ENTRY _ZTV7S4466C3[];
extern Class_Descriptor cd_S4466C2;
extern VTBL_ENTRY _ZTI7S4466C2[];
extern  VTBL_ENTRY _ZTV7S4466C2[];
static Base_Class bases_S4466C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4466C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4466C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4466C1[];
extern void _ZN7S4466C1D1Ev();
extern void _ZN7S4466C1D0Ev();
extern void _ZN7S4466C32v2Ev();
extern void _ZN7S4466C32v3Ev();
extern void _ZN7S4466C32v4Ev();
extern void _ZN7S4466C22v5Ev();
extern void _ZN7S4466C12v1Ev();
static  VTBL_ENTRY vtc_S4466C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4466C1[0]),
  (VTBL_ENTRY)&_ZN7S4466C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4466C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4466C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4466C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4466C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4466C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4466C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4466C1[];
extern  VTBL_ENTRY _ZTV7S4466C1[];
Class_Descriptor cd_S4466C1 = {  "S4466C1", // class name
  bases_S4466C1, 2,
  &(vtc_S4466C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,180), // object size
  NSPAIRA(_ZTI7S4466C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4466C1),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  S4467C3  {
  int s4467c3f0[4];
  ::S4474C4_nt s4467c3f1;
  int s4467c3f2;
  char s4467c3f3;
  ::S4474C5_nt s4467c3f4;
  int s4467c3f5;
  virtual  ~S4467C3(); // _ZN7S4467C3D1Ev
  virtual void  v2(); // _ZN7S4467C32v2Ev
  virtual void  v3(); // _ZN7S4467C32v3Ev
  virtual void  v4(); // _ZN7S4467C32v4Ev
  S4467C3(); // tgen
};
//SIG(-1 S4467C3) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4467C3 ::~S4467C3(){ note_dtor("S4467C3", this);}
void  S4467C3 ::v2(){vfunc_called(this, "_ZN7S4467C32v2Ev");}
void  S4467C3 ::v3(){vfunc_called(this, "_ZN7S4467C32v3Ev");}
void  S4467C3 ::v4(){vfunc_called(this, "_ZN7S4467C32v4Ev");}
S4467C3 ::S4467C3(){ note_ctor("S4467C3", this);} // tgen

static void Test_S4467C3()
{
  extern Class_Descriptor cd_S4467C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4467C3, buf);
    S4467C3 *dp, &lv = *(dp=new (buf) S4467C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4467C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4467C3)");
    check_field_offset(lv, s4467c3f0, ABISELECT(8,4), "S4467C3.s4467c3f0");
    check_field_offset(lv, s4467c3f1, ABISELECT(24,20), "S4467C3.s4467c3f1");
    check_field_offset(lv, s4467c3f2, ABISELECT(40,28), "S4467C3.s4467c3f2");
    check_field_offset(lv, s4467c3f3, ABISELECT(44,32), "S4467C3.s4467c3f3");
    check_field_offset(lv, s4467c3f4, ABISELECT(48,36), "S4467C3.s4467c3f4");
    check_field_offset(lv, s4467c3f5, ABISELECT(64,48), "S4467C3.s4467c3f5");
    test_class_info(&lv, &cd_S4467C3);
    dp->~S4467C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4467C3(Test_S4467C3, "S4467C3", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4467C3C1Ev();
extern void _ZN7S4467C3D1Ev();
Name_Map name_map_S4467C3[] = {
  NSPAIR(_ZN7S4467C3C1Ev),
  NSPAIR(_ZN7S4467C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4467C3[];
extern void _ZN7S4467C3D1Ev();
extern void _ZN7S4467C3D0Ev();
extern void _ZN7S4467C32v2Ev();
extern void _ZN7S4467C32v3Ev();
extern void _ZN7S4467C32v4Ev();
static  VTBL_ENTRY vtc_S4467C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4467C3[0]),
  (VTBL_ENTRY)&_ZN7S4467C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4467C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4467C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4467C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4467C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4467C3[];
extern  VTBL_ENTRY _ZTV7S4467C3[];
Class_Descriptor cd_S4467C3 = {  "S4467C3", // class name
  0,0,//no base classes
  &(vtc_S4467C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4467C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4467C3),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  S4467C2  : S4467C3 {
  virtual  ~S4467C2(); // _ZN7S4467C2D1Ev
  virtual void  v5(); // _ZN7S4467C22v5Ev
  S4467C2(); // tgen
};
//SIG(-1 S4467C2) C1{ BC2{ vd v2 v3 v4 Fi[4] FC3{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} vd v1}


 S4467C2 ::~S4467C2(){ note_dtor("S4467C2", this);}
void  S4467C2 ::v5(){vfunc_called(this, "_ZN7S4467C22v5Ev");}
S4467C2 ::S4467C2(){ note_ctor("S4467C2", this);} // tgen

static void Test_S4467C2()
{
  extern Class_Descriptor cd_S4467C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4467C2, buf);
    S4467C2 *dp, &lv = *(dp=new (buf) S4467C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4467C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4467C2)");
    check_base_class_offset(lv, (S4467C3*), 0, "S4467C2");
    test_class_info(&lv, &cd_S4467C2);
    dp->~S4467C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4467C2(Test_S4467C2, "S4467C2", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4467C2C1Ev();
extern void _ZN7S4467C2D1Ev();
Name_Map name_map_S4467C2[] = {
  NSPAIR(_ZN7S4467C2C1Ev),
  NSPAIR(_ZN7S4467C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4467C3;
extern VTBL_ENTRY _ZTI7S4467C3[];
extern  VTBL_ENTRY _ZTV7S4467C3[];
static Base_Class bases_S4467C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4467C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4467C2[];
extern void _ZN7S4467C2D1Ev();
extern void _ZN7S4467C2D0Ev();
extern void _ZN7S4467C32v2Ev();
extern void _ZN7S4467C32v3Ev();
extern void _ZN7S4467C32v4Ev();
extern void _ZN7S4467C22v5Ev();
static  VTBL_ENTRY vtc_S4467C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4467C2[0]),
  (VTBL_ENTRY)&_ZN7S4467C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4467C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4467C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4467C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4467C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4467C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4467C2[];
extern  VTBL_ENTRY _ZTV7S4467C2[];
Class_Descriptor cd_S4467C2 = {  "S4467C2", // class name
  bases_S4467C2, 1,
  &(vtc_S4467C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4467C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4467C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4467C12  {
  ::S2366C5_nt s4467c12f0;
  ::S4474C14_nt s4467c12f1;
  ::S2366C5_nt s4467c12f2;
  ::S4465C14_nt s4467c12f3;
};
//SIG(-1 S4467C12) C1{ FC2{ m Fp Fi FC3{ m}} FC4{ m FC5{ vd m FL Fc} FC5} FC2 FC6{ m Fp Fi FC3 FC7{ m}}}



static void Test_S4467C12()
{
  {
    init_simple_test("S4467C12");
    S4467C12 lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S4467C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4467C12)");
    check_field_offset(lv, s4467c12f0, 0, "S4467C12.s4467c12f0");
    check_field_offset(lv, s4467c12f1, ABISELECT(16,12), "S4467C12.s4467c12f1");
    check_field_offset(lv, s4467c12f2, ABISELECT(64,44), "S4467C12.s4467c12f2");
    check_field_offset(lv, s4467c12f3, ABISELECT(80,56), "S4467C12.s4467c12f3");
  }
}
static Arrange_To_Call_Me vS4467C12(Test_S4467C12, "S4467C12", ABISELECT(96,68));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4467C11  {
  ::S4467C12 s4467c11f0;
  int s4467c11f1;
  void  mf4467c11(); // _ZN8S4467C119mf4467c11Ev
};
//SIG(-1 S4467C11) C1{ m FC2{ FC3{ m Fp Fi FC4{ m}} FC5{ m FC6{ vd m FL Fc} FC6} FC3 FC7{ m Fp Fi FC4 FC8{ m}}} Fi}


void  S4467C11 ::mf4467c11(){}

static void Test_S4467C11()
{
  {
    init_simple_test("S4467C11");
    S4467C11 lv;
    check2(sizeof(lv), ABISELECT(104,72), "sizeof(S4467C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4467C11)");
    check_field_offset(lv, s4467c11f0, 0, "S4467C11.s4467c11f0");
    check_field_offset(lv, s4467c11f1, ABISELECT(96,68), "S4467C11.s4467c11f1");
  }
}
static Arrange_To_Call_Me vS4467C11(Test_S4467C11, "S4467C11", ABISELECT(104,72));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4467C1  : S4467C2 {
  ::S4477C7_nt s4467c1f0;
  void *s4467c1f1;
  ::S4467C11 s4467c1f2;
  virtual  ~S4467C1(); // _ZN7S4467C1D1Ev
  virtual void  v1(); // _ZN7S4467C12v1Ev
  S4467C1(); // tgen
};
//SIG(1 S4467C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} vd v5} vd v1 FC6{ vd m FC7{ m Fp Fi FC8{ m}} Fi FC9{ BC10{ vd m Fc} vd FL[2]}} Fp FC11{ m FC12{ FC7 FC13{ m FC14{ vd m FL Fc} FC14} FC7 FC15{ m Fp Fi FC8 FC16{ m}}} Fi}}


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

static void Test_S4467C1()
{
  extern Class_Descriptor cd_S4467C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,44)];
    init_test(&cd_S4467C1, buf);
    S4467C1 *dp, &lv = *(dp=new (buf) S4467C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,172), "sizeof(S4467C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4467C1)");
    check_base_class_offset(lv, (S4467C3*)(S4467C2*), 0, "S4467C1");
    check_base_class_offset(lv, (S4467C2*), 0, "S4467C1");
    check_field_offset(lv, s4467c1f0, ABISELECT(72,52), "S4467C1.s4467c1f0");
    check_field_offset(lv, s4467c1f1, ABISELECT(136,96), "S4467C1.s4467c1f1");
    check_field_offset(lv, s4467c1f2, ABISELECT(144,100), "S4467C1.s4467c1f2");
    test_class_info(&lv, &cd_S4467C1);
    dp->~S4467C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4467C1(Test_S4467C1, "S4467C1", ABISELECT(248,172));

#else // __cplusplus

extern void _ZN7S4467C1C1Ev();
extern void _ZN7S4467C1D1Ev();
Name_Map name_map_S4467C1[] = {
  NSPAIR(_ZN7S4467C1C1Ev),
  NSPAIR(_ZN7S4467C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4467C3;
extern VTBL_ENTRY _ZTI7S4467C3[];
extern  VTBL_ENTRY _ZTV7S4467C3[];
extern Class_Descriptor cd_S4467C2;
extern VTBL_ENTRY _ZTI7S4467C2[];
extern  VTBL_ENTRY _ZTV7S4467C2[];
static Base_Class bases_S4467C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4467C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4467C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4467C1[];
extern void _ZN7S4467C1D1Ev();
extern void _ZN7S4467C1D0Ev();
extern void _ZN7S4467C32v2Ev();
extern void _ZN7S4467C32v3Ev();
extern void _ZN7S4467C32v4Ev();
extern void _ZN7S4467C22v5Ev();
extern void _ZN7S4467C12v1Ev();
static  VTBL_ENTRY vtc_S4467C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4467C1[0]),
  (VTBL_ENTRY)&_ZN7S4467C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4467C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4467C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4467C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4467C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4467C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4467C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4467C1[];
extern  VTBL_ENTRY _ZTV7S4467C1[];
Class_Descriptor cd_S4467C1 = {  "S4467C1", // class name
  bases_S4467C1, 2,
  &(vtc_S4467C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,172), // object size
  NSPAIRA(_ZTI7S4467C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4467C1),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  S7458C4  : virtual S19572C5 {
  ~S7458C4(); // tgen
  S7458C4(); // tgen
};
//SIG(-1 S7458C4) C1{ VBC2{ m Fs:13}}


S7458C4 ::~S7458C4(){ note_dtor("S7458C4", this);} // tgen
S7458C4 ::S7458C4(){ note_ctor("S7458C4", this);} // tgen

static void Test_S7458C4()
{
  extern Class_Descriptor cd_S7458C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7458C4, buf);
    S7458C4 *dp, &lv = *(dp=new (buf) S7458C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7458C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7458C4)");
    check_base_class_offset(lv, (S19572C5*), ABISELECT(8,4), "S7458C4");
    test_class_info(&lv, &cd_S7458C4);
    dp->~S7458C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C4(Test_S7458C4, "S7458C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7458C4C1Ev();
extern void _ZN7S7458C4D1Ev();
Name_Map name_map_S7458C4[] = {
  NSPAIR(_ZN7S7458C4C1Ev),
  NSPAIR(_ZN7S7458C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
static Base_Class bases_S7458C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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 _ZTI7S7458C4[];
static  VTBL_ENTRY vtc_S7458C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
extern VTBL_ENTRY _ZTV7S7458C4[];
static  VTT_ENTRY vtt_S7458C4[] = {
  {&(_ZTV7S7458C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
Class_Descriptor cd_S7458C4 = {  "S7458C4", // class name
  bases_S7458C4, 1,
  &(vtc_S7458C4[0]), // expected_vtbl_contents
  &(vtt_S7458C4[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7458C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7458C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7458C4),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  S7458C2  : virtual S19572C5 , virtual S7458C4 {
  ~S7458C2(); // tgen
  S7458C2(); // tgen
};
//SIG(-1 S7458C2) C1{ VBC2{ m Fs:13} VBC3{ VBC2}}


S7458C2 ::~S7458C2(){ note_dtor("S7458C2", this);} // tgen
S7458C2 ::S7458C2(){ note_ctor("S7458C2", this);} // tgen

static void Test_S7458C2()
{
  extern Class_Descriptor cd_S7458C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7458C2, buf);
    S7458C2 *dp, &lv = *(dp=new (buf) S7458C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7458C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7458C2)");
    check_base_class_offset(lv, (S19572C5*), ABISELECT(8,4), "S7458C2");
    check_base_class_offset(lv, (S19572C5*)(S7458C4*), ABISELECT(8,4), "S7458C2");
    check_base_class_offset(lv, (S7458C4*), 0, "S7458C2");
    test_class_info(&lv, &cd_S7458C2);
    dp->~S7458C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C2(Test_S7458C2, "S7458C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7458C2C1Ev();
extern void _ZN7S7458C2D1Ev();
Name_Map name_map_S7458C2[] = {
  NSPAIR(_ZN7S7458C2C1Ev),
  NSPAIR(_ZN7S7458C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
static Base_Class bases_S7458C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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_S7458C4,    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 _ZTI7S7458C2[];
static  VTBL_ENTRY vtc_S7458C2[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C2[0]),
};
extern VTBL_ENTRY _ZTV7S7458C2[];
static  VTBL_ENTRY _tg__ZTV7S7458C4__7S7458C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTT_ENTRY vtt_S7458C2[] = {
  {&(_ZTV7S7458C2[4]),  4,4},
  {&(_ZTV7S7458C2[4]),  4,4},
  {&(_tg__ZTV7S7458C4__7S7458C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7458C2[];
extern  VTBL_ENTRY _ZTV7S7458C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C2[];
Class_Descriptor cd_S7458C2 = {  "S7458C2", // class name
  bases_S7458C2, 2,
  &(vtc_S7458C2[0]), // expected_vtbl_contents
  &(vtt_S7458C2[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7458C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7458C2),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7458C2),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  S7458C9  : S19572C5 {
};
//SIG(-1 S7458C9) C1{ BC2{ m Fs:13}}



static void Test_S7458C9()
{
  extern Class_Descriptor cd_S7458C9;
  void *lvp;
  {
    short buf[2];
    init_test(&cd_S7458C9, buf);
    S7458C9 &lv = *(new (buf) S7458C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), 2, "sizeof(S7458C9)");
    check2(__alignof__(lv), 2, "__alignof__(S7458C9)");
    check_base_class_offset(lv, (S19572C5*), 0, "S7458C9");
    test_class_info(&lv, &cd_S7458C9);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C9(Test_S7458C9, "S7458C9", 2);

#else // __cplusplus

extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
static Base_Class bases_S7458C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7458C9[];
Class_Descriptor cd_S7458C9 = {  "S7458C9", // class name
  bases_S7458C9, 1,
  0, // no vftv
  0, //no vtt
  2, // object size
  NSPAIRA(_ZTI7S7458C9),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  S7458C8  : S7458C4 , S7458C9 {
  virtual  ~S7458C8(); // _ZN7S7458C8D2Ev
  S7458C8(); // tgen
};
//SIG(-1 S7458C8) C1{ BC2{ VBC3{ m Fs:13}} BC4{ BC3} vd}


 S7458C8 ::~S7458C8(){ note_dtor("S7458C8", this);}
S7458C8 ::S7458C8(){ note_ctor("S7458C8", this);} // tgen

static void Test_S7458C8()
{
  extern Class_Descriptor cd_S7458C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7458C8, buf);
    S7458C8 *dp, &lv = *(dp=new (buf) S7458C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7458C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7458C8)");
    check_base_class_offset(lv, (S19572C5*)(S7458C4*), ABISELECT(10,6), "S7458C8");
    check_base_class_offset(lv, (S7458C4*), 0, "S7458C8");
    check_base_class_offset(lv, (S19572C5*)(S7458C9*), ABISELECT(8,4), "S7458C8");
    check_base_class_offset(lv, (S7458C9*), ABISELECT(8,4), "S7458C8");
    test_class_info(&lv, &cd_S7458C8);
    dp->~S7458C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C8(Test_S7458C8, "S7458C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7458C8C1Ev();
extern void _ZN7S7458C8D2Ev();
Name_Map name_map_S7458C8[] = {
  NSPAIR(_ZN7S7458C8C1Ev),
  NSPAIR(_ZN7S7458C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
static Base_Class bases_S7458C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(10,6), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7458C4,    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_S19572C5,    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_S7458C9,    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},
  {0}};
extern VTBL_ENTRY _ZTI7S7458C8[];
extern void _ZN7S7458C8D1Ev();
extern void _ZN7S7458C8D0Ev();
static  VTBL_ENTRY vtc_S7458C8[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C8[0]),
  (VTBL_ENTRY)&_ZN7S7458C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C8D0Ev,
};
extern VTBL_ENTRY _ZTV7S7458C8[];
static  VTBL_ENTRY _tg__ZTV7S7458C4__7S7458C8[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTT_ENTRY vtt_S7458C8[] = {
  {&(_ZTV7S7458C8[3]),  3,5},
  {&(_tg__ZTV7S7458C4__7S7458C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7458C8[];
extern  VTBL_ENTRY _ZTV7S7458C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C8[];
Class_Descriptor cd_S7458C8 = {  "S7458C8", // class name
  bases_S7458C8, 4,
  &(vtc_S7458C8[0]), // expected_vtbl_contents
  &(vtt_S7458C8[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7458C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7458C8),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7458C8),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  S7458C10  : virtual S7458C9 {
  ~S7458C10(); // tgen
  S7458C10(); // tgen
};
//SIG(-1 S7458C10) C1{ VBC2{ BC3{ m Fs:13}}}


S7458C10 ::~S7458C10(){ note_dtor("S7458C10", this);} // tgen
S7458C10 ::S7458C10(){ note_ctor("S7458C10", this);} // tgen

static void Test_S7458C10()
{
  extern Class_Descriptor cd_S7458C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7458C10, buf);
    S7458C10 *dp, &lv = *(dp=new (buf) S7458C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7458C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7458C10)");
    check_base_class_offset(lv, (S19572C5*)(S7458C9*), ABISELECT(8,4), "S7458C10");
    check_base_class_offset(lv, (S7458C9*), ABISELECT(8,4), "S7458C10");
    test_class_info(&lv, &cd_S7458C10);
    dp->~S7458C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C10(Test_S7458C10, "S7458C10", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S7458C10C1Ev();
extern void _ZN8S7458C10D1Ev();
Name_Map name_map_S7458C10[] = {
  NSPAIR(_ZN8S7458C10C1Ev),
  NSPAIR(_ZN8S7458C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
static Base_Class bases_S7458C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
  0, 0},
  {&cd_S7458C9,    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 _ZTI8S7458C10[];
static  VTBL_ENTRY vtc_S7458C10[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
extern VTBL_ENTRY _ZTV8S7458C10[];
static  VTT_ENTRY vtt_S7458C10[] = {
  {&(_ZTV8S7458C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
Class_Descriptor cd_S7458C10 = {  "S7458C10", // class name
  bases_S7458C10, 2,
  &(vtc_S7458C10[0]), // expected_vtbl_contents
  &(vtt_S7458C10[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7458C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7458C10),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7458C10),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  S7458C12  : virtual S7458C4 {
  ~S7458C12(); // tgen
  S7458C12(); // tgen
};
//SIG(-1 S7458C12) C1{ VBC2{ VBC3{ m Fs:13}}}


S7458C12 ::~S7458C12(){ note_dtor("S7458C12", this);} // tgen
S7458C12 ::S7458C12(){ note_ctor("S7458C12", this);} // tgen

static void Test_S7458C12()
{
  extern Class_Descriptor cd_S7458C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7458C12, buf);
    S7458C12 *dp, &lv = *(dp=new (buf) S7458C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7458C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7458C12)");
    check_base_class_offset(lv, (S19572C5*)(S7458C4*), ABISELECT(8,4), "S7458C12");
    check_base_class_offset(lv, (S7458C4*), 0, "S7458C12");
    test_class_info(&lv, &cd_S7458C12);
    dp->~S7458C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C12(Test_S7458C12, "S7458C12", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S7458C12C1Ev();
extern void _ZN8S7458C12D1Ev();
Name_Map name_map_S7458C12[] = {
  NSPAIR(_ZN8S7458C12C1Ev),
  NSPAIR(_ZN8S7458C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
static Base_Class bases_S7458C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
  0, 1},
  {&cd_S7458C4,    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 _ZTI8S7458C12[];
static  VTBL_ENTRY vtc_S7458C12[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C12[0]),
};
extern VTBL_ENTRY _ZTV8S7458C12[];
static  VTBL_ENTRY _tg__ZTV7S7458C4__8S7458C12[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTT_ENTRY vtt_S7458C12[] = {
  {&(_ZTV8S7458C12[4]),  4,4},
  {&(_ZTV8S7458C12[4]),  4,4},
  {&(_tg__ZTV7S7458C4__8S7458C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7458C12[];
extern  VTBL_ENTRY _ZTV8S7458C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C12[];
Class_Descriptor cd_S7458C12 = {  "S7458C12", // class name
  bases_S7458C12, 2,
  &(vtc_S7458C12[0]), // expected_vtbl_contents
  &(vtt_S7458C12[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7458C12),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7458C12),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7458C12),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  S7458C14  : virtual S19572C5 , virtual S7458C9 , S7458C10 , S7458C8 , S7458C4 {
  long double s7458c14f0[5];
  virtual  ~S7458C14(); // _ZN8S7458C14D2Ev
  S7458C14(); // tgen
};
//SIG(-1 S7458C14) C1{ VBC2{ m Fs:13} VBC3{ BC2} BC4{ VBC3} BC5{ BC6{ VBC2} BC3 vd} BC6 vd FD[5]}


 S7458C14 ::~S7458C14(){ note_dtor("S7458C14", this);}
S7458C14 ::S7458C14(){ note_ctor("S7458C14", this);} // tgen

static void Test_S7458C14()
{
  extern Class_Descriptor cd_S7458C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,21)];
    init_test(&cd_S7458C14, buf);
    S7458C14 *dp, &lv = *(dp=new (buf) S7458C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,80), "sizeof(S7458C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7458C14)");
    /*is_ambiguous_... S7458C14::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*), ABISELECT(112,76), "S7458C14");
    check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C8*), ABISELECT(112,76), "S7458C14");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*), ABISELECT(112,76), "S7458C14");
    /*is_ambiguous_... S7458C14::S7458C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C9*), ABISELECT(114,78), "S7458C14");
    /*is_ambiguous_... S7458C14::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*), ABISELECT(114,78), "S7458C14");
    check_base_class_offset(lv, (S7458C9*)(S7458C10*), ABISELECT(114,78), "S7458C14");
    check_base_class_offset(lv, (S7458C10*), 0, "S7458C14");
    check_base_class_offset(lv, (S7458C4*)(S7458C8*), ABISELECT(8,4), "S7458C14");
    check_base_class_offset(lv, (S19572C5*)(S7458C9*)(S7458C8*), ABISELECT(16,8), "S7458C14");
    check_base_class_offset(lv, (S7458C9*)(S7458C8*), ABISELECT(16,8), "S7458C14");
    check_base_class_offset(lv, (S7458C8*), ABISELECT(8,4), "S7458C14");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*), ABISELECT(24,12), "S7458C14");
    check_field_offset(lv, s7458c14f0, ABISELECT(32,16), "S7458C14.s7458c14f0");
    test_class_info(&lv, &cd_S7458C14);
    dp->~S7458C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C14(Test_S7458C14, "S7458C14", ABISELECT(128,80));

#else // __cplusplus

extern void _ZN8S7458C14C1Ev();
extern void _ZN8S7458C14D2Ev();
Name_Map name_map_S7458C14[] = {
  NSPAIR(_ZN8S7458C14C1Ev),
  NSPAIR(_ZN8S7458C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C8;
extern VTBL_ENTRY _ZTI7S7458C8[];
extern  VTBL_ENTRY _ZTV7S7458C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C8[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
static Base_Class bases_S7458C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(112,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
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    ABISELECT(114,78), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7458C9,    ABISELECT(114,78), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7458C10,    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_S7458C4,    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
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    6, //immediately_derived
  0, 0},
  {&cd_S7458C9,    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
    7, //immediately_derived
  0, 0},
  {&cd_S7458C8,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7458C4,    ABISELECT(24,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7458C14[];
extern void _ZN8S7458C14D1Ev();
extern void _ZN8S7458C14D0Ev();
extern void ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev)();
extern void ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev)();
static  VTBL_ENTRY vtc_S7458C14[] = {
  ABISELECT(112,76),
  ABISELECT(114,78),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&_ZN8S7458C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C14D0Ev,
  ABISELECT(104,72),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev),
  ABISELECT(88,64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
};
extern VTBL_ENTRY _ZTV8S7458C14[];
static  VTBL_ENTRY _tg__ZTV8S7458C10__8S7458C14[] = {
  ABISELECT(114,78),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
extern void _ZN7S7458C8D1Ev();
extern void _ZN7S7458C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C8__8S7458C14[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C8[0]),
  (VTBL_ENTRY)&_ZN7S7458C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C47S7458C8__8S7458C14[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__A1__8S7458C14[] = {
  ABISELECT(88,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTT_ENTRY vtt_S7458C14[] = {
  {&(_ZTV8S7458C14[4]),  4,14},
  {&(_tg__ZTV8S7458C10__8S7458C14[3]),  3,3},
  {&(_tg__ZTV7S7458C8__8S7458C14[3]),  3,5},
  {&(_tg__ZTV7S7458C47S7458C8__8S7458C14[3]),  3,3},
  {&(_tg__ZTV7S7458C4__A1__8S7458C14[3]),  3,3},
  {&(_ZTV8S7458C14[9]),  9,14},
  {&(_ZTV8S7458C14[14]),  14,14},
};
extern VTBL_ENTRY _ZTI8S7458C14[];
extern  VTBL_ENTRY _ZTV8S7458C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C14[];
Class_Descriptor cd_S7458C14 = {  "S7458C14", // class name
  bases_S7458C14, 9,
  &(vtc_S7458C14[0]), // expected_vtbl_contents
  &(vtt_S7458C14[0]), // expected_vtt_contents
  ABISELECT(128,80), // object size
  NSPAIRA(_ZTI8S7458C14),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7458C14),14, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7458C14),7, //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  S7458C13  : virtual S7458C9 , virtual S7458C10 , virtual S7458C14 , S7458C4 {
  ::S19572C19 s7458c13f0;
  virtual void  v1(); // _ZN8S7458C132v1Ev
  ~S7458C13(); // tgen
  S7458C13(); // tgen
};
//SIG(-1 S7458C13) C1{ VBC2{ BC3{ m Fs:13}} VBC4{ VBC2} VBC5{ VBC3 VBC2 BC4 BC6{ BC7{ VBC3} BC2 vd} BC7 vd FD[5]} BC7 v1 FC8{ VBC9{ VBC3} VBC10{ VBC3} BC3 VBC11{ BC3} vd Fi}}


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

static void Test_S7458C13()
{
  extern Class_Descriptor cd_S7458C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,30)];
    init_test(&cd_S7458C13, buf);
    S7458C13 *dp, &lv = *(dp=new (buf) S7458C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,116), "sizeof(S7458C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7458C13)");
    /*is_ambiguous_... S7458C13::S7458C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C9*), ABISELECT(48,28), "S7458C13");
    /*is_ambiguous_... S7458C13::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*), ABISELECT(48,28), "S7458C13");
    /*is_ambiguous_... S7458C13::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C10*), ABISELECT(48,28), "S7458C13");
    /*is_ambiguous_... S7458C14::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C14*), ABISELECT(48,28), "S7458C13");
    check_base_class_offset(lv, (S7458C9*)(S7458C10*)(S7458C14*), ABISELECT(48,28), "S7458C13");
    /*is_ambiguous_... S7458C13::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C10*), ABISELECT(56,32), "S7458C13");
    /*is_ambiguous_... S7458C14::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C14*), ABISELECT(176,112), "S7458C13");
    check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C8*)(S7458C14*), ABISELECT(176,112), "S7458C13");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C14*), ABISELECT(176,112), "S7458C13");
    /*is_ambiguous_... S7458C13::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*), ABISELECT(176,112), "S7458C13");
    check_base_class_offset(lv, (S7458C10*)(S7458C14*), ABISELECT(64,36), "S7458C13");
    check_base_class_offset(lv, (S7458C4*)(S7458C8*)(S7458C14*), ABISELECT(72,40), "S7458C13");
    check_base_class_offset(lv, (S19572C5*)(S7458C9*)(S7458C8*)(S7458C14*), ABISELECT(80,44), "S7458C13");
    check_base_class_offset(lv, (S7458C9*)(S7458C8*)(S7458C14*), ABISELECT(80,44), "S7458C13");
    check_base_class_offset(lv, (S7458C8*)(S7458C14*), ABISELECT(72,40), "S7458C13");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C14*), ABISELECT(88,48), "S7458C13");
    check_base_class_offset(lv, (S7458C14*), ABISELECT(64,36), "S7458C13");
    /*is_ambiguous_... S7458C13::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*), 0, "S7458C13");
    check_field_offset(lv, s7458c13f0, ABISELECT(8,4), "S7458C13.s7458c13f0");
    test_class_info(&lv, &cd_S7458C13);
    dp->~S7458C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C13(Test_S7458C13, "S7458C13", ABISELECT(192,116));

#else // __cplusplus

extern void _ZN8S7458C13C1Ev();
extern void _ZN8S7458C13D1Ev();
Name_Map name_map_S7458C13[] = {
  NSPAIR(_ZN8S7458C13C1Ev),
  NSPAIR(_ZN8S7458C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C8;
extern VTBL_ENTRY _ZTI7S7458C8[];
extern  VTBL_ENTRY _ZTV7S7458C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C8[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C14;
extern VTBL_ENTRY _ZTI8S7458C14[];
extern  VTBL_ENTRY _ZTV8S7458C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C14[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
static Base_Class bases_S7458C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
    1, //immediately_derived
  0, 0},
  {&cd_S7458C9,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S7458C10,    ABISELECT(56,32), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    ABISELECT(176,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
    5, //immediately_derived
  0, 1},
  {&cd_S7458C10,    ABISELECT(64,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
    2, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7458C4,    ABISELECT(72,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
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(80,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
    7, //immediately_derived
  0, 0},
  {&cd_S7458C9,    ABISELECT(80,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
    8, //immediately_derived
  0, 0},
  {&cd_S7458C8,    ABISELECT(72,40), //bcp->offset
    19, //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
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7458C4,    ABISELECT(88,48), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7458C14,    ABISELECT(64,36), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7458C4,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7458C13[];
extern void _ZN8S7458C132v1Ev();
extern void _ZN8S7458C13D1Ev();
extern void _ZN8S7458C13D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev)();
extern void ABISELECT(_ZThn64_N8S7458C13D1Ev,_ZThn36_N8S7458C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev)();
extern void ABISELECT(_ZThn64_N8S7458C13D0Ev,_ZThn36_N8S7458C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N8S7458C13D1Ev,_ZTvn4_n20_N8S7458C13D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S7458C13D0Ev,_ZTvn4_n20_N8S7458C13D0Ev)();
static  VTBL_ENTRY vtc_S7458C13[] = {
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(48,28),
  ABISELECT(176,112),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&_ZN8S7458C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C13D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  ABISELECT(-64,-36),
  ABISELECT(112,76),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev),
  ABISELECT(104,72),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C13D1Ev,_ZTvn4_n20_N8S7458C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C13D0Ev,_ZTvn4_n20_N8S7458C13D0Ev),
  ABISELECT(88,64),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
};
extern VTBL_ENTRY _ZTV8S7458C13[];
static  VTBL_ENTRY _tg__ZTV7S7458C4__A2__8S7458C13[] = {
  ABISELECT(176,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__8S7458C13[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
extern void _ZN8S7458C14D1Ev();
extern void _ZN8S7458C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C14__8S7458C13[] = {
  ABISELECT(112,76),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&_ZN8S7458C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C14D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7458C108S7458C14__A1__8S7458C13[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
extern void _ZN7S7458C8D1Ev();
extern void _ZN7S7458C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__8S7458C13[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C8[0]),
  (VTBL_ENTRY)&_ZN7S7458C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C47S7458C88S7458C14__8S7458C13[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A1__8S7458C13[] = {
  ABISELECT(88,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
extern void ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev)();
extern void ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C8__8S7458C14__8S7458C13[] = {
  ABISELECT(104,72),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__A1__8S7458C14__8S7458C13[] = {
  ABISELECT(88,64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
};
static  VTT_ENTRY vtt_S7458C13[] = {
  {&(_ZTV8S7458C13[6]),  6,27},
  {&(_tg__ZTV7S7458C4__A2__8S7458C13[3]),  3,3},
  {&(_ZTV8S7458C13[12]),  12,27},
  {&(_ZTV8S7458C13[17]),  17,27},
  {&(_ZTV8S7458C13[22]),  22,27},
  {&(_ZTV8S7458C13[27]),  27,27},
  {&(_tg__ZTV8S7458C10__8S7458C13[3]),  3,3},
  {&(_tg__ZTV8S7458C14__8S7458C13[4]),  4,6},
  {&(_tg__ZTV8S7458C108S7458C14__A1__8S7458C13[3]),  3,3},
  {&(_tg__ZTV7S7458C88S7458C14__8S7458C13[3]),  3,5},
  {&(_tg__ZTV7S7458C47S7458C88S7458C14__8S7458C13[3]),  3,3},
  {&(_tg__ZTV7S7458C48S7458C14__A1__8S7458C13[3]),  3,3},
  {&(_tg__ZTV7S7458C8__8S7458C14__8S7458C13[3]),  3,5},
  {&(_tg__ZTV7S7458C4__A1__8S7458C14__8S7458C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7458C13[];
extern  VTBL_ENTRY _ZTV8S7458C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C13[];
static VTBL_ENTRY alt_thunk_names34[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7458C13D0Ev,_ZThn36_N8S7458C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7458C13D1Ev,_ZThn36_N8S7458C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7458C13 = {  "S7458C13", // class name
  bases_S7458C13, 12,
  &(vtc_S7458C13[0]), // expected_vtbl_contents
  &(vtt_S7458C13[0]), // expected_vtt_contents
  ABISELECT(192,116), // object size
  NSPAIRA(_ZTI8S7458C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7458C13),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7458C13),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names34,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7458C11  : virtual S19572C5 , virtual S7458C12 , virtual S7458C13 {
  int s7458c11f0;
  virtual  ~S7458C11(); // _ZN8S7458C11D2Ev
  S7458C11(); // tgen
};
//SIG(-1 S7458C11) C1{ VBC2{ m Fs:13} VBC3{ VBC4{ VBC2}} VBC5{ VBC6{ BC2} VBC7{ VBC6} VBC8{ VBC2 VBC6 BC7 BC9{ BC4 BC6 vd} BC4 vd FD[5]} BC4 v1 FC10{ VBC11{ VBC2} VBC12{ VBC2} BC2 VBC13{ BC2} vd Fi}} vd Fi}


 S7458C11 ::~S7458C11(){ note_dtor("S7458C11", this);}
S7458C11 ::S7458C11(){ note_ctor("S7458C11", this);} // tgen

static void Test_S7458C11()
{
  extern Class_Descriptor cd_S7458C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,32)];
    init_test(&cd_S7458C11, buf);
    S7458C11 *dp, &lv = *(dp=new (buf) S7458C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,124), "sizeof(S7458C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7458C11)");
    /*is_ambiguous_... S7458C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*), ABISELECT(12,8), "S7458C11");
    /*is_ambiguous_... S7458C11::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*), ABISELECT(12,8), "S7458C11");
    /*is_ambiguous_... S7458C14::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C14*), ABISELECT(12,8), "S7458C11");
    check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C8*)(S7458C14*), ABISELECT(12,8), "S7458C11");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C14*), ABISELECT(12,8), "S7458C11");
    /*is_ambiguous_... S7458C13::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C13*), ABISELECT(12,8), "S7458C11");
    check_base_class_offset(lv, (S7458C4*)(S7458C12*), 0, "S7458C11");
    check_base_class_offset(lv, (S7458C12*), 0, "S7458C11");
    /*is_ambiguous_... S7458C11::S7458C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C9*), ABISELECT(64,40), "S7458C11");
    /*is_ambiguous_... S7458C13::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C13*), ABISELECT(64,40), "S7458C11");
    /*is_ambiguous_... S7458C11::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C10*), ABISELECT(64,40), "S7458C11");
    /*is_ambiguous_... S7458C14::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C14*), ABISELECT(64,40), "S7458C11");
    check_base_class_offset(lv, (S7458C9*)(S7458C10*)(S7458C14*), ABISELECT(64,40), "S7458C11");
    /*is_ambiguous_... S7458C13::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C10*)(S7458C13*), ABISELECT(72,44), "S7458C11");
    check_base_class_offset(lv, (S7458C10*)(S7458C14*), ABISELECT(80,48), "S7458C11");
    check_base_class_offset(lv, (S7458C4*)(S7458C8*)(S7458C14*), ABISELECT(88,52), "S7458C11");
    check_base_class_offset(lv, (S19572C5*)(S7458C9*)(S7458C8*)(S7458C14*), ABISELECT(96,56), "S7458C11");
    check_base_class_offset(lv, (S7458C9*)(S7458C8*)(S7458C14*), ABISELECT(96,56), "S7458C11");
    check_base_class_offset(lv, (S7458C8*)(S7458C14*), ABISELECT(88,52), "S7458C11");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C14*), ABISELECT(104,60), "S7458C11");
    check_base_class_offset(lv, (S7458C14*)(S7458C13*), ABISELECT(80,48), "S7458C11");
    /*is_ambiguous_... S7458C13::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C13*), ABISELECT(16,12), "S7458C11");
    check_base_class_offset(lv, (S7458C13*), ABISELECT(16,12), "S7458C11");
    check_field_offset(lv, s7458c11f0, ABISELECT(8,4), "S7458C11.s7458c11f0");
    test_class_info(&lv, &cd_S7458C11);
    dp->~S7458C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C11(Test_S7458C11, "S7458C11", ABISELECT(192,124));

#else // __cplusplus

extern void _ZN8S7458C11C1Ev();
extern void _ZN8S7458C11D2Ev();
Name_Map name_map_S7458C11[] = {
  NSPAIR(_ZN8S7458C11C1Ev),
  NSPAIR(_ZN8S7458C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C12;
extern VTBL_ENTRY _ZTI8S7458C12[];
extern  VTBL_ENTRY _ZTV8S7458C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C12[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C8;
extern VTBL_ENTRY _ZTI7S7458C8[];
extern  VTBL_ENTRY _ZTV7S7458C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C8[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C14;
extern VTBL_ENTRY _ZTI8S7458C14[];
extern  VTBL_ENTRY _ZTV8S7458C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C14[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C13;
extern VTBL_ENTRY _ZTI8S7458C13[];
extern  VTBL_ENTRY _ZTV8S7458C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C13[];
static Base_Class bases_S7458C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(12,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_S7458C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7458C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    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
    4, //immediately_derived
  0, 0},
  {&cd_S7458C9,    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
    5, //immediately_derived
  0, 1},
  {&cd_S7458C10,    ABISELECT(72,44), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7458C10,    ABISELECT(80,48), //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
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7458C4,    ABISELECT(88,52), //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
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(96,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_S7458C9,    ABISELECT(96,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
    10, //immediately_derived
  0, 0},
  {&cd_S7458C8,    ABISELECT(88,52), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7458C4,    ABISELECT(104,60), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7458C14,    ABISELECT(80,48), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7458C4,    ABISELECT(16,12), //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
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7458C13,    ABISELECT(16,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7458C11[];
extern void _ZN8S7458C11D1Ev();
extern void _ZN8S7458C11D0Ev();
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S7458C11D1Ev,_ZThn12_N8S7458C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev)();
extern void ABISELECT(_ZThn16_N8S7458C11D0Ev,_ZThn12_N8S7458C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev)();
extern void ABISELECT(_ZThn80_N8S7458C11D1Ev,_ZThn48_N8S7458C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev)();
extern void ABISELECT(_ZThn80_N8S7458C11D0Ev,_ZThn48_N8S7458C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N8S7458C11D1Ev,_ZTvn4_n20_N8S7458C11D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S7458C11D0Ev,_ZTvn4_n20_N8S7458C11D0Ev)();
static  VTBL_ENTRY vtc_S7458C11[] = {
  ABISELECT(80,48),
  ABISELECT(72,44),
  ABISELECT(64,40),
  ABISELECT(16,12),
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&_ZN8S7458C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C11D0Ev,
  ABISELECT(-16,-12),
  0,
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(48,28),
  -4,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  ABISELECT(-80,-48),
  ABISELECT(-68,-40),
  ABISELECT(-16,-8),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev),
  ABISELECT(-76,-44),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C11D1Ev,_ZTvn4_n20_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C11D0Ev,_ZTvn4_n20_N8S7458C11D0Ev),
  ABISELECT(-92,-52),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
};
extern VTBL_ENTRY _ZTV8S7458C11[];
static  VTBL_ENTRY _tg__ZTV8S7458C12__8S7458C11[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__8S7458C11[] = {
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
extern void _ZN8S7458C132v1Ev();
extern void _ZN8S7458C13D1Ev();
extern void _ZN8S7458C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C13__8S7458C11[] = {
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(48,28),
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&_ZN8S7458C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C13__A3__8S7458C11[] = {
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__8S7458C13__8S7458C11[] = {
  ABISELECT(-8,-4),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev)();
extern void ABISELECT(_ZThn64_N8S7458C13D1Ev,_ZThn36_N8S7458C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev)();
extern void ABISELECT(_ZThn64_N8S7458C13D0Ev,_ZThn36_N8S7458C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__8S7458C13__8S7458C11[] = {
  ABISELECT(-64,-36),
  ABISELECT(-68,-40),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N8S7458C13D1Ev,_ZTvn4_n20_N8S7458C13D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S7458C13D0Ev,_ZTvn4_n20_N8S7458C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__8S7458C13__8S7458C11[] = {
  ABISELECT(-76,-44),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C13D1Ev,_ZTvn4_n20_N8S7458C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C13D0Ev,_ZTvn4_n20_N8S7458C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A1__8S7458C13__8S7458C11[] = {
  ABISELECT(-92,-52),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__8S7458C11[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
extern void _ZN8S7458C14D1Ev();
extern void _ZN8S7458C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C14__8S7458C11[] = {
  ABISELECT(-68,-40),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&_ZN8S7458C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C14D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7458C108S7458C14__A1__8S7458C11[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
extern void _ZN7S7458C8D1Ev();
extern void _ZN7S7458C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__8S7458C11[] = {
  ABISELECT(-76,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C8[0]),
  (VTBL_ENTRY)&_ZN7S7458C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C47S7458C88S7458C14__A1__8S7458C11[] = {
  ABISELECT(-76,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A2__8S7458C11[] = {
  ABISELECT(-92,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
extern void ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev)();
extern void ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C8__8S7458C14__8S7458C11[] = {
  ABISELECT(-76,-44),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__A1__8S7458C14__8S7458C11[] = {
  ABISELECT(-92,-52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
};
static  VTT_ENTRY vtt_S7458C11[] = {
  {&(_ZTV8S7458C11[9]),  9,40},
  {&(_ZTV8S7458C11[9]),  9,40},
  {&(_ZTV8S7458C11[9]),  9,40},
  {&(_ZTV8S7458C11[19]),  19,40},
  {&(_ZTV8S7458C11[25]),  25,40},
  {&(_ZTV8S7458C11[30]),  30,40},
  {&(_ZTV8S7458C11[35]),  35,40},
  {&(_ZTV8S7458C11[40]),  40,40},
  {&(_tg__ZTV8S7458C12__8S7458C11[4]),  4,4},
  {&(_tg__ZTV8S7458C12__8S7458C11[4]),  4,4},
  {&(_tg__ZTV7S7458C4__8S7458C11[3]),  3,3},
  {&(_tg__ZTV8S7458C13__8S7458C11[6]),  6,9},
  {&(_tg__ZTV7S7458C48S7458C13__A3__8S7458C11[3]),  3,3},
  {&(_tg__ZTV8S7458C10__8S7458C13__8S7458C11[3]),  3,3},
  {&(_tg__ZTV8S7458C14__8S7458C13__8S7458C11[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__8S7458C13__8S7458C11[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A1__8S7458C13__8S7458C11[3]),  3,3},
  {&(_tg__ZTV8S7458C10__8S7458C11[3]),  3,3},
  {&(_tg__ZTV8S7458C14__8S7458C11[4]),  4,6},
  {&(_tg__ZTV8S7458C108S7458C14__A1__8S7458C11[3]),  3,3},
  {&(_tg__ZTV7S7458C88S7458C14__8S7458C11[3]),  3,5},
  {&(_tg__ZTV7S7458C47S7458C88S7458C14__A1__8S7458C11[3]),  3,3},
  {&(_tg__ZTV7S7458C48S7458C14__A2__8S7458C11[3]),  3,3},
  {&(_tg__ZTV7S7458C8__8S7458C14__8S7458C11[3]),  3,5},
  {&(_tg__ZTV7S7458C4__A1__8S7458C14__8S7458C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7458C11[];
extern  VTBL_ENTRY _ZTV8S7458C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C11[];
static VTBL_ENTRY alt_thunk_names35[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7458C13D0Ev,_ZThn36_N8S7458C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7458C13D1Ev,_ZThn36_N8S7458C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7458C11D0Ev,_ZThn48_N8S7458C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7458C11D1Ev,_ZThn48_N8S7458C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7458C11D0Ev,_ZThn12_N8S7458C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7458C11D1Ev,_ZThn12_N8S7458C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7458C11 = {  "S7458C11", // class name
  bases_S7458C11, 15,
  &(vtc_S7458C11[0]), // expected_vtbl_contents
  &(vtt_S7458C11[0]), // expected_vtt_contents
  ABISELECT(192,124), // object size
  NSPAIRA(_ZTI8S7458C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7458C11),40, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7458C11),25, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names35,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7458C7  : virtual S7458C8 , virtual S7458C10 , S7458C11 , S7458C2 , virtual S629C14 {
  ~S7458C7(); // tgen
  S7458C7(); // tgen
};
//SIG(-1 S7458C7) C1{ VBC2{ BC3{ VBC4{ m Fs:13}} BC5{ BC4} vd} VBC6{ VBC5} BC7{ VBC4 VBC8{ VBC3} VBC9{ VBC5 VBC6 VBC10{ VBC4 VBC5 BC6 BC2 BC3 vd FD[5]} BC3 v1 FC11{ VBC12{ VBC4} VBC13{ VBC4} BC4 VBC14{ BC4} vd Fi}} vd Fi} BC15{ VBC4 VBC3} VBC16{ m}}


S7458C7 ::~S7458C7(){ note_dtor("S7458C7", this);} // tgen
S7458C7 ::S7458C7(){ note_ctor("S7458C7", this);} // tgen

static void Test_S7458C7()
{
  extern Class_Descriptor cd_S7458C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,34)];
    init_test(&cd_S7458C7, buf);
    S7458C7 *dp, &lv = *(dp=new (buf) S7458C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,132), "sizeof(S7458C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7458C7)");
    /*is_ambiguous_... S7458C7::S7458C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C8*), ABISELECT(34,18), "S7458C7");
    /*is_ambiguous_... S7458C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C11*), ABISELECT(34,18), "S7458C7");
    /*is_ambiguous_... S7458C7::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*), ABISELECT(34,18), "S7458C7");
    /*is_ambiguous_... S7458C14::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C14*), ABISELECT(34,18), "S7458C7");
    check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C8*)(S7458C14*), ABISELECT(34,18), "S7458C7");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C14*), ABISELECT(34,18), "S7458C7");
    /*is_ambiguous_... S7458C13::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C13*), ABISELECT(34,18), "S7458C7");
    check_base_class_offset(lv, (S19572C5*)(S7458C2*), ABISELECT(34,18), "S7458C7");
    /*is_ambiguous_... S7458C7::S7458C8 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C8*), ABISELECT(24,12), "S7458C7");
    /*is_ambiguous_... S7458C7::S7458C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C9*)(S7458C8*), ABISELECT(32,16), "S7458C7");
    /*is_ambiguous_... S7458C7::S7458C8 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C8*), ABISELECT(32,16), "S7458C7");
    /*is_ambiguous_... S7458C7::S7458C8 */ AMB_check_base_class_offset(lv, (S7458C8*), ABISELECT(24,12), "S7458C7");
    /*is_ambiguous_... S7458C7::S7458C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C9*), ABISELECT(48,24), "S7458C7");
    /*is_ambiguous_... S7458C7::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C10*), ABISELECT(48,24), "S7458C7");
    /*is_ambiguous_... S7458C13::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C13*), ABISELECT(48,24), "S7458C7");
    /*is_ambiguous_... S7458C14::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C14*), ABISELECT(48,24), "S7458C7");
    check_base_class_offset(lv, (S7458C9*)(S7458C10*)(S7458C14*), ABISELECT(48,24), "S7458C7");
    /*is_ambiguous_... S7458C7::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C10*), ABISELECT(40,20), "S7458C7");
    /*is_ambiguous_... S7458C13::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C10*)(S7458C13*), ABISELECT(40,20), "S7458C7");
    check_base_class_offset(lv, (S7458C4*)(S7458C12*), 0, "S7458C7");
    check_base_class_offset(lv, (S7458C4*)(S7458C2*), 0, "S7458C7");
    check_base_class_offset(lv, (S7458C12*)(S7458C11*), 0, "S7458C7");
    check_base_class_offset(lv, (S7458C10*)(S7458C14*), ABISELECT(112,56), "S7458C7");
    check_base_class_offset(lv, (S7458C4*)(S7458C8*)(S7458C14*), ABISELECT(120,60), "S7458C7");
    check_base_class_offset(lv, (S19572C5*)(S7458C9*)(S7458C8*)(S7458C14*), ABISELECT(128,64), "S7458C7");
    check_base_class_offset(lv, (S7458C9*)(S7458C8*)(S7458C14*), ABISELECT(128,64), "S7458C7");
    check_base_class_offset(lv, (S7458C8*)(S7458C14*), ABISELECT(120,60), "S7458C7");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C14*), ABISELECT(136,68), "S7458C7");
    check_base_class_offset(lv, (S7458C14*)(S7458C13*), ABISELECT(112,56), "S7458C7");
    /*is_ambiguous_... S7458C13::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C13*), ABISELECT(56,28), "S7458C7");
    check_base_class_offset(lv, (S7458C13*)(S7458C11*), ABISELECT(56,28), "S7458C7");
    check_base_class_offset(lv, (S7458C11*), 0, "S7458C7");
    check_base_class_offset(lv, (S7458C2*), ABISELECT(16,8), "S7458C7");
    check_base_class_offset(lv, (S629C14*), 0, "S7458C7");
    test_class_info(&lv, &cd_S7458C7);
    dp->~S7458C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C7(Test_S7458C7, "S7458C7", ABISELECT(224,132));

#else // __cplusplus

extern void _ZN7S7458C7C1Ev();
extern void _ZN7S7458C7D1Ev();
Name_Map name_map_S7458C7[] = {
  NSPAIR(_ZN7S7458C7C1Ev),
  NSPAIR(_ZN7S7458C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C8;
extern VTBL_ENTRY _ZTI7S7458C8[];
extern  VTBL_ENTRY _ZTV7S7458C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C8[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C12;
extern VTBL_ENTRY _ZTI8S7458C12[];
extern  VTBL_ENTRY _ZTV8S7458C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C12[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C8;
extern VTBL_ENTRY _ZTI7S7458C8[];
extern  VTBL_ENTRY _ZTV7S7458C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C8[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C14;
extern VTBL_ENTRY _ZTI8S7458C14[];
extern  VTBL_ENTRY _ZTV8S7458C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C14[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C13;
extern VTBL_ENTRY _ZTI8S7458C13[];
extern  VTBL_ENTRY _ZTV8S7458C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C13[];
extern Class_Descriptor cd_S7458C11;
extern VTBL_ENTRY _ZTI8S7458C11[];
extern  VTBL_ENTRY _ZTV8S7458C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C11[];
extern Class_Descriptor cd_S7458C2;
extern VTBL_ENTRY _ZTI7S7458C2[];
extern  VTBL_ENTRY _ZTV7S7458C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C2[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
static Base_Class bases_S7458C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(34,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7458C4,    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
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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_S7458C9,    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
    4, //immediately_derived
  0, 0},
  {&cd_S7458C8,    ABISELECT(24,12), //bcp->offset
    17, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    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_S7458C9,    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
    7, //immediately_derived
  0, 1},
  {&cd_S7458C10,    ABISELECT(40,20), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7458C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7458C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7458C10,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7458C4,    ABISELECT(120,60), //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
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    13, //immediately_derived
  0, 0},
  {&cd_S7458C9,    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
    14, //immediately_derived
  0, 0},
  {&cd_S7458C8,    ABISELECT(120,60), //bcp->offset
    44, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7458C4,    ABISELECT(136,68), //bcp->offset
    49, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7458C14,    ABISELECT(112,56), //bcp->offset
    37, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7458C4,    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
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7458C13,    ABISELECT(56,28), //bcp->offset
    26, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7458C11,    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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7458C2,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S629C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7458C7[];
extern void _ZN7S7458C7D1Ev();
extern void _ZN7S7458C7D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S7458C7D1Ev,_ZTv0_n16_N7S7458C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7458C7D1Ev,_ZThn12_N7S7458C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C7D0Ev,_ZTv0_n16_N7S7458C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7458C7D0Ev,_ZThn12_N7S7458C7D0Ev)() __attribute__((weak));
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S7458C7D1Ev,_ZTv0_n32_N7S7458C7D1Ev)();
extern void ABISELECT(_ZThn56_N7S7458C7D1Ev,_ZThn28_N7S7458C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7458C7D0Ev,_ZTv0_n32_N7S7458C7D0Ev)();
extern void ABISELECT(_ZThn56_N7S7458C7D0Ev,_ZThn28_N7S7458C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C7D1Ev,_ZTv0_n20_N7S7458C7D1Ev)();
extern void ABISELECT(_ZThn112_N7S7458C7D1Ev,_ZThn56_N7S7458C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C7D0Ev,_ZTv0_n20_N7S7458C7D0Ev)();
extern void ABISELECT(_ZThn112_N7S7458C7D0Ev,_ZThn56_N7S7458C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N7S7458C7D1Ev,_ZTvn4_n20_N7S7458C7D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7458C7D0Ev,_ZTvn4_n20_N7S7458C7D0Ev)();
static  VTBL_ENTRY vtc_S7458C7[] = {
  0,
  ABISELECT(24,12),
  ABISELECT(112,56),
  ABISELECT(40,20),
  ABISELECT(48,24),
  ABISELECT(56,28),
  0,
  0,
  ABISELECT(34,18),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&_ZN7S7458C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C7D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(18,10),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  ABISELECT(-24,-12),
  ABISELECT(10,6),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C7D1Ev,_ZTv0_n16_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C7D0Ev,_ZTv0_n16_N7S7458C7D0Ev),
  ABISELECT(8,4),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  ABISELECT(-56,-28),
  0,
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  ABISELECT(-22,-10),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C7D1Ev,_ZTv0_n32_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C7D0Ev,_ZTv0_n32_N7S7458C7D0Ev),
  ABISELECT(-112,-56),
  ABISELECT(-78,-38),
  ABISELECT(-64,-32),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C7D1Ev,_ZTv0_n20_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C7D0Ev,_ZTv0_n20_N7S7458C7D0Ev),
  ABISELECT(-86,-42),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C7D1Ev,_ZTvn4_n20_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C7D0Ev,_ZTvn4_n20_N7S7458C7D0Ev),
  ABISELECT(-102,-50),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
};
extern VTBL_ENTRY _ZTV7S7458C7[];
extern void _ZN8S7458C11D1Ev();
extern void _ZN8S7458C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C11__7S7458C7[] = {
  ABISELECT(112,56),
  ABISELECT(40,20),
  ABISELECT(48,24),
  ABISELECT(56,28),
  0,
  0,
  ABISELECT(34,18),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&_ZN8S7458C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C11D0Ev,
};
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev)();
extern void ABISELECT(_ZThn56_N8S7458C11D1Ev,_ZThn28_N8S7458C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev)();
extern void ABISELECT(_ZThn56_N8S7458C11D0Ev,_ZThn28_N8S7458C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C13__8S7458C11__7S7458C7[] = {
  ABISELECT(-56,-28),
  0,
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  ABISELECT(-22,-10),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__8S7458C11__7S7458C7[] = {
  ABISELECT(8,4),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev)();
extern void ABISELECT(_ZThn112_N8S7458C11D1Ev,_ZThn56_N8S7458C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev)();
extern void ABISELECT(_ZThn112_N8S7458C11D0Ev,_ZThn56_N8S7458C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__8S7458C11__7S7458C7[] = {
  ABISELECT(-112,-56),
  ABISELECT(-78,-38),
  ABISELECT(-64,-32),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N8S7458C11D1Ev,_ZTvn4_n20_N8S7458C11D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S7458C11D0Ev,_ZTvn4_n20_N8S7458C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__8S7458C11__7S7458C7[] = {
  ABISELECT(-86,-42),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C11D1Ev,_ZTvn4_n20_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C11D0Ev,_ZTvn4_n20_N8S7458C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A2__8S7458C11__7S7458C7[] = {
  ABISELECT(-102,-50),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C2__7S7458C7[] = {
  ABISELECT(-16,-8),
  ABISELECT(18,10),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__7S7458C2__7S7458C7[] = {
  ABISELECT(34,18),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7458C2[0]),
};
extern void _ZN7S7458C8D1Ev();
extern void _ZN7S7458C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C8__7S7458C7[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C8[0]),
  (VTBL_ENTRY)&_ZN7S7458C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C47S7458C8__7S7458C7[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__7S7458C7[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C12__7S7458C7[] = {
  0,
  ABISELECT(34,18),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__A1__7S7458C7[] = {
  ABISELECT(34,18),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
extern void _ZN8S7458C132v1Ev();
extern void _ZN8S7458C13D1Ev();
extern void _ZN8S7458C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C13__7S7458C7[] = {
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  ABISELECT(-22,-10),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&_ZN8S7458C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C13__A4__7S7458C7[] = {
  ABISELECT(-22,-10),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__8S7458C13__7S7458C7[] = {
  ABISELECT(8,4),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev)();
extern void ABISELECT(_ZThn56_N8S7458C13D1Ev,_ZThn28_N8S7458C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev)();
extern void ABISELECT(_ZThn56_N8S7458C13D0Ev,_ZThn28_N8S7458C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__8S7458C13__7S7458C7[] = {
  ABISELECT(-56,-28),
  ABISELECT(-78,-38),
  ABISELECT(-64,-32),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N8S7458C13D1Ev,_ZTvn4_n20_N8S7458C13D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S7458C13D0Ev,_ZTvn4_n20_N8S7458C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__8S7458C13__7S7458C7[] = {
  ABISELECT(-86,-42),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C13D1Ev,_ZTvn4_n20_N8S7458C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C13D0Ev,_ZTvn4_n20_N8S7458C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A1__8S7458C13__7S7458C7[] = {
  ABISELECT(-102,-50),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
};
extern void _ZN8S7458C14D1Ev();
extern void _ZN8S7458C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C14__7S7458C7[] = {
  ABISELECT(-78,-38),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&_ZN8S7458C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C14D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7458C108S7458C14__A1__7S7458C7[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
extern void _ZN7S7458C8D1Ev();
extern void _ZN7S7458C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__A1__7S7458C7[] = {
  ABISELECT(-86,-42),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C8[0]),
  (VTBL_ENTRY)&_ZN7S7458C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C47S7458C88S7458C14__A2__7S7458C7[] = {
  ABISELECT(-86,-42),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A3__7S7458C7[] = {
  ABISELECT(-102,-50),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
extern void ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev)();
extern void ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C8__8S7458C14__7S7458C7[] = {
  ABISELECT(-86,-42),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__A1__8S7458C14__7S7458C7[] = {
  ABISELECT(-102,-50),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
};
static  VTT_ENTRY vtt_S7458C7[] = {
  {&(_ZTV7S7458C7[11]),  11,52},
  {&(_tg__ZTV8S7458C11__7S7458C7[9]),  9,11},
  {&(_tg__ZTV8S7458C11__7S7458C7[9]),  9,11},
  {&(_tg__ZTV8S7458C11__7S7458C7[9]),  9,11},
  {&(_tg__ZTV8S7458C13__8S7458C11__7S7458C7[8]),  8,11},
  {&(_tg__ZTV8S7458C10__8S7458C11__7S7458C7[3]),  3,3},
  {&(_tg__ZTV8S7458C14__8S7458C11__7S7458C7[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__8S7458C11__7S7458C7[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A2__8S7458C11__7S7458C7[3]),  3,3},
  {&(_tg__ZTV7S7458C2__7S7458C7[4]),  4,4},
  {&(_tg__ZTV7S7458C4__7S7458C2__7S7458C7[3]),  3,3},
  {&(_ZTV7S7458C7[21]),  21,52},
  {&(_ZTV7S7458C7[26]),  26,52},
  {&(_ZTV7S7458C7[11]),  11,52},
  {&(_ZTV7S7458C7[11]),  11,52},
  {&(_ZTV7S7458C7[34]),  34,52},
  {&(_ZTV7S7458C7[42]),  42,52},
  {&(_ZTV7S7458C7[47]),  47,52},
  {&(_ZTV7S7458C7[52]),  52,52},
  {&(_ZTV7S7458C7[17]),  17,52},
  {&(_tg__ZTV7S7458C8__7S7458C7[3]),  3,5},
  {&(_tg__ZTV7S7458C47S7458C8__7S7458C7[3]),  3,3},
  {&(_tg__ZTV8S7458C10__7S7458C7[3]),  3,3},
  {&(_tg__ZTV8S7458C12__7S7458C7[4]),  4,4},
  {&(_tg__ZTV8S7458C12__7S7458C7[4]),  4,4},
  {&(_tg__ZTV7S7458C4__A1__7S7458C7[3]),  3,3},
  {&(_tg__ZTV8S7458C13__7S7458C7[6]),  6,9},
  {&(_tg__ZTV7S7458C48S7458C13__A4__7S7458C7[3]),  3,3},
  {&(_tg__ZTV8S7458C10__8S7458C13__7S7458C7[3]),  3,3},
  {&(_tg__ZTV8S7458C14__8S7458C13__7S7458C7[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__8S7458C13__7S7458C7[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A1__8S7458C13__7S7458C7[3]),  3,3},
  {&(_tg__ZTV8S7458C14__7S7458C7[4]),  4,6},
  {&(_tg__ZTV8S7458C108S7458C14__A1__7S7458C7[3]),  3,3},
  {&(_tg__ZTV7S7458C88S7458C14__A1__7S7458C7[3]),  3,5},
  {&(_tg__ZTV7S7458C47S7458C88S7458C14__A2__7S7458C7[3]),  3,3},
  {&(_tg__ZTV7S7458C48S7458C14__A3__7S7458C7[3]),  3,3},
  {&(_tg__ZTV7S7458C8__8S7458C14__7S7458C7[3]),  3,5},
  {&(_tg__ZTV7S7458C4__A1__8S7458C14__7S7458C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7458C7[];
extern  VTBL_ENTRY _ZTV7S7458C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C7[];
static VTBL_ENTRY alt_thunk_names36[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7458C13D0Ev,_ZThn28_N8S7458C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7458C13D1Ev,_ZThn28_N8S7458C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S7458C11D0Ev,_ZThn56_N8S7458C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S7458C11D1Ev,_ZThn56_N8S7458C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7458C11D0Ev,_ZThn28_N8S7458C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7458C11D1Ev,_ZThn28_N8S7458C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C7D0Ev,_ZTv0_n20_N7S7458C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7458C7D0Ev,_ZThn56_N7S7458C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C7D1Ev,_ZTv0_n20_N7S7458C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7458C7D1Ev,_ZThn56_N7S7458C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C7D0Ev,_ZTv0_n32_N7S7458C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7458C7D0Ev,_ZThn28_N7S7458C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C7D1Ev,_ZTv0_n32_N7S7458C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7458C7D1Ev,_ZThn28_N7S7458C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C7D0Ev,_ZTv0_n16_N7S7458C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C7D0Ev,_ZThn12_N7S7458C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C7D1Ev,_ZTv0_n16_N7S7458C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C7D1Ev,_ZThn12_N7S7458C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7458C7 = {  "S7458C7", // class name
  bases_S7458C7, 22,
  &(vtc_S7458C7[0]), // expected_vtbl_contents
  &(vtt_S7458C7[0]), // expected_vtt_contents
  ABISELECT(224,132), // object size
  NSPAIRA(_ZTI7S7458C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7458C7),52, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7458C7),39, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names36,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7458C6  : virtual S7458C4 , virtual S7458C7 , S629C14 {
  virtual  ~S7458C6(); // _ZN7S7458C6D2Ev
  S7458C6(); // tgen
};
//SIG(-1 S7458C6) C1{ VBC2{ VBC3{ m Fs:13}} VBC4{ VBC5{ BC2 BC6{ BC3} vd} VBC7{ VBC6} BC8{ VBC3 VBC9{ VBC2} VBC10{ VBC6 VBC7 VBC11{ VBC3 VBC6 BC7 BC5 BC2 vd FD[5]} BC2 v1 FC12{ VBC13{ VBC3} VBC14{ VBC3} BC3 VBC15{ BC3} vd Fi}} vd Fi} BC16{ VBC3 VBC2} VBC17{ m}} BC17 vd}


 S7458C6 ::~S7458C6(){ note_dtor("S7458C6", this);}
S7458C6 ::S7458C6(){ note_ctor("S7458C6", this);} // tgen

static void Test_S7458C6()
{
  extern Class_Descriptor cd_S7458C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,35)];
    init_test(&cd_S7458C6, buf);
    S7458C6 *dp, &lv = *(dp=new (buf) S7458C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,136), "sizeof(S7458C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7458C6)");
    /*is_ambiguous_... S7458C6::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*), ABISELECT(8,4), "S7458C6");
    /*is_ambiguous_... S7458C6::S7458C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C8*), ABISELECT(8,4), "S7458C6");
    /*is_ambiguous_... S7458C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C11*)(S7458C7*), ABISELECT(8,4), "S7458C6");
    /*is_ambiguous_... S7458C14::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C14*), ABISELECT(8,4), "S7458C6");
    check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C8*)(S7458C14*), ABISELECT(8,4), "S7458C6");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C14*), ABISELECT(8,4), "S7458C6");
    /*is_ambiguous_... S7458C13::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C13*), ABISELECT(8,4), "S7458C6");
    check_base_class_offset(lv, (S19572C5*)(S7458C2*)(S7458C7*), ABISELECT(8,4), "S7458C6");
    /*is_ambiguous_... S7458C6::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*), ABISELECT(16,8), "S7458C6");
    check_base_class_offset(lv, (S7458C4*)(S7458C12*), ABISELECT(16,8), "S7458C6");
    check_base_class_offset(lv, (S7458C4*)(S7458C2*)(S7458C7*), ABISELECT(16,8), "S7458C6");
    /*is_ambiguous_... S7458C6::S7458C8 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C8*), ABISELECT(40,20), "S7458C6");
    /*is_ambiguous_... S7458C6::S7458C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C9*)(S7458C8*), ABISELECT(48,24), "S7458C6");
    /*is_ambiguous_... S7458C6::S7458C8 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C8*), ABISELECT(48,24), "S7458C6");
    /*is_ambiguous_... S7458C7::S7458C8 */ AMB_check_base_class_offset(lv, (S7458C8*)(S7458C7*), ABISELECT(40,20), "S7458C6");
    /*is_ambiguous_... S7458C6::S7458C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C9*), ABISELECT(50,26), "S7458C6");
    /*is_ambiguous_... S7458C6::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C10*), ABISELECT(50,26), "S7458C6");
    /*is_ambiguous_... S7458C13::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C13*), ABISELECT(50,26), "S7458C6");
    /*is_ambiguous_... S7458C14::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C14*), ABISELECT(50,26), "S7458C6");
    check_base_class_offset(lv, (S7458C9*)(S7458C10*)(S7458C14*), ABISELECT(50,26), "S7458C6");
    /*is_ambiguous_... S7458C7::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C10*)(S7458C7*), 0, "S7458C6");
    /*is_ambiguous_... S7458C13::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C10*)(S7458C13*), 0, "S7458C6");
    check_base_class_offset(lv, (S7458C12*)(S7458C11*)(S7458C7*), ABISELECT(16,8), "S7458C6");
    check_base_class_offset(lv, (S7458C10*)(S7458C14*), ABISELECT(112,56), "S7458C6");
    check_base_class_offset(lv, (S7458C4*)(S7458C8*)(S7458C14*), ABISELECT(120,60), "S7458C6");
    check_base_class_offset(lv, (S19572C5*)(S7458C9*)(S7458C8*)(S7458C14*), ABISELECT(128,64), "S7458C6");
    check_base_class_offset(lv, (S7458C9*)(S7458C8*)(S7458C14*), ABISELECT(128,64), "S7458C6");
    check_base_class_offset(lv, (S7458C8*)(S7458C14*), ABISELECT(120,60), "S7458C6");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C14*), ABISELECT(136,68), "S7458C6");
    check_base_class_offset(lv, (S7458C14*)(S7458C13*), ABISELECT(112,56), "S7458C6");
    /*is_ambiguous_... S7458C13::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C13*), ABISELECT(56,28), "S7458C6");
    check_base_class_offset(lv, (S7458C13*)(S7458C11*)(S7458C7*), ABISELECT(56,28), "S7458C6");
    check_base_class_offset(lv, (S7458C11*)(S7458C7*), ABISELECT(16,8), "S7458C6");
    check_base_class_offset(lv, (S7458C2*)(S7458C7*), ABISELECT(32,16), "S7458C6");
    check_base_class_offset(lv, (S629C14*)(S7458C7*), ABISELECT(224,132), "S7458C6");
    check_base_class_offset(lv, (S7458C7*), ABISELECT(16,8), "S7458C6");
    /*is_ambiguous_... S7458C6::S629C14 */ AMB_check_base_class_offset(lv, (S629C14*), 0, "S7458C6");
    test_class_info(&lv, &cd_S7458C6);
    dp->~S7458C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C6(Test_S7458C6, "S7458C6", ABISELECT(240,136));

#else // __cplusplus

extern void _ZN7S7458C6C1Ev();
extern void _ZN7S7458C6D2Ev();
Name_Map name_map_S7458C6[] = {
  NSPAIR(_ZN7S7458C6C1Ev),
  NSPAIR(_ZN7S7458C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C8;
extern VTBL_ENTRY _ZTI7S7458C8[];
extern  VTBL_ENTRY _ZTV7S7458C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C8[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S7458C12;
extern VTBL_ENTRY _ZTI8S7458C12[];
extern  VTBL_ENTRY _ZTV8S7458C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C12[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C8;
extern VTBL_ENTRY _ZTI7S7458C8[];
extern  VTBL_ENTRY _ZTV7S7458C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C8[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C14;
extern VTBL_ENTRY _ZTI8S7458C14[];
extern  VTBL_ENTRY _ZTV8S7458C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C14[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C13;
extern VTBL_ENTRY _ZTI8S7458C13[];
extern  VTBL_ENTRY _ZTV8S7458C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C13[];
extern Class_Descriptor cd_S7458C11;
extern VTBL_ENTRY _ZTI8S7458C11[];
extern  VTBL_ENTRY _ZTV8S7458C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C11[];
extern Class_Descriptor cd_S7458C2;
extern VTBL_ENTRY _ZTI7S7458C2[];
extern  VTBL_ENTRY _ZTV7S7458C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C2[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S7458C7;
extern VTBL_ENTRY _ZTI7S7458C7[];
extern  VTBL_ENTRY _ZTV7S7458C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C7[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
static Base_Class bases_S7458C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
  0, 1},
  {&cd_S7458C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7458C4,    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
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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_S7458C9,    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_S7458C8,    ABISELECT(40,20), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19572C5,    ABISELECT(50,26), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7458C9,    ABISELECT(50,26), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7458C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7458C12,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7458C10,    ABISELECT(112,56), //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
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7458C4,    ABISELECT(120,60), //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
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    13, //immediately_derived
  0, 0},
  {&cd_S7458C9,    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
    14, //immediately_derived
  0, 0},
  {&cd_S7458C8,    ABISELECT(120,60), //bcp->offset
    56, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7458C4,    ABISELECT(136,68), //bcp->offset
    61, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7458C14,    ABISELECT(112,56), //bcp->offset
    49, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7458C4,    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
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7458C13,    ABISELECT(56,28), //bcp->offset
    38, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7458C11,    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
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7458C2,    ABISELECT(32,16), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S629C14,    ABISELECT(224,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
    22, //immediately_derived
  0, 1},
  {&cd_S7458C7,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S629C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7458C6[];
extern void _ZN7S7458C6D1Ev();
extern void _ZN7S7458C6D0Ev();
extern void ABISELECT(_ZTv0_n96_N7S7458C6D1Ev,_ZTv0_n48_N7S7458C6D1Ev)();
extern void ABISELECT(_ZThn16_N7S7458C6D1Ev,_ZThn8_N7S7458C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7458C6D0Ev,_ZTv0_n48_N7S7458C6D0Ev)();
extern void ABISELECT(_ZThn16_N7S7458C6D0Ev,_ZThn8_N7S7458C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C6D1Ev,_ZTv0_n16_N7S7458C6D1Ev)();
extern void ABISELECT(_ZThn40_N7S7458C6D1Ev,_ZThn20_N7S7458C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C6D0Ev,_ZTv0_n16_N7S7458C6D0Ev)();
extern void ABISELECT(_ZThn40_N7S7458C6D0Ev,_ZThn20_N7S7458C6D0Ev)() __attribute__((weak));
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S7458C6D1Ev,_ZTv0_n32_N7S7458C6D1Ev)();
extern void ABISELECT(_ZThn56_N7S7458C6D1Ev,_ZThn28_N7S7458C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7458C6D0Ev,_ZTv0_n32_N7S7458C6D0Ev)();
extern void ABISELECT(_ZThn56_N7S7458C6D0Ev,_ZThn28_N7S7458C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C6D1Ev,_ZTv0_n20_N7S7458C6D1Ev)();
extern void ABISELECT(_ZThn112_N7S7458C6D1Ev,_ZThn56_N7S7458C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C6D0Ev,_ZTv0_n20_N7S7458C6D0Ev)();
extern void ABISELECT(_ZThn112_N7S7458C6D0Ev,_ZThn56_N7S7458C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N7S7458C6D1Ev,_ZTvn4_n20_N7S7458C6D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7458C6D0Ev,_ZTvn4_n20_N7S7458C6D0Ev)();
static  VTBL_ENTRY vtc_S7458C6[] = {
  ABISELECT(224,132),
  ABISELECT(112,56),
  ABISELECT(56,28),
  ABISELECT(16,8),
  0,
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(8,4),
  ABISELECT(16,8),
  ABISELECT(50,26),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&_ZN7S7458C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C6D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(208,124),
  ABISELECT(24,12),
  ABISELECT(96,48),
  ABISELECT(-16,-8),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7458C6D1Ev,_ZTv0_n48_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7458C6D0Ev,_ZTv0_n48_N7S7458C6D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  ABISELECT(-40,-20),
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C6D1Ev,_ZTv0_n16_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C6D0Ev,_ZTv0_n16_N7S7458C6D0Ev),
  ABISELECT(-56,-28),
  0,
  ABISELECT(56,28),
  ABISELECT(-56,-28),
  ABISELECT(-6,-2),
  ABISELECT(-48,-24),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C6D1Ev,_ZTv0_n32_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C6D0Ev,_ZTv0_n32_N7S7458C6D0Ev),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-62,-30),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C6D1Ev,_ZTv0_n20_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C6D0Ev,_ZTv0_n20_N7S7458C6D0Ev),
  ABISELECT(-112,-56),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C6D1Ev,_ZTvn4_n20_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C6D0Ev,_ZTvn4_n20_N7S7458C6D0Ev),
  ABISELECT(-128,-64),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
};
extern VTBL_ENTRY _ZTV7S7458C6[];
static  VTBL_ENTRY _tg__ZTV7S7458C4__7S7458C6[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
extern void _ZN7S7458C7D1Ev();
extern void _ZN7S7458C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C7__7S7458C6[] = {
  ABISELECT(208,124),
  ABISELECT(24,12),
  ABISELECT(96,48),
  ABISELECT(-16,-8),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&_ZN7S7458C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C7D0Ev,
};
extern void _ZN8S7458C11D1Ev();
extern void _ZN8S7458C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C117S7458C7__7S7458C6[] = {
  ABISELECT(96,48),
  ABISELECT(-16,-8),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&_ZN8S7458C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C11D0Ev,
};
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev)();
extern void ABISELECT(_ZThn40_N8S7458C11D1Ev,_ZThn20_N8S7458C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev)();
extern void ABISELECT(_ZThn40_N8S7458C11D0Ev,_ZThn20_N8S7458C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C13__8S7458C117S7458C7__7S7458C6[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(56,28),
  ABISELECT(-56,-28),
  ABISELECT(-6,-2),
  ABISELECT(-48,-24),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__8S7458C117S7458C7__7S7458C6[] = {
  ABISELECT(50,26),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev)();
extern void ABISELECT(_ZThn96_N8S7458C11D1Ev,_ZThn48_N8S7458C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev)();
extern void ABISELECT(_ZThn96_N8S7458C11D0Ev,_ZThn48_N8S7458C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__8S7458C117S7458C7__7S7458C6[] = {
  ABISELECT(-96,-48),
  ABISELECT(-104,-52),
  ABISELECT(-62,-30),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N8S7458C11D1Ev,_ZTvn4_n20_N8S7458C11D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S7458C11D0Ev,_ZTvn4_n20_N8S7458C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__8S7458C117S7458C7__7S7458C6[] = {
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C11D1Ev,_ZTvn4_n20_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C11D0Ev,_ZTvn4_n20_N8S7458C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A2__8S7458C117S7458C7__7S7458C6[] = {
  ABISELECT(-128,-64),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C27S7458C7__7S7458C6[] = {
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__7S7458C27S7458C7__7S7458C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7458C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7458C7D1Ev,_ZTv0_n16_N7S7458C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7458C7D1Ev,_ZThn12_N7S7458C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C7D0Ev,_ZTv0_n16_N7S7458C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7458C7D0Ev,_ZThn12_N7S7458C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7458C8__7S7458C7__7S7458C6[] = {
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C7D1Ev,_ZTv0_n16_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C7D0Ev,_ZTv0_n16_N7S7458C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__7S7458C7__7S7458C6[] = {
  ABISELECT(50,26),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
};
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S7458C7D1Ev,_ZTv0_n32_N7S7458C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S7458C7D1Ev,_ZThn20_N7S7458C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7458C7D0Ev,_ZTv0_n32_N7S7458C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S7458C7D0Ev,_ZThn20_N7S7458C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C13__7S7458C7__7S7458C6[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(56,28),
  ABISELECT(-56,-28),
  ABISELECT(-6,-2),
  ABISELECT(-48,-24),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C7D1Ev,_ZTv0_n32_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C7D0Ev,_ZTv0_n32_N7S7458C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7458C7D1Ev,_ZTv0_n20_N7S7458C7D1Ev)();
extern void ABISELECT(_ZThn96_N7S7458C7D1Ev,_ZThn48_N7S7458C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C7D0Ev,_ZTv0_n20_N7S7458C7D0Ev)();
extern void ABISELECT(_ZThn96_N7S7458C7D0Ev,_ZThn48_N7S7458C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__7S7458C7__7S7458C6[] = {
  ABISELECT(-96,-48),
  ABISELECT(-104,-52),
  ABISELECT(-62,-30),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C7D1Ev,_ZTv0_n20_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C7D0Ev,_ZTv0_n20_N7S7458C7D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N7S7458C7D1Ev,_ZTvn4_n20_N7S7458C7D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7458C7D0Ev,_ZTvn4_n20_N7S7458C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__A1__7S7458C7__7S7458C6[] = {
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C7D1Ev,_ZTvn4_n20_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C7D0Ev,_ZTvn4_n20_N7S7458C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A3__7S7458C7__7S7458C6[] = {
  ABISELECT(-128,-64),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C2__7S7458C7__7S7458C6[] = {
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
};
extern void _ZN7S7458C8D1Ev();
extern void _ZN7S7458C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C8__7S7458C6[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C8[0]),
  (VTBL_ENTRY)&_ZN7S7458C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C47S7458C8__A1__7S7458C6[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__7S7458C6[] = {
  ABISELECT(50,26),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C12__7S7458C6[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C12[0]),
};
extern void _ZN8S7458C132v1Ev();
extern void _ZN8S7458C13D1Ev();
extern void _ZN8S7458C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C13__7S7458C6[] = {
  ABISELECT(56,28),
  ABISELECT(-56,-28),
  ABISELECT(-6,-2),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&_ZN8S7458C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C13__A4__7S7458C6[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__8S7458C13__7S7458C6[] = {
  ABISELECT(50,26),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev)();
extern void ABISELECT(_ZThn56_N8S7458C13D1Ev,_ZThn28_N8S7458C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev)();
extern void ABISELECT(_ZThn56_N8S7458C13D0Ev,_ZThn28_N8S7458C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__8S7458C13__7S7458C6[] = {
  ABISELECT(-56,-28),
  ABISELECT(-104,-52),
  ABISELECT(-62,-30),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N8S7458C13D1Ev,_ZTvn4_n20_N8S7458C13D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S7458C13D0Ev,_ZTvn4_n20_N8S7458C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__8S7458C13__7S7458C6[] = {
  ABISELECT(-112,-56),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C13D1Ev,_ZTvn4_n20_N8S7458C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C13D0Ev,_ZTvn4_n20_N8S7458C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A1__8S7458C13__7S7458C6[] = {
  ABISELECT(-128,-64),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
};
extern void _ZN8S7458C14D1Ev();
extern void _ZN8S7458C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C14__7S7458C6[] = {
  ABISELECT(-104,-52),
  ABISELECT(-62,-30),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&_ZN8S7458C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C14D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7458C108S7458C14__A1__7S7458C6[] = {
  ABISELECT(-62,-30),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
extern void _ZN7S7458C8D1Ev();
extern void _ZN7S7458C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__A1__7S7458C6[] = {
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C8[0]),
  (VTBL_ENTRY)&_ZN7S7458C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C47S7458C88S7458C14__A2__7S7458C6[] = {
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A3__7S7458C6[] = {
  ABISELECT(-128,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
extern void ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev)();
extern void ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C8__8S7458C14__7S7458C6[] = {
  ABISELECT(-112,-56),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__A1__8S7458C14__7S7458C6[] = {
  ABISELECT(-128,-64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
};
static  VTT_ENTRY vtt_S7458C6[] = {
  {&(_ZTV7S7458C6[12]),  12,64},
  {&(_ZTV7S7458C6[26]),  26,64},
  {&(_ZTV7S7458C6[26]),  26,64},
  {&(_ZTV7S7458C6[36]),  36,64},
  {&(_ZTV7S7458C6[12]),  12,64},
  {&(_ZTV7S7458C6[26]),  26,64},
  {&(_ZTV7S7458C6[46]),  46,64},
  {&(_ZTV7S7458C6[54]),  54,64},
  {&(_ZTV7S7458C6[59]),  59,64},
  {&(_ZTV7S7458C6[64]),  64,64},
  {&(_ZTV7S7458C6[32]),  32,64},
  {&(_tg__ZTV7S7458C4__7S7458C6[3]),  3,3},
  {&(_tg__ZTV7S7458C7__7S7458C6[11]),  11,13},
  {&(_tg__ZTV8S7458C117S7458C7__7S7458C6[9]),  9,11},
  {&(_tg__ZTV8S7458C117S7458C7__7S7458C6[9]),  9,11},
  {&(_tg__ZTV8S7458C117S7458C7__7S7458C6[9]),  9,11},
  {&(_tg__ZTV8S7458C13__8S7458C117S7458C7__7S7458C6[8]),  8,11},
  {&(_tg__ZTV8S7458C10__8S7458C117S7458C7__7S7458C6[3]),  3,3},
  {&(_tg__ZTV8S7458C14__8S7458C117S7458C7__7S7458C6[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__8S7458C117S7458C7__7S7458C6[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A2__8S7458C117S7458C7__7S7458C6[3]),  3,3},
  {&(_tg__ZTV7S7458C27S7458C7__7S7458C6[4]),  4,4},
  {&(_tg__ZTV7S7458C4__7S7458C27S7458C7__7S7458C6[3]),  3,3},
  {&(_tg__ZTV7S7458C8__7S7458C7__7S7458C6[4]),  4,6},
  {&(_tg__ZTV8S7458C10__7S7458C7__7S7458C6[3]),  3,3},
  {&(_tg__ZTV7S7458C7__7S7458C6[11]),  11,13},
  {&(_tg__ZTV7S7458C7__7S7458C6[11]),  11,13},
  {&(_tg__ZTV8S7458C13__7S7458C7__7S7458C6[8]),  8,11},
  {&(_tg__ZTV8S7458C14__7S7458C7__7S7458C6[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__A1__7S7458C7__7S7458C6[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A3__7S7458C7__7S7458C6[3]),  3,3},
  {&(_tg__ZTV7S7458C2__7S7458C7__7S7458C6[4]),  4,4},
  {&(_tg__ZTV7S7458C8__7S7458C6[3]),  3,5},
  {&(_tg__ZTV7S7458C47S7458C8__A1__7S7458C6[3]),  3,3},
  {&(_tg__ZTV8S7458C10__7S7458C6[3]),  3,3},
  {&(_tg__ZTV8S7458C12__7S7458C6[4]),  4,4},
  {&(_tg__ZTV8S7458C12__7S7458C6[4]),  4,4},
  {&(_tg__ZTV8S7458C13__7S7458C6[6]),  6,9},
  {&(_tg__ZTV7S7458C48S7458C13__A4__7S7458C6[3]),  3,3},
  {&(_tg__ZTV8S7458C10__8S7458C13__7S7458C6[3]),  3,3},
  {&(_tg__ZTV8S7458C14__8S7458C13__7S7458C6[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__8S7458C13__7S7458C6[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A1__8S7458C13__7S7458C6[3]),  3,3},
  {&(_tg__ZTV8S7458C14__7S7458C6[4]),  4,6},
  {&(_tg__ZTV8S7458C108S7458C14__A1__7S7458C6[3]),  3,3},
  {&(_tg__ZTV7S7458C88S7458C14__A1__7S7458C6[3]),  3,5},
  {&(_tg__ZTV7S7458C47S7458C88S7458C14__A2__7S7458C6[3]),  3,3},
  {&(_tg__ZTV7S7458C48S7458C14__A3__7S7458C6[3]),  3,3},
  {&(_tg__ZTV7S7458C8__8S7458C14__7S7458C6[3]),  3,5},
  {&(_tg__ZTV7S7458C4__A1__8S7458C14__7S7458C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7458C6[];
extern  VTBL_ENTRY _ZTV7S7458C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C6[];
static VTBL_ENTRY alt_thunk_names37[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7458C13D0Ev,_ZThn28_N8S7458C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7458C13D1Ev,_ZThn28_N8S7458C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C7D0Ev,_ZTv0_n20_N7S7458C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7458C7D0Ev,_ZThn48_N7S7458C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C7D1Ev,_ZTv0_n20_N7S7458C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7458C7D1Ev,_ZThn48_N7S7458C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C7D0Ev,_ZTv0_n32_N7S7458C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7458C7D0Ev,_ZThn20_N7S7458C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C7D1Ev,_ZTv0_n32_N7S7458C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7458C7D1Ev,_ZThn20_N7S7458C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C7D0Ev,_ZTv0_n16_N7S7458C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C7D0Ev,_ZThn12_N7S7458C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C7D1Ev,_ZTv0_n16_N7S7458C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C7D1Ev,_ZThn12_N7S7458C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7458C11D0Ev,_ZThn48_N8S7458C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7458C11D1Ev,_ZThn48_N8S7458C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S7458C11D0Ev,_ZThn20_N8S7458C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S7458C11D1Ev,_ZThn20_N8S7458C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C6D0Ev,_ZTv0_n20_N7S7458C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7458C6D0Ev,_ZThn56_N7S7458C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C6D1Ev,_ZTv0_n20_N7S7458C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7458C6D1Ev,_ZThn56_N7S7458C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C6D0Ev,_ZTv0_n32_N7S7458C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7458C6D0Ev,_ZThn28_N7S7458C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C6D1Ev,_ZTv0_n32_N7S7458C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7458C6D1Ev,_ZThn28_N7S7458C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C6D0Ev,_ZTv0_n16_N7S7458C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7458C6D0Ev,_ZThn20_N7S7458C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C6D1Ev,_ZTv0_n16_N7S7458C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7458C6D1Ev,_ZThn20_N7S7458C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7458C6D0Ev,_ZTv0_n48_N7S7458C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7458C6D0Ev,_ZThn8_N7S7458C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7458C6D1Ev,_ZTv0_n48_N7S7458C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7458C6D1Ev,_ZThn8_N7S7458C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7458C6 = {  "S7458C6", // class name
  bases_S7458C6, 24,
  &(vtc_S7458C6[0]), // expected_vtbl_contents
  &(vtt_S7458C6[0]), // expected_vtt_contents
  ABISELECT(240,136), // object size
  NSPAIRA(_ZTI7S7458C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7458C6),64, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7458C6),50, //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  S7458C5  : virtual S7458C6 {
  char s7458c5f0[10];
  ~S7458C5(); // tgen
  S7458C5(); // tgen
};
//SIG(-1 S7458C5) C1{ VBC2{ VBC3{ VBC4{ m Fs:13}} VBC5{ VBC6{ BC3 BC7{ BC4} vd} VBC8{ VBC7} BC9{ VBC4 VBC10{ VBC3} VBC11{ VBC7 VBC8 VBC12{ VBC4 VBC7 BC8 BC6 BC3 vd FD[5]} BC3 v1 FC13{ VBC14{ VBC4} VBC15{ VBC4} BC4 VBC16{ BC4} vd Fi}} vd Fi} BC17{ VBC4 VBC3} VBC18{ m}} BC18 vd} Fc[10]}


S7458C5 ::~S7458C5(){ note_dtor("S7458C5", this);} // tgen
S7458C5 ::S7458C5(){ note_ctor("S7458C5", this);} // tgen

static void Test_S7458C5()
{
  extern Class_Descriptor cd_S7458C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,37)];
    init_test(&cd_S7458C5, buf);
    S7458C5 *dp, &lv = *(dp=new (buf) S7458C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,144), "sizeof(S7458C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7458C5)");
    /*is_ambiguous_... S7458C5::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*), ABISELECT(18,14), "S7458C5");
    /*is_ambiguous_... S7458C5::S7458C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C8*), ABISELECT(18,14), "S7458C5");
    /*is_ambiguous_... S7458C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C11*)(S7458C7*), ABISELECT(18,14), "S7458C5");
    /*is_ambiguous_... S7458C14::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C14*), ABISELECT(18,14), "S7458C5");
    check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C8*)(S7458C14*), ABISELECT(18,14), "S7458C5");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C14*), ABISELECT(18,14), "S7458C5");
    /*is_ambiguous_... S7458C13::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C13*), ABISELECT(18,14), "S7458C5");
    check_base_class_offset(lv, (S19572C5*)(S7458C2*)(S7458C7*), ABISELECT(18,14), "S7458C5");
    /*is_ambiguous_... S7458C6::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C6*), ABISELECT(24,16), "S7458C5");
    check_base_class_offset(lv, (S7458C4*)(S7458C12*), ABISELECT(24,16), "S7458C5");
    check_base_class_offset(lv, (S7458C4*)(S7458C2*)(S7458C7*), ABISELECT(24,16), "S7458C5");
    /*is_ambiguous_... S7458C5::S7458C8 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C8*), ABISELECT(48,28), "S7458C5");
    /*is_ambiguous_... S7458C5::S7458C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C9*)(S7458C8*), ABISELECT(56,32), "S7458C5");
    /*is_ambiguous_... S7458C5::S7458C8 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C8*), ABISELECT(56,32), "S7458C5");
    /*is_ambiguous_... S7458C7::S7458C8 */ AMB_check_base_class_offset(lv, (S7458C8*)(S7458C7*), ABISELECT(48,28), "S7458C5");
    /*is_ambiguous_... S7458C5::S7458C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C9*), ABISELECT(58,34), "S7458C5");
    /*is_ambiguous_... S7458C5::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C10*), ABISELECT(58,34), "S7458C5");
    /*is_ambiguous_... S7458C13::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C13*), ABISELECT(58,34), "S7458C5");
    /*is_ambiguous_... S7458C14::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C14*), ABISELECT(58,34), "S7458C5");
    check_base_class_offset(lv, (S7458C9*)(S7458C10*)(S7458C14*), ABISELECT(58,34), "S7458C5");
    /*is_ambiguous_... S7458C7::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C10*)(S7458C7*), 0, "S7458C5");
    /*is_ambiguous_... S7458C13::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C10*)(S7458C13*), 0, "S7458C5");
    check_base_class_offset(lv, (S7458C12*)(S7458C11*)(S7458C7*), ABISELECT(24,16), "S7458C5");
    check_base_class_offset(lv, (S7458C10*)(S7458C14*), ABISELECT(112,64), "S7458C5");
    check_base_class_offset(lv, (S7458C4*)(S7458C8*)(S7458C14*), ABISELECT(120,68), "S7458C5");
    check_base_class_offset(lv, (S19572C5*)(S7458C9*)(S7458C8*)(S7458C14*), ABISELECT(128,72), "S7458C5");
    check_base_class_offset(lv, (S7458C9*)(S7458C8*)(S7458C14*), ABISELECT(128,72), "S7458C5");
    check_base_class_offset(lv, (S7458C8*)(S7458C14*), ABISELECT(120,68), "S7458C5");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C14*), ABISELECT(136,76), "S7458C5");
    check_base_class_offset(lv, (S7458C14*)(S7458C13*), ABISELECT(112,64), "S7458C5");
    /*is_ambiguous_... S7458C13::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C13*), ABISELECT(64,36), "S7458C5");
    check_base_class_offset(lv, (S7458C13*)(S7458C11*)(S7458C7*), ABISELECT(64,36), "S7458C5");
    check_base_class_offset(lv, (S7458C11*)(S7458C7*), ABISELECT(24,16), "S7458C5");
    check_base_class_offset(lv, (S7458C2*)(S7458C7*), ABISELECT(40,24), "S7458C5");
    check_base_class_offset(lv, (S629C14*)(S7458C7*), ABISELECT(224,140), "S7458C5");
    check_base_class_offset(lv, (S7458C7*)(S7458C6*), ABISELECT(24,16), "S7458C5");
    /*is_ambiguous_... S7458C6::S629C14 */ AMB_check_base_class_offset(lv, (S629C14*)(S7458C6*), 0, "S7458C5");
    check_base_class_offset(lv, (S7458C6*), 0, "S7458C5");
    check_field_offset(lv, s7458c5f0, ABISELECT(8,4), "S7458C5.s7458c5f0");
    test_class_info(&lv, &cd_S7458C5);
    dp->~S7458C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C5(Test_S7458C5, "S7458C5", ABISELECT(240,144));

#else // __cplusplus

extern void _ZN7S7458C5C1Ev();
extern void _ZN7S7458C5D1Ev();
Name_Map name_map_S7458C5[] = {
  NSPAIR(_ZN7S7458C5C1Ev),
  NSPAIR(_ZN7S7458C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C8;
extern VTBL_ENTRY _ZTI7S7458C8[];
extern  VTBL_ENTRY _ZTV7S7458C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C8[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S7458C12;
extern VTBL_ENTRY _ZTI8S7458C12[];
extern  VTBL_ENTRY _ZTV8S7458C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C12[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C8;
extern VTBL_ENTRY _ZTI7S7458C8[];
extern  VTBL_ENTRY _ZTV7S7458C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C8[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C14;
extern VTBL_ENTRY _ZTI8S7458C14[];
extern  VTBL_ENTRY _ZTV8S7458C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C14[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C13;
extern VTBL_ENTRY _ZTI8S7458C13[];
extern  VTBL_ENTRY _ZTV8S7458C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C13[];
extern Class_Descriptor cd_S7458C11;
extern VTBL_ENTRY _ZTI8S7458C11[];
extern  VTBL_ENTRY _ZTV8S7458C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C11[];
extern Class_Descriptor cd_S7458C2;
extern VTBL_ENTRY _ZTI7S7458C2[];
extern  VTBL_ENTRY _ZTV7S7458C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C2[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S7458C7;
extern VTBL_ENTRY _ZTI7S7458C7[];
extern  VTBL_ENTRY _ZTV7S7458C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C7[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S7458C6;
extern VTBL_ENTRY _ZTI7S7458C6[];
extern  VTBL_ENTRY _ZTV7S7458C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C6[];
static Base_Class bases_S7458C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(18,14), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7458C4,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7458C4,    ABISELECT(48,28), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    4, //immediately_derived
  0, 0},
  {&cd_S7458C9,    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
    5, //immediately_derived
  0, 0},
  {&cd_S7458C8,    ABISELECT(48,28), //bcp->offset
    34, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19572C5,    ABISELECT(58,34), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7458C9,    ABISELECT(58,34), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7458C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7458C12,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7458C10,    ABISELECT(112,64), //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
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7458C4,    ABISELECT(120,68), //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
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(128,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
    13, //immediately_derived
  0, 0},
  {&cd_S7458C9,    ABISELECT(128,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
    14, //immediately_derived
  0, 0},
  {&cd_S7458C8,    ABISELECT(120,68), //bcp->offset
    58, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7458C4,    ABISELECT(136,76), //bcp->offset
    63, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7458C14,    ABISELECT(112,64), //bcp->offset
    51, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7458C4,    ABISELECT(64,36), //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
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7458C13,    ABISELECT(64,36), //bcp->offset
    40, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7458C11,    ABISELECT(24,16), //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
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7458C2,    ABISELECT(40,24), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S629C14,    ABISELECT(224,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
    22, //immediately_derived
  0, 1},
  {&cd_S7458C7,    ABISELECT(24,16), //bcp->offset
    16, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S629C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7458C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7458C5[];
extern void _ZN7S7458C5D1Ev();
extern void _ZN7S7458C5D0Ev();
extern void ABISELECT(_ZTv0_n96_N7S7458C5D1Ev,_ZTv0_n48_N7S7458C5D1Ev)();
extern void ABISELECT(_ZThn24_N7S7458C5D1Ev,_ZThn16_N7S7458C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7458C5D0Ev,_ZTv0_n48_N7S7458C5D0Ev)();
extern void ABISELECT(_ZThn24_N7S7458C5D0Ev,_ZThn16_N7S7458C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C5D1Ev,_ZTv0_n16_N7S7458C5D1Ev)();
extern void ABISELECT(_ZThn48_N7S7458C5D1Ev,_ZThn28_N7S7458C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C5D0Ev,_ZTv0_n16_N7S7458C5D0Ev)();
extern void ABISELECT(_ZThn48_N7S7458C5D0Ev,_ZThn28_N7S7458C5D0Ev)() __attribute__((weak));
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S7458C5D1Ev,_ZTv0_n32_N7S7458C5D1Ev)();
extern void ABISELECT(_ZThn64_N7S7458C5D1Ev,_ZThn36_N7S7458C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7458C5D0Ev,_ZTv0_n32_N7S7458C5D0Ev)();
extern void ABISELECT(_ZThn64_N7S7458C5D0Ev,_ZThn36_N7S7458C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C5D1Ev,_ZTv0_n20_N7S7458C5D1Ev)();
extern void ABISELECT(_ZThn112_N7S7458C5D1Ev,_ZThn64_N7S7458C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C5D0Ev,_ZTv0_n20_N7S7458C5D0Ev)();
extern void ABISELECT(_ZThn112_N7S7458C5D0Ev,_ZThn64_N7S7458C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N7S7458C5D1Ev,_ZTvn4_n20_N7S7458C5D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7458C5D0Ev,_ZTvn4_n20_N7S7458C5D0Ev)();
static  VTBL_ENTRY vtc_S7458C5[] = {
  0,
  0,
  ABISELECT(224,140),
  ABISELECT(112,64),
  ABISELECT(64,36),
  ABISELECT(24,16),
  0,
  ABISELECT(48,28),
  ABISELECT(24,16),
  ABISELECT(18,14),
  ABISELECT(24,16),
  ABISELECT(58,34),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  (VTBL_ENTRY)&_ZN7S7458C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C5D0Ev,
  ABISELECT(-24,-16),
  ABISELECT(200,124),
  ABISELECT(24,12),
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(-6,-2),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7458C5D1Ev,_ZTv0_n48_N7S7458C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7458C5D0Ev,_ZTv0_n48_N7S7458C5D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-22,-10),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  ABISELECT(-48,-28),
  ABISELECT(-30,-14),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C5D1Ev,_ZTv0_n16_N7S7458C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C5D0Ev,_ZTv0_n16_N7S7458C5D0Ev),
  ABISELECT(-64,-36),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-46,-22),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C5D1Ev,_ZTv0_n32_N7S7458C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C5D0Ev,_ZTv0_n32_N7S7458C5D0Ev),
  ABISELECT(-112,-64),
  ABISELECT(-94,-50),
  ABISELECT(-54,-30),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C5D1Ev,_ZTv0_n20_N7S7458C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C5D0Ev,_ZTv0_n20_N7S7458C5D0Ev),
  ABISELECT(-102,-54),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C5D1Ev,_ZTvn4_n20_N7S7458C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C5D0Ev,_ZTvn4_n20_N7S7458C5D0Ev),
  ABISELECT(-118,-62),
  ABISELECT(-136,-76),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
};
extern VTBL_ENTRY _ZTV7S7458C5[];
extern void _ZN7S7458C6D1Ev();
extern void _ZN7S7458C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C6__7S7458C5[] = {
  ABISELECT(224,140),
  ABISELECT(112,64),
  ABISELECT(64,36),
  ABISELECT(24,16),
  0,
  ABISELECT(48,28),
  ABISELECT(24,16),
  ABISELECT(18,14),
  ABISELECT(24,16),
  ABISELECT(58,34),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&_ZN7S7458C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C6D0Ev,
};
extern void ABISELECT(_ZTv0_n96_N7S7458C6D1Ev,_ZTv0_n48_N7S7458C6D1Ev)();
extern void ABISELECT(_ZThn24_N7S7458C6D1Ev,_ZThn16_N7S7458C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7458C6D0Ev,_ZTv0_n48_N7S7458C6D0Ev)();
extern void ABISELECT(_ZThn24_N7S7458C6D0Ev,_ZThn16_N7S7458C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7458C7__7S7458C6__7S7458C5[] = {
  ABISELECT(-24,-16),
  ABISELECT(200,124),
  ABISELECT(24,12),
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(-6,-2),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7458C6D1Ev,_ZTv0_n48_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7458C6D0Ev,_ZTv0_n48_N7S7458C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7458C6D1Ev,_ZTv0_n16_N7S7458C6D1Ev)();
extern void ABISELECT(_ZThn48_N7S7458C6D1Ev,_ZThn28_N7S7458C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C6D0Ev,_ZTv0_n16_N7S7458C6D0Ev)();
extern void ABISELECT(_ZThn48_N7S7458C6D0Ev,_ZThn28_N7S7458C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7458C8__7S7458C6__7S7458C5[] = {
  ABISELECT(-48,-28),
  ABISELECT(-30,-14),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C6D1Ev,_ZTv0_n16_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C6D0Ev,_ZTv0_n16_N7S7458C6D0Ev),
};
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S7458C6D1Ev,_ZTv0_n32_N7S7458C6D1Ev)();
extern void ABISELECT(_ZThn64_N7S7458C6D1Ev,_ZThn36_N7S7458C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7458C6D0Ev,_ZTv0_n32_N7S7458C6D0Ev)();
extern void ABISELECT(_ZThn64_N7S7458C6D0Ev,_ZThn36_N7S7458C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C13__7S7458C6__7S7458C5[] = {
  ABISELECT(-64,-36),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-46,-22),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C6D1Ev,_ZTv0_n32_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C6D0Ev,_ZTv0_n32_N7S7458C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7458C6D1Ev,_ZTv0_n20_N7S7458C6D1Ev)();
extern void ABISELECT(_ZThn112_N7S7458C6D1Ev,_ZThn64_N7S7458C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C6D0Ev,_ZTv0_n20_N7S7458C6D0Ev)();
extern void ABISELECT(_ZThn112_N7S7458C6D0Ev,_ZThn64_N7S7458C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__7S7458C6__7S7458C5[] = {
  ABISELECT(-112,-64),
  ABISELECT(-94,-50),
  ABISELECT(-54,-30),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C6D1Ev,_ZTv0_n20_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C6D0Ev,_ZTv0_n20_N7S7458C6D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N7S7458C6D1Ev,_ZTvn4_n20_N7S7458C6D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7458C6D0Ev,_ZTvn4_n20_N7S7458C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__A1__7S7458C6__7S7458C5[] = {
  ABISELECT(-102,-54),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C6D1Ev,_ZTvn4_n20_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C6D0Ev,_ZTvn4_n20_N7S7458C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A3__7S7458C6__7S7458C5[] = {
  ABISELECT(-118,-62),
  ABISELECT(-136,-76),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C27S7458C7__7S7458C6__7S7458C5[] = {
  ABISELECT(-16,-8),
  ABISELECT(-22,-10),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__7S7458C5[] = {
  ABISELECT(-6,-2),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
extern void _ZN7S7458C7D1Ev();
extern void _ZN7S7458C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C7__7S7458C5[] = {
  ABISELECT(200,124),
  ABISELECT(24,12),
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(-6,-2),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&_ZN7S7458C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C7D0Ev,
};
extern void _ZN8S7458C11D1Ev();
extern void _ZN8S7458C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C117S7458C7__7S7458C5[] = {
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(-6,-2),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&_ZN8S7458C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C11D0Ev,
};
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev)();
extern void ABISELECT(_ZThn40_N8S7458C11D1Ev,_ZThn20_N8S7458C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev)();
extern void ABISELECT(_ZThn40_N8S7458C11D0Ev,_ZThn20_N8S7458C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C13__8S7458C117S7458C7__7S7458C5[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-46,-22),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__8S7458C117S7458C7__7S7458C5[] = {
  ABISELECT(58,34),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev)();
extern void ABISELECT(_ZThn88_N8S7458C11D1Ev,_ZThn48_N8S7458C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev)();
extern void ABISELECT(_ZThn88_N8S7458C11D0Ev,_ZThn48_N8S7458C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__8S7458C117S7458C7__7S7458C5[] = {
  ABISELECT(-88,-48),
  ABISELECT(-94,-50),
  ABISELECT(-54,-30),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N8S7458C11D1Ev,_ZTvn4_n20_N8S7458C11D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S7458C11D0Ev,_ZTvn4_n20_N8S7458C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__8S7458C117S7458C7__7S7458C5[] = {
  ABISELECT(-102,-54),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C11D1Ev,_ZTvn4_n20_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C11D0Ev,_ZTvn4_n20_N8S7458C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A2__8S7458C117S7458C7__7S7458C5[] = {
  ABISELECT(-118,-62),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C27S7458C7__7S7458C5[] = {
  ABISELECT(-16,-8),
  ABISELECT(-22,-10),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__7S7458C27S7458C7__7S7458C5[] = {
  ABISELECT(-6,-2),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7458C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7458C7D1Ev,_ZTv0_n16_N7S7458C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7458C7D1Ev,_ZThn12_N7S7458C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C7D0Ev,_ZTv0_n16_N7S7458C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7458C7D0Ev,_ZThn12_N7S7458C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7458C8__7S7458C7__7S7458C5[] = {
  ABISELECT(-24,-12),
  ABISELECT(-30,-14),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C7D1Ev,_ZTv0_n16_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C7D0Ev,_ZTv0_n16_N7S7458C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__7S7458C7__7S7458C5[] = {
  ABISELECT(58,34),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
};
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S7458C7D1Ev,_ZTv0_n32_N7S7458C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S7458C7D1Ev,_ZThn20_N7S7458C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7458C7D0Ev,_ZTv0_n32_N7S7458C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S7458C7D0Ev,_ZThn20_N7S7458C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C13__7S7458C7__7S7458C5[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-46,-22),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C7D1Ev,_ZTv0_n32_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C7D0Ev,_ZTv0_n32_N7S7458C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7458C7D1Ev,_ZTv0_n20_N7S7458C7D1Ev)();
extern void ABISELECT(_ZThn88_N7S7458C7D1Ev,_ZThn48_N7S7458C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C7D0Ev,_ZTv0_n20_N7S7458C7D0Ev)();
extern void ABISELECT(_ZThn88_N7S7458C7D0Ev,_ZThn48_N7S7458C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__7S7458C7__7S7458C5[] = {
  ABISELECT(-88,-48),
  ABISELECT(-94,-50),
  ABISELECT(-54,-30),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C7D1Ev,_ZTv0_n20_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C7D0Ev,_ZTv0_n20_N7S7458C7D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N7S7458C7D1Ev,_ZTvn4_n20_N7S7458C7D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7458C7D0Ev,_ZTvn4_n20_N7S7458C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__A1__7S7458C7__7S7458C5[] = {
  ABISELECT(-102,-54),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C7D1Ev,_ZTvn4_n20_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C7D0Ev,_ZTvn4_n20_N7S7458C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A3__7S7458C7__7S7458C5[] = {
  ABISELECT(-118,-62),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C2__7S7458C7__7S7458C5[] = {
  ABISELECT(-16,-8),
  ABISELECT(-22,-10),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
};
extern void _ZN7S7458C8D1Ev();
extern void _ZN7S7458C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C8__7S7458C5[] = {
  ABISELECT(-30,-14),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C8[0]),
  (VTBL_ENTRY)&_ZN7S7458C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C47S7458C8__A1__7S7458C5[] = {
  ABISELECT(-30,-14),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__7S7458C5[] = {
  ABISELECT(58,34),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C12__7S7458C5[] = {
  0,
  ABISELECT(-6,-2),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C12[0]),
};
extern void _ZN8S7458C132v1Ev();
extern void _ZN8S7458C13D1Ev();
extern void _ZN8S7458C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C13__7S7458C5[] = {
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-46,-22),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&_ZN8S7458C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C13__A4__7S7458C5[] = {
  ABISELECT(-46,-22),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__8S7458C13__7S7458C5[] = {
  ABISELECT(58,34),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev)();
extern void ABISELECT(_ZThn48_N8S7458C13D1Ev,_ZThn28_N8S7458C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev)();
extern void ABISELECT(_ZThn48_N8S7458C13D0Ev,_ZThn28_N8S7458C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__8S7458C13__7S7458C5[] = {
  ABISELECT(-48,-28),
  ABISELECT(-94,-50),
  ABISELECT(-54,-30),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N8S7458C13D1Ev,_ZTvn4_n20_N8S7458C13D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S7458C13D0Ev,_ZTvn4_n20_N8S7458C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__8S7458C13__7S7458C5[] = {
  ABISELECT(-102,-54),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C13D1Ev,_ZTvn4_n20_N8S7458C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C13D0Ev,_ZTvn4_n20_N8S7458C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A1__8S7458C13__7S7458C5[] = {
  ABISELECT(-118,-62),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
};
extern void _ZN8S7458C14D1Ev();
extern void _ZN8S7458C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C14__7S7458C5[] = {
  ABISELECT(-94,-50),
  ABISELECT(-54,-30),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&_ZN8S7458C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C14D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7458C108S7458C14__A1__7S7458C5[] = {
  ABISELECT(-54,-30),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
extern void _ZN7S7458C8D1Ev();
extern void _ZN7S7458C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__A1__7S7458C5[] = {
  ABISELECT(-102,-54),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C8[0]),
  (VTBL_ENTRY)&_ZN7S7458C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C47S7458C88S7458C14__A2__7S7458C5[] = {
  ABISELECT(-102,-54),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A3__7S7458C5[] = {
  ABISELECT(-118,-62),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
extern void ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev)();
extern void ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C8__8S7458C14__7S7458C5[] = {
  ABISELECT(-102,-54),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__A1__8S7458C14__7S7458C5[] = {
  ABISELECT(-118,-62),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
};
static  VTT_ENTRY vtt_S7458C5[] = {
  {&(_ZTV7S7458C5[14]),  14,66},
  {&(_ZTV7S7458C5[14]),  14,66},
  {&(_ZTV7S7458C5[28]),  28,66},
  {&(_ZTV7S7458C5[28]),  28,66},
  {&(_ZTV7S7458C5[38]),  38,66},
  {&(_ZTV7S7458C5[14]),  14,66},
  {&(_ZTV7S7458C5[28]),  28,66},
  {&(_ZTV7S7458C5[48]),  48,66},
  {&(_ZTV7S7458C5[56]),  56,66},
  {&(_ZTV7S7458C5[61]),  61,66},
  {&(_ZTV7S7458C5[66]),  66,66},
  {&(_ZTV7S7458C5[34]),  34,66},
  {&(_tg__ZTV7S7458C6__7S7458C5[12]),  12,14},
  {&(_tg__ZTV7S7458C7__7S7458C6__7S7458C5[12]),  12,14},
  {&(_tg__ZTV7S7458C7__7S7458C6__7S7458C5[12]),  12,14},
  {&(_tg__ZTV7S7458C8__7S7458C6__7S7458C5[4]),  4,6},
  {&(_tg__ZTV7S7458C6__7S7458C5[12]),  12,14},
  {&(_tg__ZTV7S7458C7__7S7458C6__7S7458C5[12]),  12,14},
  {&(_tg__ZTV8S7458C13__7S7458C6__7S7458C5[8]),  8,11},
  {&(_tg__ZTV8S7458C14__7S7458C6__7S7458C5[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__A1__7S7458C6__7S7458C5[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A3__7S7458C6__7S7458C5[3]),  3,3},
  {&(_tg__ZTV7S7458C27S7458C7__7S7458C6__7S7458C5[4]),  4,4},
  {&(_tg__ZTV7S7458C4__7S7458C5[3]),  3,3},
  {&(_tg__ZTV7S7458C7__7S7458C5[11]),  11,13},
  {&(_tg__ZTV8S7458C117S7458C7__7S7458C5[9]),  9,11},
  {&(_tg__ZTV8S7458C117S7458C7__7S7458C5[9]),  9,11},
  {&(_tg__ZTV8S7458C117S7458C7__7S7458C5[9]),  9,11},
  {&(_tg__ZTV8S7458C13__8S7458C117S7458C7__7S7458C5[8]),  8,11},
  {&(_tg__ZTV8S7458C10__8S7458C117S7458C7__7S7458C5[3]),  3,3},
  {&(_tg__ZTV8S7458C14__8S7458C117S7458C7__7S7458C5[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__8S7458C117S7458C7__7S7458C5[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A2__8S7458C117S7458C7__7S7458C5[3]),  3,3},
  {&(_tg__ZTV7S7458C27S7458C7__7S7458C5[4]),  4,4},
  {&(_tg__ZTV7S7458C4__7S7458C27S7458C7__7S7458C5[3]),  3,3},
  {&(_tg__ZTV7S7458C8__7S7458C7__7S7458C5[4]),  4,6},
  {&(_tg__ZTV8S7458C10__7S7458C7__7S7458C5[3]),  3,3},
  {&(_tg__ZTV7S7458C7__7S7458C5[11]),  11,13},
  {&(_tg__ZTV7S7458C7__7S7458C5[11]),  11,13},
  {&(_tg__ZTV8S7458C13__7S7458C7__7S7458C5[8]),  8,11},
  {&(_tg__ZTV8S7458C14__7S7458C7__7S7458C5[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__A1__7S7458C7__7S7458C5[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A3__7S7458C7__7S7458C5[3]),  3,3},
  {&(_tg__ZTV7S7458C2__7S7458C7__7S7458C5[4]),  4,4},
  {&(_tg__ZTV7S7458C8__7S7458C5[3]),  3,5},
  {&(_tg__ZTV7S7458C47S7458C8__A1__7S7458C5[3]),  3,3},
  {&(_tg__ZTV8S7458C10__7S7458C5[3]),  3,3},
  {&(_tg__ZTV8S7458C12__7S7458C5[4]),  4,4},
  {&(_tg__ZTV8S7458C12__7S7458C5[4]),  4,4},
  {&(_tg__ZTV8S7458C13__7S7458C5[6]),  6,9},
  {&(_tg__ZTV7S7458C48S7458C13__A4__7S7458C5[3]),  3,3},
  {&(_tg__ZTV8S7458C10__8S7458C13__7S7458C5[3]),  3,3},
  {&(_tg__ZTV8S7458C14__8S7458C13__7S7458C5[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__8S7458C13__7S7458C5[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A1__8S7458C13__7S7458C5[3]),  3,3},
  {&(_tg__ZTV8S7458C14__7S7458C5[4]),  4,6},
  {&(_tg__ZTV8S7458C108S7458C14__A1__7S7458C5[3]),  3,3},
  {&(_tg__ZTV7S7458C88S7458C14__A1__7S7458C5[3]),  3,5},
  {&(_tg__ZTV7S7458C47S7458C88S7458C14__A2__7S7458C5[3]),  3,3},
  {&(_tg__ZTV7S7458C48S7458C14__A3__7S7458C5[3]),  3,3},
  {&(_tg__ZTV7S7458C8__8S7458C14__7S7458C5[3]),  3,5},
  {&(_tg__ZTV7S7458C4__A1__8S7458C14__7S7458C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7458C5[];
extern  VTBL_ENTRY _ZTV7S7458C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C5[];
static VTBL_ENTRY alt_thunk_names38[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7458C13D0Ev,_ZThn28_N8S7458C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7458C13D1Ev,_ZThn28_N8S7458C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C7D0Ev,_ZTv0_n20_N7S7458C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7458C7D0Ev,_ZThn48_N7S7458C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C7D1Ev,_ZTv0_n20_N7S7458C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7458C7D1Ev,_ZThn48_N7S7458C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C7D0Ev,_ZTv0_n32_N7S7458C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7458C7D0Ev,_ZThn20_N7S7458C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C7D1Ev,_ZTv0_n32_N7S7458C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7458C7D1Ev,_ZThn20_N7S7458C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C7D0Ev,_ZTv0_n16_N7S7458C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C7D0Ev,_ZThn12_N7S7458C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C7D1Ev,_ZTv0_n16_N7S7458C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C7D1Ev,_ZThn12_N7S7458C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7458C11D0Ev,_ZThn48_N8S7458C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7458C11D1Ev,_ZThn48_N8S7458C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S7458C11D0Ev,_ZThn20_N8S7458C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S7458C11D1Ev,_ZThn20_N8S7458C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C6D0Ev,_ZTv0_n20_N7S7458C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7458C6D0Ev,_ZThn64_N7S7458C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C6D1Ev,_ZTv0_n20_N7S7458C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7458C6D1Ev,_ZThn64_N7S7458C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C6D0Ev,_ZTv0_n32_N7S7458C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7458C6D0Ev,_ZThn36_N7S7458C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C6D1Ev,_ZTv0_n32_N7S7458C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7458C6D1Ev,_ZThn36_N7S7458C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C6D0Ev,_ZTv0_n16_N7S7458C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7458C6D0Ev,_ZThn28_N7S7458C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C6D1Ev,_ZTv0_n16_N7S7458C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7458C6D1Ev,_ZThn28_N7S7458C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7458C6D0Ev,_ZTv0_n48_N7S7458C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C6D0Ev,_ZThn16_N7S7458C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7458C6D1Ev,_ZTv0_n48_N7S7458C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C6D1Ev,_ZThn16_N7S7458C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C5D0Ev,_ZTv0_n20_N7S7458C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7458C5D0Ev,_ZThn64_N7S7458C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C5D1Ev,_ZTv0_n20_N7S7458C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7458C5D1Ev,_ZThn64_N7S7458C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C5D0Ev,_ZTv0_n32_N7S7458C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7458C5D0Ev,_ZThn36_N7S7458C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C5D1Ev,_ZTv0_n32_N7S7458C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7458C5D1Ev,_ZThn36_N7S7458C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C5D0Ev,_ZTv0_n16_N7S7458C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7458C5D0Ev,_ZThn28_N7S7458C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C5D1Ev,_ZTv0_n16_N7S7458C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7458C5D1Ev,_ZThn28_N7S7458C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7458C5D0Ev,_ZTv0_n48_N7S7458C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C5D0Ev,_ZThn16_N7S7458C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7458C5D1Ev,_ZTv0_n48_N7S7458C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C5D1Ev,_ZThn16_N7S7458C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7458C5 = {  "S7458C5", // class name
  bases_S7458C5, 25,
  &(vtc_S7458C5[0]), // expected_vtbl_contents
  &(vtt_S7458C5[0]), // expected_vtt_contents
  ABISELECT(240,144), // object size
  NSPAIRA(_ZTI7S7458C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7458C5),66, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7458C5),62, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names38,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7458C1  : S7458C2 , virtual S7458C5 {
  ::S629C8_nt s7458c1f0;
  ~S7458C1(); // tgen
  S7458C1(); // tgen
};
//SIG(1 S7458C1) C1{ BC2{ VBC3{ m Fs:13} VBC4{ VBC3}} VBC5{ VBC6{ VBC4 VBC7{ VBC8{ BC4 BC9{ BC3} vd} VBC10{ VBC9} BC11{ VBC3 VBC12{ VBC4} VBC13{ VBC9 VBC10 VBC14{ VBC3 VBC9 BC10 BC8 BC4 vd FD[5]} BC4 v1 FC15{ VBC16{ VBC3} VBC17{ VBC3} BC3 VBC18{ BC3} vd Fi}} vd Fi} BC2 VBC19{ m}} BC19 vd} Fc[10]} FC20{ m}}


S7458C1 ::~S7458C1(){ note_dtor("S7458C1", this);} // tgen
S7458C1 ::S7458C1(){ note_ctor("S7458C1", this);} // tgen

static void Test_S7458C1()
{
  extern Class_Descriptor cd_S7458C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,38)];
    init_test(&cd_S7458C1, buf);
    S7458C1 *dp, &lv = *(dp=new (buf) S7458C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,148), "sizeof(S7458C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7458C1)");
    /*is_ambiguous_... S7458C1::S7458C2 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C2*), ABISELECT(10,6), "S7458C1");
    /*is_ambiguous_... S7458C1::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*), ABISELECT(10,6), "S7458C1");
    /*is_ambiguous_... S7458C1::S7458C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C8*), ABISELECT(10,6), "S7458C1");
    /*is_ambiguous_... S7458C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C11*)(S7458C7*), ABISELECT(10,6), "S7458C1");
    /*is_ambiguous_... S7458C14::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C14*), ABISELECT(10,6), "S7458C1");
    check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C8*)(S7458C14*), ABISELECT(10,6), "S7458C1");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C14*), ABISELECT(10,6), "S7458C1");
    /*is_ambiguous_... S7458C13::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C13*), ABISELECT(10,6), "S7458C1");
    check_base_class_offset(lv, (S19572C5*)(S7458C2*)(S7458C7*), ABISELECT(10,6), "S7458C1");
    /*is_ambiguous_... S7458C1::S7458C2 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C2*), 0, "S7458C1");
    /*is_ambiguous_... S7458C6::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C6*), 0, "S7458C1");
    check_base_class_offset(lv, (S7458C4*)(S7458C12*), 0, "S7458C1");
    check_base_class_offset(lv, (S7458C4*)(S7458C2*)(S7458C7*), 0, "S7458C1");
    /*is_ambiguous_... S7458C1::S7458C2 */ AMB_check_base_class_offset(lv, (S7458C2*), 0, "S7458C1");
    /*is_ambiguous_... S7458C1::S7458C8 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C8*), ABISELECT(64,36), "S7458C1");
    /*is_ambiguous_... S7458C1::S7458C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C9*)(S7458C8*), ABISELECT(72,40), "S7458C1");
    /*is_ambiguous_... S7458C1::S7458C8 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C8*), ABISELECT(72,40), "S7458C1");
    /*is_ambiguous_... S7458C7::S7458C8 */ AMB_check_base_class_offset(lv, (S7458C8*)(S7458C7*), ABISELECT(64,36), "S7458C1");
    /*is_ambiguous_... S7458C1::S7458C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C9*), ABISELECT(74,42), "S7458C1");
    /*is_ambiguous_... S7458C1::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C10*), ABISELECT(74,42), "S7458C1");
    /*is_ambiguous_... S7458C13::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C13*), ABISELECT(74,42), "S7458C1");
    /*is_ambiguous_... S7458C14::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C14*), ABISELECT(74,42), "S7458C1");
    check_base_class_offset(lv, (S7458C9*)(S7458C10*)(S7458C14*), ABISELECT(74,42), "S7458C1");
    /*is_ambiguous_... S7458C7::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C10*)(S7458C7*), ABISELECT(16,8), "S7458C1");
    /*is_ambiguous_... S7458C13::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C10*)(S7458C13*), ABISELECT(16,8), "S7458C1");
    check_base_class_offset(lv, (S7458C12*)(S7458C11*)(S7458C7*), ABISELECT(40,24), "S7458C1");
    check_base_class_offset(lv, (S7458C10*)(S7458C14*), ABISELECT(128,72), "S7458C1");
    check_base_class_offset(lv, (S7458C4*)(S7458C8*)(S7458C14*), ABISELECT(136,76), "S7458C1");
    check_base_class_offset(lv, (S19572C5*)(S7458C9*)(S7458C8*)(S7458C14*), ABISELECT(144,80), "S7458C1");
    check_base_class_offset(lv, (S7458C9*)(S7458C8*)(S7458C14*), ABISELECT(144,80), "S7458C1");
    check_base_class_offset(lv, (S7458C8*)(S7458C14*), ABISELECT(136,76), "S7458C1");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C14*), ABISELECT(152,84), "S7458C1");
    check_base_class_offset(lv, (S7458C14*)(S7458C13*), ABISELECT(128,72), "S7458C1");
    /*is_ambiguous_... S7458C13::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C13*), ABISELECT(80,44), "S7458C1");
    check_base_class_offset(lv, (S7458C13*)(S7458C11*)(S7458C7*), ABISELECT(80,44), "S7458C1");
    check_base_class_offset(lv, (S7458C11*)(S7458C7*), ABISELECT(40,24), "S7458C1");
    check_base_class_offset(lv, (S7458C2*)(S7458C7*), ABISELECT(56,32), "S7458C1");
    check_base_class_offset(lv, (S629C14*)(S7458C7*), 0, "S7458C1");
    check_base_class_offset(lv, (S7458C7*)(S7458C6*), ABISELECT(40,24), "S7458C1");
    /*is_ambiguous_... S7458C6::S629C14 */ AMB_check_base_class_offset(lv, (S629C14*)(S7458C6*), ABISELECT(16,8), "S7458C1");
    check_base_class_offset(lv, (S7458C6*)(S7458C5*), ABISELECT(16,8), "S7458C1");
    check_base_class_offset(lv, (S7458C5*), ABISELECT(16,8), "S7458C1");
    check_field_offset(lv, s7458c1f0, ABISELECT(8,4), "S7458C1.s7458c1f0");
    test_class_info(&lv, &cd_S7458C1);
    dp->~S7458C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C1(Test_S7458C1, "S7458C1", ABISELECT(240,148));

#else // __cplusplus

extern void _ZN7S7458C1C1Ev();
extern void _ZN7S7458C1D1Ev();
Name_Map name_map_S7458C1[] = {
  NSPAIR(_ZN7S7458C1C1Ev),
  NSPAIR(_ZN7S7458C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C2;
extern VTBL_ENTRY _ZTI7S7458C2[];
extern  VTBL_ENTRY _ZTV7S7458C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C2[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C8;
extern VTBL_ENTRY _ZTI7S7458C8[];
extern  VTBL_ENTRY _ZTV7S7458C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C8[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S7458C12;
extern VTBL_ENTRY _ZTI8S7458C12[];
extern  VTBL_ENTRY _ZTV8S7458C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C12[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C8;
extern VTBL_ENTRY _ZTI7S7458C8[];
extern  VTBL_ENTRY _ZTV7S7458C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C8[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C14;
extern VTBL_ENTRY _ZTI8S7458C14[];
extern  VTBL_ENTRY _ZTV8S7458C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C14[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C13;
extern VTBL_ENTRY _ZTI8S7458C13[];
extern  VTBL_ENTRY _ZTV8S7458C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C13[];
extern Class_Descriptor cd_S7458C11;
extern VTBL_ENTRY _ZTI8S7458C11[];
extern  VTBL_ENTRY _ZTV8S7458C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C11[];
extern Class_Descriptor cd_S7458C2;
extern VTBL_ENTRY _ZTI7S7458C2[];
extern  VTBL_ENTRY _ZTV7S7458C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C2[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S7458C7;
extern VTBL_ENTRY _ZTI7S7458C7[];
extern  VTBL_ENTRY _ZTV7S7458C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C7[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S7458C6;
extern VTBL_ENTRY _ZTI7S7458C6[];
extern  VTBL_ENTRY _ZTV7S7458C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C6[];
extern Class_Descriptor cd_S7458C5;
extern VTBL_ENTRY _ZTI7S7458C5[];
extern  VTBL_ENTRY _ZTV7S7458C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C5[];
static Base_Class bases_S7458C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(10,6), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7458C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7458C2,    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
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7458C4,    ABISELECT(64,36), //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
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(72,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
    5, //immediately_derived
  0, 0},
  {&cd_S7458C9,    ABISELECT(72,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
    6, //immediately_derived
  0, 0},
  {&cd_S7458C8,    ABISELECT(64,36), //bcp->offset
    50, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19572C5,    ABISELECT(74,42), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7458C9,    ABISELECT(74,42), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7458C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7458C12,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S7458C10,    ABISELECT(128,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    72, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7458C4,    ABISELECT(136,76), //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
    7, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(144,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
    14, //immediately_derived
  0, 0},
  {&cd_S7458C9,    ABISELECT(144,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
    15, //immediately_derived
  0, 0},
  {&cd_S7458C8,    ABISELECT(136,76), //bcp->offset
    74, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7458C4,    ABISELECT(152,84), //bcp->offset
    79, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7458C14,    ABISELECT(128,72), //bcp->offset
    67, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7458C4,    ABISELECT(80,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7458C13,    ABISELECT(80,44), //bcp->offset
    56, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S7458C11,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7458C2,    ABISELECT(56,32), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S629C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7458C7,    ABISELECT(40,24), //bcp->offset
    32, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S629C14,    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
    25, //immediately_derived
  0, 0},
  {&cd_S7458C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S7458C5,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7458C1[];
extern void _ZN7S7458C1D1Ev();
extern void _ZN7S7458C1D0Ev();
extern void ABISELECT(_ZTv0_n104_N7S7458C1D1Ev,_ZTv0_n52_N7S7458C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S7458C1D1Ev,_ZThn8_N7S7458C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7458C1D0Ev,_ZTv0_n52_N7S7458C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S7458C1D0Ev,_ZThn8_N7S7458C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7458C1D1Ev,_ZTv0_n48_N7S7458C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S7458C1D1Ev,_ZThn24_N7S7458C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7458C1D0Ev,_ZTv0_n48_N7S7458C1D0Ev)();
extern void ABISELECT(_ZThn40_N7S7458C1D0Ev,_ZThn24_N7S7458C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C1D1Ev,_ZTv0_n16_N7S7458C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S7458C1D1Ev,_ZThn36_N7S7458C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C1D0Ev,_ZTv0_n16_N7S7458C1D0Ev)();
extern void ABISELECT(_ZThn64_N7S7458C1D0Ev,_ZThn36_N7S7458C1D0Ev)() __attribute__((weak));
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S7458C1D1Ev,_ZTv0_n32_N7S7458C1D1Ev)();
extern void ABISELECT(_ZThn80_N7S7458C1D1Ev,_ZThn44_N7S7458C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7458C1D0Ev,_ZTv0_n32_N7S7458C1D0Ev)();
extern void ABISELECT(_ZThn80_N7S7458C1D0Ev,_ZThn44_N7S7458C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C1D1Ev,_ZTv0_n20_N7S7458C1D1Ev)();
extern void ABISELECT(_ZThn128_N7S7458C1D1Ev,_ZThn72_N7S7458C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C1D0Ev,_ZTv0_n20_N7S7458C1D0Ev)();
extern void ABISELECT(_ZThn128_N7S7458C1D0Ev,_ZThn72_N7S7458C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N7S7458C1D1Ev,_ZTvn4_n20_N7S7458C1D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7458C1D0Ev,_ZTvn4_n20_N7S7458C1D0Ev)();
static  VTBL_ENTRY vtc_S7458C1[] = {
  0,
  ABISELECT(128,72),
  ABISELECT(80,44),
  ABISELECT(40,24),
  ABISELECT(74,42),
  ABISELECT(16,8),
  ABISELECT(64,36),
  ABISELECT(40,24),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C1[0]),
  (VTBL_ENTRY)&_ZN7S7458C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C1D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(112,64),
  ABISELECT(64,36),
  ABISELECT(24,16),
  0,
  ABISELECT(48,28),
  ABISELECT(24,16),
  ABISELECT(-6,-2),
  ABISELECT(-16,-8),
  ABISELECT(58,34),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7458C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7458C1D1Ev,_ZTv0_n52_N7S7458C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7458C1D0Ev,_ZTv0_n52_N7S7458C1D0Ev),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(24,12),
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-30,-18),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7458C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7458C1D1Ev,_ZTv0_n48_N7S7458C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7458C1D0Ev,_ZTv0_n48_N7S7458C1D0Ev),
  ABISELECT(-56,-32),
  ABISELECT(-46,-26),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7458C1[0]),
  ABISELECT(-64,-36),
  ABISELECT(-54,-30),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7458C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C1D1Ev,_ZTv0_n16_N7S7458C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C1D0Ev,_ZTv0_n16_N7S7458C1D0Ev),
  ABISELECT(-80,-44),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-70,-38),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S7458C1[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C1D1Ev,_ZTv0_n32_N7S7458C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C1D0Ev,_ZTv0_n32_N7S7458C1D0Ev),
  ABISELECT(-128,-72),
  ABISELECT(-118,-66),
  ABISELECT(-54,-30),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI7S7458C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C1D1Ev,_ZTv0_n20_N7S7458C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C1D0Ev,_ZTv0_n20_N7S7458C1D0Ev),
  ABISELECT(-126,-70),
  ABISELECT(-136,-76),
  (VTBL_ENTRY)&(_ZTI7S7458C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C1D1Ev,_ZTvn4_n20_N7S7458C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C1D0Ev,_ZTvn4_n20_N7S7458C1D0Ev),
  ABISELECT(-142,-78),
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI7S7458C1[0]),
};
extern VTBL_ENTRY _ZTV7S7458C1[];
static  VTBL_ENTRY _tg__ZTV7S7458C2__7S7458C1[] = {
  0,
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__7S7458C1[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
extern void ABISELECT(_ZTv0_n104_N7S7458C5D1Ev,_ZTv0_n52_N7S7458C5D1Ev)();
extern void _ZN7S7458C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7458C5D0Ev,_ZTv0_n52_N7S7458C5D0Ev)();
extern void _ZN7S7458C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7458C5__7S7458C1[] = {
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(112,64),
  ABISELECT(64,36),
  ABISELECT(24,16),
  0,
  ABISELECT(48,28),
  ABISELECT(24,16),
  ABISELECT(-6,-2),
  ABISELECT(-16,-8),
  ABISELECT(58,34),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7458C5D1Ev,_ZTv0_n52_N7S7458C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7458C5D0Ev,_ZTv0_n52_N7S7458C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__7S7458C5__7S7458C1[] = {
  ABISELECT(10,6),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
};
extern void ABISELECT(_ZTv0_n96_N7S7458C5D1Ev,_ZTv0_n48_N7S7458C5D1Ev)();
extern void ABISELECT(_ZThn24_N7S7458C5D1Ev,_ZThn16_N7S7458C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7458C5D0Ev,_ZTv0_n48_N7S7458C5D0Ev)();
extern void ABISELECT(_ZThn24_N7S7458C5D0Ev,_ZThn16_N7S7458C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7458C7__7S7458C5__7S7458C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-40,-24),
  ABISELECT(24,12),
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-30,-18),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7458C5D1Ev,_ZTv0_n48_N7S7458C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7458C5D0Ev,_ZTv0_n48_N7S7458C5D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7458C5D1Ev,_ZTv0_n16_N7S7458C5D1Ev)();
extern void ABISELECT(_ZThn48_N7S7458C5D1Ev,_ZThn28_N7S7458C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C5D0Ev,_ZTv0_n16_N7S7458C5D0Ev)();
extern void ABISELECT(_ZThn48_N7S7458C5D0Ev,_ZThn28_N7S7458C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7458C8__7S7458C5__7S7458C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-54,-30),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C5D1Ev,_ZTv0_n16_N7S7458C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C5D0Ev,_ZTv0_n16_N7S7458C5D0Ev),
};
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S7458C5D1Ev,_ZTv0_n32_N7S7458C5D1Ev)();
extern void ABISELECT(_ZThn64_N7S7458C5D1Ev,_ZThn36_N7S7458C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7458C5D0Ev,_ZTv0_n32_N7S7458C5D0Ev)();
extern void ABISELECT(_ZThn64_N7S7458C5D0Ev,_ZThn36_N7S7458C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C13__7S7458C5__7S7458C1[] = {
  ABISELECT(-64,-36),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-70,-38),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C5D1Ev,_ZTv0_n32_N7S7458C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C5D0Ev,_ZTv0_n32_N7S7458C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7458C5D1Ev,_ZTv0_n20_N7S7458C5D1Ev)();
extern void ABISELECT(_ZThn112_N7S7458C5D1Ev,_ZThn64_N7S7458C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C5D0Ev,_ZTv0_n20_N7S7458C5D0Ev)();
extern void ABISELECT(_ZThn112_N7S7458C5D0Ev,_ZThn64_N7S7458C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__7S7458C5__7S7458C1[] = {
  ABISELECT(-112,-64),
  ABISELECT(-118,-66),
  ABISELECT(-54,-30),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C5D1Ev,_ZTv0_n20_N7S7458C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C5D0Ev,_ZTv0_n20_N7S7458C5D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N7S7458C5D1Ev,_ZTvn4_n20_N7S7458C5D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7458C5D0Ev,_ZTvn4_n20_N7S7458C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__A1__7S7458C5__7S7458C1[] = {
  ABISELECT(-126,-70),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C5D1Ev,_ZTvn4_n20_N7S7458C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C5D0Ev,_ZTvn4_n20_N7S7458C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A3__7S7458C5__7S7458C1[] = {
  ABISELECT(-142,-78),
  ABISELECT(-136,-76),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C27S7458C7__7S7458C5__7S7458C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-46,-26),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
};
extern void _ZN7S7458C6D1Ev();
extern void _ZN7S7458C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C6__7S7458C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(112,64),
  ABISELECT(64,36),
  ABISELECT(24,16),
  0,
  ABISELECT(48,28),
  ABISELECT(24,16),
  ABISELECT(-6,-2),
  ABISELECT(-16,-8),
  ABISELECT(58,34),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&_ZN7S7458C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__7S7458C6__7S7458C1[] = {
  ABISELECT(10,6),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
};
extern void ABISELECT(_ZTv0_n96_N7S7458C6D1Ev,_ZTv0_n48_N7S7458C6D1Ev)();
extern void ABISELECT(_ZThn24_N7S7458C6D1Ev,_ZThn16_N7S7458C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7458C6D0Ev,_ZTv0_n48_N7S7458C6D0Ev)();
extern void ABISELECT(_ZThn24_N7S7458C6D0Ev,_ZThn16_N7S7458C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7458C7__7S7458C6__7S7458C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-40,-24),
  ABISELECT(24,12),
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-30,-18),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7458C6D1Ev,_ZTv0_n48_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7458C6D0Ev,_ZTv0_n48_N7S7458C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7458C6D1Ev,_ZTv0_n16_N7S7458C6D1Ev)();
extern void ABISELECT(_ZThn48_N7S7458C6D1Ev,_ZThn28_N7S7458C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C6D0Ev,_ZTv0_n16_N7S7458C6D0Ev)();
extern void ABISELECT(_ZThn48_N7S7458C6D0Ev,_ZThn28_N7S7458C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7458C8__7S7458C6__7S7458C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-54,-30),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C6D1Ev,_ZTv0_n16_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C6D0Ev,_ZTv0_n16_N7S7458C6D0Ev),
};
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S7458C6D1Ev,_ZTv0_n32_N7S7458C6D1Ev)();
extern void ABISELECT(_ZThn64_N7S7458C6D1Ev,_ZThn36_N7S7458C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7458C6D0Ev,_ZTv0_n32_N7S7458C6D0Ev)();
extern void ABISELECT(_ZThn64_N7S7458C6D0Ev,_ZThn36_N7S7458C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C13__7S7458C6__7S7458C1[] = {
  ABISELECT(-64,-36),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-70,-38),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C6D1Ev,_ZTv0_n32_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C6D0Ev,_ZTv0_n32_N7S7458C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7458C6D1Ev,_ZTv0_n20_N7S7458C6D1Ev)();
extern void ABISELECT(_ZThn112_N7S7458C6D1Ev,_ZThn64_N7S7458C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C6D0Ev,_ZTv0_n20_N7S7458C6D0Ev)();
extern void ABISELECT(_ZThn112_N7S7458C6D0Ev,_ZThn64_N7S7458C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__7S7458C6__7S7458C1[] = {
  ABISELECT(-112,-64),
  ABISELECT(-118,-66),
  ABISELECT(-54,-30),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C6D1Ev,_ZTv0_n20_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C6D0Ev,_ZTv0_n20_N7S7458C6D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N7S7458C6D1Ev,_ZTvn4_n20_N7S7458C6D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7458C6D0Ev,_ZTvn4_n20_N7S7458C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__A1__7S7458C6__7S7458C1[] = {
  ABISELECT(-126,-70),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C6D1Ev,_ZTvn4_n20_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C6D0Ev,_ZTvn4_n20_N7S7458C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A3__7S7458C6__7S7458C1[] = {
  ABISELECT(-142,-78),
  ABISELECT(-136,-76),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C27S7458C7__7S7458C6__7S7458C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-46,-26),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
};
extern void _ZN7S7458C7D1Ev();
extern void _ZN7S7458C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C7__7S7458C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(24,12),
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-30,-18),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&_ZN7S7458C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C7D0Ev,
};
extern void _ZN8S7458C11D1Ev();
extern void _ZN8S7458C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C117S7458C7__7S7458C1[] = {
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-30,-18),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&_ZN8S7458C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__8S7458C117S7458C7__7S7458C1[] = {
  ABISELECT(10,6),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
};
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev)();
extern void ABISELECT(_ZThn40_N8S7458C11D1Ev,_ZThn20_N8S7458C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev)();
extern void ABISELECT(_ZThn40_N8S7458C11D0Ev,_ZThn20_N8S7458C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C13__8S7458C117S7458C7__7S7458C1[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-70,-38),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__8S7458C117S7458C7__7S7458C1[] = {
  ABISELECT(58,34),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev)();
extern void ABISELECT(_ZThn88_N8S7458C11D1Ev,_ZThn48_N8S7458C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev)();
extern void ABISELECT(_ZThn88_N8S7458C11D0Ev,_ZThn48_N8S7458C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__8S7458C117S7458C7__7S7458C1[] = {
  ABISELECT(-88,-48),
  ABISELECT(-118,-66),
  ABISELECT(-54,-30),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N8S7458C11D1Ev,_ZTvn4_n20_N8S7458C11D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S7458C11D0Ev,_ZTvn4_n20_N8S7458C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__8S7458C117S7458C7__7S7458C1[] = {
  ABISELECT(-126,-70),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C11D1Ev,_ZTvn4_n20_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C11D0Ev,_ZTvn4_n20_N8S7458C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A2__8S7458C117S7458C7__7S7458C1[] = {
  ABISELECT(-142,-78),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C27S7458C7__A1__7S7458C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-46,-26),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__7S7458C27S7458C7__A1__7S7458C1[] = {
  ABISELECT(10,6),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI7S7458C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7458C7D1Ev,_ZTv0_n16_N7S7458C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7458C7D1Ev,_ZThn12_N7S7458C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C7D0Ev,_ZTv0_n16_N7S7458C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7458C7D0Ev,_ZThn12_N7S7458C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7458C8__7S7458C7__7S7458C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-54,-30),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C7D1Ev,_ZTv0_n16_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C7D0Ev,_ZTv0_n16_N7S7458C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__7S7458C7__7S7458C1[] = {
  ABISELECT(58,34),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__A1__7S7458C7__7S7458C1[] = {
  ABISELECT(10,6),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
};
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S7458C7D1Ev,_ZTv0_n32_N7S7458C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S7458C7D1Ev,_ZThn20_N7S7458C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7458C7D0Ev,_ZTv0_n32_N7S7458C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S7458C7D0Ev,_ZThn20_N7S7458C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C13__7S7458C7__7S7458C1[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-70,-38),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C7D1Ev,_ZTv0_n32_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C7D0Ev,_ZTv0_n32_N7S7458C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7458C7D1Ev,_ZTv0_n20_N7S7458C7D1Ev)();
extern void ABISELECT(_ZThn88_N7S7458C7D1Ev,_ZThn48_N7S7458C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C7D0Ev,_ZTv0_n20_N7S7458C7D0Ev)();
extern void ABISELECT(_ZThn88_N7S7458C7D0Ev,_ZThn48_N7S7458C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__7S7458C7__7S7458C1[] = {
  ABISELECT(-88,-48),
  ABISELECT(-118,-66),
  ABISELECT(-54,-30),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C7D1Ev,_ZTv0_n20_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C7D0Ev,_ZTv0_n20_N7S7458C7D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N7S7458C7D1Ev,_ZTvn4_n20_N7S7458C7D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7458C7D0Ev,_ZTvn4_n20_N7S7458C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__A1__7S7458C7__7S7458C1[] = {
  ABISELECT(-126,-70),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C7D1Ev,_ZTvn4_n20_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C7D0Ev,_ZTvn4_n20_N7S7458C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A3__7S7458C7__7S7458C1[] = {
  ABISELECT(-142,-78),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C2__7S7458C7__7S7458C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-46,-26),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
};
extern void _ZN7S7458C8D1Ev();
extern void _ZN7S7458C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C8__7S7458C1[] = {
  ABISELECT(-54,-30),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C8[0]),
  (VTBL_ENTRY)&_ZN7S7458C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C47S7458C8__A1__7S7458C1[] = {
  ABISELECT(-54,-30),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__7S7458C1[] = {
  ABISELECT(58,34),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C12__7S7458C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-30,-18),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__8S7458C12__7S7458C1[] = {
  ABISELECT(10,6),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S7458C12[0]),
};
extern void _ZN8S7458C132v1Ev();
extern void _ZN8S7458C13D1Ev();
extern void _ZN8S7458C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C13__7S7458C1[] = {
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-70,-38),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&_ZN8S7458C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C13__A4__7S7458C1[] = {
  ABISELECT(-70,-38),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__8S7458C13__7S7458C1[] = {
  ABISELECT(58,34),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev)();
extern void ABISELECT(_ZThn48_N8S7458C13D1Ev,_ZThn28_N8S7458C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev)();
extern void ABISELECT(_ZThn48_N8S7458C13D0Ev,_ZThn28_N8S7458C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__8S7458C13__7S7458C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-118,-66),
  ABISELECT(-54,-30),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N8S7458C13D1Ev,_ZTvn4_n20_N8S7458C13D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S7458C13D0Ev,_ZTvn4_n20_N8S7458C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__8S7458C13__7S7458C1[] = {
  ABISELECT(-126,-70),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C13D1Ev,_ZTvn4_n20_N8S7458C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C13D0Ev,_ZTvn4_n20_N8S7458C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A1__8S7458C13__7S7458C1[] = {
  ABISELECT(-142,-78),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
};
extern void _ZN8S7458C14D1Ev();
extern void _ZN8S7458C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C14__7S7458C1[] = {
  ABISELECT(-118,-66),
  ABISELECT(-54,-30),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&_ZN8S7458C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C14D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7458C108S7458C14__A1__7S7458C1[] = {
  ABISELECT(-54,-30),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
extern void _ZN7S7458C8D1Ev();
extern void _ZN7S7458C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__A1__7S7458C1[] = {
  ABISELECT(-126,-70),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C8[0]),
  (VTBL_ENTRY)&_ZN7S7458C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C47S7458C88S7458C14__A2__7S7458C1[] = {
  ABISELECT(-126,-70),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A3__7S7458C1[] = {
  ABISELECT(-142,-78),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
extern void ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev)();
extern void ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C8__8S7458C14__7S7458C1[] = {
  ABISELECT(-126,-70),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__A1__8S7458C14__7S7458C1[] = {
  ABISELECT(-142,-78),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
};
static  VTT_ENTRY vtt_S7458C1[] = {
  {&(_ZTV7S7458C1[14]),  14,82},
  {&(_tg__ZTV7S7458C2__7S7458C1[4]),  4,4},
  {&(_tg__ZTV7S7458C2__7S7458C1[4]),  4,4},
  {&(_ZTV7S7458C1[14]),  14,82},
  {&(_ZTV7S7458C1[30]),  30,82},
  {&(_ZTV7S7458C1[30]),  30,82},
  {&(_ZTV7S7458C1[44]),  44,82},
  {&(_ZTV7S7458C1[54]),  54,82},
  {&(_ZTV7S7458C1[30]),  30,82},
  {&(_ZTV7S7458C1[44]),  44,82},
  {&(_ZTV7S7458C1[64]),  64,82},
  {&(_ZTV7S7458C1[72]),  72,82},
  {&(_ZTV7S7458C1[77]),  77,82},
  {&(_ZTV7S7458C1[82]),  82,82},
  {&(_ZTV7S7458C1[50]),  50,82},
  {&(_tg__ZTV7S7458C4__7S7458C1[3]),  3,3},
  {&(_tg__ZTV7S7458C5__7S7458C1[14]),  14,16},
  {&(_tg__ZTV7S7458C5__7S7458C1[14]),  14,16},
  {&(_tg__ZTV7S7458C4__7S7458C5__7S7458C1[3]),  3,3},
  {&(_tg__ZTV7S7458C7__7S7458C5__7S7458C1[12]),  12,14},
  {&(_tg__ZTV7S7458C8__7S7458C5__7S7458C1[4]),  4,6},
  {&(_tg__ZTV7S7458C5__7S7458C1[14]),  14,16},
  {&(_tg__ZTV7S7458C7__7S7458C5__7S7458C1[12]),  12,14},
  {&(_tg__ZTV8S7458C13__7S7458C5__7S7458C1[8]),  8,11},
  {&(_tg__ZTV8S7458C14__7S7458C5__7S7458C1[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__A1__7S7458C5__7S7458C1[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A3__7S7458C5__7S7458C1[3]),  3,3},
  {&(_tg__ZTV7S7458C27S7458C7__7S7458C5__7S7458C1[4]),  4,4},
  {&(_tg__ZTV7S7458C6__7S7458C1[12]),  12,14},
  {&(_tg__ZTV7S7458C4__7S7458C6__7S7458C1[3]),  3,3},
  {&(_tg__ZTV7S7458C7__7S7458C6__7S7458C1[12]),  12,14},
  {&(_tg__ZTV7S7458C8__7S7458C6__7S7458C1[4]),  4,6},
  {&(_tg__ZTV7S7458C6__7S7458C1[12]),  12,14},
  {&(_tg__ZTV7S7458C7__7S7458C6__7S7458C1[12]),  12,14},
  {&(_tg__ZTV8S7458C13__7S7458C6__7S7458C1[8]),  8,11},
  {&(_tg__ZTV8S7458C14__7S7458C6__7S7458C1[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__A1__7S7458C6__7S7458C1[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A3__7S7458C6__7S7458C1[3]),  3,3},
  {&(_tg__ZTV7S7458C27S7458C7__7S7458C6__7S7458C1[4]),  4,4},
  {&(_tg__ZTV7S7458C7__7S7458C1[11]),  11,13},
  {&(_tg__ZTV8S7458C117S7458C7__7S7458C1[9]),  9,11},
  {&(_tg__ZTV8S7458C117S7458C7__7S7458C1[9]),  9,11},
  {&(_tg__ZTV7S7458C4__8S7458C117S7458C7__7S7458C1[3]),  3,3},
  {&(_tg__ZTV8S7458C13__8S7458C117S7458C7__7S7458C1[8]),  8,11},
  {&(_tg__ZTV8S7458C10__8S7458C117S7458C7__7S7458C1[3]),  3,3},
  {&(_tg__ZTV8S7458C14__8S7458C117S7458C7__7S7458C1[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__8S7458C117S7458C7__7S7458C1[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A2__8S7458C117S7458C7__7S7458C1[3]),  3,3},
  {&(_tg__ZTV7S7458C27S7458C7__A1__7S7458C1[4]),  4,4},
  {&(_tg__ZTV7S7458C4__7S7458C27S7458C7__A1__7S7458C1[3]),  3,3},
  {&(_tg__ZTV7S7458C8__7S7458C7__7S7458C1[4]),  4,6},
  {&(_tg__ZTV8S7458C10__7S7458C7__7S7458C1[3]),  3,3},
  {&(_tg__ZTV7S7458C7__7S7458C1[11]),  11,13},
  {&(_tg__ZTV7S7458C4__A1__7S7458C7__7S7458C1[3]),  3,3},
  {&(_tg__ZTV8S7458C13__7S7458C7__7S7458C1[8]),  8,11},
  {&(_tg__ZTV8S7458C14__7S7458C7__7S7458C1[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__A1__7S7458C7__7S7458C1[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A3__7S7458C7__7S7458C1[3]),  3,3},
  {&(_tg__ZTV7S7458C2__7S7458C7__7S7458C1[4]),  4,4},
  {&(_tg__ZTV7S7458C8__7S7458C1[3]),  3,5},
  {&(_tg__ZTV7S7458C47S7458C8__A1__7S7458C1[3]),  3,3},
  {&(_tg__ZTV8S7458C10__7S7458C1[3]),  3,3},
  {&(_tg__ZTV8S7458C12__7S7458C1[4]),  4,4},
  {&(_tg__ZTV7S7458C4__8S7458C12__7S7458C1[3]),  3,3},
  {&(_tg__ZTV8S7458C13__7S7458C1[6]),  6,9},
  {&(_tg__ZTV7S7458C48S7458C13__A4__7S7458C1[3]),  3,3},
  {&(_tg__ZTV8S7458C10__8S7458C13__7S7458C1[3]),  3,3},
  {&(_tg__ZTV8S7458C14__8S7458C13__7S7458C1[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__8S7458C13__7S7458C1[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A1__8S7458C13__7S7458C1[3]),  3,3},
  {&(_tg__ZTV8S7458C14__7S7458C1[4]),  4,6},
  {&(_tg__ZTV8S7458C108S7458C14__A1__7S7458C1[3]),  3,3},
  {&(_tg__ZTV7S7458C88S7458C14__A1__7S7458C1[3]),  3,5},
  {&(_tg__ZTV7S7458C47S7458C88S7458C14__A2__7S7458C1[3]),  3,3},
  {&(_tg__ZTV7S7458C48S7458C14__A3__7S7458C1[3]),  3,3},
  {&(_tg__ZTV7S7458C8__8S7458C14__7S7458C1[3]),  3,5},
  {&(_tg__ZTV7S7458C4__A1__8S7458C14__7S7458C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7458C1[];
extern  VTBL_ENTRY _ZTV7S7458C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C1[];
static VTBL_ENTRY alt_thunk_names39[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7458C13D0Ev,_ZThn28_N8S7458C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7458C13D1Ev,_ZThn28_N8S7458C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C7D0Ev,_ZTv0_n20_N7S7458C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7458C7D0Ev,_ZThn48_N7S7458C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C7D1Ev,_ZTv0_n20_N7S7458C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7458C7D1Ev,_ZThn48_N7S7458C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C7D0Ev,_ZTv0_n32_N7S7458C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7458C7D0Ev,_ZThn20_N7S7458C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C7D1Ev,_ZTv0_n32_N7S7458C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7458C7D1Ev,_ZThn20_N7S7458C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C7D0Ev,_ZTv0_n16_N7S7458C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C7D0Ev,_ZThn12_N7S7458C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C7D1Ev,_ZTv0_n16_N7S7458C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C7D1Ev,_ZThn12_N7S7458C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7458C11D0Ev,_ZThn48_N8S7458C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7458C11D1Ev,_ZThn48_N8S7458C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S7458C11D0Ev,_ZThn20_N8S7458C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S7458C11D1Ev,_ZThn20_N8S7458C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C6D0Ev,_ZTv0_n20_N7S7458C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7458C6D0Ev,_ZThn64_N7S7458C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C6D1Ev,_ZTv0_n20_N7S7458C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7458C6D1Ev,_ZThn64_N7S7458C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C6D0Ev,_ZTv0_n32_N7S7458C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7458C6D0Ev,_ZThn36_N7S7458C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C6D1Ev,_ZTv0_n32_N7S7458C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7458C6D1Ev,_ZThn36_N7S7458C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C6D0Ev,_ZTv0_n16_N7S7458C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7458C6D0Ev,_ZThn28_N7S7458C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C6D1Ev,_ZTv0_n16_N7S7458C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7458C6D1Ev,_ZThn28_N7S7458C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7458C6D0Ev,_ZTv0_n48_N7S7458C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C6D0Ev,_ZThn16_N7S7458C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7458C6D1Ev,_ZTv0_n48_N7S7458C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C6D1Ev,_ZThn16_N7S7458C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C5D0Ev,_ZTv0_n20_N7S7458C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7458C5D0Ev,_ZThn64_N7S7458C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C5D1Ev,_ZTv0_n20_N7S7458C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7458C5D1Ev,_ZThn64_N7S7458C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C5D0Ev,_ZTv0_n32_N7S7458C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7458C5D0Ev,_ZThn36_N7S7458C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C5D1Ev,_ZTv0_n32_N7S7458C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7458C5D1Ev,_ZThn36_N7S7458C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C5D0Ev,_ZTv0_n16_N7S7458C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7458C5D0Ev,_ZThn28_N7S7458C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C5D1Ev,_ZTv0_n16_N7S7458C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7458C5D1Ev,_ZThn28_N7S7458C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7458C5D0Ev,_ZTv0_n48_N7S7458C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C5D0Ev,_ZThn16_N7S7458C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7458C5D1Ev,_ZTv0_n48_N7S7458C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C5D1Ev,_ZThn16_N7S7458C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7458C5D0Ev,_ZTv0_n52_N7S7458C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S7458C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7458C5D1Ev,_ZTv0_n52_N7S7458C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S7458C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C1D0Ev,_ZTv0_n20_N7S7458C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7458C1D0Ev,_ZThn72_N7S7458C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C1D1Ev,_ZTv0_n20_N7S7458C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7458C1D1Ev,_ZThn72_N7S7458C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C1D0Ev,_ZTv0_n32_N7S7458C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7458C1D0Ev,_ZThn44_N7S7458C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C1D1Ev,_ZTv0_n32_N7S7458C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7458C1D1Ev,_ZThn44_N7S7458C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C1D0Ev,_ZTv0_n16_N7S7458C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7458C1D0Ev,_ZThn36_N7S7458C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C1D1Ev,_ZTv0_n16_N7S7458C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7458C1D1Ev,_ZThn36_N7S7458C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7458C1D0Ev,_ZTv0_n48_N7S7458C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7458C1D0Ev,_ZThn24_N7S7458C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7458C1D1Ev,_ZTv0_n48_N7S7458C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7458C1D1Ev,_ZThn24_N7S7458C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7458C1D0Ev,_ZTv0_n52_N7S7458C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7458C1D0Ev,_ZThn8_N7S7458C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7458C1D1Ev,_ZTv0_n52_N7S7458C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7458C1D1Ev,_ZThn8_N7S7458C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7458C1 = {  "S7458C1", // class name
  bases_S7458C1, 27,
  &(vtc_S7458C1[0]), // expected_vtbl_contents
  &(vtt_S7458C1[0]), // expected_vtt_contents
  ABISELECT(240,148), // object size
  NSPAIRA(_ZTI7S7458C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7458C1),82, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7458C1),77, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names39,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3068C3  {
  virtual void  v2(); // _ZN7S3068C32v2Ev
  virtual void  v3(); // _ZN7S3068C32v3Ev
  virtual void  v4(); // _ZN7S3068C32v4Ev
  virtual void  v5(); // _ZN7S3068C32v5Ev
  virtual void  v6(); // _ZN7S3068C32v6Ev
  virtual void  v7(); // _ZN7S3068C32v7Ev
  ~S3068C3(); // tgen
  S3068C3(); // tgen
};
//SIG(-1 S3068C3) C1{ v1 v2 v3 v4 v5 v6}


void  S3068C3 ::v2(){vfunc_called(this, "_ZN7S3068C32v2Ev");}
void  S3068C3 ::v3(){vfunc_called(this, "_ZN7S3068C32v3Ev");}
void  S3068C3 ::v4(){vfunc_called(this, "_ZN7S3068C32v4Ev");}
void  S3068C3 ::v5(){vfunc_called(this, "_ZN7S3068C32v5Ev");}
void  S3068C3 ::v6(){vfunc_called(this, "_ZN7S3068C32v6Ev");}
void  S3068C3 ::v7(){vfunc_called(this, "_ZN7S3068C32v7Ev");}
S3068C3 ::~S3068C3(){ note_dtor("S3068C3", this);} // tgen
S3068C3 ::S3068C3(){ note_ctor("S3068C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3068C3C1Ev();
extern void _ZN7S3068C3D1Ev();
Name_Map name_map_S3068C3[] = {
  NSPAIR(_ZN7S3068C3C1Ev),
  NSPAIR(_ZN7S3068C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3068C3[];
extern void _ZN7S3068C32v2Ev();
extern void _ZN7S3068C32v3Ev();
extern void _ZN7S3068C32v4Ev();
extern void _ZN7S3068C32v5Ev();
extern void _ZN7S3068C32v6Ev();
extern void _ZN7S3068C32v7Ev();
static  VTBL_ENTRY vtc_S3068C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C3[0]),
  (VTBL_ENTRY)&_ZN7S3068C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S3068C3[];
extern  VTBL_ENTRY _ZTV7S3068C3[];
Class_Descriptor cd_S3068C3 = {  "S3068C3", // class name
  0,0,//no base classes
  &(vtc_S3068C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3068C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3068C3),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  S3068C7  {
  void *s3068c7f0;
  long double s3068c7f1;
  int s3068c7f2;
  virtual void  v8(); // _ZN7S3068C72v8Ev
  virtual void  v9(); // _ZN7S3068C72v9Ev
  ~S3068C7(); // tgen
  S3068C7(); // tgen
};
//SIG(-1 S3068C7) C1{ v1 v2 Fp FD Fi}


void  S3068C7 ::v8(){vfunc_called(this, "_ZN7S3068C72v8Ev");}
void  S3068C7 ::v9(){vfunc_called(this, "_ZN7S3068C72v9Ev");}
S3068C7 ::~S3068C7(){ note_dtor("S3068C7", this);} // tgen
S3068C7 ::S3068C7(){ note_ctor("S3068C7", this);} // tgen

static void Test_S3068C7()
{
  extern Class_Descriptor cd_S3068C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S3068C7, buf);
    S3068C7 *dp, &lv = *(dp=new (buf) S3068C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3068C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3068C7)");
    check_field_offset(lv, s3068c7f0, ABISELECT(8,4), "S3068C7.s3068c7f0");
    check_field_offset(lv, s3068c7f1, ABISELECT(16,8), "S3068C7.s3068c7f1");
    check_field_offset(lv, s3068c7f2, ABISELECT(32,20), "S3068C7.s3068c7f2");
    test_class_info(&lv, &cd_S3068C7);
    dp->~S3068C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3068C7(Test_S3068C7, "S3068C7", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3068C7C1Ev();
extern void _ZN7S3068C7D1Ev();
Name_Map name_map_S3068C7[] = {
  NSPAIR(_ZN7S3068C7C1Ev),
  NSPAIR(_ZN7S3068C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3068C7[];
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
static  VTBL_ENTRY vtc_S3068C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C7[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
};
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
Class_Descriptor cd_S3068C7 = {  "S3068C7", // class name
  0,0,//no base classes
  &(vtc_S3068C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3068C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3068C7),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  S3068C6  : S3068C7 {
  virtual void  v10(); // _ZN7S3068C63v10Ev
  virtual void  v11(); // _ZN7S3068C63v11Ev
  ~S3068C6(); // tgen
  S3068C6(); // tgen
};
//SIG(-1 S3068C6) C1{ BC2{ v3 v4 Fp FD Fi} v1 v2}


void  S3068C6 ::v10(){vfunc_called(this, "_ZN7S3068C63v10Ev");}
void  S3068C6 ::v11(){vfunc_called(this, "_ZN7S3068C63v11Ev");}
S3068C6 ::~S3068C6(){ note_dtor("S3068C6", this);} // tgen
S3068C6 ::S3068C6(){ note_ctor("S3068C6", this);} // tgen

static void Test_S3068C6()
{
  extern Class_Descriptor cd_S3068C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S3068C6, buf);
    S3068C6 *dp, &lv = *(dp=new (buf) S3068C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3068C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3068C6)");
    check_base_class_offset(lv, (S3068C7*), 0, "S3068C6");
    test_class_info(&lv, &cd_S3068C6);
    dp->~S3068C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3068C6(Test_S3068C6, "S3068C6", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3068C6C1Ev();
extern void _ZN7S3068C6D1Ev();
Name_Map name_map_S3068C6[] = {
  NSPAIR(_ZN7S3068C6C1Ev),
  NSPAIR(_ZN7S3068C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
static Base_Class bases_S3068C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3068C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3068C6[];
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
static  VTBL_ENTRY vtc_S3068C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C6[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
};
extern VTBL_ENTRY _ZTI7S3068C6[];
extern  VTBL_ENTRY _ZTV7S3068C6[];
Class_Descriptor cd_S3068C6 = {  "S3068C6", // class name
  bases_S3068C6, 1,
  &(vtc_S3068C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3068C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3068C6),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  S3068C5  : S3068C6 , S3068C7 {
  virtual void  v12(); // _ZN7S3068C53v12Ev
  virtual void  v13(); // _ZN7S3068C53v13Ev
  virtual void  v14(); // _ZN7S3068C53v14Ev
  virtual void  v15(); // _ZN7S3068C53v15Ev
  ~S3068C5(); // tgen
  S3068C5(); // tgen
};
//SIG(-1 S3068C5) C1{ BC2{ BC3{ v5 v6 Fp FD Fi} v7 v8} BC3 v1 v2 v3 v4}


void  S3068C5 ::v12(){vfunc_called(this, "_ZN7S3068C53v12Ev");}
void  S3068C5 ::v13(){vfunc_called(this, "_ZN7S3068C53v13Ev");}
void  S3068C5 ::v14(){vfunc_called(this, "_ZN7S3068C53v14Ev");}
void  S3068C5 ::v15(){vfunc_called(this, "_ZN7S3068C53v15Ev");}
S3068C5 ::~S3068C5(){ note_dtor("S3068C5", this);} // tgen
S3068C5 ::S3068C5(){ note_ctor("S3068C5", this);} // tgen

static void Test_S3068C5()
{
  extern Class_Descriptor cd_S3068C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S3068C5, buf);
    S3068C5 *dp, &lv = *(dp=new (buf) S3068C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S3068C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3068C5)");
    check_base_class_offset(lv, (S3068C7*)(S3068C6*), 0, "S3068C5");
    check_base_class_offset(lv, (S3068C6*), 0, "S3068C5");
    /*is_ambiguous_... S3068C5::S3068C7 */ AMB_check_base_class_offset(lv, (S3068C7*), ABISELECT(48,24), "S3068C5");
    test_class_info(&lv, &cd_S3068C5);
    dp->~S3068C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3068C5(Test_S3068C5, "S3068C5", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN7S3068C5C1Ev();
extern void _ZN7S3068C5D1Ev();
Name_Map name_map_S3068C5[] = {
  NSPAIR(_ZN7S3068C5C1Ev),
  NSPAIR(_ZN7S3068C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
extern Class_Descriptor cd_S3068C6;
extern VTBL_ENTRY _ZTI7S3068C6[];
extern  VTBL_ENTRY _ZTV7S3068C6[];
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
static Base_Class bases_S3068C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3068C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3068C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3068C7,    ABISELECT(48,24), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3068C5[];
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
extern void _ZN7S3068C53v12Ev();
extern void _ZN7S3068C53v13Ev();
extern void _ZN7S3068C53v14Ev();
extern void _ZN7S3068C53v15Ev();
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
static  VTBL_ENTRY vtc_S3068C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C5[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v15Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3068C5[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
};
extern VTBL_ENTRY _ZTI7S3068C5[];
extern  VTBL_ENTRY _ZTV7S3068C5[];
Class_Descriptor cd_S3068C5 = {  "S3068C5", // class name
  bases_S3068C5, 3,
  &(vtc_S3068C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI7S3068C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3068C5),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  S3068C10  {
  ::S1400C17_nt s3068c10f0;
  void *s3068c10f1;
  virtual void  v16(); // _ZN8S3068C103v16Ev
  ~S3068C10(); // tgen
  S3068C10(); // tgen
};
//SIG(-1 S3068C10) C1{ v1 FC2{ v2 v3} Fp}


void  S3068C10 ::v16(){vfunc_called(this, "_ZN8S3068C103v16Ev");}
S3068C10 ::~S3068C10(){ note_dtor("S3068C10", this);} // tgen
S3068C10 ::S3068C10(){ note_ctor("S3068C10", this);} // tgen

static void Test_S3068C10()
{
  extern Class_Descriptor cd_S3068C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3068C10, buf);
    S3068C10 *dp, &lv = *(dp=new (buf) S3068C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3068C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3068C10)");
    check_field_offset(lv, s3068c10f0, ABISELECT(8,4), "S3068C10.s3068c10f0");
    check_field_offset(lv, s3068c10f1, ABISELECT(16,8), "S3068C10.s3068c10f1");
    test_class_info(&lv, &cd_S3068C10);
    dp->~S3068C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3068C10(Test_S3068C10, "S3068C10", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S3068C10C1Ev();
extern void _ZN8S3068C10D1Ev();
Name_Map name_map_S3068C10[] = {
  NSPAIR(_ZN8S3068C10C1Ev),
  NSPAIR(_ZN8S3068C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3068C10[];
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY vtc_S3068C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3068C10[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern VTBL_ENTRY _ZTI8S3068C10[];
extern  VTBL_ENTRY _ZTV8S3068C10[];
Class_Descriptor cd_S3068C10 = {  "S3068C10", // class name
  0,0,//no base classes
  &(vtc_S3068C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S3068C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3068C10),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  S3068C9  : virtual S3068C10 {
  virtual void  v17(); // _ZN7S3068C93v17Ev
  ~S3068C9(); // tgen
  S3068C9(); // tgen
};
//SIG(-1 S3068C9) C1{ VBC2{ v2 FC3{ v3 v4} Fp} v1}


void  S3068C9 ::v17(){vfunc_called(this, "_ZN7S3068C93v17Ev");}
S3068C9 ::~S3068C9(){ note_dtor("S3068C9", this);} // tgen
S3068C9 ::S3068C9(){ note_ctor("S3068C9", this);} // tgen

static void Test_S3068C9()
{
  extern Class_Descriptor cd_S3068C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3068C9, buf);
    S3068C9 *dp, &lv = *(dp=new (buf) S3068C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3068C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3068C9)");
    check_base_class_offset(lv, (S3068C10*), ABISELECT(8,4), "S3068C9");
    test_class_info(&lv, &cd_S3068C9);
    dp->~S3068C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3068C9(Test_S3068C9, "S3068C9", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S3068C9C1Ev();
extern void _ZN7S3068C9D1Ev();
Name_Map name_map_S3068C9[] = {
  NSPAIR(_ZN7S3068C9C1Ev),
  NSPAIR(_ZN7S3068C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3068C10;
extern VTBL_ENTRY _ZTI8S3068C10[];
extern  VTBL_ENTRY _ZTV8S3068C10[];
static Base_Class bases_S3068C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3068C10,    ABISELECT(8,4), //bcp->offset
    4, //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 _ZTI7S3068C9[];
extern void _ZN7S3068C93v17Ev();
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY vtc_S3068C9[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C9[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3068C9[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern VTBL_ENTRY _ZTV7S3068C9[];
static  VTT_ENTRY vtt_S3068C9[] = {
  {&(_ZTV7S3068C9[3]),  3,8},
  {&(_ZTV7S3068C9[7]),  7,8},
};
extern VTBL_ENTRY _ZTI7S3068C9[];
extern  VTBL_ENTRY _ZTV7S3068C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C9[];
Class_Descriptor cd_S3068C9 = {  "S3068C9", // class name
  bases_S3068C9, 1,
  &(vtc_S3068C9[0]), // expected_vtbl_contents
  &(vtt_S3068C9[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S3068C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3068C9),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3068C9),2, //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  S3068C8  : virtual S3068C9 {
  virtual void  v18(); // _ZN7S3068C83v18Ev
  virtual void  v19(); // _ZN7S3068C83v19Ev
  virtual void  v20(); // _ZN7S3068C83v20Ev
  ~S3068C8(); // tgen
  S3068C8(); // tgen
};
//SIG(-1 S3068C8) C1{ VBC2{ VBC3{ v4 FC4{ v6 v7} Fp} v5} v1 v2 v3}


void  S3068C8 ::v18(){vfunc_called(this, "_ZN7S3068C83v18Ev");}
void  S3068C8 ::v19(){vfunc_called(this, "_ZN7S3068C83v19Ev");}
void  S3068C8 ::v20(){vfunc_called(this, "_ZN7S3068C83v20Ev");}
S3068C8 ::~S3068C8(){ note_dtor("S3068C8", this);} // tgen
S3068C8 ::S3068C8(){ note_ctor("S3068C8", this);} // tgen

static void Test_S3068C8()
{
  extern Class_Descriptor cd_S3068C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3068C8, buf);
    S3068C8 *dp, &lv = *(dp=new (buf) S3068C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3068C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3068C8)");
    check_base_class_offset(lv, (S3068C10*)(S3068C9*), ABISELECT(8,4), "S3068C8");
    check_base_class_offset(lv, (S3068C9*), 0, "S3068C8");
    test_class_info(&lv, &cd_S3068C8);
    dp->~S3068C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3068C8(Test_S3068C8, "S3068C8", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S3068C8C1Ev();
extern void _ZN7S3068C8D1Ev();
Name_Map name_map_S3068C8[] = {
  NSPAIR(_ZN7S3068C8C1Ev),
  NSPAIR(_ZN7S3068C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3068C10;
extern VTBL_ENTRY _ZTI8S3068C10[];
extern  VTBL_ENTRY _ZTV8S3068C10[];
extern Class_Descriptor cd_S3068C9;
extern VTBL_ENTRY _ZTI7S3068C9[];
extern  VTBL_ENTRY _ZTV7S3068C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C9[];
static Base_Class bases_S3068C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3068C10,    ABISELECT(8,4), //bcp->offset
    9, //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
    1, //immediately_derived
  0, 1},
  {&cd_S3068C9,    0, //bcp->offset
    -1, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S3068C8[];
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY vtc_S3068C8[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C8[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3068C8[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern VTBL_ENTRY _ZTV7S3068C8[];
extern void _ZN7S3068C93v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C9__7S3068C8[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C9[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C9__7S3068C8[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3068C9[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
static  VTT_ENTRY vtt_S3068C8[] = {
  {&(_ZTV7S3068C8[5]),  5,13},
  {&(_ZTV7S3068C8[5]),  5,13},
  {&(_ZTV7S3068C8[12]),  12,13},
  {&(_tg__ZTV7S3068C9__7S3068C8[3]),  3,4},
  {&(_tg__ZTV8S3068C10__7S3068C9__7S3068C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3068C8[];
extern  VTBL_ENTRY _ZTV7S3068C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C8[];
Class_Descriptor cd_S3068C8 = {  "S3068C8", // class name
  bases_S3068C8, 2,
  &(vtc_S3068C8[0]), // expected_vtbl_contents
  &(vtt_S3068C8[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S3068C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3068C8),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3068C8),5, //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  S3068C4  : S3068C5 , virtual S3068C8 {
  virtual void  v21(); // _ZN7S3068C43v21Ev
  virtual void  v22(); // _ZN7S3068C43v22Ev
  virtual void  v23(); // _ZN7S3068C43v23Ev
  ~S3068C4(); // tgen
  S3068C4(); // tgen
};
//SIG(-1 S3068C4) C1{ BC2{ BC3{ BC4{ v4 v5 Fp FD Fi} v6 v7} BC4 v8 v9 v10 v11} VBC5{ VBC6{ VBC7{ v12 FC8{ v17 v18} Fp} v13} v14 v15 v16} v1 v2 v3}


void  S3068C4 ::v21(){vfunc_called(this, "_ZN7S3068C43v21Ev");}
void  S3068C4 ::v22(){vfunc_called(this, "_ZN7S3068C43v22Ev");}
void  S3068C4 ::v23(){vfunc_called(this, "_ZN7S3068C43v23Ev");}
S3068C4 ::~S3068C4(){ note_dtor("S3068C4", this);} // tgen
S3068C4 ::S3068C4(){ note_ctor("S3068C4", this);} // tgen

static void Test_S3068C4()
{
  extern Class_Descriptor cd_S3068C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,17)];
    init_test(&cd_S3068C4, buf);
    S3068C4 *dp, &lv = *(dp=new (buf) S3068C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S3068C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3068C4)");
    check_base_class_offset(lv, (S3068C7*)(S3068C6*)(S3068C5*), 0, "S3068C4");
    check_base_class_offset(lv, (S3068C6*)(S3068C5*), 0, "S3068C4");
    /*is_ambiguous_... S3068C5::S3068C7 */ AMB_check_base_class_offset(lv, (S3068C7*)(S3068C5*), ABISELECT(48,24), "S3068C4");
    check_base_class_offset(lv, (S3068C5*), 0, "S3068C4");
    check_base_class_offset(lv, (S3068C10*)(S3068C9*), ABISELECT(96,52), "S3068C4");
    check_base_class_offset(lv, (S3068C9*)(S3068C8*), ABISELECT(88,48), "S3068C4");
    check_base_class_offset(lv, (S3068C8*), ABISELECT(88,48), "S3068C4");
    test_class_info(&lv, &cd_S3068C4);
    dp->~S3068C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3068C4(Test_S3068C4, "S3068C4", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN7S3068C4C1Ev();
extern void _ZN7S3068C4D1Ev();
Name_Map name_map_S3068C4[] = {
  NSPAIR(_ZN7S3068C4C1Ev),
  NSPAIR(_ZN7S3068C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
extern Class_Descriptor cd_S3068C6;
extern VTBL_ENTRY _ZTI7S3068C6[];
extern  VTBL_ENTRY _ZTV7S3068C6[];
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
extern Class_Descriptor cd_S3068C5;
extern VTBL_ENTRY _ZTI7S3068C5[];
extern  VTBL_ENTRY _ZTV7S3068C5[];
extern Class_Descriptor cd_S3068C10;
extern VTBL_ENTRY _ZTI8S3068C10[];
extern  VTBL_ENTRY _ZTV8S3068C10[];
extern Class_Descriptor cd_S3068C9;
extern VTBL_ENTRY _ZTI7S3068C9[];
extern  VTBL_ENTRY _ZTV7S3068C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C9[];
extern Class_Descriptor cd_S3068C8;
extern VTBL_ENTRY _ZTI7S3068C8[];
extern  VTBL_ENTRY _ZTV7S3068C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C8[];
static Base_Class bases_S3068C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3068C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S3068C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3068C7,    ABISELECT(48,24), //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
    6, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3068C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3068C10,    ABISELECT(96,52), //bcp->offset
    32, //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
    5, //immediately_derived
  0, 1},
  {&cd_S3068C9,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3068C8,    ABISELECT(88,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    8, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S3068C4[];
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
extern void _ZN7S3068C53v12Ev();
extern void _ZN7S3068C53v13Ev();
extern void _ZN7S3068C53v14Ev();
extern void _ZN7S3068C53v15Ev();
extern void _ZN7S3068C43v21Ev();
extern void _ZN7S3068C43v22Ev();
extern void _ZN7S3068C43v23Ev();
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY vtc_S3068C4[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v23Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern VTBL_ENTRY _ZTV7S3068C4[];
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C8__7S3068C4[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C8[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C8__7S3068C4[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3068C8[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern void _ZN7S3068C93v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C9__7S3068C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C9[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C9__7S3068C4[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3068C9[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
static  VTT_ENTRY vtt_S3068C4[] = {
  {&(_ZTV7S3068C4[5]),  5,36},
  {&(_ZTV7S3068C4[28]),  28,36},
  {&(_ZTV7S3068C4[28]),  28,36},
  {&(_ZTV7S3068C4[35]),  35,36},
  {&(_tg__ZTV7S3068C8__7S3068C4[5]),  5,9},
  {&(_tg__ZTV7S3068C8__7S3068C4[5]),  5,9},
  {&(_tg__ZTV8S3068C10__7S3068C8__7S3068C4[3]),  3,4},
  {&(_tg__ZTV7S3068C9__7S3068C4[3]),  3,4},
  {&(_tg__ZTV8S3068C10__7S3068C9__7S3068C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3068C4[];
extern  VTBL_ENTRY _ZTV7S3068C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C4[];
Class_Descriptor cd_S3068C4 = {  "S3068C4", // class name
  bases_S3068C4, 7,
  &(vtc_S3068C4[0]), // expected_vtbl_contents
  &(vtt_S3068C4[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI7S3068C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3068C4),36, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3068C4),9, //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  S3068C2  : S3068C3 , virtual S3068C4 {
  void *s3068c2f0;
  __tsi64 s3068c2f1:5;
  virtual  ~S3068C2(); // _ZN7S3068C2D2Ev
  virtual void  v24(); // _ZN7S3068C23v24Ev
  S3068C2(); // tgen
};
//SIG(-1 S3068C2) C1{ BC2{ v2 v3 v4 v5 v6 v7} VBC3{ BC4{ BC5{ BC6{ v8 v9 Fp FD Fi} v10 v11} BC6 v12 v13 v14 v15} VBC7{ VBC8{ VBC9{ v16 FC10{ v24 v25} Fp} v17} v18 v19 v20} v21 v22 v23} vd v1 Fp FL:5}


 S3068C2 ::~S3068C2(){ note_dtor("S3068C2", this);}
void  S3068C2 ::v24(){vfunc_called(this, "_ZN7S3068C23v24Ev");}
S3068C2 ::S3068C2(){ note_ctor("S3068C2", this);} // tgen

static void Test_S3068C2()
{
  extern Class_Descriptor cd_S3068C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,20)];
    init_test(&cd_S3068C2, buf);
    S3068C2 *dp, &lv = *(dp=new (buf) S3068C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,76), "sizeof(S3068C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3068C2)");
    check_base_class_offset(lv, (S3068C3*), 0, "S3068C2");
    check_base_class_offset(lv, (S3068C7*)(S3068C6*)(S3068C5*)(S3068C4*), ABISELECT(32,12), "S3068C2");
    check_base_class_offset(lv, (S3068C6*)(S3068C5*)(S3068C4*), ABISELECT(32,12), "S3068C2");
    /*is_ambiguous_... S3068C5::S3068C7 */ AMB_check_base_class_offset(lv, (S3068C7*)(S3068C5*)(S3068C4*), ABISELECT(80,36), "S3068C2");
    check_base_class_offset(lv, (S3068C5*)(S3068C4*), ABISELECT(32,12), "S3068C2");
    check_base_class_offset(lv, (S3068C10*)(S3068C9*), ABISELECT(128,64), "S3068C2");
    check_base_class_offset(lv, (S3068C9*)(S3068C8*), ABISELECT(120,60), "S3068C2");
    check_base_class_offset(lv, (S3068C8*)(S3068C4*), ABISELECT(120,60), "S3068C2");
    check_base_class_offset(lv, (S3068C4*), ABISELECT(32,12), "S3068C2");
    check_field_offset(lv, s3068c2f0, ABISELECT(8,4), "S3068C2.s3068c2f0");
    set_bf_and_test(lv, s3068c2f1, ABISELECT(16,8), 0, 5, 1, "S3068C2");
    set_bf_and_test(lv, s3068c2f1, ABISELECT(16,8), 0, 5, hide_sll(1LL<<4), "S3068C2");
    test_class_info(&lv, &cd_S3068C2);
    dp->~S3068C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3068C2(Test_S3068C2, "S3068C2", ABISELECT(160,76));

#else // __cplusplus

extern void _ZN7S3068C2C1Ev();
extern void _ZN7S3068C2D2Ev();
Name_Map name_map_S3068C2[] = {
  NSPAIR(_ZN7S3068C2C1Ev),
  NSPAIR(_ZN7S3068C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3068C3;
extern VTBL_ENTRY _ZTI7S3068C3[];
extern  VTBL_ENTRY _ZTV7S3068C3[];
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
extern Class_Descriptor cd_S3068C6;
extern VTBL_ENTRY _ZTI7S3068C6[];
extern  VTBL_ENTRY _ZTV7S3068C6[];
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
extern Class_Descriptor cd_S3068C5;
extern VTBL_ENTRY _ZTI7S3068C5[];
extern  VTBL_ENTRY _ZTV7S3068C5[];
extern Class_Descriptor cd_S3068C10;
extern VTBL_ENTRY _ZTI8S3068C10[];
extern  VTBL_ENTRY _ZTV8S3068C10[];
extern Class_Descriptor cd_S3068C9;
extern VTBL_ENTRY _ZTI7S3068C9[];
extern  VTBL_ENTRY _ZTV7S3068C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C9[];
extern Class_Descriptor cd_S3068C8;
extern VTBL_ENTRY _ZTI7S3068C8[];
extern  VTBL_ENTRY _ZTV7S3068C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C8[];
extern Class_Descriptor cd_S3068C4;
extern VTBL_ENTRY _ZTI7S3068C4[];
extern  VTBL_ENTRY _ZTV7S3068C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C4[];
static Base_Class bases_S3068C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3068C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3068C7,    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
    4, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3068C6,    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
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3068C7,    ABISELECT(80,36), //bcp->offset
    42, //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
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3068C5,    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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3068C10,    ABISELECT(128,64), //bcp->offset
    58, //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
    6, //immediately_derived
  0, 1},
  {&cd_S3068C9,    ABISELECT(120,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3068C8,    ABISELECT(120,60), //bcp->offset
    46, //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
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3068C4,    ABISELECT(32,12), //bcp->offset
    15, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3068C2[];
extern void _ZN7S3068C32v2Ev();
extern void _ZN7S3068C32v3Ev();
extern void _ZN7S3068C32v4Ev();
extern void _ZN7S3068C32v5Ev();
extern void _ZN7S3068C32v6Ev();
extern void _ZN7S3068C32v7Ev();
extern void _ZN7S3068C2D1Ev();
extern void _ZN7S3068C2D0Ev();
extern void _ZN7S3068C23v24Ev();
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
extern void _ZN7S3068C53v12Ev();
extern void _ZN7S3068C53v13Ev();
extern void _ZN7S3068C53v14Ev();
extern void _ZN7S3068C53v15Ev();
extern void _ZN7S3068C43v21Ev();
extern void _ZN7S3068C43v22Ev();
extern void _ZN7S3068C43v23Ev();
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY vtc_S3068C2[] = {
  ABISELECT(128,64),
  ABISELECT(120,60),
  ABISELECT(120,60),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C2[0]),
  (VTBL_ENTRY)&_ZN7S3068C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3068C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3068C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3068C23v24Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S3068C2[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v23Ev,
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI7S3068C2[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S3068C2[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S3068C2[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern VTBL_ENTRY _ZTV7S3068C2[];
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
extern void _ZN7S3068C53v12Ev();
extern void _ZN7S3068C53v13Ev();
extern void _ZN7S3068C53v14Ev();
extern void _ZN7S3068C53v15Ev();
extern void _ZN7S3068C43v21Ev();
extern void _ZN7S3068C43v22Ev();
extern void _ZN7S3068C43v23Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C4__7S3068C2[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v23Ev,
};
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C8__7S3068C4__7S3068C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C4__7S3068C2[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C8__7S3068C2[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C8[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C8__7S3068C2[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3068C8[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern void _ZN7S3068C93v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C9__7S3068C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C9[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C9__7S3068C2[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3068C9[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
static  VTT_ENTRY vtt_S3068C2[] = {
  {&(_ZTV7S3068C2[6]),  6,62},
  {&(_ZTV7S3068C2[31]),  31,62},
  {&(_ZTV7S3068C2[44]),  44,62},
  {&(_ZTV7S3068C2[54]),  54,62},
  {&(_ZTV7S3068C2[54]),  54,62},
  {&(_ZTV7S3068C2[61]),  61,62},
  {&(_tg__ZTV7S3068C4__7S3068C2[5]),  5,16},
  {&(_tg__ZTV7S3068C8__7S3068C4__7S3068C2[8]),  8,12},
  {&(_tg__ZTV7S3068C8__7S3068C4__7S3068C2[8]),  8,12},
  {&(_tg__ZTV8S3068C10__7S3068C4__7S3068C2[3]),  3,4},
  {&(_tg__ZTV7S3068C8__7S3068C2[5]),  5,9},
  {&(_tg__ZTV7S3068C8__7S3068C2[5]),  5,9},
  {&(_tg__ZTV8S3068C10__7S3068C8__7S3068C2[3]),  3,4},
  {&(_tg__ZTV7S3068C9__7S3068C2[3]),  3,4},
  {&(_tg__ZTV8S3068C10__7S3068C9__7S3068C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3068C2[];
extern  VTBL_ENTRY _ZTV7S3068C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C2[];
Class_Descriptor cd_S3068C2 = {  "S3068C2", // class name
  bases_S3068C2, 9,
  &(vtc_S3068C2[0]), // expected_vtbl_contents
  &(vtt_S3068C2[0]), // expected_vtt_contents
  ABISELECT(160,76), // object size
  NSPAIRA(_ZTI7S3068C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3068C2),62, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3068C2),15, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3068C13  {
  ::S3068C6 s3068c13f0[3];
  void *s3068c13f1;
  short s3068c13f2:8;
  virtual void  v25(); // _ZN8S3068C133v25Ev
  virtual void  v26(); // _ZN8S3068C133v26Ev
  virtual void  v27(); // _ZN8S3068C133v27Ev
  ~S3068C13(); // tgen
  S3068C13(); // tgen
};
//SIG(-1 S3068C13) C1{ v1 v2 v3 FC2{ BC3{ v6 v7 Fp FD Fi} v4 v5}[3] Fp Fs:8}


void  S3068C13 ::v25(){vfunc_called(this, "_ZN8S3068C133v25Ev");}
void  S3068C13 ::v26(){vfunc_called(this, "_ZN8S3068C133v26Ev");}
void  S3068C13 ::v27(){vfunc_called(this, "_ZN8S3068C133v27Ev");}
S3068C13 ::~S3068C13(){ note_dtor("S3068C13", this);} // tgen
S3068C13 ::S3068C13(){ note_ctor("S3068C13", this);} // tgen

static void Test_S3068C13()
{
  extern Class_Descriptor cd_S3068C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,22)];
    init_test(&cd_S3068C13, buf);
    S3068C13 *dp, &lv = *(dp=new (buf) S3068C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,84), "sizeof(S3068C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3068C13)");
    check_field_offset(lv, s3068c13f0, ABISELECT(16,4), "S3068C13.s3068c13f0");
    check_field_offset(lv, s3068c13f1, ABISELECT(160,76), "S3068C13.s3068c13f1");
    set_bf_and_test(lv, s3068c13f2, ABISELECT(168,80), 0, 8, 1, "S3068C13");
    set_bf_and_test(lv, s3068c13f2, ABISELECT(168,80), 0, 8, hide_sll(1LL<<7), "S3068C13");
    test_class_info(&lv, &cd_S3068C13);
    dp->~S3068C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3068C13(Test_S3068C13, "S3068C13", ABISELECT(176,84));

#else // __cplusplus

extern void _ZN8S3068C13C1Ev();
extern void _ZN8S3068C13D1Ev();
Name_Map name_map_S3068C13[] = {
  NSPAIR(_ZN8S3068C13C1Ev),
  NSPAIR(_ZN8S3068C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3068C13[];
extern void _ZN8S3068C133v25Ev();
extern void _ZN8S3068C133v26Ev();
extern void _ZN8S3068C133v27Ev();
static  VTBL_ENTRY vtc_S3068C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3068C13[0]),
  (VTBL_ENTRY)&_ZN8S3068C133v25Ev,
  (VTBL_ENTRY)&_ZN8S3068C133v26Ev,
  (VTBL_ENTRY)&_ZN8S3068C133v27Ev,
};
extern VTBL_ENTRY _ZTI8S3068C13[];
extern  VTBL_ENTRY _ZTV8S3068C13[];
Class_Descriptor cd_S3068C13 = {  "S3068C13", // class name
  0,0,//no base classes
  &(vtc_S3068C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,84), // object size
  NSPAIRA(_ZTI8S3068C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3068C13),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  S3068C12  : S3068C13 , S3068C4 {
  virtual  ~S3068C12(); // _ZN8S3068C12D2Ev
  virtual void  v28(); // _ZN8S3068C123v28Ev
  virtual void  v29(); // _ZN8S3068C123v29Ev
  virtual void  v30(); // _ZN8S3068C123v30Ev
  virtual void  v31(); // _ZN8S3068C123v31Ev
  virtual void  v32(); // _ZN8S3068C123v32Ev
  virtual void  v33(); // _ZN8S3068C123v33Ev
  S3068C12(); // tgen
};
//SIG(-1 S3068C12) C1{ BC2{ v7 v8 v9 FC3{ BC4{ v10 v11 Fp FD Fi} v12 v13}[3] Fp Fs:8} BC5{ BC6{ BC3 BC4 v14 v15 v16 v17} VBC7{ VBC8{ VBC9{ v18 FC10{ v26 v27} Fp} v19} v20 v21 v22} v23 v24 v25} vd v1 v2 v3 v4 v5 v6}


 S3068C12 ::~S3068C12(){ note_dtor("S3068C12", this);}
void  S3068C12 ::v28(){vfunc_called(this, "_ZN8S3068C123v28Ev");}
void  S3068C12 ::v29(){vfunc_called(this, "_ZN8S3068C123v29Ev");}
void  S3068C12 ::v30(){vfunc_called(this, "_ZN8S3068C123v30Ev");}
void  S3068C12 ::v31(){vfunc_called(this, "_ZN8S3068C123v31Ev");}
void  S3068C12 ::v32(){vfunc_called(this, "_ZN8S3068C123v32Ev");}
void  S3068C12 ::v33(){vfunc_called(this, "_ZN8S3068C123v33Ev");}
S3068C12 ::S3068C12(){ note_ctor("S3068C12", this);} // tgen

static void Test_S3068C12()
{
  extern Class_Descriptor cd_S3068C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,38)];
    init_test(&cd_S3068C12, buf);
    S3068C12 *dp, &lv = *(dp=new (buf) S3068C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,148), "sizeof(S3068C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3068C12)");
    check_base_class_offset(lv, (S3068C13*), 0, "S3068C12");
    check_base_class_offset(lv, (S3068C7*)(S3068C6*)(S3068C5*)(S3068C4*), ABISELECT(176,84), "S3068C12");
    check_base_class_offset(lv, (S3068C6*)(S3068C5*)(S3068C4*), ABISELECT(176,84), "S3068C12");
    /*is_ambiguous_... S3068C5::S3068C7 */ AMB_check_base_class_offset(lv, (S3068C7*)(S3068C5*)(S3068C4*), ABISELECT(224,108), "S3068C12");
    check_base_class_offset(lv, (S3068C5*)(S3068C4*), ABISELECT(176,84), "S3068C12");
    check_base_class_offset(lv, (S3068C10*)(S3068C9*), ABISELECT(272,136), "S3068C12");
    check_base_class_offset(lv, (S3068C9*)(S3068C8*), ABISELECT(264,132), "S3068C12");
    check_base_class_offset(lv, (S3068C8*)(S3068C4*), ABISELECT(264,132), "S3068C12");
    check_base_class_offset(lv, (S3068C4*), ABISELECT(176,84), "S3068C12");
    test_class_info(&lv, &cd_S3068C12);
    dp->~S3068C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3068C12(Test_S3068C12, "S3068C12", ABISELECT(304,148));

#else // __cplusplus

extern void _ZN8S3068C12C1Ev();
extern void _ZN8S3068C12D2Ev();
Name_Map name_map_S3068C12[] = {
  NSPAIR(_ZN8S3068C12C1Ev),
  NSPAIR(_ZN8S3068C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3068C13;
extern VTBL_ENTRY _ZTI8S3068C13[];
extern  VTBL_ENTRY _ZTV8S3068C13[];
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
extern Class_Descriptor cd_S3068C6;
extern VTBL_ENTRY _ZTI7S3068C6[];
extern  VTBL_ENTRY _ZTV7S3068C6[];
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
extern Class_Descriptor cd_S3068C5;
extern VTBL_ENTRY _ZTI7S3068C5[];
extern  VTBL_ENTRY _ZTV7S3068C5[];
extern Class_Descriptor cd_S3068C10;
extern VTBL_ENTRY _ZTI8S3068C10[];
extern  VTBL_ENTRY _ZTV8S3068C10[];
extern Class_Descriptor cd_S3068C9;
extern VTBL_ENTRY _ZTI7S3068C9[];
extern  VTBL_ENTRY _ZTV7S3068C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C9[];
extern Class_Descriptor cd_S3068C8;
extern VTBL_ENTRY _ZTI7S3068C8[];
extern  VTBL_ENTRY _ZTV7S3068C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C8[];
extern Class_Descriptor cd_S3068C4;
extern VTBL_ENTRY _ZTI7S3068C4[];
extern  VTBL_ENTRY _ZTV7S3068C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C4[];
static Base_Class bases_S3068C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3068C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3068C7,    ABISELECT(176,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
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3068C6,    ABISELECT(176,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
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3068C7,    ABISELECT(224,108), //bcp->offset
    32, //bcp->virtual_function_table_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_S3068C5,    ABISELECT(176,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
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3068C10,    ABISELECT(272,136), //bcp->offset
    48, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3068C9,    ABISELECT(264,132), //bcp->offset
    -1, //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
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3068C8,    ABISELECT(264,132), //bcp->offset
    36, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3068C4,    ABISELECT(176,84), //bcp->offset
    16, //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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3068C12[];
extern void _ZN8S3068C133v25Ev();
extern void _ZN8S3068C133v26Ev();
extern void _ZN8S3068C133v27Ev();
extern void _ZN8S3068C12D1Ev();
extern void _ZN8S3068C12D0Ev();
extern void _ZN8S3068C123v28Ev();
extern void _ZN8S3068C123v29Ev();
extern void _ZN8S3068C123v30Ev();
extern void _ZN8S3068C123v31Ev();
extern void _ZN8S3068C123v32Ev();
extern void _ZN8S3068C123v33Ev();
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
extern void _ZN7S3068C53v12Ev();
extern void _ZN7S3068C53v13Ev();
extern void _ZN7S3068C53v14Ev();
extern void _ZN7S3068C53v15Ev();
extern void _ZN7S3068C43v21Ev();
extern void _ZN7S3068C43v22Ev();
extern void _ZN7S3068C43v23Ev();
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY vtc_S3068C12[] = {
  ABISELECT(272,136),
  ABISELECT(264,132),
  ABISELECT(264,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S3068C12[0]),
  (VTBL_ENTRY)&_ZN8S3068C133v25Ev,
  (VTBL_ENTRY)&_ZN8S3068C133v26Ev,
  (VTBL_ENTRY)&_ZN8S3068C133v27Ev,
  (VTBL_ENTRY)&_ZN8S3068C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3068C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v28Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v29Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v30Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v31Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v32Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v33Ev,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-176,-84),
  (VTBL_ENTRY)&(_ZTI8S3068C12[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v23Ev,
  ABISELECT(-224,-108),
  (VTBL_ENTRY)&(_ZTI8S3068C12[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-264,-132),
  (VTBL_ENTRY)&(_ZTI8S3068C12[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
  0,
  ABISELECT(-272,-136),
  (VTBL_ENTRY)&(_ZTI8S3068C12[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern VTBL_ENTRY _ZTV8S3068C12[];
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
extern void _ZN7S3068C53v12Ev();
extern void _ZN7S3068C53v13Ev();
extern void _ZN7S3068C53v14Ev();
extern void _ZN7S3068C53v15Ev();
extern void _ZN7S3068C43v21Ev();
extern void _ZN7S3068C43v22Ev();
extern void _ZN7S3068C43v23Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C4__8S3068C12[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v23Ev,
};
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C8__7S3068C4__8S3068C12[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C4__8S3068C12[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C8__8S3068C12[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C8[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C8__8S3068C12[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3068C8[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern void _ZN7S3068C93v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C9__8S3068C12[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C9[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C9__8S3068C12[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3068C9[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
static  VTT_ENTRY vtt_S3068C12[] = {
  {&(_ZTV8S3068C12[5]),  5,52},
  {&(_tg__ZTV7S3068C4__8S3068C12[5]),  5,16},
  {&(_tg__ZTV7S3068C8__7S3068C4__8S3068C12[8]),  8,12},
  {&(_tg__ZTV7S3068C8__7S3068C4__8S3068C12[8]),  8,12},
  {&(_tg__ZTV8S3068C10__7S3068C4__8S3068C12[3]),  3,4},
  {&(_ZTV8S3068C12[21]),  21,52},
  {&(_ZTV8S3068C12[44]),  44,52},
  {&(_ZTV8S3068C12[44]),  44,52},
  {&(_ZTV8S3068C12[51]),  51,52},
  {&(_tg__ZTV7S3068C8__8S3068C12[5]),  5,9},
  {&(_tg__ZTV7S3068C8__8S3068C12[5]),  5,9},
  {&(_tg__ZTV8S3068C10__7S3068C8__8S3068C12[3]),  3,4},
  {&(_tg__ZTV7S3068C9__8S3068C12[3]),  3,4},
  {&(_tg__ZTV8S3068C10__7S3068C9__8S3068C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S3068C12[];
extern  VTBL_ENTRY _ZTV8S3068C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3068C12[];
Class_Descriptor cd_S3068C12 = {  "S3068C12", // class name
  bases_S3068C12, 9,
  &(vtc_S3068C12[0]), // expected_vtbl_contents
  &(vtt_S3068C12[0]), // expected_vtt_contents
  ABISELECT(304,148), // object size
  NSPAIRA(_ZTI8S3068C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3068C12),52, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3068C12),14, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3068C1  : S3068C2 , S3068C12 {
  virtual  ~S3068C1(); // _ZN7S3068C1D2Ev
  virtual void  v1(); // _ZN7S3068C12v1Ev
  S3068C1(); // tgen
};
//SIG(1 S3068C1) C1{ BC2{ BC3{ v2 v3 v4 v5 v6 v7} VBC4{ BC5{ BC6{ BC7{ v8 v9 Fp FD Fi} v10 v11} BC7 v12 v13 v14 v15} VBC8{ VBC9{ VBC10{ v16 FC11{ v34 v35} Fp} v17} v18 v19 v20} v21 v22 v23} vd v24 Fp FL:5} BC12{ BC13{ v25 v26 v27 FC6[3] Fp Fs:8} BC4 vd v28 v29 v30 v31 v32 v33} vd v1}


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

static void Test_S3068C1()
{
  extern Class_Descriptor cd_S3068C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,53)];
    init_test(&cd_S3068C1, buf);
    S3068C1 *dp, &lv = *(dp=new (buf) S3068C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,208), "sizeof(S3068C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3068C1)");
    check_base_class_offset(lv, (S3068C3*)(S3068C2*), 0, "S3068C1");
    /*is_ambiguous_... S3068C1::S3068C4 */ AMB_check_base_class_offset(lv, (S3068C7*)(S3068C6*)(S3068C5*)(S3068C4*), ABISELECT(304,144), "S3068C1");
    /*is_ambiguous_... S3068C1::S3068C4 */ AMB_check_base_class_offset(lv, (S3068C6*)(S3068C5*)(S3068C4*), ABISELECT(304,144), "S3068C1");
    /*is_ambiguous_... S3068C1::S3068C4 */ AMB_check_base_class_offset(lv, (S3068C7*)(S3068C5*)(S3068C4*), ABISELECT(352,168), "S3068C1");
    /*is_ambiguous_... S3068C1::S3068C4 */ AMB_check_base_class_offset(lv, (S3068C5*)(S3068C4*), ABISELECT(304,144), "S3068C1");
    check_base_class_offset(lv, (S3068C10*)(S3068C9*), ABISELECT(400,196), "S3068C1");
    check_base_class_offset(lv, (S3068C9*)(S3068C8*), ABISELECT(392,192), "S3068C1");
    /*is_ambiguous_... S3068C1::S3068C4 */ AMB_check_base_class_offset(lv, (S3068C8*)(S3068C4*), ABISELECT(392,192), "S3068C1");
    check_base_class_offset(lv, (S3068C8*)(S3068C4*)(S3068C12*), ABISELECT(392,192), "S3068C1");
    check_base_class_offset(lv, (S3068C4*)(S3068C2*), ABISELECT(304,144), "S3068C1");
    check_base_class_offset(lv, (S3068C2*), 0, "S3068C1");
    check_base_class_offset(lv, (S3068C13*)(S3068C12*), ABISELECT(32,12), "S3068C1");
    check_base_class_offset(lv, (S3068C7*)(S3068C6*)(S3068C5*)(S3068C4*)(S3068C12*), ABISELECT(208,96), "S3068C1");
    check_base_class_offset(lv, (S3068C6*)(S3068C5*)(S3068C4*)(S3068C12*), ABISELECT(208,96), "S3068C1");
    /*is_ambiguous_... S3068C5::S3068C7 */ AMB_check_base_class_offset(lv, (S3068C7*)(S3068C5*)(S3068C4*)(S3068C12*), ABISELECT(256,120), "S3068C1");
    check_base_class_offset(lv, (S3068C5*)(S3068C4*)(S3068C12*), ABISELECT(208,96), "S3068C1");
    check_base_class_offset(lv, (S3068C4*)(S3068C12*), ABISELECT(208,96), "S3068C1");
    check_base_class_offset(lv, (S3068C12*), ABISELECT(32,12), "S3068C1");
    test_class_info(&lv, &cd_S3068C1);
    dp->~S3068C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3068C1(Test_S3068C1, "S3068C1", ABISELECT(432,208));

#else // __cplusplus

extern void _ZN7S3068C1C1Ev();
extern void _ZN7S3068C1D2Ev();
Name_Map name_map_S3068C1[] = {
  NSPAIR(_ZN7S3068C1C1Ev),
  NSPAIR(_ZN7S3068C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3068C3;
extern VTBL_ENTRY _ZTI7S3068C3[];
extern  VTBL_ENTRY _ZTV7S3068C3[];
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
extern Class_Descriptor cd_S3068C6;
extern VTBL_ENTRY _ZTI7S3068C6[];
extern  VTBL_ENTRY _ZTV7S3068C6[];
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
extern Class_Descriptor cd_S3068C5;
extern VTBL_ENTRY _ZTI7S3068C5[];
extern  VTBL_ENTRY _ZTV7S3068C5[];
extern Class_Descriptor cd_S3068C10;
extern VTBL_ENTRY _ZTI8S3068C10[];
extern  VTBL_ENTRY _ZTV8S3068C10[];
extern Class_Descriptor cd_S3068C9;
extern VTBL_ENTRY _ZTI7S3068C9[];
extern  VTBL_ENTRY _ZTV7S3068C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C9[];
extern Class_Descriptor cd_S3068C8;
extern VTBL_ENTRY _ZTI7S3068C8[];
extern  VTBL_ENTRY _ZTV7S3068C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C8[];
extern Class_Descriptor cd_S3068C4;
extern VTBL_ENTRY _ZTI7S3068C4[];
extern  VTBL_ENTRY _ZTV7S3068C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C4[];
extern Class_Descriptor cd_S3068C2;
extern VTBL_ENTRY _ZTI7S3068C2[];
extern  VTBL_ENTRY _ZTV7S3068C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C2[];
extern Class_Descriptor cd_S3068C13;
extern VTBL_ENTRY _ZTI8S3068C13[];
extern  VTBL_ENTRY _ZTV8S3068C13[];
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
extern Class_Descriptor cd_S3068C6;
extern VTBL_ENTRY _ZTI7S3068C6[];
extern  VTBL_ENTRY _ZTV7S3068C6[];
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
extern Class_Descriptor cd_S3068C5;
extern VTBL_ENTRY _ZTI7S3068C5[];
extern  VTBL_ENTRY _ZTV7S3068C5[];
extern Class_Descriptor cd_S3068C4;
extern VTBL_ENTRY _ZTI7S3068C4[];
extern  VTBL_ENTRY _ZTV7S3068C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C4[];
extern Class_Descriptor cd_S3068C12;
extern VTBL_ENTRY _ZTI8S3068C12[];
extern  VTBL_ENTRY _ZTV8S3068C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3068C12[];
static Base_Class bases_S3068C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3068C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3068C7,    ABISELECT(304,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
    4, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3068C6,    ABISELECT(304,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
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3068C7,    ABISELECT(352,168), //bcp->offset
    79, //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
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3068C5,    ABISELECT(304,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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3068C10,    ABISELECT(400,196), //bcp->offset
    95, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3068C9,    ABISELECT(392,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3068C8,    ABISELECT(392,192), //bcp->offset
    83, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3068C4,    ABISELECT(304,144), //bcp->offset
    52, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3068C2,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3068C13,    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
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3068C7,    ABISELECT(208,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
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3068C6,    ABISELECT(208,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
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3068C7,    ABISELECT(256,120), //bcp->offset
    48, //bcp->virtual_function_table_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_S3068C5,    ABISELECT(208,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
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3068C4,    ABISELECT(208,96), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3068C12,    ABISELECT(32,12), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3068C1[];
extern void _ZN7S3068C32v2Ev();
extern void _ZN7S3068C32v3Ev();
extern void _ZN7S3068C32v4Ev();
extern void _ZN7S3068C32v5Ev();
extern void _ZN7S3068C32v6Ev();
extern void _ZN7S3068C32v7Ev();
extern void _ZN7S3068C1D1Ev();
extern void _ZN7S3068C1D0Ev();
extern void _ZN7S3068C23v24Ev();
extern void _ZN7S3068C12v1Ev();
extern void _ZN8S3068C133v25Ev();
extern void _ZN8S3068C133v26Ev();
extern void _ZN8S3068C133v27Ev();
extern void ABISELECT(_ZThn32_N7S3068C1D1Ev,_ZThn12_N7S3068C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S3068C1D0Ev,_ZThn12_N7S3068C1D0Ev)();
extern void _ZN8S3068C123v28Ev();
extern void _ZN8S3068C123v29Ev();
extern void _ZN8S3068C123v30Ev();
extern void _ZN8S3068C123v31Ev();
extern void _ZN8S3068C123v32Ev();
extern void _ZN8S3068C123v33Ev();
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
extern void _ZN7S3068C53v12Ev();
extern void _ZN7S3068C53v13Ev();
extern void _ZN7S3068C53v14Ev();
extern void _ZN7S3068C53v15Ev();
extern void _ZN7S3068C43v21Ev();
extern void _ZN7S3068C43v22Ev();
extern void _ZN7S3068C43v23Ev();
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
extern void _ZN7S3068C53v12Ev();
extern void _ZN7S3068C53v13Ev();
extern void _ZN7S3068C53v14Ev();
extern void _ZN7S3068C53v15Ev();
extern void _ZN7S3068C43v21Ev();
extern void _ZN7S3068C43v22Ev();
extern void _ZN7S3068C43v23Ev();
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY vtc_S3068C1[] = {
  ABISELECT(400,196),
  ABISELECT(392,192),
  ABISELECT(392,192),
  ABISELECT(304,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C1[0]),
  (VTBL_ENTRY)&_ZN7S3068C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3068C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3068C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3068C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3068C12v1Ev,
  ABISELECT(368,184),
  ABISELECT(360,180),
  ABISELECT(360,180),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S3068C1[0]),
  (VTBL_ENTRY)&_ZN8S3068C133v25Ev,
  (VTBL_ENTRY)&_ZN8S3068C133v26Ev,
  (VTBL_ENTRY)&_ZN8S3068C133v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S3068C1D1Ev,_ZThn12_N7S3068C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S3068C1D0Ev,_ZThn12_N7S3068C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3068C123v28Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v29Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v30Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v31Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v32Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v33Ev,
  ABISELECT(192,100),
  ABISELECT(184,96),
  ABISELECT(184,96),
  ABISELECT(-208,-96),
  (VTBL_ENTRY)&(_ZTI7S3068C1[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v23Ev,
  ABISELECT(-256,-120),
  (VTBL_ENTRY)&(_ZTI7S3068C1[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-304,-144),
  (VTBL_ENTRY)&(_ZTI7S3068C1[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v23Ev,
  ABISELECT(-352,-168),
  (VTBL_ENTRY)&(_ZTI7S3068C1[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-392,-192),
  (VTBL_ENTRY)&(_ZTI7S3068C1[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
  0,
  ABISELECT(-400,-196),
  (VTBL_ENTRY)&(_ZTI7S3068C1[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern VTBL_ENTRY _ZTV7S3068C1[];
extern void _ZN7S3068C32v2Ev();
extern void _ZN7S3068C32v3Ev();
extern void _ZN7S3068C32v4Ev();
extern void _ZN7S3068C32v5Ev();
extern void _ZN7S3068C32v6Ev();
extern void _ZN7S3068C32v7Ev();
extern void _ZN7S3068C2D1Ev();
extern void _ZN7S3068C2D0Ev();
extern void _ZN7S3068C23v24Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C2__7S3068C1[] = {
  ABISELECT(400,196),
  ABISELECT(392,192),
  ABISELECT(392,192),
  ABISELECT(304,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C2[0]),
  (VTBL_ENTRY)&_ZN7S3068C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3068C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3068C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3068C23v24Ev,
};
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
extern void _ZN7S3068C53v12Ev();
extern void _ZN7S3068C53v13Ev();
extern void _ZN7S3068C53v14Ev();
extern void _ZN7S3068C53v15Ev();
extern void _ZN7S3068C43v21Ev();
extern void _ZN7S3068C43v22Ev();
extern void _ZN7S3068C43v23Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C4__7S3068C2__7S3068C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-304,-144),
  (VTBL_ENTRY)&(_ZTI7S3068C2[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v23Ev,
};
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C77S3068C57S3068C4__A1__7S3068C2__7S3068C1[] = {
  ABISELECT(-352,-168),
  (VTBL_ENTRY)&(_ZTI7S3068C2[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
};
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C8__7S3068C2__7S3068C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-392,-192),
  (VTBL_ENTRY)&(_ZTI7S3068C2[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C2__7S3068C1[] = {
  0,
  ABISELECT(-400,-196),
  (VTBL_ENTRY)&(_ZTI7S3068C2[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern void _ZN8S3068C133v25Ev();
extern void _ZN8S3068C133v26Ev();
extern void _ZN8S3068C133v27Ev();
extern void _ZN8S3068C12D1Ev();
extern void _ZN8S3068C12D0Ev();
extern void _ZN8S3068C123v28Ev();
extern void _ZN8S3068C123v29Ev();
extern void _ZN8S3068C123v30Ev();
extern void _ZN8S3068C123v31Ev();
extern void _ZN8S3068C123v32Ev();
extern void _ZN8S3068C123v33Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C12__7S3068C1[] = {
  ABISELECT(368,184),
  ABISELECT(360,180),
  ABISELECT(360,180),
  0,
  (VTBL_ENTRY)&(_ZTI8S3068C12[0]),
  (VTBL_ENTRY)&_ZN8S3068C133v25Ev,
  (VTBL_ENTRY)&_ZN8S3068C133v26Ev,
  (VTBL_ENTRY)&_ZN8S3068C133v27Ev,
  (VTBL_ENTRY)&_ZN8S3068C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3068C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v28Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v29Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v30Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v31Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v32Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v33Ev,
};
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
extern void _ZN7S3068C53v12Ev();
extern void _ZN7S3068C53v13Ev();
extern void _ZN7S3068C53v14Ev();
extern void _ZN7S3068C53v15Ev();
extern void _ZN7S3068C43v21Ev();
extern void _ZN7S3068C43v22Ev();
extern void _ZN7S3068C43v23Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C48S3068C12__A1__7S3068C1[] = {
  ABISELECT(192,100),
  ABISELECT(184,96),
  ABISELECT(184,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v23Ev,
};
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C8__7S3068C48S3068C12__A1__7S3068C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-184,-96),
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C48S3068C12__A1__7S3068C1[] = {
  0,
  ABISELECT(-192,-100),
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
extern void _ZN7S3068C53v12Ev();
extern void _ZN7S3068C53v13Ev();
extern void _ZN7S3068C53v14Ev();
extern void _ZN7S3068C53v15Ev();
extern void _ZN7S3068C43v21Ev();
extern void _ZN7S3068C43v22Ev();
extern void _ZN7S3068C43v23Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C4__8S3068C12__7S3068C1[] = {
  ABISELECT(192,100),
  ABISELECT(184,96),
  ABISELECT(184,96),
  ABISELECT(-176,-84),
  (VTBL_ENTRY)&(_ZTI8S3068C12[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v23Ev,
};
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C8__8S3068C12__7S3068C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-360,-180),
  (VTBL_ENTRY)&(_ZTI8S3068C12[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__8S3068C12__7S3068C1[] = {
  0,
  ABISELECT(-368,-184),
  (VTBL_ENTRY)&(_ZTI8S3068C12[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
extern void _ZN7S3068C53v12Ev();
extern void _ZN7S3068C53v13Ev();
extern void _ZN7S3068C53v14Ev();
extern void _ZN7S3068C53v15Ev();
extern void _ZN7S3068C43v21Ev();
extern void _ZN7S3068C43v22Ev();
extern void _ZN7S3068C43v23Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C4__7S3068C1[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v23Ev,
};
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C8__7S3068C4__7S3068C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C4__7S3068C1[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C8__7S3068C1[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C8[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C8__7S3068C1[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3068C8[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern void _ZN7S3068C93v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C9__7S3068C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C9[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C9__7S3068C1[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3068C9[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
static  VTT_ENTRY vtt_S3068C1[] = {
  {&(_ZTV7S3068C1[6]),  6,99},
  {&(_tg__ZTV7S3068C2__7S3068C1[6]),  6,15},
  {&(_tg__ZTV7S3068C4__7S3068C2__7S3068C1[16]),  16,27},
  {&(_tg__ZTV7S3068C77S3068C57S3068C4__A1__7S3068C2__7S3068C1[2]),  2,4},
  {&(_tg__ZTV7S3068C8__7S3068C2__7S3068C1[8]),  8,12},
  {&(_tg__ZTV7S3068C8__7S3068C2__7S3068C1[8]),  8,12},
  {&(_tg__ZTV8S3068C10__7S3068C2__7S3068C1[3]),  3,4},
  {&(_tg__ZTV8S3068C12__7S3068C1[5]),  5,16},
  {&(_tg__ZTV7S3068C48S3068C12__A1__7S3068C1[5]),  5,16},
  {&(_tg__ZTV7S3068C8__7S3068C48S3068C12__A1__7S3068C1[8]),  8,12},
  {&(_tg__ZTV7S3068C8__7S3068C48S3068C12__A1__7S3068C1[8]),  8,12},
  {&(_tg__ZTV8S3068C10__7S3068C48S3068C12__A1__7S3068C1[3]),  3,4},
  {&(_tg__ZTV7S3068C4__8S3068C12__7S3068C1[5]),  5,16},
  {&(_tg__ZTV7S3068C8__8S3068C12__7S3068C1[8]),  8,12},
  {&(_tg__ZTV7S3068C8__8S3068C12__7S3068C1[8]),  8,12},
  {&(_tg__ZTV8S3068C10__8S3068C12__7S3068C1[3]),  3,4},
  {&(_ZTV7S3068C1[68]),  68,99},
  {&(_ZTV7S3068C1[81]),  81,99},
  {&(_ZTV7S3068C1[91]),  91,99},
  {&(_ZTV7S3068C1[91]),  91,99},
  {&(_ZTV7S3068C1[98]),  98,99},
  {&(_ZTV7S3068C1[21]),  21,99},
  {&(_ZTV7S3068C1[37]),  37,99},
  {&(_tg__ZTV7S3068C4__7S3068C1[5]),  5,16},
  {&(_tg__ZTV7S3068C8__7S3068C4__7S3068C1[8]),  8,12},
  {&(_tg__ZTV7S3068C8__7S3068C4__7S3068C1[8]),  8,12},
  {&(_tg__ZTV8S3068C10__7S3068C4__7S3068C1[3]),  3,4},
  {&(_tg__ZTV7S3068C8__7S3068C1[5]),  5,9},
  {&(_tg__ZTV7S3068C8__7S3068C1[5]),  5,9},
  {&(_tg__ZTV8S3068C10__7S3068C8__7S3068C1[3]),  3,4},
  {&(_tg__ZTV7S3068C9__7S3068C1[3]),  3,4},
  {&(_tg__ZTV8S3068C10__7S3068C9__7S3068C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3068C1[];
extern  VTBL_ENTRY _ZTV7S3068C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C1[];
Class_Descriptor cd_S3068C1 = {  "S3068C1", // class name
  bases_S3068C1, 17,
  &(vtc_S3068C1[0]), // expected_vtbl_contents
  &(vtt_S3068C1[0]), // expected_vtt_contents
  ABISELECT(432,208), // object size
  NSPAIRA(_ZTI7S3068C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3068C1),99, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3068C1),32, //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  S2173C4  {
  ::S2366C5_nt s2173c4f0;
  int s2173c4f1[2];
  char s2173c4f2;
  virtual  ~S2173C4(); // _ZN7S2173C4D1Ev
  virtual void  v3(); // _ZN7S2173C42v3Ev
  virtual void  v4(); // _ZN7S2173C42v4Ev
  virtual void  v5(); // _ZN7S2173C42v5Ev
  S2173C4(); // tgen
};
//SIG(-1 S2173C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2173C4 ::~S2173C4(){ note_dtor("S2173C4", this);}
void  S2173C4 ::v3(){vfunc_called(this, "_ZN7S2173C42v3Ev");}
void  S2173C4 ::v4(){vfunc_called(this, "_ZN7S2173C42v4Ev");}
void  S2173C4 ::v5(){vfunc_called(this, "_ZN7S2173C42v5Ev");}
S2173C4 ::S2173C4(){ note_ctor("S2173C4", this);} // tgen

static void Test_S2173C4()
{
  extern Class_Descriptor cd_S2173C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2173C4, buf);
    S2173C4 *dp, &lv = *(dp=new (buf) S2173C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2173C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2173C4)");
    check_field_offset(lv, s2173c4f0, ABISELECT(8,4), "S2173C4.s2173c4f0");
    check_field_offset(lv, s2173c4f1, ABISELECT(24,16), "S2173C4.s2173c4f1");
    check_field_offset(lv, s2173c4f2, ABISELECT(32,24), "S2173C4.s2173c4f2");
    test_class_info(&lv, &cd_S2173C4);
    dp->~S2173C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2173C4(Test_S2173C4, "S2173C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2173C4C1Ev();
extern void _ZN7S2173C4D1Ev();
Name_Map name_map_S2173C4[] = {
  NSPAIR(_ZN7S2173C4C1Ev),
  NSPAIR(_ZN7S2173C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2173C4[];
extern void _ZN7S2173C4D1Ev();
extern void _ZN7S2173C4D0Ev();
extern void _ZN7S2173C42v3Ev();
extern void _ZN7S2173C42v4Ev();
extern void _ZN7S2173C42v5Ev();
static  VTBL_ENTRY vtc_S2173C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2173C4[0]),
  (VTBL_ENTRY)&_ZN7S2173C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2173C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2173C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2173C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2173C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2173C4[];
extern  VTBL_ENTRY _ZTV7S2173C4[];
Class_Descriptor cd_S2173C4 = {  "S2173C4", // class name
  0,0,//no base classes
  &(vtc_S2173C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2173C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2173C4),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  S2173C3  : S2173C4 {
  void *s2173c3f0;
  virtual void  v6(); // _ZN7S2173C32v6Ev
  virtual void  v7(); // _ZN7S2173C32v7Ev
  ~S2173C3(); // tgen
  S2173C3(); // tgen
};
//SIG(-1 S2173C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2173C3 ::v6(){vfunc_called(this, "_ZN7S2173C32v6Ev");}
void  S2173C3 ::v7(){vfunc_called(this, "_ZN7S2173C32v7Ev");}
S2173C3 ::~S2173C3(){ note_dtor("S2173C3", this);} // tgen
S2173C3 ::S2173C3(){ note_ctor("S2173C3", this);} // tgen

static void Test_S2173C3()
{
  extern Class_Descriptor cd_S2173C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2173C3, buf);
    S2173C3 *dp, &lv = *(dp=new (buf) S2173C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2173C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2173C3)");
    check_base_class_offset(lv, (S2173C4*), 0, "S2173C3");
    check_field_offset(lv, s2173c3f0, ABISELECT(40,28), "S2173C3.s2173c3f0");
    test_class_info(&lv, &cd_S2173C3);
    dp->~S2173C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2173C3(Test_S2173C3, "S2173C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2173C3C1Ev();
extern void _ZN7S2173C3D1Ev();
Name_Map name_map_S2173C3[] = {
  NSPAIR(_ZN7S2173C3C1Ev),
  NSPAIR(_ZN7S2173C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2173C4;
extern VTBL_ENTRY _ZTI7S2173C4[];
extern  VTBL_ENTRY _ZTV7S2173C4[];
static Base_Class bases_S2173C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2173C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2173C3[];
extern void _ZN7S2173C3D1Ev();
extern void _ZN7S2173C3D0Ev();
extern void _ZN7S2173C42v3Ev();
extern void _ZN7S2173C42v4Ev();
extern void _ZN7S2173C42v5Ev();
extern void _ZN7S2173C32v6Ev();
extern void _ZN7S2173C32v7Ev();
static  VTBL_ENTRY vtc_S2173C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2173C3[0]),
  (VTBL_ENTRY)&_ZN7S2173C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2173C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2173C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2173C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2173C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2173C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2173C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S2173C3[];
extern  VTBL_ENTRY _ZTV7S2173C3[];
Class_Descriptor cd_S2173C3 = {  "S2173C3", // class name
  bases_S2173C3, 1,
  &(vtc_S2173C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2173C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2173C3),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  S2173C7_nt  {
  void *s2173c7f0;
  int s2173c7f1[2];
  ::S629C14 s2173c7f2;
  void  mf2173c7(); // _ZN10S2173C7_nt8mf2173c7Ev
};
//SIG(-1 S2173C7_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S2173C7_nt ::mf2173c7(){}

//skip512 S2173C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2173C11_nt  {
  __tsi64 s2173c11f0[4];
};
//SIG(-1 S2173C11_nt) C1{ FL[4]}



//skip512 S2173C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2173C10_nt  {
  ::S2173C11_nt s2173c10f0;
  void  mf2173c10(); // _ZN11S2173C10_nt9mf2173c10Ev
};
//SIG(-1 S2173C10_nt) C1{ m FC2{ FL[4]}}


void  S2173C10_nt ::mf2173c10(){}

//skip512 S2173C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2173C14  {
  void *s2173c14f0;
  int s2173c14f1[2];
  ::S629C8_nt s2173c14f2;
  void  mf2173c14(); // _ZN8S2173C149mf2173c14Ev
};
//SIG(-1 S2173C14) C1{ m Fp Fi[2] FC2{ m}}


void  S2173C14 ::mf2173c14(){}

static void Test_S2173C14()
{
  {
    init_simple_test("S2173C14");
    S2173C14 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2173C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2173C14)");
    check_field_offset(lv, s2173c14f0, 0, "S2173C14.s2173c14f0");
    check_field_offset(lv, s2173c14f1, ABISELECT(8,4), "S2173C14.s2173c14f1");
    check_field_offset(lv, s2173c14f2, ABISELECT(16,12), "S2173C14.s2173c14f2");
  }
}
static Arrange_To_Call_Me vS2173C14(Test_S2173C14, "S2173C14", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2173C17_nt  {
  void *s2173c17f0;
  void  mf2173c17(); // _ZN11S2173C17_nt9mf2173c17Ev
};
//SIG(-1 S2173C17_nt) C1{ m Fp}


void  S2173C17_nt ::mf2173c17(){}

//skip512 S2173C17_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2173C2  : S2173C3 {
  void *s2173c2f0;
  int s2173c2f1;
  ::S2173C7_nt s2173c2f2;
  ::S2366C5_nt s2173c2f3;
  void *s2173c2f4;
  int s2173c2f5;
  void *s2173c2f6;
  int s2173c2f7;
  ::S2366C19 s2173c2f8;
  ::S2173C10_nt s2173c2f9;
  ::S2173C7_nt s2173c2f10;
  ::S2173C14 s2173c2f11;
  ::S2366C10_nt s2173c2f12;
  ::S2173C17_nt s2173c2f13;
  virtual  ~S2173C2(); // _ZN7S2173C2D1Ev
  virtual void  v8(); // _ZN7S2173C22v8Ev
  virtual void  v9(); // _ZN7S2173C22v9Ev
  virtual void  v10(); // _ZN7S2173C23v10Ev
  virtual void  v11(); // _ZN7S2173C23v11Ev
  virtual void  v12(); // _ZN7S2173C23v12Ev
  virtual void  v13(); // _ZN7S2173C23v13Ev
  S2173C2(); // tgen
};
//SIG(-1 S2173C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v10 v11 Fp} vd v1 v2 v3 v4 v5 v6 Fp Fi FC6{ m Fp Fi[2] FC5} FC4 Fp Fi Fp Fi FC7{ m Fp} FC8{ m FC9{ FL[4]}} FC6 FC10{ m Fp Fi[2] FC11{ m}} FC12{ m Fp} FC13{ m Fp}}


 S2173C2 ::~S2173C2(){ note_dtor("S2173C2", this);}
void  S2173C2 ::v8(){vfunc_called(this, "_ZN7S2173C22v8Ev");}
void  S2173C2 ::v9(){vfunc_called(this, "_ZN7S2173C22v9Ev");}
void  S2173C2 ::v10(){vfunc_called(this, "_ZN7S2173C23v10Ev");}
void  S2173C2 ::v11(){vfunc_called(this, "_ZN7S2173C23v11Ev");}
void  S2173C2 ::v12(){vfunc_called(this, "_ZN7S2173C23v12Ev");}
void  S2173C2 ::v13(){vfunc_called(this, "_ZN7S2173C23v13Ev");}
S2173C2 ::S2173C2(){ note_ctor("S2173C2", this);} // tgen

static void Test_S2173C2()
{
  extern Class_Descriptor cd_S2173C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,41)];
    init_test(&cd_S2173C2, buf);
    S2173C2 *dp, &lv = *(dp=new (buf) S2173C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,160), "sizeof(S2173C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2173C2)");
    check_base_class_offset(lv, (S2173C4*)(S2173C3*), 0, "S2173C2");
    check_base_class_offset(lv, (S2173C3*), 0, "S2173C2");
    check_field_offset(lv, s2173c2f0, ABISELECT(48,32), "S2173C2.s2173c2f0");
    check_field_offset(lv, s2173c2f1, ABISELECT(56,36), "S2173C2.s2173c2f1");
    check_field_offset(lv, s2173c2f2, ABISELECT(64,40), "S2173C2.s2173c2f2");
    check_field_offset(lv, s2173c2f3, ABISELECT(88,56), "S2173C2.s2173c2f3");
    check_field_offset(lv, s2173c2f4, ABISELECT(104,68), "S2173C2.s2173c2f4");
    check_field_offset(lv, s2173c2f5, ABISELECT(112,72), "S2173C2.s2173c2f5");
    check_field_offset(lv, s2173c2f6, ABISELECT(120,76), "S2173C2.s2173c2f6");
    check_field_offset(lv, s2173c2f7, ABISELECT(128,80), "S2173C2.s2173c2f7");
    check_field_offset(lv, s2173c2f8, ABISELECT(136,84), "S2173C2.s2173c2f8");
    check_field_offset(lv, s2173c2f9, ABISELECT(144,88), "S2173C2.s2173c2f9");
    check_field_offset(lv, s2173c2f10, ABISELECT(176,120), "S2173C2.s2173c2f10");
    check_field_offset(lv, s2173c2f11, ABISELECT(200,136), "S2173C2.s2173c2f11");
    check_field_offset(lv, s2173c2f12, ABISELECT(224,152), "S2173C2.s2173c2f12");
    check_field_offset(lv, s2173c2f13, ABISELECT(232,156), "S2173C2.s2173c2f13");
    test_class_info(&lv, &cd_S2173C2);
    dp->~S2173C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2173C2(Test_S2173C2, "S2173C2", ABISELECT(240,160));

#else // __cplusplus

extern void _ZN7S2173C2C1Ev();
extern void _ZN7S2173C2D1Ev();
Name_Map name_map_S2173C2[] = {
  NSPAIR(_ZN7S2173C2C1Ev),
  NSPAIR(_ZN7S2173C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2173C4;
extern VTBL_ENTRY _ZTI7S2173C4[];
extern  VTBL_ENTRY _ZTV7S2173C4[];
extern Class_Descriptor cd_S2173C3;
extern VTBL_ENTRY _ZTI7S2173C3[];
extern  VTBL_ENTRY _ZTV7S2173C3[];
static Base_Class bases_S2173C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2173C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2173C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2173C2[];
extern void _ZN7S2173C2D1Ev();
extern void _ZN7S2173C2D0Ev();
extern void _ZN7S2173C42v3Ev();
extern void _ZN7S2173C42v4Ev();
extern void _ZN7S2173C42v5Ev();
extern void _ZN7S2173C32v6Ev();
extern void _ZN7S2173C32v7Ev();
extern void _ZN7S2173C22v8Ev();
extern void _ZN7S2173C22v9Ev();
extern void _ZN7S2173C23v10Ev();
extern void _ZN7S2173C23v11Ev();
extern void _ZN7S2173C23v12Ev();
extern void _ZN7S2173C23v13Ev();
static  VTBL_ENTRY vtc_S2173C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2173C2[0]),
  (VTBL_ENTRY)&_ZN7S2173C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2173C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2173C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2173C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2173C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2173C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2173C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2173C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2173C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2173C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2173C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2173C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2173C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S2173C2[];
extern  VTBL_ENTRY _ZTV7S2173C2[];
Class_Descriptor cd_S2173C2 = {  "S2173C2", // class name
  bases_S2173C2, 2,
  &(vtc_S2173C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,160), // object size
  NSPAIRA(_ZTI7S2173C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2173C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2173C1  : S2173C2 {
  int s2173c1f0;
  virtual  ~S2173C1(); // _ZN7S2173C1D1Ev
  virtual void  v1(); // _ZN7S2173C12v1Ev
  virtual void  v2(); // _ZN7S2173C12v2Ev
  S2173C1(); // tgen
};
//SIG(1 S2173C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v6 v7 Fp} vd v8 v9 v10 v11 v12 v13 Fp Fi FC7{ m Fp Fi[2] FC6} FC5 Fp Fi Fp Fi FC8{ m Fp} FC9{ m FC10{ FL[4]}} FC7 FC11{ m Fp Fi[2] FC12{ m}} FC13{ m Fp} FC14{ m Fp}} vd v1 v2 Fi}


 S2173C1 ::~S2173C1(){ note_dtor("S2173C1", this);}
void  S2173C1 ::v1(){vfunc_called(this, "_ZN7S2173C12v1Ev");}
void  S2173C1 ::v2(){vfunc_called(this, "_ZN7S2173C12v2Ev");}
S2173C1 ::S2173C1(){ note_ctor("S2173C1", this);} // tgen

static void Test_S2173C1()
{
  extern Class_Descriptor cd_S2173C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,42)];
    init_test(&cd_S2173C1, buf);
    S2173C1 *dp, &lv = *(dp=new (buf) S2173C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,164), "sizeof(S2173C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2173C1)");
    check_base_class_offset(lv, (S2173C4*)(S2173C3*)(S2173C2*), 0, "S2173C1");
    check_base_class_offset(lv, (S2173C3*)(S2173C2*), 0, "S2173C1");
    check_base_class_offset(lv, (S2173C2*), 0, "S2173C1");
    check_field_offset(lv, s2173c1f0, ABISELECT(240,160), "S2173C1.s2173c1f0");
    test_class_info(&lv, &cd_S2173C1);
    dp->~S2173C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2173C1(Test_S2173C1, "S2173C1", ABISELECT(248,164));

#else // __cplusplus

extern void _ZN7S2173C1C1Ev();
extern void _ZN7S2173C1D1Ev();
Name_Map name_map_S2173C1[] = {
  NSPAIR(_ZN7S2173C1C1Ev),
  NSPAIR(_ZN7S2173C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2173C4;
extern VTBL_ENTRY _ZTI7S2173C4[];
extern  VTBL_ENTRY _ZTV7S2173C4[];
extern Class_Descriptor cd_S2173C3;
extern VTBL_ENTRY _ZTI7S2173C3[];
extern  VTBL_ENTRY _ZTV7S2173C3[];
extern Class_Descriptor cd_S2173C2;
extern VTBL_ENTRY _ZTI7S2173C2[];
extern  VTBL_ENTRY _ZTV7S2173C2[];
static Base_Class bases_S2173C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2173C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2173C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2173C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2173C1[];
extern void _ZN7S2173C1D1Ev();
extern void _ZN7S2173C1D0Ev();
extern void _ZN7S2173C42v3Ev();
extern void _ZN7S2173C42v4Ev();
extern void _ZN7S2173C42v5Ev();
extern void _ZN7S2173C32v6Ev();
extern void _ZN7S2173C32v7Ev();
extern void _ZN7S2173C22v8Ev();
extern void _ZN7S2173C22v9Ev();
extern void _ZN7S2173C23v10Ev();
extern void _ZN7S2173C23v11Ev();
extern void _ZN7S2173C23v12Ev();
extern void _ZN7S2173C23v13Ev();
extern void _ZN7S2173C12v1Ev();
extern void _ZN7S2173C12v2Ev();
static  VTBL_ENTRY vtc_S2173C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2173C1[0]),
  (VTBL_ENTRY)&_ZN7S2173C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2173C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2173C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2173C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2173C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2173C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2173C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2173C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2173C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2173C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2173C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2173C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2173C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2173C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2173C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2173C1[];
extern  VTBL_ENTRY _ZTV7S2173C1[];
Class_Descriptor cd_S2173C1 = {  "S2173C1", // class name
  bases_S2173C1, 3,
  &(vtc_S2173C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,164), // object size
  NSPAIRA(_ZTI7S2173C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2173C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2171C4  {
  ::S2366C5_nt s2171c4f0;
  int s2171c4f1[2];
  char s2171c4f2;
  virtual  ~S2171C4(); // _ZN7S2171C4D1Ev
  virtual void  v3(); // _ZN7S2171C42v3Ev
  virtual void  v4(); // _ZN7S2171C42v4Ev
  virtual void  v5(); // _ZN7S2171C42v5Ev
  S2171C4(); // tgen
};
//SIG(-1 S2171C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2171C4 ::~S2171C4(){ note_dtor("S2171C4", this);}
void  S2171C4 ::v3(){vfunc_called(this, "_ZN7S2171C42v3Ev");}
void  S2171C4 ::v4(){vfunc_called(this, "_ZN7S2171C42v4Ev");}
void  S2171C4 ::v5(){vfunc_called(this, "_ZN7S2171C42v5Ev");}
S2171C4 ::S2171C4(){ note_ctor("S2171C4", this);} // tgen

static void Test_S2171C4()
{
  extern Class_Descriptor cd_S2171C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2171C4, buf);
    S2171C4 *dp, &lv = *(dp=new (buf) S2171C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2171C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2171C4)");
    check_field_offset(lv, s2171c4f0, ABISELECT(8,4), "S2171C4.s2171c4f0");
    check_field_offset(lv, s2171c4f1, ABISELECT(24,16), "S2171C4.s2171c4f1");
    check_field_offset(lv, s2171c4f2, ABISELECT(32,24), "S2171C4.s2171c4f2");
    test_class_info(&lv, &cd_S2171C4);
    dp->~S2171C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2171C4(Test_S2171C4, "S2171C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2171C4C1Ev();
extern void _ZN7S2171C4D1Ev();
Name_Map name_map_S2171C4[] = {
  NSPAIR(_ZN7S2171C4C1Ev),
  NSPAIR(_ZN7S2171C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2171C4[];
extern void _ZN7S2171C4D1Ev();
extern void _ZN7S2171C4D0Ev();
extern void _ZN7S2171C42v3Ev();
extern void _ZN7S2171C42v4Ev();
extern void _ZN7S2171C42v5Ev();
static  VTBL_ENTRY vtc_S2171C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2171C4[0]),
  (VTBL_ENTRY)&_ZN7S2171C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2171C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2171C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2171C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2171C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2171C4[];
extern  VTBL_ENTRY _ZTV7S2171C4[];
Class_Descriptor cd_S2171C4 = {  "S2171C4", // class name
  0,0,//no base classes
  &(vtc_S2171C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2171C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2171C4),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  S2171C3  : S2171C4 {
  void *s2171c3f0;
  virtual void  v6(); // _ZN7S2171C32v6Ev
  virtual void  v7(); // _ZN7S2171C32v7Ev
  ~S2171C3(); // tgen
  S2171C3(); // tgen
};
//SIG(-1 S2171C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2171C3 ::v6(){vfunc_called(this, "_ZN7S2171C32v6Ev");}
void  S2171C3 ::v7(){vfunc_called(this, "_ZN7S2171C32v7Ev");}
S2171C3 ::~S2171C3(){ note_dtor("S2171C3", this);} // tgen
S2171C3 ::S2171C3(){ note_ctor("S2171C3", this);} // tgen

static void Test_S2171C3()
{
  extern Class_Descriptor cd_S2171C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2171C3, buf);
    S2171C3 *dp, &lv = *(dp=new (buf) S2171C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2171C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2171C3)");
    check_base_class_offset(lv, (S2171C4*), 0, "S2171C3");
    check_field_offset(lv, s2171c3f0, ABISELECT(40,28), "S2171C3.s2171c3f0");
    test_class_info(&lv, &cd_S2171C3);
    dp->~S2171C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2171C3(Test_S2171C3, "S2171C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2171C3C1Ev();
extern void _ZN7S2171C3D1Ev();
Name_Map name_map_S2171C3[] = {
  NSPAIR(_ZN7S2171C3C1Ev),
  NSPAIR(_ZN7S2171C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2171C4;
extern VTBL_ENTRY _ZTI7S2171C4[];
extern  VTBL_ENTRY _ZTV7S2171C4[];
static Base_Class bases_S2171C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2171C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2171C3[];
extern void _ZN7S2171C3D1Ev();
extern void _ZN7S2171C3D0Ev();
extern void _ZN7S2171C42v3Ev();
extern void _ZN7S2171C42v4Ev();
extern void _ZN7S2171C42v5Ev();
extern void _ZN7S2171C32v6Ev();
extern void _ZN7S2171C32v7Ev();
static  VTBL_ENTRY vtc_S2171C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2171C3[0]),
  (VTBL_ENTRY)&_ZN7S2171C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2171C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2171C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2171C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2171C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2171C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2171C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S2171C3[];
extern  VTBL_ENTRY _ZTV7S2171C3[];
Class_Descriptor cd_S2171C3 = {  "S2171C3", // class name
  bases_S2171C3, 1,
  &(vtc_S2171C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2171C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2171C3),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  S2171C14_nt  {
  void *s2171c14f0;
  int s2171c14f1[2];
  ::S629C14 s2171c14f2;
  void  mf2171c14(); // _ZN11S2171C14_nt9mf2171c14Ev
};
//SIG(-1 S2171C14_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S2171C14_nt ::mf2171c14(){}

//skip512 S2171C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2171C2  : S2171C3 {
  void *s2171c2f0;
  int s2171c2f1;
  ::S2173C14 s2171c2f2;
  ::S2366C5_nt s2171c2f3;
  void *s2171c2f4;
  int s2171c2f5;
  void *s2171c2f6;
  int s2171c2f7;
  ::S2366C19 s2171c2f8;
  ::S2173C10_nt s2171c2f9;
  ::S2173C7_nt s2171c2f10;
  ::S2171C14_nt s2171c2f11;
  ::S2366C10_nt s2171c2f12;
  ::S2173C17_nt s2171c2f13;
  virtual  ~S2171C2(); // _ZN7S2171C2D1Ev
  virtual void  v8(); // _ZN7S2171C22v8Ev
  virtual void  v9(); // _ZN7S2171C22v9Ev
  virtual void  v10(); // _ZN7S2171C23v10Ev
  virtual void  v11(); // _ZN7S2171C23v11Ev
  virtual void  v12(); // _ZN7S2171C23v12Ev
  virtual void  v13(); // _ZN7S2171C23v13Ev
  S2171C2(); // tgen
};
//SIG(-1 S2171C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v10 v11 Fp} vd v1 v2 v3 v4 v5 v6 Fp Fi FC6{ m Fp Fi[2] FC7{ m}} FC4 Fp Fi Fp Fi FC8{ m Fp} FC9{ m FC10{ FL[4]}} FC11{ m Fp Fi[2] FC5} FC12{ m Fp Fi[2] FC5} FC13{ m Fp} FC14{ m Fp}}


 S2171C2 ::~S2171C2(){ note_dtor("S2171C2", this);}
void  S2171C2 ::v8(){vfunc_called(this, "_ZN7S2171C22v8Ev");}
void  S2171C2 ::v9(){vfunc_called(this, "_ZN7S2171C22v9Ev");}
void  S2171C2 ::v10(){vfunc_called(this, "_ZN7S2171C23v10Ev");}
void  S2171C2 ::v11(){vfunc_called(this, "_ZN7S2171C23v11Ev");}
void  S2171C2 ::v12(){vfunc_called(this, "_ZN7S2171C23v12Ev");}
void  S2171C2 ::v13(){vfunc_called(this, "_ZN7S2171C23v13Ev");}
S2171C2 ::S2171C2(){ note_ctor("S2171C2", this);} // tgen

static void Test_S2171C2()
{
  extern Class_Descriptor cd_S2171C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,41)];
    init_test(&cd_S2171C2, buf);
    S2171C2 *dp, &lv = *(dp=new (buf) S2171C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,160), "sizeof(S2171C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2171C2)");
    check_base_class_offset(lv, (S2171C4*)(S2171C3*), 0, "S2171C2");
    check_base_class_offset(lv, (S2171C3*), 0, "S2171C2");
    check_field_offset(lv, s2171c2f0, ABISELECT(48,32), "S2171C2.s2171c2f0");
    check_field_offset(lv, s2171c2f1, ABISELECT(56,36), "S2171C2.s2171c2f1");
    check_field_offset(lv, s2171c2f2, ABISELECT(64,40), "S2171C2.s2171c2f2");
    check_field_offset(lv, s2171c2f3, ABISELECT(88,56), "S2171C2.s2171c2f3");
    check_field_offset(lv, s2171c2f4, ABISELECT(104,68), "S2171C2.s2171c2f4");
    check_field_offset(lv, s2171c2f5, ABISELECT(112,72), "S2171C2.s2171c2f5");
    check_field_offset(lv, s2171c2f6, ABISELECT(120,76), "S2171C2.s2171c2f6");
    check_field_offset(lv, s2171c2f7, ABISELECT(128,80), "S2171C2.s2171c2f7");
    check_field_offset(lv, s2171c2f8, ABISELECT(136,84), "S2171C2.s2171c2f8");
    check_field_offset(lv, s2171c2f9, ABISELECT(144,88), "S2171C2.s2171c2f9");
    check_field_offset(lv, s2171c2f10, ABISELECT(176,120), "S2171C2.s2171c2f10");
    check_field_offset(lv, s2171c2f11, ABISELECT(200,136), "S2171C2.s2171c2f11");
    check_field_offset(lv, s2171c2f12, ABISELECT(224,152), "S2171C2.s2171c2f12");
    check_field_offset(lv, s2171c2f13, ABISELECT(232,156), "S2171C2.s2171c2f13");
    test_class_info(&lv, &cd_S2171C2);
    dp->~S2171C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2171C2(Test_S2171C2, "S2171C2", ABISELECT(240,160));

#else // __cplusplus

extern void _ZN7S2171C2C1Ev();
extern void _ZN7S2171C2D1Ev();
Name_Map name_map_S2171C2[] = {
  NSPAIR(_ZN7S2171C2C1Ev),
  NSPAIR(_ZN7S2171C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2171C4;
extern VTBL_ENTRY _ZTI7S2171C4[];
extern  VTBL_ENTRY _ZTV7S2171C4[];
extern Class_Descriptor cd_S2171C3;
extern VTBL_ENTRY _ZTI7S2171C3[];
extern  VTBL_ENTRY _ZTV7S2171C3[];
static Base_Class bases_S2171C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2171C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2171C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2171C2[];
extern void _ZN7S2171C2D1Ev();
extern void _ZN7S2171C2D0Ev();
extern void _ZN7S2171C42v3Ev();
extern void _ZN7S2171C42v4Ev();
extern void _ZN7S2171C42v5Ev();
extern void _ZN7S2171C32v6Ev();
extern void _ZN7S2171C32v7Ev();
extern void _ZN7S2171C22v8Ev();
extern void _ZN7S2171C22v9Ev();
extern void _ZN7S2171C23v10Ev();
extern void _ZN7S2171C23v11Ev();
extern void _ZN7S2171C23v12Ev();
extern void _ZN7S2171C23v13Ev();
static  VTBL_ENTRY vtc_S2171C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2171C2[0]),
  (VTBL_ENTRY)&_ZN7S2171C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2171C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2171C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2171C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2171C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2171C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2171C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2171C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2171C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2171C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2171C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2171C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2171C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S2171C2[];
extern  VTBL_ENTRY _ZTV7S2171C2[];
Class_Descriptor cd_S2171C2 = {  "S2171C2", // class name
  bases_S2171C2, 2,
  &(vtc_S2171C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,160), // object size
  NSPAIRA(_ZTI7S2171C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2171C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2171C1  : S2171C2 {
  char s2171c1f0;
  virtual  ~S2171C1(); // _ZN7S2171C1D1Ev
  virtual void  v1(); // _ZN7S2171C12v1Ev
  virtual void  v2(); // _ZN7S2171C12v2Ev
  S2171C1(); // tgen
};
//SIG(1 S2171C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v6 v7 Fp} vd v8 v9 v10 v11 v12 v13 Fp Fi FC7{ m Fp Fi[2] FC8{ m}} FC5 Fp Fi Fp Fi FC9{ m Fp} FC10{ m FC11{ FL[4]}} FC12{ m Fp Fi[2] FC6} FC13{ m Fp Fi[2] FC6} FC14{ m Fp} FC15{ m Fp}} vd v1 v2 Fc}


 S2171C1 ::~S2171C1(){ note_dtor("S2171C1", this);}
void  S2171C1 ::v1(){vfunc_called(this, "_ZN7S2171C12v1Ev");}
void  S2171C1 ::v2(){vfunc_called(this, "_ZN7S2171C12v2Ev");}
S2171C1 ::S2171C1(){ note_ctor("S2171C1", this);} // tgen

static void Test_S2171C1()
{
  extern Class_Descriptor cd_S2171C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,42)];
    init_test(&cd_S2171C1, buf);
    S2171C1 *dp, &lv = *(dp=new (buf) S2171C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,164), "sizeof(S2171C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2171C1)");
    check_base_class_offset(lv, (S2171C4*)(S2171C3*)(S2171C2*), 0, "S2171C1");
    check_base_class_offset(lv, (S2171C3*)(S2171C2*), 0, "S2171C1");
    check_base_class_offset(lv, (S2171C2*), 0, "S2171C1");
    check_field_offset(lv, s2171c1f0, ABISELECT(240,160), "S2171C1.s2171c1f0");
    test_class_info(&lv, &cd_S2171C1);
    dp->~S2171C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2171C1(Test_S2171C1, "S2171C1", ABISELECT(248,164));

#else // __cplusplus

extern void _ZN7S2171C1C1Ev();
extern void _ZN7S2171C1D1Ev();
Name_Map name_map_S2171C1[] = {
  NSPAIR(_ZN7S2171C1C1Ev),
  NSPAIR(_ZN7S2171C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2171C4;
extern VTBL_ENTRY _ZTI7S2171C4[];
extern  VTBL_ENTRY _ZTV7S2171C4[];
extern Class_Descriptor cd_S2171C3;
extern VTBL_ENTRY _ZTI7S2171C3[];
extern  VTBL_ENTRY _ZTV7S2171C3[];
extern Class_Descriptor cd_S2171C2;
extern VTBL_ENTRY _ZTI7S2171C2[];
extern  VTBL_ENTRY _ZTV7S2171C2[];
static Base_Class bases_S2171C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2171C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2171C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2171C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2171C1[];
extern void _ZN7S2171C1D1Ev();
extern void _ZN7S2171C1D0Ev();
extern void _ZN7S2171C42v3Ev();
extern void _ZN7S2171C42v4Ev();
extern void _ZN7S2171C42v5Ev();
extern void _ZN7S2171C32v6Ev();
extern void _ZN7S2171C32v7Ev();
extern void _ZN7S2171C22v8Ev();
extern void _ZN7S2171C22v9Ev();
extern void _ZN7S2171C23v10Ev();
extern void _ZN7S2171C23v11Ev();
extern void _ZN7S2171C23v12Ev();
extern void _ZN7S2171C23v13Ev();
extern void _ZN7S2171C12v1Ev();
extern void _ZN7S2171C12v2Ev();
static  VTBL_ENTRY vtc_S2171C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2171C1[0]),
  (VTBL_ENTRY)&_ZN7S2171C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2171C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2171C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2171C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2171C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2171C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2171C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2171C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2171C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2171C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2171C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2171C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2171C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2171C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2171C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2171C1[];
extern  VTBL_ENTRY _ZTV7S2171C1[];
Class_Descriptor cd_S2171C1 = {  "S2171C1", // class name
  bases_S2171C1, 3,
  &(vtc_S2171C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,164), // object size
  NSPAIRA(_ZTI7S2171C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2171C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4473C3  {
  int s4473c3f0[4];
  ::S4474C4_nt s4473c3f1;
  int s4473c3f2;
  char s4473c3f3;
  ::S4474C5_nt s4473c3f4;
  int s4473c3f5;
  virtual  ~S4473C3(); // _ZN7S4473C3D1Ev
  virtual void  v2(); // _ZN7S4473C32v2Ev
  virtual void  v3(); // _ZN7S4473C32v3Ev
  virtual void  v4(); // _ZN7S4473C32v4Ev
  S4473C3(); // tgen
};
//SIG(-1 S4473C3) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4473C3 ::~S4473C3(){ note_dtor("S4473C3", this);}
void  S4473C3 ::v2(){vfunc_called(this, "_ZN7S4473C32v2Ev");}
void  S4473C3 ::v3(){vfunc_called(this, "_ZN7S4473C32v3Ev");}
void  S4473C3 ::v4(){vfunc_called(this, "_ZN7S4473C32v4Ev");}
S4473C3 ::S4473C3(){ note_ctor("S4473C3", this);} // tgen

static void Test_S4473C3()
{
  extern Class_Descriptor cd_S4473C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4473C3, buf);
    S4473C3 *dp, &lv = *(dp=new (buf) S4473C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4473C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4473C3)");
    check_field_offset(lv, s4473c3f0, ABISELECT(8,4), "S4473C3.s4473c3f0");
    check_field_offset(lv, s4473c3f1, ABISELECT(24,20), "S4473C3.s4473c3f1");
    check_field_offset(lv, s4473c3f2, ABISELECT(40,28), "S4473C3.s4473c3f2");
    check_field_offset(lv, s4473c3f3, ABISELECT(44,32), "S4473C3.s4473c3f3");
    check_field_offset(lv, s4473c3f4, ABISELECT(48,36), "S4473C3.s4473c3f4");
    check_field_offset(lv, s4473c3f5, ABISELECT(64,48), "S4473C3.s4473c3f5");
    test_class_info(&lv, &cd_S4473C3);
    dp->~S4473C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4473C3(Test_S4473C3, "S4473C3", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4473C3C1Ev();
extern void _ZN7S4473C3D1Ev();
Name_Map name_map_S4473C3[] = {
  NSPAIR(_ZN7S4473C3C1Ev),
  NSPAIR(_ZN7S4473C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4473C3[];
extern void _ZN7S4473C3D1Ev();
extern void _ZN7S4473C3D0Ev();
extern void _ZN7S4473C32v2Ev();
extern void _ZN7S4473C32v3Ev();
extern void _ZN7S4473C32v4Ev();
static  VTBL_ENTRY vtc_S4473C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4473C3[0]),
  (VTBL_ENTRY)&_ZN7S4473C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4473C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4473C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4473C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4473C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4473C3[];
extern  VTBL_ENTRY _ZTV7S4473C3[];
Class_Descriptor cd_S4473C3 = {  "S4473C3", // class name
  0,0,//no base classes
  &(vtc_S4473C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4473C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4473C3),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  S4473C6  {
  virtual  ~S4473C6(); // _ZN7S4473C6D1Ev
  virtual void  v5(); // _ZN7S4473C62v5Ev
  S4473C6(); // tgen
};
//SIG(-1 S4473C6) C1{ vd v1}


 S4473C6 ::~S4473C6(){ note_dtor("S4473C6", this);}
void  S4473C6 ::v5(){vfunc_called(this, "_ZN7S4473C62v5Ev");}
S4473C6 ::S4473C6(){ note_ctor("S4473C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S4473C6C1Ev();
extern void _ZN7S4473C6D1Ev();
Name_Map name_map_S4473C6[] = {
  NSPAIR(_ZN7S4473C6C1Ev),
  NSPAIR(_ZN7S4473C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4473C6[];
extern void _ZN7S4473C6D1Ev();
extern void _ZN7S4473C6D0Ev();
extern void _ZN7S4473C62v5Ev();
static  VTBL_ENTRY vtc_S4473C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4473C6[0]),
  (VTBL_ENTRY)&_ZN7S4473C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4473C6D0Ev,
  (VTBL_ENTRY)&_ZN7S4473C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4473C6[];
extern  VTBL_ENTRY _ZTV7S4473C6[];
Class_Descriptor cd_S4473C6 = {  "S4473C6", // class name
  0,0,//no base classes
  &(vtc_S4473C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4473C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4473C6),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  S4473C2  : S4473C3 , S4473C6 {
  void *s4473c2f0;
  int s4473c2f1;
  void *s4473c2f2;
  virtual  ~S4473C2(); // _ZN7S4473C2D1Ev
  virtual void  v6(); // _ZN7S4473C22v6Ev
  virtual void  v7(); // _ZN7S4473C22v7Ev
  S4473C2(); // tgen
};
//SIG(-1 S4473C2) C1{ BC2{ vd v3 v4 v5 Fi[4] FC3{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} BC5{ vd v6} vd v1 v2 Fp Fi Fp}


 S4473C2 ::~S4473C2(){ note_dtor("S4473C2", this);}
void  S4473C2 ::v6(){vfunc_called(this, "_ZN7S4473C22v6Ev");}
void  S4473C2 ::v7(){vfunc_called(this, "_ZN7S4473C22v7Ev");}
S4473C2 ::S4473C2(){ note_ctor("S4473C2", this);} // tgen

static void Test_S4473C2()
{
  extern Class_Descriptor cd_S4473C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4473C2, buf);
    S4473C2 *dp, &lv = *(dp=new (buf) S4473C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4473C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4473C2)");
    check_base_class_offset(lv, (S4473C3*), 0, "S4473C2");
    check_base_class_offset(lv, (S4473C6*), ABISELECT(72,52), "S4473C2");
    check_field_offset(lv, s4473c2f0, ABISELECT(80,56), "S4473C2.s4473c2f0");
    check_field_offset(lv, s4473c2f1, ABISELECT(88,60), "S4473C2.s4473c2f1");
    check_field_offset(lv, s4473c2f2, ABISELECT(96,64), "S4473C2.s4473c2f2");
    test_class_info(&lv, &cd_S4473C2);
    dp->~S4473C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4473C2(Test_S4473C2, "S4473C2", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4473C2C1Ev();
extern void _ZN7S4473C2D1Ev();
Name_Map name_map_S4473C2[] = {
  NSPAIR(_ZN7S4473C2C1Ev),
  NSPAIR(_ZN7S4473C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4473C3;
extern VTBL_ENTRY _ZTI7S4473C3[];
extern  VTBL_ENTRY _ZTV7S4473C3[];
extern Class_Descriptor cd_S4473C6;
extern VTBL_ENTRY _ZTI7S4473C6[];
extern  VTBL_ENTRY _ZTV7S4473C6[];
static Base_Class bases_S4473C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4473C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S4473C6,    ABISELECT(72,52), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4473C2[];
extern void _ZN7S4473C2D1Ev();
extern void _ZN7S4473C2D0Ev();
extern void _ZN7S4473C32v2Ev();
extern void _ZN7S4473C32v3Ev();
extern void _ZN7S4473C32v4Ev();
extern void _ZN7S4473C22v6Ev();
extern void _ZN7S4473C22v7Ev();
extern void ABISELECT(_ZThn72_N7S4473C2D1Ev,_ZThn52_N7S4473C2D1Ev)();
extern void ABISELECT(_ZThn72_N7S4473C2D0Ev,_ZThn52_N7S4473C2D0Ev)();
extern void _ZN7S4473C62v5Ev();
static  VTBL_ENTRY vtc_S4473C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4473C2[0]),
  (VTBL_ENTRY)&_ZN7S4473C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4473C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4473C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4473C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4473C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4473C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4473C22v7Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4473C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4473C2D1Ev,_ZThn52_N7S4473C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4473C2D0Ev,_ZThn52_N7S4473C2D0Ev),
  (VTBL_ENTRY)&_ZN7S4473C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4473C2[];
extern  VTBL_ENTRY _ZTV7S4473C2[];
Class_Descriptor cd_S4473C2 = {  "S4473C2", // class name
  bases_S4473C2, 2,
  &(vtc_S4473C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4473C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4473C2),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4473C8_nt  {
  int s4473c8f0;
  void *s4473c8f1[7];
  short s4473c8f2;
  char s4473c8f3[10];
};
//SIG(-1 S4473C8_nt) C1{ Fi Fp[7] Fs Fc[10]}



//skip512 S4473C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4473C12_nt  {
  void *s4473c12f0;
  int s4473c12f1;
  ::S629C14 s4473c12f2;
  void  mf4473c12(); // _ZN11S4473C12_nt9mf4473c12Ev
};
//SIG(-1 S4473C12_nt) C1{ m Fp Fi FC2{ m}}


void  S4473C12_nt ::mf4473c12(){}

//skip512 S4473C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4473C9_nt  {
  ::S2366C5_nt s4473c9f0;
  ::S4473C12_nt s4473c9f1;
  void  mf4473c9(); // _ZN10S4473C9_nt8mf4473c9Ev
};
//SIG(-1 S4473C9_nt) C1{ m FC2{ m Fp Fi FC3{ m}} FC4{ m Fp Fi FC3}}


void  S4473C9_nt ::mf4473c9(){}

//skip512 S4473C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4473C7_nt  {
  ::S4473C8_nt s4473c7f0;
  void *s4473c7f1;
  char s4473c7f2[2];
  ::S4473C9_nt s4473c7f3;
  void  mf4473c7(); // _ZN10S4473C7_nt8mf4473c7Ev
  virtual  ~S4473C7_nt(); // _ZN10S4473C7_ntD1Ev
  S4473C7_nt(); // tgen
};
//SIG(-1 S4473C7_nt) C1{ vd m FC2{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC3{ m FC4{ m Fp Fi FC5{ m}} FC6{ m Fp Fi FC5}}}


void  S4473C7_nt ::mf4473c7(){}
 S4473C7_nt ::~S4473C7_nt(){ note_dtor("S4473C7_nt", this);}
S4473C7_nt ::S4473C7_nt(){ note_ctor("S4473C7_nt", this);} // tgen

//skip512 S4473C7_nt

#else // __cplusplus

extern void _ZN10S4473C7_ntC1Ev();
extern void _ZN10S4473C7_ntD1Ev();
Name_Map name_map_S4473C7_nt[] = {
  NSPAIR(_ZN10S4473C7_ntC1Ev),
  NSPAIR(_ZN10S4473C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4473C7_nt[];
extern void _ZN10S4473C7_ntD1Ev();
extern void _ZN10S4473C7_ntD0Ev();
static  VTBL_ENTRY vtc_S4473C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4473C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S4473C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4473C7_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S4473C7_nt[];
VTBL_ENTRY *P__ZTI10S4473C7_nt = _ZTI10S4473C7_nt; 
extern  VTBL_ENTRY _ZTV10S4473C7_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4473C14  {
  char s4473c14f0;
  void *s4473c14f1;
  void  mf4473c14(); // _ZN8S4473C149mf4473c14Ev
};
//SIG(-1 S4473C14) C1{ m Fc Fp}


void  S4473C14 ::mf4473c14(){}

static void Test_S4473C14()
{
  {
    init_simple_test("S4473C14");
    S4473C14 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4473C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4473C14)");
    check_field_offset(lv, s4473c14f0, 0, "S4473C14.s4473c14f0");
    check_field_offset(lv, s4473c14f1, ABISELECT(8,4), "S4473C14.s4473c14f1");
  }
}
static Arrange_To_Call_Me vS4473C14(Test_S4473C14, "S4473C14", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4473C1  : S4473C2 {
  ::S4473C7_nt s4473c1f0;
  void *s4473c1f1;
  ::S4473C14 s4473c1f2;
  virtual  ~S4473C1(); // _ZN7S4473C1D1Ev
  virtual void  v1(); // _ZN7S4473C12v1Ev
  S4473C1(); // tgen
};
//SIG(1 S4473C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} BC6{ vd v5} vd v6 v7 Fp Fi Fp} vd v1 FC7{ vd m FC8{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC9{ m FC10{ m Fp Fi FC11{ m}} FC12{ m Fp Fi FC11}}} Fp FC13{ m Fc Fp}}


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

static void Test_S4473C1()
{
  extern Class_Descriptor cd_S4473C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,41)];
    init_test(&cd_S4473C1, buf);
    S4473C1 *dp, &lv = *(dp=new (buf) S4473C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,160), "sizeof(S4473C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4473C1)");
    check_base_class_offset(lv, (S4473C3*)(S4473C2*), 0, "S4473C1");
    check_base_class_offset(lv, (S4473C6*)(S4473C2*), ABISELECT(72,52), "S4473C1");
    check_base_class_offset(lv, (S4473C2*), 0, "S4473C1");
    check_field_offset(lv, s4473c1f0, ABISELECT(104,68), "S4473C1.s4473c1f0");
    check_field_offset(lv, s4473c1f1, ABISELECT(240,148), "S4473C1.s4473c1f1");
    check_field_offset(lv, s4473c1f2, ABISELECT(248,152), "S4473C1.s4473c1f2");
    test_class_info(&lv, &cd_S4473C1);
    dp->~S4473C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4473C1(Test_S4473C1, "S4473C1", ABISELECT(264,160));

#else // __cplusplus

extern void _ZN7S4473C1C1Ev();
extern void _ZN7S4473C1D1Ev();
Name_Map name_map_S4473C1[] = {
  NSPAIR(_ZN7S4473C1C1Ev),
  NSPAIR(_ZN7S4473C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4473C3;
extern VTBL_ENTRY _ZTI7S4473C3[];
extern  VTBL_ENTRY _ZTV7S4473C3[];
extern Class_Descriptor cd_S4473C6;
extern VTBL_ENTRY _ZTI7S4473C6[];
extern  VTBL_ENTRY _ZTV7S4473C6[];
extern Class_Descriptor cd_S4473C2;
extern VTBL_ENTRY _ZTI7S4473C2[];
extern  VTBL_ENTRY _ZTV7S4473C2[];
static Base_Class bases_S4473C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4473C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4473C6,    ABISELECT(72,52), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S4473C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4473C1[];
extern void _ZN7S4473C1D1Ev();
extern void _ZN7S4473C1D0Ev();
extern void _ZN7S4473C32v2Ev();
extern void _ZN7S4473C32v3Ev();
extern void _ZN7S4473C32v4Ev();
extern void _ZN7S4473C22v6Ev();
extern void _ZN7S4473C22v7Ev();
extern void _ZN7S4473C12v1Ev();
extern void ABISELECT(_ZThn72_N7S4473C1D1Ev,_ZThn52_N7S4473C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4473C1D0Ev,_ZThn52_N7S4473C1D0Ev)();
extern void _ZN7S4473C62v5Ev();
static  VTBL_ENTRY vtc_S4473C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4473C1[0]),
  (VTBL_ENTRY)&_ZN7S4473C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4473C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4473C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4473C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4473C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4473C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4473C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4473C12v1Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4473C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4473C1D1Ev,_ZThn52_N7S4473C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4473C1D0Ev,_ZThn52_N7S4473C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4473C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4473C1[];
extern  VTBL_ENTRY _ZTV7S4473C1[];
Class_Descriptor cd_S4473C1 = {  "S4473C1", // class name
  bases_S4473C1, 3,
  &(vtc_S4473C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(264,160), // object size
  NSPAIRA(_ZTI7S4473C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4473C1),15, //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  S2175C4  {
  ::S4473C12_nt s2175c4f0;
  int s2175c4f1[2];
  char s2175c4f2;
  virtual  ~S2175C4(); // _ZN7S2175C4D1Ev
  virtual void  v3(); // _ZN7S2175C42v3Ev
  virtual void  v4(); // _ZN7S2175C42v4Ev
  virtual void  v5(); // _ZN7S2175C42v5Ev
  S2175C4(); // tgen
};
//SIG(-1 S2175C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2175C4 ::~S2175C4(){ note_dtor("S2175C4", this);}
void  S2175C4 ::v3(){vfunc_called(this, "_ZN7S2175C42v3Ev");}
void  S2175C4 ::v4(){vfunc_called(this, "_ZN7S2175C42v4Ev");}
void  S2175C4 ::v5(){vfunc_called(this, "_ZN7S2175C42v5Ev");}
S2175C4 ::S2175C4(){ note_ctor("S2175C4", this);} // tgen

static void Test_S2175C4()
{
  extern Class_Descriptor cd_S2175C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2175C4, buf);
    S2175C4 *dp, &lv = *(dp=new (buf) S2175C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2175C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2175C4)");
    check_field_offset(lv, s2175c4f0, ABISELECT(8,4), "S2175C4.s2175c4f0");
    check_field_offset(lv, s2175c4f1, ABISELECT(24,16), "S2175C4.s2175c4f1");
    check_field_offset(lv, s2175c4f2, ABISELECT(32,24), "S2175C4.s2175c4f2");
    test_class_info(&lv, &cd_S2175C4);
    dp->~S2175C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2175C4(Test_S2175C4, "S2175C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2175C4C1Ev();
extern void _ZN7S2175C4D1Ev();
Name_Map name_map_S2175C4[] = {
  NSPAIR(_ZN7S2175C4C1Ev),
  NSPAIR(_ZN7S2175C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2175C4[];
extern void _ZN7S2175C4D1Ev();
extern void _ZN7S2175C4D0Ev();
extern void _ZN7S2175C42v3Ev();
extern void _ZN7S2175C42v4Ev();
extern void _ZN7S2175C42v5Ev();
static  VTBL_ENTRY vtc_S2175C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2175C4[0]),
  (VTBL_ENTRY)&_ZN7S2175C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2175C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2175C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2175C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2175C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2175C4[];
extern  VTBL_ENTRY _ZTV7S2175C4[];
Class_Descriptor cd_S2175C4 = {  "S2175C4", // class name
  0,0,//no base classes
  &(vtc_S2175C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2175C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2175C4),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  S2175C3  : S2175C4 {
  void *s2175c3f0;
  virtual void  v6(); // _ZN7S2175C32v6Ev
  virtual void  v7(); // _ZN7S2175C32v7Ev
  ~S2175C3(); // tgen
  S2175C3(); // tgen
};
//SIG(-1 S2175C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2175C3 ::v6(){vfunc_called(this, "_ZN7S2175C32v6Ev");}
void  S2175C3 ::v7(){vfunc_called(this, "_ZN7S2175C32v7Ev");}
S2175C3 ::~S2175C3(){ note_dtor("S2175C3", this);} // tgen
S2175C3 ::S2175C3(){ note_ctor("S2175C3", this);} // tgen

static void Test_S2175C3()
{
  extern Class_Descriptor cd_S2175C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2175C3, buf);
    S2175C3 *dp, &lv = *(dp=new (buf) S2175C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2175C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2175C3)");
    check_base_class_offset(lv, (S2175C4*), 0, "S2175C3");
    check_field_offset(lv, s2175c3f0, ABISELECT(40,28), "S2175C3.s2175c3f0");
    test_class_info(&lv, &cd_S2175C3);
    dp->~S2175C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2175C3(Test_S2175C3, "S2175C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2175C3C1Ev();
extern void _ZN7S2175C3D1Ev();
Name_Map name_map_S2175C3[] = {
  NSPAIR(_ZN7S2175C3C1Ev),
  NSPAIR(_ZN7S2175C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2175C4;
extern VTBL_ENTRY _ZTI7S2175C4[];
extern  VTBL_ENTRY _ZTV7S2175C4[];
static Base_Class bases_S2175C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2175C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2175C3[];
extern void _ZN7S2175C3D1Ev();
extern void _ZN7S2175C3D0Ev();
extern void _ZN7S2175C42v3Ev();
extern void _ZN7S2175C42v4Ev();
extern void _ZN7S2175C42v5Ev();
extern void _ZN7S2175C32v6Ev();
extern void _ZN7S2175C32v7Ev();
static  VTBL_ENTRY vtc_S2175C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2175C3[0]),
  (VTBL_ENTRY)&_ZN7S2175C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2175C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2175C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2175C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2175C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2175C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2175C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S2175C3[];
extern  VTBL_ENTRY _ZTV7S2175C3[];
Class_Descriptor cd_S2175C3 = {  "S2175C3", // class name
  bases_S2175C3, 1,
  &(vtc_S2175C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2175C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2175C3),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  S2175C2  : S2175C3 {
  void *s2175c2f0;
  int s2175c2f1;
  ::S2173C14 s2175c2f2;
  ::S4473C12_nt s2175c2f3;
  void *s2175c2f4;
  int s2175c2f5;
  void *s2175c2f6;
  int s2175c2f7;
  ::S2366C19 s2175c2f8;
  ::S2173C10_nt s2175c2f9;
  ::S2173C7_nt s2175c2f10;
  ::S2171C14_nt s2175c2f11;
  ::S2366C10_nt s2175c2f12;
  ::S2173C17_nt s2175c2f13;
  virtual  ~S2175C2(); // _ZN7S2175C2D1Ev
  virtual void  v8(); // _ZN7S2175C22v8Ev
  virtual void  v9(); // _ZN7S2175C22v9Ev
  virtual void  v10(); // _ZN7S2175C23v10Ev
  virtual void  v11(); // _ZN7S2175C23v11Ev
  virtual void  v12(); // _ZN7S2175C23v12Ev
  virtual void  v13(); // _ZN7S2175C23v13Ev
  S2175C2(); // tgen
};
//SIG(-1 S2175C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v10 v11 Fp} vd v1 v2 v3 v4 v5 v6 Fp Fi FC6{ m Fp Fi[2] FC7{ m}} FC4 Fp Fi Fp Fi FC8{ m Fp} FC9{ m FC10{ FL[4]}} FC11{ m Fp Fi[2] FC5} FC12{ m Fp Fi[2] FC5} FC13{ m Fp} FC14{ m Fp}}


 S2175C2 ::~S2175C2(){ note_dtor("S2175C2", this);}
void  S2175C2 ::v8(){vfunc_called(this, "_ZN7S2175C22v8Ev");}
void  S2175C2 ::v9(){vfunc_called(this, "_ZN7S2175C22v9Ev");}
void  S2175C2 ::v10(){vfunc_called(this, "_ZN7S2175C23v10Ev");}
void  S2175C2 ::v11(){vfunc_called(this, "_ZN7S2175C23v11Ev");}
void  S2175C2 ::v12(){vfunc_called(this, "_ZN7S2175C23v12Ev");}
void  S2175C2 ::v13(){vfunc_called(this, "_ZN7S2175C23v13Ev");}
S2175C2 ::S2175C2(){ note_ctor("S2175C2", this);} // tgen

static void Test_S2175C2()
{
  extern Class_Descriptor cd_S2175C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,41)];
    init_test(&cd_S2175C2, buf);
    S2175C2 *dp, &lv = *(dp=new (buf) S2175C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,160), "sizeof(S2175C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2175C2)");
    check_base_class_offset(lv, (S2175C4*)(S2175C3*), 0, "S2175C2");
    check_base_class_offset(lv, (S2175C3*), 0, "S2175C2");
    check_field_offset(lv, s2175c2f0, ABISELECT(48,32), "S2175C2.s2175c2f0");
    check_field_offset(lv, s2175c2f1, ABISELECT(56,36), "S2175C2.s2175c2f1");
    check_field_offset(lv, s2175c2f2, ABISELECT(64,40), "S2175C2.s2175c2f2");
    check_field_offset(lv, s2175c2f3, ABISELECT(88,56), "S2175C2.s2175c2f3");
    check_field_offset(lv, s2175c2f4, ABISELECT(104,68), "S2175C2.s2175c2f4");
    check_field_offset(lv, s2175c2f5, ABISELECT(112,72), "S2175C2.s2175c2f5");
    check_field_offset(lv, s2175c2f6, ABISELECT(120,76), "S2175C2.s2175c2f6");
    check_field_offset(lv, s2175c2f7, ABISELECT(128,80), "S2175C2.s2175c2f7");
    check_field_offset(lv, s2175c2f8, ABISELECT(136,84), "S2175C2.s2175c2f8");
    check_field_offset(lv, s2175c2f9, ABISELECT(144,88), "S2175C2.s2175c2f9");
    check_field_offset(lv, s2175c2f10, ABISELECT(176,120), "S2175C2.s2175c2f10");
    check_field_offset(lv, s2175c2f11, ABISELECT(200,136), "S2175C2.s2175c2f11");
    check_field_offset(lv, s2175c2f12, ABISELECT(224,152), "S2175C2.s2175c2f12");
    check_field_offset(lv, s2175c2f13, ABISELECT(232,156), "S2175C2.s2175c2f13");
    test_class_info(&lv, &cd_S2175C2);
    dp->~S2175C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2175C2(Test_S2175C2, "S2175C2", ABISELECT(240,160));

#else // __cplusplus

extern void _ZN7S2175C2C1Ev();
extern void _ZN7S2175C2D1Ev();
Name_Map name_map_S2175C2[] = {
  NSPAIR(_ZN7S2175C2C1Ev),
  NSPAIR(_ZN7S2175C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2175C4;
extern VTBL_ENTRY _ZTI7S2175C4[];
extern  VTBL_ENTRY _ZTV7S2175C4[];
extern Class_Descriptor cd_S2175C3;
extern VTBL_ENTRY _ZTI7S2175C3[];
extern  VTBL_ENTRY _ZTV7S2175C3[];
static Base_Class bases_S2175C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2175C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2175C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2175C2[];
extern void _ZN7S2175C2D1Ev();
extern void _ZN7S2175C2D0Ev();
extern void _ZN7S2175C42v3Ev();
extern void _ZN7S2175C42v4Ev();
extern void _ZN7S2175C42v5Ev();
extern void _ZN7S2175C32v6Ev();
extern void _ZN7S2175C32v7Ev();
extern void _ZN7S2175C22v8Ev();
extern void _ZN7S2175C22v9Ev();
extern void _ZN7S2175C23v10Ev();
extern void _ZN7S2175C23v11Ev();
extern void _ZN7S2175C23v12Ev();
extern void _ZN7S2175C23v13Ev();
static  VTBL_ENTRY vtc_S2175C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2175C2[0]),
  (VTBL_ENTRY)&_ZN7S2175C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2175C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2175C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2175C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2175C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2175C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2175C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2175C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2175C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2175C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2175C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2175C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2175C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S2175C2[];
extern  VTBL_ENTRY _ZTV7S2175C2[];
Class_Descriptor cd_S2175C2 = {  "S2175C2", // class name
  bases_S2175C2, 2,
  &(vtc_S2175C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,160), // object size
  NSPAIRA(_ZTI7S2175C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2175C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2175C1  : S2175C2 {
  virtual  ~S2175C1(); // _ZN7S2175C1D1Ev
  virtual void  v1(); // _ZN7S2175C12v1Ev
  virtual void  v2(); // _ZN7S2175C12v2Ev
  S2175C1(); // tgen
};
//SIG(1 S2175C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v6 v7 Fp} vd v8 v9 v10 v11 v12 v13 Fp Fi FC7{ m Fp Fi[2] FC8{ m}} FC5 Fp Fi Fp Fi FC9{ m Fp} FC10{ m FC11{ FL[4]}} FC12{ m Fp Fi[2] FC6} FC13{ m Fp Fi[2] FC6} FC14{ m Fp} FC15{ m Fp}} vd v1 v2}


 S2175C1 ::~S2175C1(){ note_dtor("S2175C1", this);}
void  S2175C1 ::v1(){vfunc_called(this, "_ZN7S2175C12v1Ev");}
void  S2175C1 ::v2(){vfunc_called(this, "_ZN7S2175C12v2Ev");}
S2175C1 ::S2175C1(){ note_ctor("S2175C1", this);} // tgen

static void Test_S2175C1()
{
  extern Class_Descriptor cd_S2175C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,41)];
    init_test(&cd_S2175C1, buf);
    S2175C1 *dp, &lv = *(dp=new (buf) S2175C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,160), "sizeof(S2175C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2175C1)");
    check_base_class_offset(lv, (S2175C4*)(S2175C3*)(S2175C2*), 0, "S2175C1");
    check_base_class_offset(lv, (S2175C3*)(S2175C2*), 0, "S2175C1");
    check_base_class_offset(lv, (S2175C2*), 0, "S2175C1");
    test_class_info(&lv, &cd_S2175C1);
    dp->~S2175C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2175C1(Test_S2175C1, "S2175C1", ABISELECT(240,160));

#else // __cplusplus

extern void _ZN7S2175C1C1Ev();
extern void _ZN7S2175C1D1Ev();
Name_Map name_map_S2175C1[] = {
  NSPAIR(_ZN7S2175C1C1Ev),
  NSPAIR(_ZN7S2175C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2175C4;
extern VTBL_ENTRY _ZTI7S2175C4[];
extern  VTBL_ENTRY _ZTV7S2175C4[];
extern Class_Descriptor cd_S2175C3;
extern VTBL_ENTRY _ZTI7S2175C3[];
extern  VTBL_ENTRY _ZTV7S2175C3[];
extern Class_Descriptor cd_S2175C2;
extern VTBL_ENTRY _ZTI7S2175C2[];
extern  VTBL_ENTRY _ZTV7S2175C2[];
static Base_Class bases_S2175C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2175C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2175C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2175C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2175C1[];
extern void _ZN7S2175C1D1Ev();
extern void _ZN7S2175C1D0Ev();
extern void _ZN7S2175C42v3Ev();
extern void _ZN7S2175C42v4Ev();
extern void _ZN7S2175C42v5Ev();
extern void _ZN7S2175C32v6Ev();
extern void _ZN7S2175C32v7Ev();
extern void _ZN7S2175C22v8Ev();
extern void _ZN7S2175C22v9Ev();
extern void _ZN7S2175C23v10Ev();
extern void _ZN7S2175C23v11Ev();
extern void _ZN7S2175C23v12Ev();
extern void _ZN7S2175C23v13Ev();
extern void _ZN7S2175C12v1Ev();
extern void _ZN7S2175C12v2Ev();
static  VTBL_ENTRY vtc_S2175C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2175C1[0]),
  (VTBL_ENTRY)&_ZN7S2175C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2175C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2175C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2175C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2175C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2175C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2175C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2175C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2175C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2175C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2175C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2175C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2175C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2175C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2175C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2175C1[];
extern  VTBL_ENTRY _ZTV7S2175C1[];
Class_Descriptor cd_S2175C1 = {  "S2175C1", // class name
  bases_S2175C1, 3,
  &(vtc_S2175C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,160), // object size
  NSPAIRA(_ZTI7S2175C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2175C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4478C3  {
  int s4478c3f0[4];
  ::S4474C4_nt s4478c3f1;
  int s4478c3f2;
  char s4478c3f3;
  ::S4474C5_nt s4478c3f4;
  int s4478c3f5;
  virtual  ~S4478C3(); // _ZN7S4478C3D1Ev
  virtual void  v2(); // _ZN7S4478C32v2Ev
  virtual void  v3(); // _ZN7S4478C32v3Ev
  virtual void  v4(); // _ZN7S4478C32v4Ev
  S4478C3(); // tgen
};
//SIG(-1 S4478C3) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4478C3 ::~S4478C3(){ note_dtor("S4478C3", this);}
void  S4478C3 ::v2(){vfunc_called(this, "_ZN7S4478C32v2Ev");}
void  S4478C3 ::v3(){vfunc_called(this, "_ZN7S4478C32v3Ev");}
void  S4478C3 ::v4(){vfunc_called(this, "_ZN7S4478C32v4Ev");}
S4478C3 ::S4478C3(){ note_ctor("S4478C3", this);} // tgen

static void Test_S4478C3()
{
  extern Class_Descriptor cd_S4478C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4478C3, buf);
    S4478C3 *dp, &lv = *(dp=new (buf) S4478C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4478C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4478C3)");
    check_field_offset(lv, s4478c3f0, ABISELECT(8,4), "S4478C3.s4478c3f0");
    check_field_offset(lv, s4478c3f1, ABISELECT(24,20), "S4478C3.s4478c3f1");
    check_field_offset(lv, s4478c3f2, ABISELECT(40,28), "S4478C3.s4478c3f2");
    check_field_offset(lv, s4478c3f3, ABISELECT(44,32), "S4478C3.s4478c3f3");
    check_field_offset(lv, s4478c3f4, ABISELECT(48,36), "S4478C3.s4478c3f4");
    check_field_offset(lv, s4478c3f5, ABISELECT(64,48), "S4478C3.s4478c3f5");
    test_class_info(&lv, &cd_S4478C3);
    dp->~S4478C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4478C3(Test_S4478C3, "S4478C3", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4478C3C1Ev();
extern void _ZN7S4478C3D1Ev();
Name_Map name_map_S4478C3[] = {
  NSPAIR(_ZN7S4478C3C1Ev),
  NSPAIR(_ZN7S4478C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4478C3[];
extern void _ZN7S4478C3D1Ev();
extern void _ZN7S4478C3D0Ev();
extern void _ZN7S4478C32v2Ev();
extern void _ZN7S4478C32v3Ev();
extern void _ZN7S4478C32v4Ev();
static  VTBL_ENTRY vtc_S4478C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4478C3[0]),
  (VTBL_ENTRY)&_ZN7S4478C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4478C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4478C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4478C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4478C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4478C3[];
extern  VTBL_ENTRY _ZTV7S4478C3[];
Class_Descriptor cd_S4478C3 = {  "S4478C3", // class name
  0,0,//no base classes
  &(vtc_S4478C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4478C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4478C3),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  S4478C6  {
  virtual  ~S4478C6(); // _ZN7S4478C6D1Ev
  virtual void  v5(); // _ZN7S4478C62v5Ev
  S4478C6(); // tgen
};
//SIG(-1 S4478C6) C1{ vd v1}


 S4478C6 ::~S4478C6(){ note_dtor("S4478C6", this);}
void  S4478C6 ::v5(){vfunc_called(this, "_ZN7S4478C62v5Ev");}
S4478C6 ::S4478C6(){ note_ctor("S4478C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S4478C6C1Ev();
extern void _ZN7S4478C6D1Ev();
Name_Map name_map_S4478C6[] = {
  NSPAIR(_ZN7S4478C6C1Ev),
  NSPAIR(_ZN7S4478C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4478C6[];
extern void _ZN7S4478C6D1Ev();
extern void _ZN7S4478C6D0Ev();
extern void _ZN7S4478C62v5Ev();
static  VTBL_ENTRY vtc_S4478C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4478C6[0]),
  (VTBL_ENTRY)&_ZN7S4478C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4478C6D0Ev,
  (VTBL_ENTRY)&_ZN7S4478C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4478C6[];
extern  VTBL_ENTRY _ZTV7S4478C6[];
Class_Descriptor cd_S4478C6 = {  "S4478C6", // class name
  0,0,//no base classes
  &(vtc_S4478C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4478C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4478C6),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  S4478C2  : S4478C3 , S4478C6 {
  void *s4478c2f0;
  int s4478c2f1;
  void *s4478c2f2;
  virtual  ~S4478C2(); // _ZN7S4478C2D1Ev
  virtual void  v6(); // _ZN7S4478C22v6Ev
  virtual void  v7(); // _ZN7S4478C22v7Ev
  S4478C2(); // tgen
};
//SIG(-1 S4478C2) C1{ BC2{ vd v3 v4 v5 Fi[4] FC3{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} BC5{ vd v6} vd v1 v2 Fp Fi Fp}


 S4478C2 ::~S4478C2(){ note_dtor("S4478C2", this);}
void  S4478C2 ::v6(){vfunc_called(this, "_ZN7S4478C22v6Ev");}
void  S4478C2 ::v7(){vfunc_called(this, "_ZN7S4478C22v7Ev");}
S4478C2 ::S4478C2(){ note_ctor("S4478C2", this);} // tgen

static void Test_S4478C2()
{
  extern Class_Descriptor cd_S4478C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4478C2, buf);
    S4478C2 *dp, &lv = *(dp=new (buf) S4478C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4478C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4478C2)");
    check_base_class_offset(lv, (S4478C3*), 0, "S4478C2");
    check_base_class_offset(lv, (S4478C6*), ABISELECT(72,52), "S4478C2");
    check_field_offset(lv, s4478c2f0, ABISELECT(80,56), "S4478C2.s4478c2f0");
    check_field_offset(lv, s4478c2f1, ABISELECT(88,60), "S4478C2.s4478c2f1");
    check_field_offset(lv, s4478c2f2, ABISELECT(96,64), "S4478C2.s4478c2f2");
    test_class_info(&lv, &cd_S4478C2);
    dp->~S4478C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4478C2(Test_S4478C2, "S4478C2", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4478C2C1Ev();
extern void _ZN7S4478C2D1Ev();
Name_Map name_map_S4478C2[] = {
  NSPAIR(_ZN7S4478C2C1Ev),
  NSPAIR(_ZN7S4478C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4478C3;
extern VTBL_ENTRY _ZTI7S4478C3[];
extern  VTBL_ENTRY _ZTV7S4478C3[];
extern Class_Descriptor cd_S4478C6;
extern VTBL_ENTRY _ZTI7S4478C6[];
extern  VTBL_ENTRY _ZTV7S4478C6[];
static Base_Class bases_S4478C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4478C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S4478C6,    ABISELECT(72,52), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4478C2[];
extern void _ZN7S4478C2D1Ev();
extern void _ZN7S4478C2D0Ev();
extern void _ZN7S4478C32v2Ev();
extern void _ZN7S4478C32v3Ev();
extern void _ZN7S4478C32v4Ev();
extern void _ZN7S4478C22v6Ev();
extern void _ZN7S4478C22v7Ev();
extern void ABISELECT(_ZThn72_N7S4478C2D1Ev,_ZThn52_N7S4478C2D1Ev)();
extern void ABISELECT(_ZThn72_N7S4478C2D0Ev,_ZThn52_N7S4478C2D0Ev)();
extern void _ZN7S4478C62v5Ev();
static  VTBL_ENTRY vtc_S4478C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4478C2[0]),
  (VTBL_ENTRY)&_ZN7S4478C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4478C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4478C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4478C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4478C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4478C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4478C22v7Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4478C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4478C2D1Ev,_ZThn52_N7S4478C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4478C2D0Ev,_ZThn52_N7S4478C2D0Ev),
  (VTBL_ENTRY)&_ZN7S4478C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4478C2[];
extern  VTBL_ENTRY _ZTV7S4478C2[];
Class_Descriptor cd_S4478C2 = {  "S4478C2", // class name
  bases_S4478C2, 2,
  &(vtc_S4478C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4478C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4478C2),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4478C7_nt  {
  ::S4473C12_nt s4478c7f0;
  void  mf4478c7(); // _ZN10S4478C7_nt8mf4478c7Ev
  virtual  ~S4478C7_nt(); // _ZN10S4478C7_ntD1Ev
  S4478C7_nt(); // tgen
};
//SIG(-1 S4478C7_nt) C1{ vd m FC2{ m Fp Fi FC3{ m}}}


void  S4478C7_nt ::mf4478c7(){}
 S4478C7_nt ::~S4478C7_nt(){ note_dtor("S4478C7_nt", this);}
S4478C7_nt ::S4478C7_nt(){ note_ctor("S4478C7_nt", this);} // tgen

//skip512 S4478C7_nt

#else // __cplusplus

extern void _ZN10S4478C7_ntC1Ev();
extern void _ZN10S4478C7_ntD1Ev();
Name_Map name_map_S4478C7_nt[] = {
  NSPAIR(_ZN10S4478C7_ntC1Ev),
  NSPAIR(_ZN10S4478C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4478C7_nt[];
extern void _ZN10S4478C7_ntD1Ev();
extern void _ZN10S4478C7_ntD0Ev();
static  VTBL_ENTRY vtc_S4478C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4478C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S4478C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4478C7_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S4478C7_nt[];
VTBL_ENTRY *P__ZTI10S4478C7_nt = _ZTI10S4478C7_nt; 
extern  VTBL_ENTRY _ZTV10S4478C7_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4478C11  {
  void *s4478c11f0[2];
  char s4478c11f1;
  void  mf4478c11(); // _ZN8S4478C119mf4478c11Ev
};
//SIG(-1 S4478C11) C1{ m Fp[2] Fc}


void  S4478C11 ::mf4478c11(){}

static void Test_S4478C11()
{
  {
    init_simple_test("S4478C11");
    S4478C11 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S4478C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4478C11)");
    check_field_offset(lv, s4478c11f0, 0, "S4478C11.s4478c11f0");
    check_field_offset(lv, s4478c11f1, ABISELECT(16,8), "S4478C11.s4478c11f1");
  }
}
static Arrange_To_Call_Me vS4478C11(Test_S4478C11, "S4478C11", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4478C1  : S4478C2 {
  ::S4478C7_nt s4478c1f0;
  void *s4478c1f1;
  ::S629C14 s4478c1f2;
  ::S4478C11 s4478c1f3;
  ::S4474C16 s4478c1f4;
  virtual  ~S4478C1(); // _ZN7S4478C1D1Ev
  virtual void  v1(); // _ZN7S4478C12v1Ev
  S4478C1(); // tgen
};
//SIG(1 S4478C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} BC6{ vd v5} vd v6 v7 Fp Fi Fp} vd v1 FC7{ vd m FC8{ m Fp Fi FC9{ m}}} Fp FC9 FC10{ m Fp[2] Fc} FC11{ BC12{ vd m} vd Fp FC13{ BC12 vd Fp Fi[2]}}}


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

static void Test_S4478C1()
{
  extern Class_Descriptor cd_S4478C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,33)];
    init_test(&cd_S4478C1, buf);
    S4478C1 *dp, &lv = *(dp=new (buf) S4478C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,128), "sizeof(S4478C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4478C1)");
    check_base_class_offset(lv, (S4478C3*)(S4478C2*), 0, "S4478C1");
    check_base_class_offset(lv, (S4478C6*)(S4478C2*), ABISELECT(72,52), "S4478C1");
    check_base_class_offset(lv, (S4478C2*), 0, "S4478C1");
    check_field_offset(lv, s4478c1f0, ABISELECT(104,68), "S4478C1.s4478c1f0");
    check_field_offset(lv, s4478c1f1, ABISELECT(128,84), "S4478C1.s4478c1f1");
    check_field_offset(lv, s4478c1f2, ABISELECT(136,88), "S4478C1.s4478c1f2");
    check_field_offset(lv, s4478c1f3, ABISELECT(144,92), "S4478C1.s4478c1f3");
    check_field_offset(lv, s4478c1f4, ABISELECT(168,104), "S4478C1.s4478c1f4");
    test_class_info(&lv, &cd_S4478C1);
    dp->~S4478C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4478C1(Test_S4478C1, "S4478C1", ABISELECT(208,128));

#else // __cplusplus

extern void _ZN7S4478C1C1Ev();
extern void _ZN7S4478C1D1Ev();
Name_Map name_map_S4478C1[] = {
  NSPAIR(_ZN7S4478C1C1Ev),
  NSPAIR(_ZN7S4478C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4478C3;
extern VTBL_ENTRY _ZTI7S4478C3[];
extern  VTBL_ENTRY _ZTV7S4478C3[];
extern Class_Descriptor cd_S4478C6;
extern VTBL_ENTRY _ZTI7S4478C6[];
extern  VTBL_ENTRY _ZTV7S4478C6[];
extern Class_Descriptor cd_S4478C2;
extern VTBL_ENTRY _ZTI7S4478C2[];
extern  VTBL_ENTRY _ZTV7S4478C2[];
static Base_Class bases_S4478C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4478C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4478C6,    ABISELECT(72,52), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S4478C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4478C1[];
extern void _ZN7S4478C1D1Ev();
extern void _ZN7S4478C1D0Ev();
extern void _ZN7S4478C32v2Ev();
extern void _ZN7S4478C32v3Ev();
extern void _ZN7S4478C32v4Ev();
extern void _ZN7S4478C22v6Ev();
extern void _ZN7S4478C22v7Ev();
extern void _ZN7S4478C12v1Ev();
extern void ABISELECT(_ZThn72_N7S4478C1D1Ev,_ZThn52_N7S4478C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4478C1D0Ev,_ZThn52_N7S4478C1D0Ev)();
extern void _ZN7S4478C62v5Ev();
static  VTBL_ENTRY vtc_S4478C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4478C1[0]),
  (VTBL_ENTRY)&_ZN7S4478C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4478C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4478C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4478C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4478C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4478C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4478C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4478C12v1Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4478C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4478C1D1Ev,_ZThn52_N7S4478C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4478C1D0Ev,_ZThn52_N7S4478C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4478C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4478C1[];
extern  VTBL_ENTRY _ZTV7S4478C1[];
Class_Descriptor cd_S4478C1 = {  "S4478C1", // class name
  bases_S4478C1, 3,
  &(vtc_S4478C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,128), // object size
  NSPAIRA(_ZTI7S4478C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4478C1),15, //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  S3512C4  {
  void *s3512c4f0;
  long double s3512c4f1;
  int s3512c4f2;
  virtual void  v1(); // _ZN7S3512C42v1Ev
  virtual void  v2(); // _ZN7S3512C42v2Ev
  ~S3512C4(); // tgen
  S3512C4(); // tgen
};
//SIG(-1 S3512C4) C1{ v1 v2 Fp FD Fi}


void  S3512C4 ::v1(){vfunc_called(this, "_ZN7S3512C42v1Ev");}
void  S3512C4 ::v2(){vfunc_called(this, "_ZN7S3512C42v2Ev");}
S3512C4 ::~S3512C4(){ note_dtor("S3512C4", this);} // tgen
S3512C4 ::S3512C4(){ note_ctor("S3512C4", this);} // tgen

static void Test_S3512C4()
{
  extern Class_Descriptor cd_S3512C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S3512C4, buf);
    S3512C4 *dp, &lv = *(dp=new (buf) S3512C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3512C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3512C4)");
    check_field_offset(lv, s3512c4f0, ABISELECT(8,4), "S3512C4.s3512c4f0");
    check_field_offset(lv, s3512c4f1, ABISELECT(16,8), "S3512C4.s3512c4f1");
    check_field_offset(lv, s3512c4f2, ABISELECT(32,20), "S3512C4.s3512c4f2");
    test_class_info(&lv, &cd_S3512C4);
    dp->~S3512C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3512C4(Test_S3512C4, "S3512C4", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3512C4C1Ev();
extern void _ZN7S3512C4D1Ev();
Name_Map name_map_S3512C4[] = {
  NSPAIR(_ZN7S3512C4C1Ev),
  NSPAIR(_ZN7S3512C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3512C4[];
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
static  VTBL_ENTRY vtc_S3512C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C4[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
};
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
Class_Descriptor cd_S3512C4 = {  "S3512C4", // class name
  0,0,//no base classes
  &(vtc_S3512C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3512C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3512C4),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  S3512C3  : virtual S3512C4 {
  void *s3512c3f0;
  virtual  ~S3512C3(); // _ZN7S3512C3D2Ev
  virtual void  v3(); // _ZN7S3512C32v3Ev
  virtual void  v4(); // _ZN7S3512C32v4Ev
  virtual void  v5(); // _ZN7S3512C32v5Ev
  virtual void  v6(); // _ZN7S3512C32v6Ev
  virtual void  v7(); // _ZN7S3512C32v7Ev
  virtual void  v8(); // _ZN7S3512C32v8Ev
  S3512C3(); // tgen
};
//SIG(-1 S3512C3) C1{ VBC2{ v7 v8 Fp FD Fi} vd v1 v2 v3 v4 v5 v6 Fp}


 S3512C3 ::~S3512C3(){ note_dtor("S3512C3", this);}
void  S3512C3 ::v3(){vfunc_called(this, "_ZN7S3512C32v3Ev");}
void  S3512C3 ::v4(){vfunc_called(this, "_ZN7S3512C32v4Ev");}
void  S3512C3 ::v5(){vfunc_called(this, "_ZN7S3512C32v5Ev");}
void  S3512C3 ::v6(){vfunc_called(this, "_ZN7S3512C32v6Ev");}
void  S3512C3 ::v7(){vfunc_called(this, "_ZN7S3512C32v7Ev");}
void  S3512C3 ::v8(){vfunc_called(this, "_ZN7S3512C32v8Ev");}
S3512C3 ::S3512C3(){ note_ctor("S3512C3", this);} // tgen

static void Test_S3512C3()
{
  extern Class_Descriptor cd_S3512C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,9)];
    init_test(&cd_S3512C3, buf);
    S3512C3 *dp, &lv = *(dp=new (buf) S3512C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S3512C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3512C3)");
    check_base_class_offset(lv, (S3512C4*), ABISELECT(16,8), "S3512C3");
    check_field_offset(lv, s3512c3f0, ABISELECT(8,4), "S3512C3.s3512c3f0");
    test_class_info(&lv, &cd_S3512C3);
    dp->~S3512C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3512C3(Test_S3512C3, "S3512C3", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S3512C3C1Ev();
extern void _ZN7S3512C3D2Ev();
Name_Map name_map_S3512C3[] = {
  NSPAIR(_ZN7S3512C3C1Ev),
  NSPAIR(_ZN7S3512C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3512C4;
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
static Base_Class bases_S3512C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3512C4,    ABISELECT(16,8), //bcp->offset
    11, //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 _ZTI7S3512C3[];
extern void _ZN7S3512C3D1Ev();
extern void _ZN7S3512C3D0Ev();
extern void _ZN7S3512C32v3Ev();
extern void _ZN7S3512C32v4Ev();
extern void _ZN7S3512C32v5Ev();
extern void _ZN7S3512C32v6Ev();
extern void _ZN7S3512C32v7Ev();
extern void _ZN7S3512C32v8Ev();
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
static  VTBL_ENTRY vtc_S3512C3[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C3[0]),
  (VTBL_ENTRY)&_ZN7S3512C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3512C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v8Ev,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3512C3[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
};
extern VTBL_ENTRY _ZTV7S3512C3[];
static  VTT_ENTRY vtt_S3512C3[] = {
  {&(_ZTV7S3512C3[3]),  3,17},
  {&(_ZTV7S3512C3[15]),  15,17},
};
extern VTBL_ENTRY _ZTI7S3512C3[];
extern  VTBL_ENTRY _ZTV7S3512C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3512C3[];
Class_Descriptor cd_S3512C3 = {  "S3512C3", // class name
  bases_S3512C3, 1,
  &(vtc_S3512C3[0]), // expected_vtbl_contents
  &(vtt_S3512C3[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S3512C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3512C3),17, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3512C3),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  S3512C2  : S3512C3 {
  ::S3512C4 s3512c2f0;
  virtual  ~S3512C2(); // _ZN7S3512C2D2Ev
  virtual void  v9(); // _ZN7S3512C22v9Ev
  virtual void  v10(); // _ZN7S3512C23v10Ev
  S3512C2(); // tgen
};
//SIG(-1 S3512C2) C1{ BC2{ VBC3{ v3 v4 Fp FD Fi} vd v5 v6 v7 v8 v9 v10 Fp} vd v1 v2 FC3}


 S3512C2 ::~S3512C2(){ note_dtor("S3512C2", this);}
void  S3512C2 ::v9(){vfunc_called(this, "_ZN7S3512C22v9Ev");}
void  S3512C2 ::v10(){vfunc_called(this, "_ZN7S3512C23v10Ev");}
S3512C2 ::S3512C2(){ note_ctor("S3512C2", this);} // tgen

static void Test_S3512C2()
{
  extern Class_Descriptor cd_S3512C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,15)];
    init_test(&cd_S3512C2, buf);
    S3512C2 *dp, &lv = *(dp=new (buf) S3512C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S3512C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3512C2)");
    check_base_class_offset(lv, (S3512C4*)(S3512C3*), ABISELECT(64,32), "S3512C2");
    check_base_class_offset(lv, (S3512C3*), 0, "S3512C2");
    check_field_offset(lv, s3512c2f0, ABISELECT(16,8), "S3512C2.s3512c2f0");
    test_class_info(&lv, &cd_S3512C2);
    dp->~S3512C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3512C2(Test_S3512C2, "S3512C2", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN7S3512C2C1Ev();
extern void _ZN7S3512C2D2Ev();
Name_Map name_map_S3512C2[] = {
  NSPAIR(_ZN7S3512C2C1Ev),
  NSPAIR(_ZN7S3512C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3512C4;
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
extern Class_Descriptor cd_S3512C3;
extern VTBL_ENTRY _ZTI7S3512C3[];
extern  VTBL_ENTRY _ZTV7S3512C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3512C3[];
static Base_Class bases_S3512C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3512C4,    ABISELECT(64,32), //bcp->offset
    13, //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_S3512C3,    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 _ZTI7S3512C2[];
extern void _ZN7S3512C2D1Ev();
extern void _ZN7S3512C2D0Ev();
extern void _ZN7S3512C32v3Ev();
extern void _ZN7S3512C32v4Ev();
extern void _ZN7S3512C32v5Ev();
extern void _ZN7S3512C32v6Ev();
extern void _ZN7S3512C32v7Ev();
extern void _ZN7S3512C32v8Ev();
extern void _ZN7S3512C22v9Ev();
extern void _ZN7S3512C23v10Ev();
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
static  VTBL_ENTRY vtc_S3512C2[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C2[0]),
  (VTBL_ENTRY)&_ZN7S3512C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3512C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3512C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3512C23v10Ev,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S3512C2[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
};
extern VTBL_ENTRY _ZTV7S3512C2[];
extern void _ZN7S3512C3D1Ev();
extern void _ZN7S3512C3D0Ev();
extern void _ZN7S3512C32v3Ev();
extern void _ZN7S3512C32v4Ev();
extern void _ZN7S3512C32v5Ev();
extern void _ZN7S3512C32v6Ev();
extern void _ZN7S3512C32v7Ev();
extern void _ZN7S3512C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3512C3__7S3512C2[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C3[0]),
  (VTBL_ENTRY)&_ZN7S3512C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3512C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v8Ev,
};
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3512C4__7S3512C3__7S3512C2[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S3512C3[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
};
static  VTT_ENTRY vtt_S3512C2[] = {
  {&(_ZTV7S3512C2[3]),  3,19},
  {&(_tg__ZTV7S3512C3__7S3512C2[3]),  3,11},
  {&(_tg__ZTV7S3512C4__7S3512C3__7S3512C2[4]),  4,6},
  {&(_ZTV7S3512C2[17]),  17,19},
};
extern VTBL_ENTRY _ZTI7S3512C2[];
extern  VTBL_ENTRY _ZTV7S3512C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3512C2[];
Class_Descriptor cd_S3512C2 = {  "S3512C2", // class name
  bases_S3512C2, 2,
  &(vtc_S3512C2[0]), // expected_vtbl_contents
  &(vtt_S3512C2[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI7S3512C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3512C2),19, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3512C2),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  S3512C6  {
  virtual void  v11(); // _ZN7S3512C63v11Ev
  virtual void  v12(); // _ZN7S3512C63v12Ev
  virtual void  v13(); // _ZN7S3512C63v13Ev
  virtual void  v14(); // _ZN7S3512C63v14Ev
  virtual void  v15(); // _ZN7S3512C63v15Ev
  virtual void  v16(); // _ZN7S3512C63v16Ev
  ~S3512C6(); // tgen
  S3512C6(); // tgen
};
//SIG(-1 S3512C6) C1{ v1 v2 v3 v4 v5 v6}


void  S3512C6 ::v11(){vfunc_called(this, "_ZN7S3512C63v11Ev");}
void  S3512C6 ::v12(){vfunc_called(this, "_ZN7S3512C63v12Ev");}
void  S3512C6 ::v13(){vfunc_called(this, "_ZN7S3512C63v13Ev");}
void  S3512C6 ::v14(){vfunc_called(this, "_ZN7S3512C63v14Ev");}
void  S3512C6 ::v15(){vfunc_called(this, "_ZN7S3512C63v15Ev");}
void  S3512C6 ::v16(){vfunc_called(this, "_ZN7S3512C63v16Ev");}
S3512C6 ::~S3512C6(){ note_dtor("S3512C6", this);} // tgen
S3512C6 ::S3512C6(){ note_ctor("S3512C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3512C6C1Ev();
extern void _ZN7S3512C6D1Ev();
Name_Map name_map_S3512C6[] = {
  NSPAIR(_ZN7S3512C6C1Ev),
  NSPAIR(_ZN7S3512C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3512C6[];
extern void _ZN7S3512C63v11Ev();
extern void _ZN7S3512C63v12Ev();
extern void _ZN7S3512C63v13Ev();
extern void _ZN7S3512C63v14Ev();
extern void _ZN7S3512C63v15Ev();
extern void _ZN7S3512C63v16Ev();
static  VTBL_ENTRY vtc_S3512C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C6[0]),
  (VTBL_ENTRY)&_ZN7S3512C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v12Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v13Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v14Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v15Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v16Ev,
};
extern VTBL_ENTRY _ZTI7S3512C6[];
extern  VTBL_ENTRY _ZTV7S3512C6[];
Class_Descriptor cd_S3512C6 = {  "S3512C6", // class name
  0,0,//no base classes
  &(vtc_S3512C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3512C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3512C6),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  S3512C9  : S3512C4 {
  virtual void  v17(); // _ZN7S3512C93v17Ev
  virtual void  v18(); // _ZN7S3512C93v18Ev
  ~S3512C9(); // tgen
  S3512C9(); // tgen
};
//SIG(-1 S3512C9) C1{ BC2{ v3 v4 Fp FD Fi} v1 v2}


void  S3512C9 ::v17(){vfunc_called(this, "_ZN7S3512C93v17Ev");}
void  S3512C9 ::v18(){vfunc_called(this, "_ZN7S3512C93v18Ev");}
S3512C9 ::~S3512C9(){ note_dtor("S3512C9", this);} // tgen
S3512C9 ::S3512C9(){ note_ctor("S3512C9", this);} // tgen

static void Test_S3512C9()
{
  extern Class_Descriptor cd_S3512C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S3512C9, buf);
    S3512C9 *dp, &lv = *(dp=new (buf) S3512C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3512C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3512C9)");
    check_base_class_offset(lv, (S3512C4*), 0, "S3512C9");
    test_class_info(&lv, &cd_S3512C9);
    dp->~S3512C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3512C9(Test_S3512C9, "S3512C9", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3512C9C1Ev();
extern void _ZN7S3512C9D1Ev();
Name_Map name_map_S3512C9[] = {
  NSPAIR(_ZN7S3512C9C1Ev),
  NSPAIR(_ZN7S3512C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3512C4;
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
static Base_Class bases_S3512C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3512C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3512C9[];
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
extern void _ZN7S3512C93v17Ev();
extern void _ZN7S3512C93v18Ev();
static  VTBL_ENTRY vtc_S3512C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C9[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v18Ev,
};
extern VTBL_ENTRY _ZTI7S3512C9[];
extern  VTBL_ENTRY _ZTV7S3512C9[];
Class_Descriptor cd_S3512C9 = {  "S3512C9", // class name
  bases_S3512C9, 1,
  &(vtc_S3512C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3512C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3512C9),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  S3512C8  : S3512C9 , S3512C4 {
  virtual void  v19(); // _ZN7S3512C83v19Ev
  virtual void  v20(); // _ZN7S3512C83v20Ev
  virtual void  v21(); // _ZN7S3512C83v21Ev
  virtual void  v22(); // _ZN7S3512C83v22Ev
  ~S3512C8(); // tgen
  S3512C8(); // tgen
};
//SIG(-1 S3512C8) C1{ BC2{ BC3{ v5 v6 Fp FD Fi} v7 v8} BC3 v1 v2 v3 v4}


void  S3512C8 ::v19(){vfunc_called(this, "_ZN7S3512C83v19Ev");}
void  S3512C8 ::v20(){vfunc_called(this, "_ZN7S3512C83v20Ev");}
void  S3512C8 ::v21(){vfunc_called(this, "_ZN7S3512C83v21Ev");}
void  S3512C8 ::v22(){vfunc_called(this, "_ZN7S3512C83v22Ev");}
S3512C8 ::~S3512C8(){ note_dtor("S3512C8", this);} // tgen
S3512C8 ::S3512C8(){ note_ctor("S3512C8", this);} // tgen

static void Test_S3512C8()
{
  extern Class_Descriptor cd_S3512C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S3512C8, buf);
    S3512C8 *dp, &lv = *(dp=new (buf) S3512C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S3512C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3512C8)");
    check_base_class_offset(lv, (S3512C4*)(S3512C9*), 0, "S3512C8");
    check_base_class_offset(lv, (S3512C9*), 0, "S3512C8");
    /*is_ambiguous_... S3512C8::S3512C4 */ AMB_check_base_class_offset(lv, (S3512C4*), ABISELECT(48,24), "S3512C8");
    test_class_info(&lv, &cd_S3512C8);
    dp->~S3512C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3512C8(Test_S3512C8, "S3512C8", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN7S3512C8C1Ev();
extern void _ZN7S3512C8D1Ev();
Name_Map name_map_S3512C8[] = {
  NSPAIR(_ZN7S3512C8C1Ev),
  NSPAIR(_ZN7S3512C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3512C4;
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
extern Class_Descriptor cd_S3512C9;
extern VTBL_ENTRY _ZTI7S3512C9[];
extern  VTBL_ENTRY _ZTV7S3512C9[];
extern Class_Descriptor cd_S3512C4;
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
static Base_Class bases_S3512C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3512C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3512C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3512C4,    ABISELECT(48,24), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3512C8[];
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
extern void _ZN7S3512C93v17Ev();
extern void _ZN7S3512C93v18Ev();
extern void _ZN7S3512C83v19Ev();
extern void _ZN7S3512C83v20Ev();
extern void _ZN7S3512C83v21Ev();
extern void _ZN7S3512C83v22Ev();
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
static  VTBL_ENTRY vtc_S3512C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C8[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v18Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v20Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v21Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v22Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3512C8[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
};
extern VTBL_ENTRY _ZTI7S3512C8[];
extern  VTBL_ENTRY _ZTV7S3512C8[];
Class_Descriptor cd_S3512C8 = {  "S3512C8", // class name
  bases_S3512C8, 3,
  &(vtc_S3512C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI7S3512C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3512C8),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  S3512C12  {
  ::S1400C17_nt s3512c12f0;
  void *s3512c12f1;
  virtual void  v23(); // _ZN8S3512C123v23Ev
  ~S3512C12(); // tgen
  S3512C12(); // tgen
};
//SIG(-1 S3512C12) C1{ v1 FC2{ v2 v3} Fp}


void  S3512C12 ::v23(){vfunc_called(this, "_ZN8S3512C123v23Ev");}
S3512C12 ::~S3512C12(){ note_dtor("S3512C12", this);} // tgen
S3512C12 ::S3512C12(){ note_ctor("S3512C12", this);} // tgen

static void Test_S3512C12()
{
  extern Class_Descriptor cd_S3512C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3512C12, buf);
    S3512C12 *dp, &lv = *(dp=new (buf) S3512C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3512C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3512C12)");
    check_field_offset(lv, s3512c12f0, ABISELECT(8,4), "S3512C12.s3512c12f0");
    check_field_offset(lv, s3512c12f1, ABISELECT(16,8), "S3512C12.s3512c12f1");
    test_class_info(&lv, &cd_S3512C12);
    dp->~S3512C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3512C12(Test_S3512C12, "S3512C12", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S3512C12C1Ev();
extern void _ZN8S3512C12D1Ev();
Name_Map name_map_S3512C12[] = {
  NSPAIR(_ZN8S3512C12C1Ev),
  NSPAIR(_ZN8S3512C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3512C12[];
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY vtc_S3512C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3512C12[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
extern VTBL_ENTRY _ZTI8S3512C12[];
extern  VTBL_ENTRY _ZTV8S3512C12[];
Class_Descriptor cd_S3512C12 = {  "S3512C12", // class name
  0,0,//no base classes
  &(vtc_S3512C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S3512C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3512C12),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  S3512C11  : virtual S3512C12 {
  virtual void  v24(); // _ZN8S3512C113v24Ev
  ~S3512C11(); // tgen
  S3512C11(); // tgen
};
//SIG(-1 S3512C11) C1{ VBC2{ v2 FC3{ v3 v4} Fp} v1}


void  S3512C11 ::v24(){vfunc_called(this, "_ZN8S3512C113v24Ev");}
S3512C11 ::~S3512C11(){ note_dtor("S3512C11", this);} // tgen
S3512C11 ::S3512C11(){ note_ctor("S3512C11", this);} // tgen

static void Test_S3512C11()
{
  extern Class_Descriptor cd_S3512C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3512C11, buf);
    S3512C11 *dp, &lv = *(dp=new (buf) S3512C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3512C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3512C11)");
    check_base_class_offset(lv, (S3512C12*), ABISELECT(8,4), "S3512C11");
    test_class_info(&lv, &cd_S3512C11);
    dp->~S3512C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3512C11(Test_S3512C11, "S3512C11", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S3512C11C1Ev();
extern void _ZN8S3512C11D1Ev();
Name_Map name_map_S3512C11[] = {
  NSPAIR(_ZN8S3512C11C1Ev),
  NSPAIR(_ZN8S3512C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3512C12;
extern VTBL_ENTRY _ZTI8S3512C12[];
extern  VTBL_ENTRY _ZTV8S3512C12[];
static Base_Class bases_S3512C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3512C12,    ABISELECT(8,4), //bcp->offset
    4, //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 _ZTI8S3512C11[];
extern void _ZN8S3512C113v24Ev();
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY vtc_S3512C11[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3512C11[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S3512C11[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
extern VTBL_ENTRY _ZTV8S3512C11[];
static  VTT_ENTRY vtt_S3512C11[] = {
  {&(_ZTV8S3512C11[3]),  3,8},
  {&(_ZTV8S3512C11[7]),  7,8},
};
extern VTBL_ENTRY _ZTI8S3512C11[];
extern  VTBL_ENTRY _ZTV8S3512C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3512C11[];
Class_Descriptor cd_S3512C11 = {  "S3512C11", // class name
  bases_S3512C11, 1,
  &(vtc_S3512C11[0]), // expected_vtbl_contents
  &(vtt_S3512C11[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S3512C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S3512C11),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3512C11),2, //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  S3512C10  : virtual S3512C11 {
  virtual void  v25(); // _ZN8S3512C103v25Ev
  virtual void  v26(); // _ZN8S3512C103v26Ev
  virtual void  v27(); // _ZN8S3512C103v27Ev
  ~S3512C10(); // tgen
  S3512C10(); // tgen
};
//SIG(-1 S3512C10) C1{ VBC2{ VBC3{ v4 FC4{ v6 v7} Fp} v5} v1 v2 v3}


void  S3512C10 ::v25(){vfunc_called(this, "_ZN8S3512C103v25Ev");}
void  S3512C10 ::v26(){vfunc_called(this, "_ZN8S3512C103v26Ev");}
void  S3512C10 ::v27(){vfunc_called(this, "_ZN8S3512C103v27Ev");}
S3512C10 ::~S3512C10(){ note_dtor("S3512C10", this);} // tgen
S3512C10 ::S3512C10(){ note_ctor("S3512C10", this);} // tgen

static void Test_S3512C10()
{
  extern Class_Descriptor cd_S3512C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3512C10, buf);
    S3512C10 *dp, &lv = *(dp=new (buf) S3512C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3512C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3512C10)");
    check_base_class_offset(lv, (S3512C12*)(S3512C11*), ABISELECT(8,4), "S3512C10");
    check_base_class_offset(lv, (S3512C11*), 0, "S3512C10");
    test_class_info(&lv, &cd_S3512C10);
    dp->~S3512C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3512C10(Test_S3512C10, "S3512C10", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S3512C10C1Ev();
extern void _ZN8S3512C10D1Ev();
Name_Map name_map_S3512C10[] = {
  NSPAIR(_ZN8S3512C10C1Ev),
  NSPAIR(_ZN8S3512C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3512C12;
extern VTBL_ENTRY _ZTI8S3512C12[];
extern  VTBL_ENTRY _ZTV8S3512C12[];
extern Class_Descriptor cd_S3512C11;
extern VTBL_ENTRY _ZTI8S3512C11[];
extern  VTBL_ENTRY _ZTV8S3512C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3512C11[];
static Base_Class bases_S3512C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3512C12,    ABISELECT(8,4), //bcp->offset
    9, //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
    1, //immediately_derived
  0, 1},
  {&cd_S3512C11,    0, //bcp->offset
    -1, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S3512C10[];
extern void _ZN8S3512C113v24Ev();
extern void _ZN8S3512C103v25Ev();
extern void _ZN8S3512C103v26Ev();
extern void _ZN8S3512C103v27Ev();
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY vtc_S3512C10[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3512C10[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v25Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v26Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v27Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S3512C10[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
extern VTBL_ENTRY _ZTV8S3512C10[];
extern void _ZN8S3512C113v24Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C11__8S3512C10[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3512C11[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
};
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C12__8S3512C11__8S3512C10[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S3512C11[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
static  VTT_ENTRY vtt_S3512C10[] = {
  {&(_ZTV8S3512C10[5]),  5,13},
  {&(_ZTV8S3512C10[5]),  5,13},
  {&(_ZTV8S3512C10[12]),  12,13},
  {&(_tg__ZTV8S3512C11__8S3512C10[3]),  3,4},
  {&(_tg__ZTV8S3512C12__8S3512C11__8S3512C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S3512C10[];
extern  VTBL_ENTRY _ZTV8S3512C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3512C10[];
Class_Descriptor cd_S3512C10 = {  "S3512C10", // class name
  bases_S3512C10, 2,
  &(vtc_S3512C10[0]), // expected_vtbl_contents
  &(vtt_S3512C10[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S3512C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S3512C10),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3512C10),5, //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  S3512C7  : S3512C8 , virtual S3512C10 {
  virtual void  v28(); // _ZN7S3512C73v28Ev
  virtual void  v29(); // _ZN7S3512C73v29Ev
  virtual void  v30(); // _ZN7S3512C73v30Ev
  ~S3512C7(); // tgen
  S3512C7(); // tgen
};
//SIG(-1 S3512C7) C1{ BC2{ BC3{ BC4{ v4 v5 Fp FD Fi} v6 v7} BC4 v8 v9 v10 v11} VBC5{ VBC6{ VBC7{ v12 FC8{ v17 v18} Fp} v13} v14 v15 v16} v1 v2 v3}


void  S3512C7 ::v28(){vfunc_called(this, "_ZN7S3512C73v28Ev");}
void  S3512C7 ::v29(){vfunc_called(this, "_ZN7S3512C73v29Ev");}
void  S3512C7 ::v30(){vfunc_called(this, "_ZN7S3512C73v30Ev");}
S3512C7 ::~S3512C7(){ note_dtor("S3512C7", this);} // tgen
S3512C7 ::S3512C7(){ note_ctor("S3512C7", this);} // tgen

static void Test_S3512C7()
{
  extern Class_Descriptor cd_S3512C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,17)];
    init_test(&cd_S3512C7, buf);
    S3512C7 *dp, &lv = *(dp=new (buf) S3512C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S3512C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3512C7)");
    check_base_class_offset(lv, (S3512C4*)(S3512C9*)(S3512C8*), 0, "S3512C7");
    check_base_class_offset(lv, (S3512C9*)(S3512C8*), 0, "S3512C7");
    /*is_ambiguous_... S3512C8::S3512C4 */ AMB_check_base_class_offset(lv, (S3512C4*)(S3512C8*), ABISELECT(48,24), "S3512C7");
    check_base_class_offset(lv, (S3512C8*), 0, "S3512C7");
    check_base_class_offset(lv, (S3512C12*)(S3512C11*), ABISELECT(96,52), "S3512C7");
    check_base_class_offset(lv, (S3512C11*)(S3512C10*), ABISELECT(88,48), "S3512C7");
    check_base_class_offset(lv, (S3512C10*), ABISELECT(88,48), "S3512C7");
    test_class_info(&lv, &cd_S3512C7);
    dp->~S3512C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3512C7(Test_S3512C7, "S3512C7", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN7S3512C7C1Ev();
extern void _ZN7S3512C7D1Ev();
Name_Map name_map_S3512C7[] = {
  NSPAIR(_ZN7S3512C7C1Ev),
  NSPAIR(_ZN7S3512C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3512C4;
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
extern Class_Descriptor cd_S3512C9;
extern VTBL_ENTRY _ZTI7S3512C9[];
extern  VTBL_ENTRY _ZTV7S3512C9[];
extern Class_Descriptor cd_S3512C4;
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
extern Class_Descriptor cd_S3512C8;
extern VTBL_ENTRY _ZTI7S3512C8[];
extern  VTBL_ENTRY _ZTV7S3512C8[];
extern Class_Descriptor cd_S3512C12;
extern VTBL_ENTRY _ZTI8S3512C12[];
extern  VTBL_ENTRY _ZTV8S3512C12[];
extern Class_Descriptor cd_S3512C11;
extern VTBL_ENTRY _ZTI8S3512C11[];
extern  VTBL_ENTRY _ZTV8S3512C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3512C11[];
extern Class_Descriptor cd_S3512C10;
extern VTBL_ENTRY _ZTI8S3512C10[];
extern  VTBL_ENTRY _ZTV8S3512C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3512C10[];
static Base_Class bases_S3512C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3512C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S3512C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3512C4,    ABISELECT(48,24), //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
    6, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3512C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3512C12,    ABISELECT(96,52), //bcp->offset
    32, //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
    5, //immediately_derived
  0, 1},
  {&cd_S3512C11,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3512C10,    ABISELECT(88,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    8, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S3512C7[];
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
extern void _ZN7S3512C93v17Ev();
extern void _ZN7S3512C93v18Ev();
extern void _ZN7S3512C83v19Ev();
extern void _ZN7S3512C83v20Ev();
extern void _ZN7S3512C83v21Ev();
extern void _ZN7S3512C83v22Ev();
extern void _ZN7S3512C73v28Ev();
extern void _ZN7S3512C73v29Ev();
extern void _ZN7S3512C73v30Ev();
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
extern void _ZN8S3512C113v24Ev();
extern void _ZN8S3512C103v25Ev();
extern void _ZN8S3512C103v26Ev();
extern void _ZN8S3512C103v27Ev();
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY vtc_S3512C7[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C7[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v18Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v20Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v21Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v22Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v28Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v30Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3512C7[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S3512C7[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v25Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v26Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v27Ev,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3512C7[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
extern VTBL_ENTRY _ZTV7S3512C7[];
extern void _ZN8S3512C113v24Ev();
extern void _ZN8S3512C103v25Ev();
extern void _ZN8S3512C103v26Ev();
extern void _ZN8S3512C103v27Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C10__7S3512C7[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3512C10[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v25Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v26Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v27Ev,
};
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C12__8S3512C10__7S3512C7[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S3512C10[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
extern void _ZN8S3512C113v24Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C11__7S3512C7[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3512C11[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
};
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C12__8S3512C11__7S3512C7[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S3512C11[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
static  VTT_ENTRY vtt_S3512C7[] = {
  {&(_ZTV7S3512C7[5]),  5,36},
  {&(_ZTV7S3512C7[28]),  28,36},
  {&(_ZTV7S3512C7[28]),  28,36},
  {&(_ZTV7S3512C7[35]),  35,36},
  {&(_tg__ZTV8S3512C10__7S3512C7[5]),  5,9},
  {&(_tg__ZTV8S3512C10__7S3512C7[5]),  5,9},
  {&(_tg__ZTV8S3512C12__8S3512C10__7S3512C7[3]),  3,4},
  {&(_tg__ZTV8S3512C11__7S3512C7[3]),  3,4},
  {&(_tg__ZTV8S3512C12__8S3512C11__7S3512C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3512C7[];
extern  VTBL_ENTRY _ZTV7S3512C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3512C7[];
Class_Descriptor cd_S3512C7 = {  "S3512C7", // class name
  bases_S3512C7, 7,
  &(vtc_S3512C7[0]), // expected_vtbl_contents
  &(vtt_S3512C7[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI7S3512C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3512C7),36, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3512C7),9, //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  S3512C5  : S3512C6 , virtual S3512C7 {
  void *s3512c5f0;
  __tsi64 s3512c5f1:5;
  virtual  ~S3512C5(); // _ZN7S3512C5D2Ev
  virtual void  v31(); // _ZN7S3512C53v31Ev
  S3512C5(); // tgen
};
//SIG(-1 S3512C5) C1{ BC2{ v2 v3 v4 v5 v6 v7} VBC3{ BC4{ BC5{ BC6{ v8 v9 Fp FD Fi} v10 v11} BC6 v12 v13 v14 v15} VBC7{ VBC8{ VBC9{ v16 FC10{ v24 v25} Fp} v17} v18 v19 v20} v21 v22 v23} vd v1 Fp FL:5}


 S3512C5 ::~S3512C5(){ note_dtor("S3512C5", this);}
void  S3512C5 ::v31(){vfunc_called(this, "_ZN7S3512C53v31Ev");}
S3512C5 ::S3512C5(){ note_ctor("S3512C5", this);} // tgen

static void Test_S3512C5()
{
  extern Class_Descriptor cd_S3512C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,20)];
    init_test(&cd_S3512C5, buf);
    S3512C5 *dp, &lv = *(dp=new (buf) S3512C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,76), "sizeof(S3512C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3512C5)");
    check_base_class_offset(lv, (S3512C6*), 0, "S3512C5");
    check_base_class_offset(lv, (S3512C4*)(S3512C9*)(S3512C8*)(S3512C7*), ABISELECT(32,12), "S3512C5");
    check_base_class_offset(lv, (S3512C9*)(S3512C8*)(S3512C7*), ABISELECT(32,12), "S3512C5");
    /*is_ambiguous_... S3512C8::S3512C4 */ AMB_check_base_class_offset(lv, (S3512C4*)(S3512C8*)(S3512C7*), ABISELECT(80,36), "S3512C5");
    check_base_class_offset(lv, (S3512C8*)(S3512C7*), ABISELECT(32,12), "S3512C5");
    check_base_class_offset(lv, (S3512C12*)(S3512C11*), ABISELECT(128,64), "S3512C5");
    check_base_class_offset(lv, (S3512C11*)(S3512C10*), ABISELECT(120,60), "S3512C5");
    check_base_class_offset(lv, (S3512C10*)(S3512C7*), ABISELECT(120,60), "S3512C5");
    check_base_class_offset(lv, (S3512C7*), ABISELECT(32,12), "S3512C5");
    check_field_offset(lv, s3512c5f0, ABISELECT(8,4), "S3512C5.s3512c5f0");
    set_bf_and_test(lv, s3512c5f1, ABISELECT(16,8), 0, 5, 1, "S3512C5");
    set_bf_and_test(lv, s3512c5f1, ABISELECT(16,8), 0, 5, hide_sll(1LL<<4), "S3512C5");
    test_class_info(&lv, &cd_S3512C5);
    dp->~S3512C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3512C5(Test_S3512C5, "S3512C5", ABISELECT(160,76));

#else // __cplusplus

extern void _ZN7S3512C5C1Ev();
extern void _ZN7S3512C5D2Ev();
Name_Map name_map_S3512C5[] = {
  NSPAIR(_ZN7S3512C5C1Ev),
  NSPAIR(_ZN7S3512C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3512C6;
extern VTBL_ENTRY _ZTI7S3512C6[];
extern  VTBL_ENTRY _ZTV7S3512C6[];
extern Class_Descriptor cd_S3512C4;
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
extern Class_Descriptor cd_S3512C9;
extern VTBL_ENTRY _ZTI7S3512C9[];
extern  VTBL_ENTRY _ZTV7S3512C9[];
extern Class_Descriptor cd_S3512C4;
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
extern Class_Descriptor cd_S3512C8;
extern VTBL_ENTRY _ZTI7S3512C8[];
extern  VTBL_ENTRY _ZTV7S3512C8[];
extern Class_Descriptor cd_S3512C12;
extern VTBL_ENTRY _ZTI8S3512C12[];
extern  VTBL_ENTRY _ZTV8S3512C12[];
extern Class_Descriptor cd_S3512C11;
extern VTBL_ENTRY _ZTI8S3512C11[];
extern  VTBL_ENTRY _ZTV8S3512C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3512C11[];
extern Class_Descriptor cd_S3512C10;
extern VTBL_ENTRY _ZTI8S3512C10[];
extern  VTBL_ENTRY _ZTV8S3512C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3512C10[];
extern Class_Descriptor cd_S3512C7;
extern VTBL_ENTRY _ZTI7S3512C7[];
extern  VTBL_ENTRY _ZTV7S3512C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3512C7[];
static Base_Class bases_S3512C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3512C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3512C4,    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
    4, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3512C9,    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
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3512C4,    ABISELECT(80,36), //bcp->offset
    42, //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
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3512C8,    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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3512C12,    ABISELECT(128,64), //bcp->offset
    58, //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
    6, //immediately_derived
  0, 1},
  {&cd_S3512C11,    ABISELECT(120,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3512C10,    ABISELECT(120,60), //bcp->offset
    46, //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
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3512C7,    ABISELECT(32,12), //bcp->offset
    15, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3512C5[];
extern void _ZN7S3512C63v11Ev();
extern void _ZN7S3512C63v12Ev();
extern void _ZN7S3512C63v13Ev();
extern void _ZN7S3512C63v14Ev();
extern void _ZN7S3512C63v15Ev();
extern void _ZN7S3512C63v16Ev();
extern void _ZN7S3512C5D1Ev();
extern void _ZN7S3512C5D0Ev();
extern void _ZN7S3512C53v31Ev();
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
extern void _ZN7S3512C93v17Ev();
extern void _ZN7S3512C93v18Ev();
extern void _ZN7S3512C83v19Ev();
extern void _ZN7S3512C83v20Ev();
extern void _ZN7S3512C83v21Ev();
extern void _ZN7S3512C83v22Ev();
extern void _ZN7S3512C73v28Ev();
extern void _ZN7S3512C73v29Ev();
extern void _ZN7S3512C73v30Ev();
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
extern void _ZN8S3512C113v24Ev();
extern void _ZN8S3512C103v25Ev();
extern void _ZN8S3512C103v26Ev();
extern void _ZN8S3512C103v27Ev();
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY vtc_S3512C5[] = {
  ABISELECT(128,64),
  ABISELECT(120,60),
  ABISELECT(120,60),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C5[0]),
  (VTBL_ENTRY)&_ZN7S3512C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v12Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v13Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v14Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v15Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3512C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3512C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3512C53v31Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S3512C5[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v18Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v20Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v21Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v22Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v28Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v30Ev,
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI7S3512C5[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S3512C5[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v25Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v26Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v27Ev,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S3512C5[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
extern VTBL_ENTRY _ZTV7S3512C5[];
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
extern void _ZN7S3512C93v17Ev();
extern void _ZN7S3512C93v18Ev();
extern void _ZN7S3512C83v19Ev();
extern void _ZN7S3512C83v20Ev();
extern void _ZN7S3512C83v21Ev();
extern void _ZN7S3512C83v22Ev();
extern void _ZN7S3512C73v28Ev();
extern void _ZN7S3512C73v29Ev();
extern void _ZN7S3512C73v30Ev();
static  VTBL_ENTRY _tg__ZTV7S3512C7__7S3512C5[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C7[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v18Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v20Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v21Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v22Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v28Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v30Ev,
};
extern void _ZN8S3512C113v24Ev();
extern void _ZN8S3512C103v25Ev();
extern void _ZN8S3512C103v26Ev();
extern void _ZN8S3512C103v27Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C10__7S3512C7__7S3512C5[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S3512C7[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v25Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v26Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v27Ev,
};
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C12__7S3512C7__7S3512C5[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3512C7[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
extern void _ZN8S3512C113v24Ev();
extern void _ZN8S3512C103v25Ev();
extern void _ZN8S3512C103v26Ev();
extern void _ZN8S3512C103v27Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C10__7S3512C5[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3512C10[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v25Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v26Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v27Ev,
};
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C12__8S3512C10__7S3512C5[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S3512C10[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
extern void _ZN8S3512C113v24Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C11__7S3512C5[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3512C11[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
};
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C12__8S3512C11__7S3512C5[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S3512C11[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
static  VTT_ENTRY vtt_S3512C5[] = {
  {&(_ZTV7S3512C5[6]),  6,62},
  {&(_ZTV7S3512C5[31]),  31,62},
  {&(_ZTV7S3512C5[44]),  44,62},
  {&(_ZTV7S3512C5[54]),  54,62},
  {&(_ZTV7S3512C5[54]),  54,62},
  {&(_ZTV7S3512C5[61]),  61,62},
  {&(_tg__ZTV7S3512C7__7S3512C5[5]),  5,16},
  {&(_tg__ZTV8S3512C10__7S3512C7__7S3512C5[8]),  8,12},
  {&(_tg__ZTV8S3512C10__7S3512C7__7S3512C5[8]),  8,12},
  {&(_tg__ZTV8S3512C12__7S3512C7__7S3512C5[3]),  3,4},
  {&(_tg__ZTV8S3512C10__7S3512C5[5]),  5,9},
  {&(_tg__ZTV8S3512C10__7S3512C5[5]),  5,9},
  {&(_tg__ZTV8S3512C12__8S3512C10__7S3512C5[3]),  3,4},
  {&(_tg__ZTV8S3512C11__7S3512C5[3]),  3,4},
  {&(_tg__ZTV8S3512C12__8S3512C11__7S3512C5[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3512C5[];
extern  VTBL_ENTRY _ZTV7S3512C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3512C5[];
Class_Descriptor cd_S3512C5 = {  "S3512C5", // class name
  bases_S3512C5, 9,
  &(vtc_S3512C5[0]), // expected_vtbl_contents
  &(vtt_S3512C5[0]), // expected_vtt_contents
  ABISELECT(160,76), // object size
  NSPAIRA(_ZTI7S3512C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3512C5),62, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3512C5),15, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3512C1  : S3512C2 , S3512C5 {
  char s3512c1f0;
  ~S3512C1(); // tgen
  S3512C1(); // tgen
};
//SIG(1 S3512C1) C1{ BC2{ BC3{ VBC4{ v1 v2 Fp FD Fi} vd v3 v4 v5 v6 v7 v8 Fp} vd v9 v10 FC4} BC5{ BC6{ v11 v12 v13 v14 v15 v16} VBC7{ BC8{ BC9{ BC4 v17 v18} BC4 v19 v20 v21 v22} VBC10{ VBC11{ VBC12{ v23 FC13{ v32 v33} Fp} v24} v25 v26 v27} v28 v29 v30} vd v31 Fp FL:5} Fc}


S3512C1 ::~S3512C1(){ note_dtor("S3512C1", this);} // tgen
S3512C1 ::S3512C1(){ note_ctor("S3512C1", this);} // tgen

static void Test_S3512C1()
{
  extern Class_Descriptor cd_S3512C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,34)];
    init_test(&cd_S3512C1, buf);
    S3512C1 *dp, &lv = *(dp=new (buf) S3512C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,132), "sizeof(S3512C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3512C1)");
    check_base_class_offset(lv, (S3512C4*)(S3512C3*)(S3512C2*), ABISELECT(96,44), "S3512C1");
    check_base_class_offset(lv, (S3512C3*)(S3512C2*), 0, "S3512C1");
    check_base_class_offset(lv, (S3512C2*), 0, "S3512C1");
    check_base_class_offset(lv, (S3512C6*)(S3512C5*), ABISELECT(64,32), "S3512C1");
    check_base_class_offset(lv, (S3512C4*)(S3512C9*)(S3512C8*)(S3512C7*), ABISELECT(144,68), "S3512C1");
    check_base_class_offset(lv, (S3512C9*)(S3512C8*)(S3512C7*), ABISELECT(144,68), "S3512C1");
    /*is_ambiguous_... S3512C8::S3512C4 */ AMB_check_base_class_offset(lv, (S3512C4*)(S3512C8*)(S3512C7*), ABISELECT(192,92), "S3512C1");
    check_base_class_offset(lv, (S3512C8*)(S3512C7*), ABISELECT(144,68), "S3512C1");
    check_base_class_offset(lv, (S3512C12*)(S3512C11*), ABISELECT(240,120), "S3512C1");
    check_base_class_offset(lv, (S3512C11*)(S3512C10*), ABISELECT(232,116), "S3512C1");
    check_base_class_offset(lv, (S3512C10*)(S3512C7*), ABISELECT(232,116), "S3512C1");
    check_base_class_offset(lv, (S3512C7*)(S3512C5*), ABISELECT(144,68), "S3512C1");
    check_base_class_offset(lv, (S3512C5*), ABISELECT(64,32), "S3512C1");
    check_field_offset(lv, s3512c1f0, ABISELECT(81,41), "S3512C1.s3512c1f0");
    test_class_info(&lv, &cd_S3512C1);
    dp->~S3512C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3512C1(Test_S3512C1, "S3512C1", ABISELECT(272,132));

#else // __cplusplus

extern void _ZN7S3512C1C1Ev();
extern void _ZN7S3512C1D1Ev();
Name_Map name_map_S3512C1[] = {
  NSPAIR(_ZN7S3512C1C1Ev),
  NSPAIR(_ZN7S3512C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3512C4;
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
extern Class_Descriptor cd_S3512C3;
extern VTBL_ENTRY _ZTI7S3512C3[];
extern  VTBL_ENTRY _ZTV7S3512C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3512C3[];
extern Class_Descriptor cd_S3512C2;
extern VTBL_ENTRY _ZTI7S3512C2[];
extern  VTBL_ENTRY _ZTV7S3512C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3512C2[];
extern Class_Descriptor cd_S3512C6;
extern VTBL_ENTRY _ZTI7S3512C6[];
extern  VTBL_ENTRY _ZTV7S3512C6[];
extern Class_Descriptor cd_S3512C4;
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
extern Class_Descriptor cd_S3512C9;
extern VTBL_ENTRY _ZTI7S3512C9[];
extern  VTBL_ENTRY _ZTV7S3512C9[];
extern Class_Descriptor cd_S3512C4;
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
extern Class_Descriptor cd_S3512C8;
extern VTBL_ENTRY _ZTI7S3512C8[];
extern  VTBL_ENTRY _ZTV7S3512C8[];
extern Class_Descriptor cd_S3512C12;
extern VTBL_ENTRY _ZTI8S3512C12[];
extern  VTBL_ENTRY _ZTV8S3512C12[];
extern Class_Descriptor cd_S3512C11;
extern VTBL_ENTRY _ZTI8S3512C11[];
extern  VTBL_ENTRY _ZTV8S3512C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3512C11[];
extern Class_Descriptor cd_S3512C10;
extern VTBL_ENTRY _ZTI8S3512C10[];
extern  VTBL_ENTRY _ZTV8S3512C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3512C10[];
extern Class_Descriptor cd_S3512C7;
extern VTBL_ENTRY _ZTI7S3512C7[];
extern  VTBL_ENTRY _ZTV7S3512C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3512C7[];
extern Class_Descriptor cd_S3512C5;
extern VTBL_ENTRY _ZTI7S3512C5[];
extern  VTBL_ENTRY _ZTV7S3512C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3512C5[];
static Base_Class bases_S3512C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3512C4,    ABISELECT(96,44), //bcp->offset
    32, //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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3512C3,    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
    10, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3512C2,    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
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3512C6,    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
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3512C4,    ABISELECT(144,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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3512C9,    ABISELECT(144,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
    7, //immediately_derived
  0, 0},
  {&cd_S3512C4,    ABISELECT(192,92), //bcp->offset
    65, //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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3512C8,    ABISELECT(144,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
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3512C12,    ABISELECT(240,120), //bcp->offset
    81, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3512C11,    ABISELECT(232,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3512C10,    ABISELECT(232,116), //bcp->offset
    69, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S3512C7,    ABISELECT(144,68), //bcp->offset
    38, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3512C5,    ABISELECT(64,32), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3512C1[];
extern void _ZN7S3512C1D1Ev();
extern void _ZN7S3512C1D0Ev();
extern void _ZN7S3512C32v3Ev();
extern void _ZN7S3512C32v4Ev();
extern void _ZN7S3512C32v5Ev();
extern void _ZN7S3512C32v6Ev();
extern void _ZN7S3512C32v7Ev();
extern void _ZN7S3512C32v8Ev();
extern void _ZN7S3512C22v9Ev();
extern void _ZN7S3512C23v10Ev();
extern void _ZN7S3512C63v11Ev();
extern void _ZN7S3512C63v12Ev();
extern void _ZN7S3512C63v13Ev();
extern void _ZN7S3512C63v14Ev();
extern void _ZN7S3512C63v15Ev();
extern void _ZN7S3512C63v16Ev();
extern void ABISELECT(_ZThn64_N7S3512C1D1Ev,_ZThn32_N7S3512C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S3512C1D0Ev,_ZThn32_N7S3512C1D0Ev)();
extern void _ZN7S3512C53v31Ev();
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
extern void _ZN7S3512C93v17Ev();
extern void _ZN7S3512C93v18Ev();
extern void _ZN7S3512C83v19Ev();
extern void _ZN7S3512C83v20Ev();
extern void _ZN7S3512C83v21Ev();
extern void _ZN7S3512C83v22Ev();
extern void _ZN7S3512C73v28Ev();
extern void _ZN7S3512C73v29Ev();
extern void _ZN7S3512C73v30Ev();
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
extern void _ZN8S3512C113v24Ev();
extern void _ZN8S3512C103v25Ev();
extern void _ZN8S3512C103v26Ev();
extern void _ZN8S3512C103v27Ev();
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY vtc_S3512C1[] = {
  ABISELECT(240,120),
  ABISELECT(232,116),
  ABISELECT(232,116),
  ABISELECT(144,68),
  ABISELECT(96,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C1[0]),
  (VTBL_ENTRY)&_ZN7S3512C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3512C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3512C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3512C23v10Ev,
  ABISELECT(176,88),
  ABISELECT(168,84),
  ABISELECT(168,84),
  ABISELECT(80,36),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S3512C1[0]),
  (VTBL_ENTRY)&_ZN7S3512C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v12Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v13Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v14Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v15Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S3512C1D1Ev,_ZThn32_N7S3512C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S3512C1D0Ev,_ZThn32_N7S3512C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3512C53v31Ev,
  0,
  0,
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI7S3512C1[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-144,-68),
  (VTBL_ENTRY)&(_ZTI7S3512C1[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v18Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v20Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v21Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v22Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v28Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v30Ev,
  ABISELECT(-192,-92),
  (VTBL_ENTRY)&(_ZTI7S3512C1[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI7S3512C1[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v25Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v26Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v27Ev,
  0,
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI7S3512C1[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
extern VTBL_ENTRY _ZTV7S3512C1[];
extern void _ZN7S3512C2D1Ev();
extern void _ZN7S3512C2D0Ev();
extern void _ZN7S3512C32v3Ev();
extern void _ZN7S3512C32v4Ev();
extern void _ZN7S3512C32v5Ev();
extern void _ZN7S3512C32v6Ev();
extern void _ZN7S3512C32v7Ev();
extern void _ZN7S3512C32v8Ev();
extern void _ZN7S3512C22v9Ev();
extern void _ZN7S3512C23v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3512C2__7S3512C1[] = {
  ABISELECT(96,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C2[0]),
  (VTBL_ENTRY)&_ZN7S3512C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3512C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3512C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3512C23v10Ev,
};
extern void _ZN7S3512C3D1Ev();
extern void _ZN7S3512C3D0Ev();
extern void _ZN7S3512C32v3Ev();
extern void _ZN7S3512C32v4Ev();
extern void _ZN7S3512C32v5Ev();
extern void _ZN7S3512C32v6Ev();
extern void _ZN7S3512C32v7Ev();
extern void _ZN7S3512C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3512C37S3512C2__7S3512C1[] = {
  ABISELECT(96,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C3[0]),
  (VTBL_ENTRY)&_ZN7S3512C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3512C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v8Ev,
};
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3512C4__7S3512C37S3512C2__7S3512C1[] = {
  0,
  0,
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI7S3512C3[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
};
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3512C4__7S3512C2__7S3512C1[] = {
  0,
  0,
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI7S3512C2[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
};
extern void _ZN7S3512C63v11Ev();
extern void _ZN7S3512C63v12Ev();
extern void _ZN7S3512C63v13Ev();
extern void _ZN7S3512C63v14Ev();
extern void _ZN7S3512C63v15Ev();
extern void _ZN7S3512C63v16Ev();
extern void _ZN7S3512C5D1Ev();
extern void _ZN7S3512C5D0Ev();
extern void _ZN7S3512C53v31Ev();
static  VTBL_ENTRY _tg__ZTV7S3512C5__7S3512C1[] = {
  ABISELECT(176,88),
  ABISELECT(168,84),
  ABISELECT(168,84),
  ABISELECT(80,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C5[0]),
  (VTBL_ENTRY)&_ZN7S3512C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v12Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v13Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v14Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v15Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3512C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3512C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3512C53v31Ev,
};
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
extern void _ZN7S3512C93v17Ev();
extern void _ZN7S3512C93v18Ev();
extern void _ZN7S3512C83v19Ev();
extern void _ZN7S3512C83v20Ev();
extern void _ZN7S3512C83v21Ev();
extern void _ZN7S3512C83v22Ev();
extern void _ZN7S3512C73v28Ev();
extern void _ZN7S3512C73v29Ev();
extern void _ZN7S3512C73v30Ev();
static  VTBL_ENTRY _tg__ZTV7S3512C7__7S3512C5__7S3512C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI7S3512C5[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v18Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v20Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v21Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v22Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v28Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v30Ev,
};
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3512C47S3512C87S3512C7__A1__7S3512C5__7S3512C1[] = {
  ABISELECT(-128,-60),
  (VTBL_ENTRY)&(_ZTI7S3512C5[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
};
extern void _ZN8S3512C113v24Ev();
extern void _ZN8S3512C103v25Ev();
extern void _ZN8S3512C103v26Ev();
extern void _ZN8S3512C103v27Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C10__7S3512C5__7S3512C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-168,-84),
  (VTBL_ENTRY)&(_ZTI7S3512C5[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v25Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v26Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v27Ev,
};
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C12__7S3512C5__7S3512C1[] = {
  0,
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI7S3512C5[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
extern void _ZN7S3512C93v17Ev();
extern void _ZN7S3512C93v18Ev();
extern void _ZN7S3512C83v19Ev();
extern void _ZN7S3512C83v20Ev();
extern void _ZN7S3512C83v21Ev();
extern void _ZN7S3512C83v22Ev();
extern void _ZN7S3512C73v28Ev();
extern void _ZN7S3512C73v29Ev();
extern void _ZN7S3512C73v30Ev();
static  VTBL_ENTRY _tg__ZTV7S3512C7__7S3512C1[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C7[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v18Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v20Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v21Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v22Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v28Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v30Ev,
};
extern void _ZN8S3512C113v24Ev();
extern void _ZN8S3512C103v25Ev();
extern void _ZN8S3512C103v26Ev();
extern void _ZN8S3512C103v27Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C10__7S3512C7__7S3512C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S3512C7[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v25Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v26Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v27Ev,
};
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C12__7S3512C7__7S3512C1[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3512C7[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
extern void _ZN8S3512C113v24Ev();
extern void _ZN8S3512C103v25Ev();
extern void _ZN8S3512C103v26Ev();
extern void _ZN8S3512C103v27Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C10__7S3512C1[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3512C10[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v25Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v26Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v27Ev,
};
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C12__8S3512C10__7S3512C1[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S3512C10[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
extern void _ZN8S3512C113v24Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C11__7S3512C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3512C11[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
};
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C12__8S3512C11__7S3512C1[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S3512C11[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
static  VTT_ENTRY vtt_S3512C1[] = {
  {&(_ZTV7S3512C1[7]),  7,85},
  {&(_tg__ZTV7S3512C2__7S3512C1[3]),  3,13},
  {&(_tg__ZTV7S3512C37S3512C2__7S3512C1[3]),  3,11},
  {&(_tg__ZTV7S3512C4__7S3512C37S3512C2__7S3512C1[4]),  4,6},
  {&(_tg__ZTV7S3512C4__7S3512C2__7S3512C1[4]),  4,6},
  {&(_tg__ZTV7S3512C5__7S3512C1[6]),  6,15},
  {&(_tg__ZTV7S3512C7__7S3512C5__7S3512C1[16]),  16,27},
  {&(_tg__ZTV7S3512C47S3512C87S3512C7__A1__7S3512C5__7S3512C1[2]),  2,4},
  {&(_tg__ZTV8S3512C10__7S3512C5__7S3512C1[8]),  8,12},
  {&(_tg__ZTV8S3512C10__7S3512C5__7S3512C1[8]),  8,12},
  {&(_tg__ZTV8S3512C12__7S3512C5__7S3512C1[3]),  3,4},
  {&(_ZTV7S3512C1[36]),  36,85},
  {&(_ZTV7S3512C1[23]),  23,85},
  {&(_ZTV7S3512C1[54]),  54,85},
  {&(_ZTV7S3512C1[67]),  67,85},
  {&(_ZTV7S3512C1[77]),  77,85},
  {&(_ZTV7S3512C1[77]),  77,85},
  {&(_ZTV7S3512C1[84]),  84,85},
  {&(_tg__ZTV7S3512C7__7S3512C1[5]),  5,16},
  {&(_tg__ZTV8S3512C10__7S3512C7__7S3512C1[8]),  8,12},
  {&(_tg__ZTV8S3512C10__7S3512C7__7S3512C1[8]),  8,12},
  {&(_tg__ZTV8S3512C12__7S3512C7__7S3512C1[3]),  3,4},
  {&(_tg__ZTV8S3512C10__7S3512C1[5]),  5,9},
  {&(_tg__ZTV8S3512C10__7S3512C1[5]),  5,9},
  {&(_tg__ZTV8S3512C12__8S3512C10__7S3512C1[3]),  3,4},
  {&(_tg__ZTV8S3512C11__7S3512C1[3]),  3,4},
  {&(_tg__ZTV8S3512C12__8S3512C11__7S3512C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3512C1[];
extern  VTBL_ENTRY _ZTV7S3512C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3512C1[];
Class_Descriptor cd_S3512C1 = {  "S3512C1", // class name
  bases_S3512C1, 13,
  &(vtc_S3512C1[0]), // expected_vtbl_contents
  &(vtt_S3512C1[0]), // expected_vtt_contents
  ABISELECT(272,132), // object size
  NSPAIRA(_ZTI7S3512C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3512C1),85, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3512C1),27, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7457C5  : S19572C5 {
};
//SIG(-1 S7457C5) C1{ BC2{ m Fs:13}}



static void Test_S7457C5()
{
  extern Class_Descriptor cd_S7457C5;
  void *lvp;
  {
    short buf[2];
    init_test(&cd_S7457C5, buf);
    S7457C5 &lv = *(new (buf) S7457C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), 2, "sizeof(S7457C5)");
    check2(__alignof__(lv), 2, "__alignof__(S7457C5)");
    check_base_class_offset(lv, (S19572C5*), 0, "S7457C5");
    test_class_info(&lv, &cd_S7457C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C5(Test_S7457C5, "S7457C5", 2);

#else // __cplusplus

extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
static Base_Class bases_S7457C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7457C5[];
Class_Descriptor cd_S7457C5 = {  "S7457C5", // class name
  bases_S7457C5, 1,
  0, // no vftv
  0, //no vtt
  2, // object size
  NSPAIRA(_ZTI7S7457C5),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  S7457C6  : virtual S7457C5 {
  ~S7457C6(); // tgen
  S7457C6(); // tgen
};
//SIG(-1 S7457C6) C1{ VBC2{ BC3{ m Fs:13}}}


S7457C6 ::~S7457C6(){ note_dtor("S7457C6", this);} // tgen
S7457C6 ::S7457C6(){ note_ctor("S7457C6", this);} // tgen

static void Test_S7457C6()
{
  extern Class_Descriptor cd_S7457C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7457C6, buf);
    S7457C6 *dp, &lv = *(dp=new (buf) S7457C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7457C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7457C6)");
    check_base_class_offset(lv, (S19572C5*)(S7457C5*), ABISELECT(8,4), "S7457C6");
    check_base_class_offset(lv, (S7457C5*), ABISELECT(8,4), "S7457C6");
    test_class_info(&lv, &cd_S7457C6);
    dp->~S7457C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C6(Test_S7457C6, "S7457C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7457C6C1Ev();
extern void _ZN7S7457C6D1Ev();
Name_Map name_map_S7457C6[] = {
  NSPAIR(_ZN7S7457C6C1Ev),
  NSPAIR(_ZN7S7457C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
static Base_Class bases_S7457C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
  0, 0},
  {&cd_S7457C5,    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 _ZTI7S7457C6[];
static  VTBL_ENTRY vtc_S7457C6[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C6[0]),
};
extern VTBL_ENTRY _ZTV7S7457C6[];
static  VTT_ENTRY vtt_S7457C6[] = {
  {&(_ZTV7S7457C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7457C6[];
extern  VTBL_ENTRY _ZTV7S7457C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C6[];
Class_Descriptor cd_S7457C6 = {  "S7457C6", // class name
  bases_S7457C6, 2,
  &(vtc_S7457C6[0]), // expected_vtbl_contents
  &(vtt_S7457C6[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7457C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7457C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7457C6),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  S7457C9  : virtual S19572C5 {
  ~S7457C9(); // tgen
  S7457C9(); // tgen
};
//SIG(-1 S7457C9) C1{ VBC2{ m Fs:13}}


S7457C9 ::~S7457C9(){ note_dtor("S7457C9", this);} // tgen
S7457C9 ::S7457C9(){ note_ctor("S7457C9", this);} // tgen

static void Test_S7457C9()
{
  extern Class_Descriptor cd_S7457C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7457C9, buf);
    S7457C9 *dp, &lv = *(dp=new (buf) S7457C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7457C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7457C9)");
    check_base_class_offset(lv, (S19572C5*), ABISELECT(8,4), "S7457C9");
    test_class_info(&lv, &cd_S7457C9);
    dp->~S7457C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C9(Test_S7457C9, "S7457C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7457C9C1Ev();
extern void _ZN7S7457C9D1Ev();
Name_Map name_map_S7457C9[] = {
  NSPAIR(_ZN7S7457C9C1Ev),
  NSPAIR(_ZN7S7457C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
static Base_Class bases_S7457C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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 _ZTI7S7457C9[];
static  VTBL_ENTRY vtc_S7457C9[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern VTBL_ENTRY _ZTV7S7457C9[];
static  VTT_ENTRY vtt_S7457C9[] = {
  {&(_ZTV7S7457C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
Class_Descriptor cd_S7457C9 = {  "S7457C9", // class name
  bases_S7457C9, 1,
  &(vtc_S7457C9[0]), // expected_vtbl_contents
  &(vtt_S7457C9[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7457C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7457C9),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7457C9),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  S7457C8  : S7457C9 , S7457C5 {
  virtual  ~S7457C8(); // _ZN7S7457C8D2Ev
  S7457C8(); // tgen
};
//SIG(-1 S7457C8) C1{ BC2{ VBC3{ m Fs:13}} BC4{ BC3} vd}


 S7457C8 ::~S7457C8(){ note_dtor("S7457C8", this);}
S7457C8 ::S7457C8(){ note_ctor("S7457C8", this);} // tgen

static void Test_S7457C8()
{
  extern Class_Descriptor cd_S7457C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7457C8, buf);
    S7457C8 *dp, &lv = *(dp=new (buf) S7457C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7457C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7457C8)");
    check_base_class_offset(lv, (S19572C5*)(S7457C9*), ABISELECT(10,6), "S7457C8");
    check_base_class_offset(lv, (S7457C9*), 0, "S7457C8");
    check_base_class_offset(lv, (S19572C5*)(S7457C5*), ABISELECT(8,4), "S7457C8");
    check_base_class_offset(lv, (S7457C5*), ABISELECT(8,4), "S7457C8");
    test_class_info(&lv, &cd_S7457C8);
    dp->~S7457C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C8(Test_S7457C8, "S7457C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7457C8C1Ev();
extern void _ZN7S7457C8D2Ev();
Name_Map name_map_S7457C8[] = {
  NSPAIR(_ZN7S7457C8C1Ev),
  NSPAIR(_ZN7S7457C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
static Base_Class bases_S7457C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(10,6), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7457C9,    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_S19572C5,    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_S7457C5,    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},
  {0}};
extern VTBL_ENTRY _ZTI7S7457C8[];
extern void _ZN7S7457C8D1Ev();
extern void _ZN7S7457C8D0Ev();
static  VTBL_ENTRY vtc_S7457C8[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C8[0]),
  (VTBL_ENTRY)&_ZN7S7457C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C8D0Ev,
};
extern VTBL_ENTRY _ZTV7S7457C8[];
static  VTBL_ENTRY _tg__ZTV7S7457C9__7S7457C8[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTT_ENTRY vtt_S7457C8[] = {
  {&(_ZTV7S7457C8[3]),  3,5},
  {&(_tg__ZTV7S7457C9__7S7457C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7457C8[];
extern  VTBL_ENTRY _ZTV7S7457C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C8[];
Class_Descriptor cd_S7457C8 = {  "S7457C8", // class name
  bases_S7457C8, 4,
  &(vtc_S7457C8[0]), // expected_vtbl_contents
  &(vtt_S7457C8[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7457C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7457C8),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7457C8),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  S7457C7  : virtual S19572C5 , virtual S7457C5 , S7457C6 , S7457C8 , S7457C9 {
  long double s7457c7f0[5];
  virtual  ~S7457C7(); // _ZN7S7457C7D2Ev
  S7457C7(); // tgen
};
//SIG(-1 S7457C7) C1{ VBC2{ m Fs:13} VBC3{ BC2} BC4{ VBC3} BC5{ BC6{ VBC2} BC3 vd} BC6 vd FD[5]}


 S7457C7 ::~S7457C7(){ note_dtor("S7457C7", this);}
S7457C7 ::S7457C7(){ note_ctor("S7457C7", this);} // tgen

static void Test_S7457C7()
{
  extern Class_Descriptor cd_S7457C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,21)];
    init_test(&cd_S7457C7, buf);
    S7457C7 *dp, &lv = *(dp=new (buf) S7457C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,80), "sizeof(S7457C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7457C7)");
    /*is_ambiguous_... S7457C7::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*), ABISELECT(112,76), "S7457C7");
    check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C8*), ABISELECT(112,76), "S7457C7");
    /*is_ambiguous_... S7457C7::S7457C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*), ABISELECT(112,76), "S7457C7");
    /*is_ambiguous_... S7457C7::S7457C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C5*), ABISELECT(114,78), "S7457C7");
    /*is_ambiguous_... S7457C7::S7457C5 */ AMB_check_base_class_offset(lv, (S7457C5*), ABISELECT(114,78), "S7457C7");
    check_base_class_offset(lv, (S7457C5*)(S7457C6*), ABISELECT(114,78), "S7457C7");
    check_base_class_offset(lv, (S7457C6*), 0, "S7457C7");
    check_base_class_offset(lv, (S7457C9*)(S7457C8*), ABISELECT(8,4), "S7457C7");
    check_base_class_offset(lv, (S19572C5*)(S7457C5*)(S7457C8*), ABISELECT(16,8), "S7457C7");
    check_base_class_offset(lv, (S7457C5*)(S7457C8*), ABISELECT(16,8), "S7457C7");
    check_base_class_offset(lv, (S7457C8*), ABISELECT(8,4), "S7457C7");
    /*is_ambiguous_... S7457C7::S7457C9 */ AMB_check_base_class_offset(lv, (S7457C9*), ABISELECT(24,12), "S7457C7");
    check_field_offset(lv, s7457c7f0, ABISELECT(32,16), "S7457C7.s7457c7f0");
    test_class_info(&lv, &cd_S7457C7);
    dp->~S7457C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C7(Test_S7457C7, "S7457C7", ABISELECT(128,80));

#else // __cplusplus

extern void _ZN7S7457C7C1Ev();
extern void _ZN7S7457C7D2Ev();
Name_Map name_map_S7457C7[] = {
  NSPAIR(_ZN7S7457C7C1Ev),
  NSPAIR(_ZN7S7457C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C6;
extern VTBL_ENTRY _ZTI7S7457C6[];
extern  VTBL_ENTRY _ZTV7S7457C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C6[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C8;
extern VTBL_ENTRY _ZTI7S7457C8[];
extern  VTBL_ENTRY _ZTV7S7457C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C8[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
static Base_Class bases_S7457C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(112,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
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    ABISELECT(114,78), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7457C5,    ABISELECT(114,78), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7457C6,    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_S7457C9,    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
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    6, //immediately_derived
  0, 0},
  {&cd_S7457C5,    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
    7, //immediately_derived
  0, 0},
  {&cd_S7457C8,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7457C9,    ABISELECT(24,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7457C7[];
extern void _ZN7S7457C7D1Ev();
extern void _ZN7S7457C7D0Ev();
extern void ABISELECT(_ZThn8_N7S7457C7D1Ev,_ZThn4_N7S7457C7D1Ev)();
extern void ABISELECT(_ZThn8_N7S7457C7D0Ev,_ZThn4_N7S7457C7D0Ev)();
static  VTBL_ENTRY vtc_S7457C7[] = {
  ABISELECT(112,76),
  ABISELECT(114,78),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C7[0]),
  (VTBL_ENTRY)&_ZN7S7457C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C7D0Ev,
  ABISELECT(104,72),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7457C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7457C7D1Ev,_ZThn4_N7S7457C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7457C7D0Ev,_ZThn4_N7S7457C7D0Ev),
  ABISELECT(88,64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7457C7[0]),
};
extern VTBL_ENTRY _ZTV7S7457C7[];
static  VTBL_ENTRY _tg__ZTV7S7457C6__7S7457C7[] = {
  ABISELECT(114,78),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C6[0]),
};
extern void _ZN7S7457C8D1Ev();
extern void _ZN7S7457C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C8__7S7457C7[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C8[0]),
  (VTBL_ENTRY)&_ZN7S7457C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C8__7S7457C7[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__A1__7S7457C7[] = {
  ABISELECT(88,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTT_ENTRY vtt_S7457C7[] = {
  {&(_ZTV7S7457C7[4]),  4,14},
  {&(_tg__ZTV7S7457C6__7S7457C7[3]),  3,3},
  {&(_tg__ZTV7S7457C8__7S7457C7[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C8__7S7457C7[3]),  3,3},
  {&(_tg__ZTV7S7457C9__A1__7S7457C7[3]),  3,3},
  {&(_ZTV7S7457C7[9]),  9,14},
  {&(_ZTV7S7457C7[14]),  14,14},
};
extern VTBL_ENTRY _ZTI7S7457C7[];
extern  VTBL_ENTRY _ZTV7S7457C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C7[];
Class_Descriptor cd_S7457C7 = {  "S7457C7", // class name
  bases_S7457C7, 9,
  &(vtc_S7457C7[0]), // expected_vtbl_contents
  &(vtt_S7457C7[0]), // expected_vtt_contents
  ABISELECT(128,80), // object size
  NSPAIRA(_ZTI7S7457C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7457C7),14, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7457C7),7, //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  S7457C11  : virtual S19572C5 {
  ~S7457C11(); // tgen
  S7457C11(); // tgen
};
//SIG(-1 S7457C11) C1{ VBC2{ m Fs:13}}


S7457C11 ::~S7457C11(){ note_dtor("S7457C11", this);} // tgen
S7457C11 ::S7457C11(){ note_ctor("S7457C11", this);} // tgen

static void Test_S7457C11()
{
  extern Class_Descriptor cd_S7457C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7457C11, buf);
    S7457C11 *dp, &lv = *(dp=new (buf) S7457C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7457C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7457C11)");
    check_base_class_offset(lv, (S19572C5*), ABISELECT(8,4), "S7457C11");
    test_class_info(&lv, &cd_S7457C11);
    dp->~S7457C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C11(Test_S7457C11, "S7457C11", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S7457C11C1Ev();
extern void _ZN8S7457C11D1Ev();
Name_Map name_map_S7457C11[] = {
  NSPAIR(_ZN8S7457C11C1Ev),
  NSPAIR(_ZN8S7457C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
static Base_Class bases_S7457C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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 _ZTI8S7457C11[];
static  VTBL_ENTRY vtc_S7457C11[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C11[0]),
};
extern VTBL_ENTRY _ZTV8S7457C11[];
static  VTT_ENTRY vtt_S7457C11[] = {
  {&(_ZTV8S7457C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7457C11[];
extern  VTBL_ENTRY _ZTV8S7457C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C11[];
Class_Descriptor cd_S7457C11 = {  "S7457C11", // class name
  bases_S7457C11, 1,
  &(vtc_S7457C11[0]), // expected_vtbl_contents
  &(vtt_S7457C11[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7457C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7457C11),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7457C11),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  S7457C10  : virtual S7457C11 , virtual S7457C9 , S19572C5 , virtual S7457C5 {
  int s7457c10f0;
  virtual  ~S7457C10(); // _ZN8S7457C10D2Ev
  S7457C10(); // tgen
};
//SIG(-1 S7457C10) C1{ VBC2{ VBC3{ m Fs:13}} VBC4{ VBC3} BC3 VBC5{ BC3} vd Fi}


 S7457C10 ::~S7457C10(){ note_dtor("S7457C10", this);}
S7457C10 ::S7457C10(){ note_ctor("S7457C10", this);} // tgen

static void Test_S7457C10()
{
  extern Class_Descriptor cd_S7457C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S7457C10, buf);
    S7457C10 *dp, &lv = *(dp=new (buf) S7457C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S7457C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7457C10)");
    check_base_class_offset(lv, (S19572C5*)(S7457C11*), ABISELECT(16,12), "S7457C10");
    check_base_class_offset(lv, (S19572C5*)(S7457C9*), ABISELECT(16,12), "S7457C10");
    check_base_class_offset(lv, (S7457C11*), 0, "S7457C10");
    check_base_class_offset(lv, (S7457C9*), ABISELECT(24,16), "S7457C10");
    /*is_ambiguous_... S7457C10::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*), ABISELECT(8,4), "S7457C10");
    check_base_class_offset(lv, (S19572C5*)(S7457C5*), ABISELECT(32,20), "S7457C10");
    check_base_class_offset(lv, (S7457C5*), ABISELECT(32,20), "S7457C10");
    check_field_offset(lv, s7457c10f0, ABISELECT(12,8), "S7457C10.s7457c10f0");
    test_class_info(&lv, &cd_S7457C10);
    dp->~S7457C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C10(Test_S7457C10, "S7457C10", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S7457C10C1Ev();
extern void _ZN8S7457C10D2Ev();
Name_Map name_map_S7457C10[] = {
  NSPAIR(_ZN8S7457C10C1Ev),
  NSPAIR(_ZN8S7457C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C11;
extern VTBL_ENTRY _ZTI8S7457C11[];
extern  VTBL_ENTRY _ZTV8S7457C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C11[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
static Base_Class bases_S7457C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
    1, //immediately_derived
  0, 1},
  {&cd_S7457C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7457C9,    ABISELECT(24,16), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    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_S19572C5,    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
    5, //immediately_derived
  0, 0},
  {&cd_S7457C5,    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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7457C10[];
extern void _ZN8S7457C10D1Ev();
extern void _ZN8S7457C10D0Ev();
static  VTBL_ENTRY vtc_S7457C10[] = {
  ABISELECT(32,20),
  ABISELECT(24,16),
  0,
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C10[0]),
  (VTBL_ENTRY)&_ZN8S7457C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7457C10D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S7457C10[0]),
};
extern VTBL_ENTRY _ZTV8S7457C10[];
static  VTBL_ENTRY _tg__ZTV8S7457C11__8S7457C10[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C10[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTT_ENTRY vtt_S7457C10[] = {
  {&(_ZTV8S7457C10[6]),  6,11},
  {&(_ZTV8S7457C10[6]),  6,11},
  {&(_ZTV8S7457C10[11]),  11,11},
  {&(_tg__ZTV8S7457C11__8S7457C10[3]),  3,3},
  {&(_tg__ZTV7S7457C9__8S7457C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7457C10[];
extern  VTBL_ENTRY _ZTV8S7457C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C10[];
Class_Descriptor cd_S7457C10 = {  "S7457C10", // class name
  bases_S7457C10, 6,
  &(vtc_S7457C10[0]), // expected_vtbl_contents
  &(vtt_S7457C10[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S7457C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7457C10),11, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7457C10),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  S7457C4  : virtual S7457C5 , virtual S7457C6 , virtual S7457C7 , S7457C9 {
  ::S7457C10 s7457c4f0;
  virtual void  v1(); // _ZN7S7457C42v1Ev
  ~S7457C4(); // tgen
  S7457C4(); // tgen
};
//SIG(-1 S7457C4) C1{ VBC2{ BC3{ m Fs:13}} VBC4{ VBC2} VBC5{ VBC3 VBC2 BC4 BC6{ BC7{ VBC3} BC2 vd} BC7 vd FD[5]} BC7 v1 FC8{ VBC9{ VBC3} VBC7 BC3 VBC2 vd Fi}}


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

static void Test_S7457C4()
{
  extern Class_Descriptor cd_S7457C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,30)];
    init_test(&cd_S7457C4, buf);
    S7457C4 *dp, &lv = *(dp=new (buf) S7457C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,116), "sizeof(S7457C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7457C4)");
    /*is_ambiguous_... S7457C4::S7457C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C5*), ABISELECT(48,28), "S7457C4");
    /*is_ambiguous_... S7457C4::S7457C5 */ AMB_check_base_class_offset(lv, (S7457C5*), ABISELECT(48,28), "S7457C4");
    /*is_ambiguous_... S7457C4::S7457C6 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C6*), ABISELECT(48,28), "S7457C4");
    /*is_ambiguous_... S7457C7::S7457C5 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C7*), ABISELECT(48,28), "S7457C4");
    check_base_class_offset(lv, (S7457C5*)(S7457C6*)(S7457C7*), ABISELECT(48,28), "S7457C4");
    /*is_ambiguous_... S7457C4::S7457C6 */ AMB_check_base_class_offset(lv, (S7457C6*), ABISELECT(56,32), "S7457C4");
    /*is_ambiguous_... S7457C7::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C7*), ABISELECT(176,112), "S7457C4");
    check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C8*)(S7457C7*), ABISELECT(176,112), "S7457C4");
    /*is_ambiguous_... S7457C7::S7457C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C7*), ABISELECT(176,112), "S7457C4");
    /*is_ambiguous_... S7457C4::S7457C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*), ABISELECT(176,112), "S7457C4");
    check_base_class_offset(lv, (S7457C6*)(S7457C7*), ABISELECT(64,36), "S7457C4");
    check_base_class_offset(lv, (S7457C9*)(S7457C8*)(S7457C7*), ABISELECT(72,40), "S7457C4");
    check_base_class_offset(lv, (S19572C5*)(S7457C5*)(S7457C8*)(S7457C7*), ABISELECT(80,44), "S7457C4");
    check_base_class_offset(lv, (S7457C5*)(S7457C8*)(S7457C7*), ABISELECT(80,44), "S7457C4");
    check_base_class_offset(lv, (S7457C8*)(S7457C7*), ABISELECT(72,40), "S7457C4");
    /*is_ambiguous_... S7457C7::S7457C9 */ AMB_check_base_class_offset(lv, (S7457C9*)(S7457C7*), ABISELECT(88,48), "S7457C4");
    check_base_class_offset(lv, (S7457C7*), ABISELECT(64,36), "S7457C4");
    /*is_ambiguous_... S7457C4::S7457C9 */ AMB_check_base_class_offset(lv, (S7457C9*), 0, "S7457C4");
    check_field_offset(lv, s7457c4f0, ABISELECT(8,4), "S7457C4.s7457c4f0");
    test_class_info(&lv, &cd_S7457C4);
    dp->~S7457C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C4(Test_S7457C4, "S7457C4", ABISELECT(192,116));

#else // __cplusplus

extern void _ZN7S7457C4C1Ev();
extern void _ZN7S7457C4D1Ev();
Name_Map name_map_S7457C4[] = {
  NSPAIR(_ZN7S7457C4C1Ev),
  NSPAIR(_ZN7S7457C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C6;
extern VTBL_ENTRY _ZTI7S7457C6[];
extern  VTBL_ENTRY _ZTV7S7457C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C6[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C6;
extern VTBL_ENTRY _ZTI7S7457C6[];
extern  VTBL_ENTRY _ZTV7S7457C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C6[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C8;
extern VTBL_ENTRY _ZTI7S7457C8[];
extern  VTBL_ENTRY _ZTV7S7457C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C8[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S7457C7;
extern VTBL_ENTRY _ZTI7S7457C7[];
extern  VTBL_ENTRY _ZTV7S7457C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C7[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
static Base_Class bases_S7457C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
    1, //immediately_derived
  0, 0},
  {&cd_S7457C5,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S7457C6,    ABISELECT(56,32), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    ABISELECT(176,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
    5, //immediately_derived
  0, 1},
  {&cd_S7457C6,    ABISELECT(64,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
    2, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7457C9,    ABISELECT(72,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
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(80,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
    7, //immediately_derived
  0, 0},
  {&cd_S7457C5,    ABISELECT(80,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
    8, //immediately_derived
  0, 0},
  {&cd_S7457C8,    ABISELECT(72,40), //bcp->offset
    19, //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
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7457C9,    ABISELECT(88,48), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7457C7,    ABISELECT(64,36), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7457C9,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7457C4[];
extern void _ZN7S7457C42v1Ev();
extern void _ZN7S7457C4D1Ev();
extern void _ZN7S7457C4D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S7457C4D1Ev,_ZTv0_n20_N7S7457C4D1Ev)();
extern void ABISELECT(_ZThn64_N7S7457C4D1Ev,_ZThn36_N7S7457C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7457C4D0Ev,_ZTv0_n20_N7S7457C4D0Ev)();
extern void ABISELECT(_ZThn64_N7S7457C4D0Ev,_ZThn36_N7S7457C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N7S7457C4D1Ev,_ZTvn4_n20_N7S7457C4D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7457C4D0Ev,_ZTvn4_n20_N7S7457C4D0Ev)();
static  VTBL_ENTRY vtc_S7457C4[] = {
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(48,28),
  ABISELECT(176,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
  (VTBL_ENTRY)&_ZN7S7457C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7457C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C4D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
  ABISELECT(-64,-36),
  ABISELECT(112,76),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7457C4D1Ev,_ZTv0_n20_N7S7457C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7457C4D0Ev,_ZTv0_n20_N7S7457C4D0Ev),
  ABISELECT(104,72),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7457C4D1Ev,_ZTvn4_n20_N7S7457C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7457C4D0Ev,_ZTvn4_n20_N7S7457C4D0Ev),
  ABISELECT(88,64),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
};
extern VTBL_ENTRY _ZTV7S7457C4[];
static  VTBL_ENTRY _tg__ZTV7S7457C9__A2__7S7457C4[] = {
  ABISELECT(176,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C6__7S7457C4[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C6[0]),
};
extern void _ZN7S7457C7D1Ev();
extern void _ZN7S7457C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C7__7S7457C4[] = {
  ABISELECT(112,76),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C7[0]),
  (VTBL_ENTRY)&_ZN7S7457C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C67S7457C7__A1__7S7457C4[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C6[0]),
};
extern void _ZN7S7457C8D1Ev();
extern void _ZN7S7457C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C87S7457C7__7S7457C4[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C8[0]),
  (VTBL_ENTRY)&_ZN7S7457C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C87S7457C7__7S7457C4[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C7__A1__7S7457C4[] = {
  ABISELECT(88,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern void ABISELECT(_ZThn8_N7S7457C7D1Ev,_ZThn4_N7S7457C7D1Ev)();
extern void ABISELECT(_ZThn8_N7S7457C7D0Ev,_ZThn4_N7S7457C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7457C8__7S7457C7__7S7457C4[] = {
  ABISELECT(104,72),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7457C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7457C7D1Ev,_ZThn4_N7S7457C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7457C7D0Ev,_ZThn4_N7S7457C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__A1__7S7457C7__7S7457C4[] = {
  ABISELECT(88,64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7457C7[0]),
};
static  VTT_ENTRY vtt_S7457C4[] = {
  {&(_ZTV7S7457C4[6]),  6,27},
  {&(_tg__ZTV7S7457C9__A2__7S7457C4[3]),  3,3},
  {&(_ZTV7S7457C4[12]),  12,27},
  {&(_ZTV7S7457C4[17]),  17,27},
  {&(_ZTV7S7457C4[22]),  22,27},
  {&(_ZTV7S7457C4[27]),  27,27},
  {&(_tg__ZTV7S7457C6__7S7457C4[3]),  3,3},
  {&(_tg__ZTV7S7457C7__7S7457C4[4]),  4,6},
  {&(_tg__ZTV7S7457C67S7457C7__A1__7S7457C4[3]),  3,3},
  {&(_tg__ZTV7S7457C87S7457C7__7S7457C4[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C87S7457C7__7S7457C4[3]),  3,3},
  {&(_tg__ZTV7S7457C97S7457C7__A1__7S7457C4[3]),  3,3},
  {&(_tg__ZTV7S7457C8__7S7457C7__7S7457C4[3]),  3,5},
  {&(_tg__ZTV7S7457C9__A1__7S7457C7__7S7457C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7457C4[];
extern  VTBL_ENTRY _ZTV7S7457C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C4[];
static VTBL_ENTRY alt_thunk_names40[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7457C4D0Ev,_ZTv0_n20_N7S7457C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7457C4D0Ev,_ZThn36_N7S7457C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7457C4D1Ev,_ZTv0_n20_N7S7457C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7457C4D1Ev,_ZThn36_N7S7457C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7457C4 = {  "S7457C4", // class name
  bases_S7457C4, 12,
  &(vtc_S7457C4[0]), // expected_vtbl_contents
  &(vtt_S7457C4[0]), // expected_vtt_contents
  ABISELECT(192,116), // object size
  NSPAIRA(_ZTI7S7457C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7457C4),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7457C4),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names40,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7457C13  : virtual S19572C5 , virtual S7457C9 {
  ~S7457C13(); // tgen
  S7457C13(); // tgen
};
//SIG(-1 S7457C13) C1{ VBC2{ m Fs:13} VBC3{ VBC2}}


S7457C13 ::~S7457C13(){ note_dtor("S7457C13", this);} // tgen
S7457C13 ::S7457C13(){ note_ctor("S7457C13", this);} // tgen

static void Test_S7457C13()
{
  extern Class_Descriptor cd_S7457C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7457C13, buf);
    S7457C13 *dp, &lv = *(dp=new (buf) S7457C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7457C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7457C13)");
    check_base_class_offset(lv, (S19572C5*), ABISELECT(8,4), "S7457C13");
    check_base_class_offset(lv, (S19572C5*)(S7457C9*), ABISELECT(8,4), "S7457C13");
    check_base_class_offset(lv, (S7457C9*), 0, "S7457C13");
    test_class_info(&lv, &cd_S7457C13);
    dp->~S7457C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C13(Test_S7457C13, "S7457C13", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S7457C13C1Ev();
extern void _ZN8S7457C13D1Ev();
Name_Map name_map_S7457C13[] = {
  NSPAIR(_ZN8S7457C13C1Ev),
  NSPAIR(_ZN8S7457C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
static Base_Class bases_S7457C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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_S7457C9,    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 _ZTI8S7457C13[];
static  VTBL_ENTRY vtc_S7457C13[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C13[0]),
};
extern VTBL_ENTRY _ZTV8S7457C13[];
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C13[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTT_ENTRY vtt_S7457C13[] = {
  {&(_ZTV8S7457C13[4]),  4,4},
  {&(_ZTV8S7457C13[4]),  4,4},
  {&(_tg__ZTV7S7457C9__8S7457C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7457C13[];
extern  VTBL_ENTRY _ZTV8S7457C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C13[];
Class_Descriptor cd_S7457C13 = {  "S7457C13", // class name
  bases_S7457C13, 2,
  &(vtc_S7457C13[0]), // expected_vtbl_contents
  &(vtt_S7457C13[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7457C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7457C13),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7457C13),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  S7457C14  : virtual S7457C5 , virtual S7457C10 , S7457C8 {
  virtual  ~S7457C14(); // _ZN8S7457C14D2Ev
  S7457C14(); // tgen
};
//SIG(-1 S7457C14) C1{ VBC2{ BC3{ m Fs:13}} VBC4{ VBC5{ VBC3} VBC6{ VBC3} BC3 VBC2 vd Fi} BC7{ BC6 BC2 vd} vd}


 S7457C14 ::~S7457C14(){ note_dtor("S7457C14", this);}
S7457C14 ::S7457C14(){ note_ctor("S7457C14", this);} // tgen

static void Test_S7457C14()
{
  extern Class_Descriptor cd_S7457C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S7457C14, buf);
    S7457C14 *dp, &lv = *(dp=new (buf) S7457C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S7457C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7457C14)");
    /*is_ambiguous_... S7457C14::S7457C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C5*), ABISELECT(10,6), "S7457C14");
    /*is_ambiguous_... S7457C14::S7457C5 */ AMB_check_base_class_offset(lv, (S7457C5*), ABISELECT(10,6), "S7457C14");
    check_base_class_offset(lv, (S7457C5*)(S7457C10*), ABISELECT(10,6), "S7457C14");
    check_base_class_offset(lv, (S19572C5*)(S7457C11*), ABISELECT(32,20), "S7457C14");
    /*is_ambiguous_... S7457C14::S7457C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*), ABISELECT(32,20), "S7457C14");
    check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C8*), ABISELECT(32,20), "S7457C14");
    check_base_class_offset(lv, (S7457C11*)(S7457C10*), ABISELECT(16,8), "S7457C14");
    check_base_class_offset(lv, (S7457C9*)(S7457C10*), ABISELECT(40,24), "S7457C14");
    /*is_ambiguous_... S7457C10::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C10*), ABISELECT(24,12), "S7457C14");
    check_base_class_offset(lv, (S7457C10*), ABISELECT(16,8), "S7457C14");
    check_base_class_offset(lv, (S7457C9*)(S7457C8*), 0, "S7457C14");
    check_base_class_offset(lv, (S19572C5*)(S7457C5*)(S7457C8*), ABISELECT(8,4), "S7457C14");
    check_base_class_offset(lv, (S7457C5*)(S7457C8*), ABISELECT(8,4), "S7457C14");
    check_base_class_offset(lv, (S7457C8*), 0, "S7457C14");
    test_class_info(&lv, &cd_S7457C14);
    dp->~S7457C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C14(Test_S7457C14, "S7457C14", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S7457C14C1Ev();
extern void _ZN8S7457C14D2Ev();
Name_Map name_map_S7457C14[] = {
  NSPAIR(_ZN8S7457C14C1Ev),
  NSPAIR(_ZN8S7457C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C11;
extern VTBL_ENTRY _ZTI8S7457C11[];
extern  VTBL_ENTRY _ZTV8S7457C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C11[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C10;
extern VTBL_ENTRY _ZTI8S7457C10[];
extern  VTBL_ENTRY _ZTV8S7457C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C10[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C8;
extern VTBL_ENTRY _ZTI7S7457C8[];
extern  VTBL_ENTRY _ZTV7S7457C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C8[];
static Base_Class bases_S7457C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(10,6), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7457C5,    ABISELECT(10,6), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19572C5,    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
    3, //immediately_derived
  0, 1},
  {&cd_S7457C11,    ABISELECT(16,8), //bcp->offset
    -1, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7457C9,    ABISELECT(40,24), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19572C5,    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_S7457C10,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7457C9,    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
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    9, //immediately_derived
  0, 0},
  {&cd_S7457C5,    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
    10, //immediately_derived
  0, 0},
  {&cd_S7457C8,    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 _ZTI8S7457C14[];
extern void _ZN8S7457C14D1Ev();
extern void _ZN8S7457C14D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S7457C14D1Ev,_ZTv0_n28_N8S7457C14D1Ev)();
extern void ABISELECT(_ZThn16_N8S7457C14D1Ev,_ZThn8_N8S7457C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7457C14D0Ev,_ZTv0_n28_N8S7457C14D0Ev)();
extern void ABISELECT(_ZThn16_N8S7457C14D0Ev,_ZThn8_N8S7457C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7457C14[] = {
  ABISELECT(40,24),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(10,6),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C14[0]),
  (VTBL_ENTRY)&_ZN8S7457C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7457C14D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-6,-2),
  ABISELECT(24,16),
  0,
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7457C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C14D1Ev,_ZTv0_n28_N8S7457C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C14D0Ev,_ZTv0_n28_N8S7457C14D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S7457C14[0]),
};
extern VTBL_ENTRY _ZTV8S7457C14[];
extern void _ZN7S7457C8D1Ev();
extern void _ZN7S7457C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C8__8S7457C14[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C8[0]),
  (VTBL_ENTRY)&_ZN7S7457C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C8__A1__8S7457C14[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern void _ZN8S7457C10D1Ev();
extern void _ZN8S7457C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7457C10__8S7457C14[] = {
  ABISELECT(-6,-2),
  ABISELECT(24,16),
  0,
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C10[0]),
  (VTBL_ENTRY)&_ZN8S7457C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7457C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C10__8S7457C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S7457C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7457C11__8S7457C14[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C14[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTT_ENTRY vtt_S7457C14[] = {
  {&(_ZTV8S7457C14[7]),  7,21},
  {&(_tg__ZTV7S7457C8__8S7457C14[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C8__A1__8S7457C14[3]),  3,3},
  {&(_ZTV8S7457C14[16]),  16,21},
  {&(_ZTV8S7457C14[16]),  16,21},
  {&(_ZTV8S7457C14[21]),  21,21},
  {&(_tg__ZTV8S7457C10__8S7457C14[6]),  6,8},
  {&(_tg__ZTV8S7457C10__8S7457C14[6]),  6,8},
  {&(_tg__ZTV7S7457C9__8S7457C10__8S7457C14[3]),  3,3},
  {&(_tg__ZTV8S7457C11__8S7457C14[3]),  3,3},
  {&(_tg__ZTV7S7457C9__8S7457C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7457C14[];
extern  VTBL_ENTRY _ZTV8S7457C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C14[];
static VTBL_ENTRY alt_thunk_names41[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7457C14D0Ev,_ZTv0_n28_N8S7457C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7457C14D0Ev,_ZThn8_N8S7457C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7457C14D1Ev,_ZTv0_n28_N8S7457C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7457C14D1Ev,_ZThn8_N8S7457C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7457C14 = {  "S7457C14", // class name
  bases_S7457C14, 11,
  &(vtc_S7457C14[0]), // expected_vtbl_contents
  &(vtt_S7457C14[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S7457C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7457C14),21, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7457C14),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names41,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7457C12  : virtual S7457C10 , virtual S7457C6 , virtual S7457C8 , S7457C13 , virtual S7457C14 {
  virtual  ~S7457C12(); // _ZN8S7457C12D2Ev
  S7457C12(); // tgen
};
//SIG(-1 S7457C12) C1{ VBC2{ VBC3{ VBC4{ m Fs:13}} VBC5{ VBC4} BC4 VBC6{ BC4} vd Fi} VBC7{ VBC6} VBC8{ BC5 BC6 vd} BC9{ VBC4 VBC5} VBC10{ VBC6 VBC2 BC8 vd} vd}


 S7457C12 ::~S7457C12(){ note_dtor("S7457C12", this);}
S7457C12 ::S7457C12(){ note_ctor("S7457C12", this);} // tgen

static void Test_S7457C12()
{
  extern Class_Descriptor cd_S7457C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S7457C12, buf);
    S7457C12 *dp, &lv = *(dp=new (buf) S7457C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S7457C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7457C12)");
    check_base_class_offset(lv, (S19572C5*)(S7457C11*), ABISELECT(24,16), "S7457C12");
    /*is_ambiguous_... S7457C12::S7457C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*), ABISELECT(24,16), "S7457C12");
    /*is_ambiguous_... S7457C12::S7457C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C8*), ABISELECT(24,16), "S7457C12");
    check_base_class_offset(lv, (S19572C5*)(S7457C13*), ABISELECT(24,16), "S7457C12");
    check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C8*)(S7457C14*), ABISELECT(24,16), "S7457C12");
    check_base_class_offset(lv, (S7457C11*)(S7457C10*), ABISELECT(8,4), "S7457C12");
    check_base_class_offset(lv, (S7457C9*)(S7457C10*), 0, "S7457C12");
    check_base_class_offset(lv, (S7457C9*)(S7457C13*), 0, "S7457C12");
    /*is_ambiguous_... S7457C10::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C10*), ABISELECT(16,8), "S7457C12");
    /*is_ambiguous_... S7457C12::S7457C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C5*), ABISELECT(26,18), "S7457C12");
    check_base_class_offset(lv, (S7457C5*)(S7457C10*), ABISELECT(26,18), "S7457C12");
    check_base_class_offset(lv, (S7457C5*)(S7457C6*), ABISELECT(26,18), "S7457C12");
    /*is_ambiguous_... S7457C14::S7457C5 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C14*), ABISELECT(26,18), "S7457C12");
    check_base_class_offset(lv, (S7457C10*), ABISELECT(8,4), "S7457C12");
    check_base_class_offset(lv, (S7457C10*)(S7457C14*), ABISELECT(8,4), "S7457C12");
    check_base_class_offset(lv, (S7457C6*), ABISELECT(32,20), "S7457C12");
    /*is_ambiguous_... S7457C12::S7457C8 */ AMB_check_base_class_offset(lv, (S7457C9*)(S7457C8*), ABISELECT(40,24), "S7457C12");
    /*is_ambiguous_... S7457C12::S7457C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C5*)(S7457C8*), ABISELECT(48,28), "S7457C12");
    /*is_ambiguous_... S7457C12::S7457C8 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C8*), ABISELECT(48,28), "S7457C12");
    /*is_ambiguous_... S7457C12::S7457C8 */ AMB_check_base_class_offset(lv, (S7457C8*), ABISELECT(40,24), "S7457C12");
    check_base_class_offset(lv, (S7457C13*), 0, "S7457C12");
    check_base_class_offset(lv, (S7457C9*)(S7457C8*)(S7457C14*), ABISELECT(56,32), "S7457C12");
    check_base_class_offset(lv, (S19572C5*)(S7457C5*)(S7457C8*)(S7457C14*), ABISELECT(64,36), "S7457C12");
    check_base_class_offset(lv, (S7457C5*)(S7457C8*)(S7457C14*), ABISELECT(64,36), "S7457C12");
    check_base_class_offset(lv, (S7457C8*)(S7457C14*), ABISELECT(56,32), "S7457C12");
    check_base_class_offset(lv, (S7457C14*), ABISELECT(56,32), "S7457C12");
    test_class_info(&lv, &cd_S7457C12);
    dp->~S7457C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C12(Test_S7457C12, "S7457C12", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN8S7457C12C1Ev();
extern void _ZN8S7457C12D2Ev();
Name_Map name_map_S7457C12[] = {
  NSPAIR(_ZN8S7457C12C1Ev),
  NSPAIR(_ZN8S7457C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C11;
extern VTBL_ENTRY _ZTI8S7457C11[];
extern  VTBL_ENTRY _ZTV8S7457C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C11[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C10;
extern VTBL_ENTRY _ZTI8S7457C10[];
extern  VTBL_ENTRY _ZTV8S7457C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C10[];
extern Class_Descriptor cd_S7457C6;
extern VTBL_ENTRY _ZTI7S7457C6[];
extern  VTBL_ENTRY _ZTV7S7457C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C6[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C8;
extern VTBL_ENTRY _ZTI7S7457C8[];
extern  VTBL_ENTRY _ZTV7S7457C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C8[];
extern Class_Descriptor cd_S7457C13;
extern VTBL_ENTRY _ZTI8S7457C13[];
extern  VTBL_ENTRY _ZTV8S7457C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C13[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C8;
extern VTBL_ENTRY _ZTI7S7457C8[];
extern  VTBL_ENTRY _ZTV7S7457C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C8[];
extern Class_Descriptor cd_S7457C14;
extern VTBL_ENTRY _ZTI8S7457C14[];
extern  VTBL_ENTRY _ZTV8S7457C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C14[];
static Base_Class bases_S7457C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
    1, //immediately_derived
  0, 1},
  {&cd_S7457C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7457C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19572C5,    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
    6, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(26,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7457C5,    ABISELECT(26,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7457C10,    ABISELECT(8,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7457C6,    ABISELECT(32,20), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S7457C9,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    10, //immediately_derived
  0, 0},
  {&cd_S7457C5,    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_S7457C8,    ABISELECT(40,24), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7457C13,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7457C9,    ABISELECT(56,32), //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
    7, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    15, //immediately_derived
  0, 0},
  {&cd_S7457C5,    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
    16, //immediately_derived
  0, 0},
  {&cd_S7457C8,    ABISELECT(56,32), //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
    8, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7457C14,    ABISELECT(56,32), //bcp->offset
    30, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7457C12[];
extern void _ZN8S7457C12D1Ev();
extern void _ZN8S7457C12D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S7457C12D1Ev,_ZTv0_n28_N8S7457C12D1Ev)();
extern void ABISELECT(_ZThn8_N8S7457C12D1Ev,_ZThn4_N8S7457C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7457C12D0Ev,_ZTv0_n28_N8S7457C12D0Ev)();
extern void ABISELECT(_ZThn8_N8S7457C12D0Ev,_ZThn4_N8S7457C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7457C12D1Ev,_ZTv0_n16_N8S7457C12D1Ev)();
extern void ABISELECT(_ZThn40_N8S7457C12D1Ev,_ZThn24_N8S7457C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7457C12D0Ev,_ZTv0_n16_N8S7457C12D0Ev)();
extern void ABISELECT(_ZThn40_N8S7457C12D0Ev,_ZThn24_N8S7457C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7457C12D1Ev,_ZTv0_n32_N8S7457C12D1Ev)();
extern void ABISELECT(_ZThn56_N8S7457C12D1Ev,_ZThn32_N8S7457C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7457C12D0Ev,_ZTv0_n32_N8S7457C12D0Ev)();
extern void ABISELECT(_ZThn56_N8S7457C12D0Ev,_ZThn32_N8S7457C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7457C12[] = {
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(32,20),
  ABISELECT(26,18),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  (VTBL_ENTRY)&_ZN8S7457C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7457C12D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(18,14),
  ABISELECT(-8,-4),
  0,
  ABISELECT(16,12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C12D1Ev,_ZTv0_n28_N8S7457C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C12D0Ev,_ZTv0_n28_N8S7457C12D0Ev),
  ABISELECT(-6,-2),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  ABISELECT(-40,-24),
  ABISELECT(-16,-8),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7457C12D1Ev,_ZTv0_n16_N8S7457C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7457C12D0Ev,_ZTv0_n16_N8S7457C12D0Ev),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-30,-14),
  ABISELECT(-32,-16),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7457C12D1Ev,_ZTv0_n32_N8S7457C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7457C12D0Ev,_ZTv0_n32_N8S7457C12D0Ev),
};
extern VTBL_ENTRY _ZTV8S7457C12[];
static  VTBL_ENTRY _tg__ZTV8S7457C13__8S7457C12[] = {
  0,
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C13[0]),
};
extern void _ZN8S7457C10D1Ev();
extern void _ZN8S7457C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7457C10__8S7457C12[] = {
  ABISELECT(18,14),
  ABISELECT(-8,-4),
  0,
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C10[0]),
  (VTBL_ENTRY)&_ZN8S7457C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7457C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C10__8S7457C12[] = {
  ABISELECT(24,16),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S7457C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7457C11__8S7457C12[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C12[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C6__8S7457C12[] = {
  ABISELECT(-6,-2),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C6[0]),
};
extern void _ZN7S7457C8D1Ev();
extern void _ZN7S7457C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C8__8S7457C12[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C8[0]),
  (VTBL_ENTRY)&_ZN7S7457C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C8__A1__8S7457C12[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern void _ZN8S7457C14D1Ev();
extern void _ZN8S7457C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7457C14__8S7457C12[] = {
  ABISELECT(-56,-32),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-30,-14),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C14[0]),
  (VTBL_ENTRY)&_ZN8S7457C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7457C14D0Ev,
};
extern void _ZN7S7457C8D1Ev();
extern void _ZN7S7457C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C88S7457C14__A1__8S7457C12[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C8[0]),
  (VTBL_ENTRY)&_ZN7S7457C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C88S7457C14__A2__8S7457C12[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S7457C14D1Ev,_ZTv0_n28_N8S7457C14D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S7457C14D0Ev,_ZTv0_n28_N8S7457C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7457C10__8S7457C14__8S7457C12[] = {
  ABISELECT(48,28),
  ABISELECT(18,14),
  ABISELECT(-8,-4),
  0,
  ABISELECT(16,12),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S7457C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C14D1Ev,_ZTv0_n28_N8S7457C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C14D0Ev,_ZTv0_n28_N8S7457C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C14__8S7457C12[] = {
  ABISELECT(24,16),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI8S7457C14[0]),
};
static  VTT_ENTRY vtt_S7457C12[] = {
  {&(_ZTV8S7457C12[10]),  10,40},
  {&(_tg__ZTV8S7457C13__8S7457C12[4]),  4,4},
  {&(_tg__ZTV8S7457C13__8S7457C12[4]),  4,4},
  {&(_ZTV8S7457C12[19]),  19,40},
  {&(_ZTV8S7457C12[19]),  19,40},
  {&(_ZTV8S7457C12[10]),  10,40},
  {&(_ZTV8S7457C12[24]),  24,40},
  {&(_ZTV8S7457C12[28]),  28,40},
  {&(_ZTV8S7457C12[38]),  38,40},
  {&(_tg__ZTV8S7457C10__8S7457C12[6]),  6,8},
  {&(_tg__ZTV8S7457C10__8S7457C12[6]),  6,8},
  {&(_tg__ZTV7S7457C9__8S7457C10__8S7457C12[3]),  3,3},
  {&(_tg__ZTV8S7457C11__8S7457C12[3]),  3,3},
  {&(_tg__ZTV7S7457C9__8S7457C12[3]),  3,3},
  {&(_tg__ZTV7S7457C6__8S7457C12[3]),  3,3},
  {&(_tg__ZTV7S7457C8__8S7457C12[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C8__A1__8S7457C12[3]),  3,3},
  {&(_tg__ZTV8S7457C14__8S7457C12[7]),  7,9},
  {&(_tg__ZTV7S7457C88S7457C14__A1__8S7457C12[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C88S7457C14__A2__8S7457C12[3]),  3,3},
  {&(_tg__ZTV8S7457C10__8S7457C14__8S7457C12[7]),  7,9},
  {&(_tg__ZTV8S7457C10__8S7457C14__8S7457C12[7]),  7,9},
  {&(_tg__ZTV7S7457C9__8S7457C14__8S7457C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7457C12[];
extern  VTBL_ENTRY _ZTV8S7457C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C12[];
static VTBL_ENTRY alt_thunk_names42[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7457C12D0Ev,_ZTv0_n32_N8S7457C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7457C12D0Ev,_ZThn32_N8S7457C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7457C12D1Ev,_ZTv0_n32_N8S7457C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7457C12D1Ev,_ZThn32_N8S7457C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7457C12D0Ev,_ZTv0_n16_N8S7457C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S7457C12D0Ev,_ZThn24_N8S7457C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7457C12D1Ev,_ZTv0_n16_N8S7457C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S7457C12D1Ev,_ZThn24_N8S7457C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7457C12D0Ev,_ZTv0_n28_N8S7457C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7457C12D0Ev,_ZThn4_N8S7457C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7457C12D1Ev,_ZTv0_n28_N8S7457C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7457C12D1Ev,_ZThn4_N8S7457C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7457C12 = {  "S7457C12", // class name
  bases_S7457C12, 18,
  &(vtc_S7457C12[0]), // expected_vtbl_contents
  &(vtt_S7457C12[0]), // expected_vtt_contents
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI8S7457C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7457C12),40, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7457C12),23, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names42,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7457C16  : virtual S7457C9 {
  ~S7457C16(); // tgen
  S7457C16(); // tgen
};
//SIG(-1 S7457C16) C1{ VBC2{ VBC3{ m Fs:13}}}


S7457C16 ::~S7457C16(){ note_dtor("S7457C16", this);} // tgen
S7457C16 ::S7457C16(){ note_ctor("S7457C16", this);} // tgen

static void Test_S7457C16()
{
  extern Class_Descriptor cd_S7457C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7457C16, buf);
    S7457C16 *dp, &lv = *(dp=new (buf) S7457C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7457C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7457C16)");
    check_base_class_offset(lv, (S19572C5*)(S7457C9*), ABISELECT(8,4), "S7457C16");
    check_base_class_offset(lv, (S7457C9*), 0, "S7457C16");
    test_class_info(&lv, &cd_S7457C16);
    dp->~S7457C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C16(Test_S7457C16, "S7457C16", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S7457C16C1Ev();
extern void _ZN8S7457C16D1Ev();
Name_Map name_map_S7457C16[] = {
  NSPAIR(_ZN8S7457C16C1Ev),
  NSPAIR(_ZN8S7457C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
static Base_Class bases_S7457C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
  0, 1},
  {&cd_S7457C9,    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 _ZTI8S7457C16[];
static  VTBL_ENTRY vtc_S7457C16[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C16[0]),
};
extern VTBL_ENTRY _ZTV8S7457C16[];
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C16[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTT_ENTRY vtt_S7457C16[] = {
  {&(_ZTV8S7457C16[4]),  4,4},
  {&(_ZTV8S7457C16[4]),  4,4},
  {&(_tg__ZTV7S7457C9__8S7457C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7457C16[];
extern  VTBL_ENTRY _ZTV8S7457C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C16[];
Class_Descriptor cd_S7457C16 = {  "S7457C16", // class name
  bases_S7457C16, 2,
  &(vtc_S7457C16[0]), // expected_vtbl_contents
  &(vtt_S7457C16[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7457C16),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7457C16),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7457C16),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  S7457C2  : virtual S19572C5 , S7457C4 , S7457C12 , S629C14 , S7457C16 {
  virtual  ~S7457C2(); // _ZN7S7457C2D2Ev
  S7457C2(); // tgen
};
//SIG(-1 S7457C2) C1{ VBC2{ m Fs:13} BC3{ VBC4{ BC2} VBC5{ VBC4} VBC6{ VBC2 VBC4 BC5 BC7{ BC8{ VBC2} BC4 vd} BC8 vd FD[5]} BC8 v1 FC9{ VBC10{ VBC2} VBC8 BC2 VBC4 vd Fi}} BC11{ VBC9 VBC5 VBC7 BC12{ VBC2 VBC8} VBC13{ VBC4 VBC9 BC7 vd} vd} BC14{ m} BC15{ VBC8} vd}


 S7457C2 ::~S7457C2(){ note_dtor("S7457C2", this);}
S7457C2 ::S7457C2(){ note_ctor("S7457C2", this);} // tgen

static void Test_S7457C2()
{
  extern Class_Descriptor cd_S7457C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,38)];
    init_test(&cd_S7457C2, buf);
    S7457C2 *dp, &lv = *(dp=new (buf) S7457C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,148), "sizeof(S7457C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7457C2)");
    /*is_ambiguous_... S7457C2::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*), ABISELECT(64,36), "S7457C2");
    /*is_ambiguous_... S7457C7::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C7*), ABISELECT(64,36), "S7457C2");
    check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C8*)(S7457C7*), ABISELECT(64,36), "S7457C2");
    /*is_ambiguous_... S7457C7::S7457C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C7*), ABISELECT(64,36), "S7457C2");
    /*is_ambiguous_... S7457C4::S7457C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C4*), ABISELECT(64,36), "S7457C2");
    check_base_class_offset(lv, (S19572C5*)(S7457C11*), ABISELECT(64,36), "S7457C2");
    /*is_ambiguous_... S7457C2::S7457C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*), ABISELECT(64,36), "S7457C2");
    /*is_ambiguous_... S7457C2::S7457C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C8*), ABISELECT(64,36), "S7457C2");
    check_base_class_offset(lv, (S19572C5*)(S7457C13*)(S7457C12*), ABISELECT(64,36), "S7457C2");
    check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C8*)(S7457C14*), ABISELECT(64,36), "S7457C2");
    /*is_ambiguous_... S7457C2::S7457C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C5*), ABISELECT(66,38), "S7457C2");
    /*is_ambiguous_... S7457C4::S7457C5 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C4*), ABISELECT(66,38), "S7457C2");
    /*is_ambiguous_... S7457C2::S7457C6 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C6*), ABISELECT(66,38), "S7457C2");
    /*is_ambiguous_... S7457C7::S7457C5 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C7*), ABISELECT(66,38), "S7457C2");
    check_base_class_offset(lv, (S7457C5*)(S7457C6*)(S7457C7*), ABISELECT(66,38), "S7457C2");
    check_base_class_offset(lv, (S7457C5*)(S7457C10*), ABISELECT(66,38), "S7457C2");
    /*is_ambiguous_... S7457C14::S7457C5 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C14*), ABISELECT(66,38), "S7457C2");
    /*is_ambiguous_... S7457C4::S7457C6 */ AMB_check_base_class_offset(lv, (S7457C6*)(S7457C4*), ABISELECT(72,40), "S7457C2");
    check_base_class_offset(lv, (S7457C6*)(S7457C12*), ABISELECT(72,40), "S7457C2");
    check_base_class_offset(lv, (S7457C6*)(S7457C7*), ABISELECT(80,44), "S7457C2");
    check_base_class_offset(lv, (S7457C9*)(S7457C8*)(S7457C7*), ABISELECT(88,48), "S7457C2");
    check_base_class_offset(lv, (S19572C5*)(S7457C5*)(S7457C8*)(S7457C7*), ABISELECT(96,52), "S7457C2");
    check_base_class_offset(lv, (S7457C5*)(S7457C8*)(S7457C7*), ABISELECT(96,52), "S7457C2");
    check_base_class_offset(lv, (S7457C8*)(S7457C7*), ABISELECT(88,48), "S7457C2");
    /*is_ambiguous_... S7457C7::S7457C9 */ AMB_check_base_class_offset(lv, (S7457C9*)(S7457C7*), ABISELECT(104,56), "S7457C2");
    check_base_class_offset(lv, (S7457C7*)(S7457C4*), ABISELECT(80,44), "S7457C2");
    /*is_ambiguous_... S7457C4::S7457C9 */ AMB_check_base_class_offset(lv, (S7457C9*)(S7457C4*), 0, "S7457C2");
    check_base_class_offset(lv, (S7457C4*), 0, "S7457C2");
    check_base_class_offset(lv, (S7457C11*)(S7457C10*), ABISELECT(192,120), "S7457C2");
    check_base_class_offset(lv, (S7457C9*)(S7457C10*), ABISELECT(48,28), "S7457C2");
    check_base_class_offset(lv, (S7457C9*)(S7457C13*)(S7457C12*), ABISELECT(48,28), "S7457C2");
    check_base_class_offset(lv, (S7457C9*)(S7457C16*), ABISELECT(48,28), "S7457C2");
    /*is_ambiguous_... S7457C10::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C10*), ABISELECT(200,124), "S7457C2");
    check_base_class_offset(lv, (S7457C10*)(S7457C12*), ABISELECT(192,120), "S7457C2");
    check_base_class_offset(lv, (S7457C10*)(S7457C14*), ABISELECT(192,120), "S7457C2");
    /*is_ambiguous_... S7457C2::S7457C8 */ AMB_check_base_class_offset(lv, (S7457C9*)(S7457C8*), ABISELECT(208,132), "S7457C2");
    /*is_ambiguous_... S7457C2::S7457C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C5*)(S7457C8*), ABISELECT(216,136), "S7457C2");
    /*is_ambiguous_... S7457C2::S7457C8 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C8*), ABISELECT(216,136), "S7457C2");
    /*is_ambiguous_... S7457C12::S7457C8 */ AMB_check_base_class_offset(lv, (S7457C8*)(S7457C12*), ABISELECT(208,132), "S7457C2");
    check_base_class_offset(lv, (S7457C13*)(S7457C12*), ABISELECT(48,28), "S7457C2");
    check_base_class_offset(lv, (S7457C9*)(S7457C8*)(S7457C14*), ABISELECT(224,140), "S7457C2");
    check_base_class_offset(lv, (S19572C5*)(S7457C5*)(S7457C8*)(S7457C14*), ABISELECT(232,144), "S7457C2");
    check_base_class_offset(lv, (S7457C5*)(S7457C8*)(S7457C14*), ABISELECT(232,144), "S7457C2");
    check_base_class_offset(lv, (S7457C8*)(S7457C14*), ABISELECT(224,140), "S7457C2");
    check_base_class_offset(lv, (S7457C14*)(S7457C12*), ABISELECT(224,140), "S7457C2");
    check_base_class_offset(lv, (S7457C12*), ABISELECT(48,28), "S7457C2");
    check_base_class_offset(lv, (S629C14*), 0, "S7457C2");
    check_base_class_offset(lv, (S7457C16*), ABISELECT(56,32), "S7457C2");
    test_class_info(&lv, &cd_S7457C2);
    dp->~S7457C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C2(Test_S7457C2, "S7457C2", ABISELECT(240,148));

#else // __cplusplus

extern void _ZN7S7457C2C1Ev();
extern void _ZN7S7457C2D2Ev();
Name_Map name_map_S7457C2[] = {
  NSPAIR(_ZN7S7457C2C1Ev),
  NSPAIR(_ZN7S7457C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C6;
extern VTBL_ENTRY _ZTI7S7457C6[];
extern  VTBL_ENTRY _ZTV7S7457C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C6[];
extern Class_Descriptor cd_S7457C6;
extern VTBL_ENTRY _ZTI7S7457C6[];
extern  VTBL_ENTRY _ZTV7S7457C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C6[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C8;
extern VTBL_ENTRY _ZTI7S7457C8[];
extern  VTBL_ENTRY _ZTV7S7457C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C8[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S7457C7;
extern VTBL_ENTRY _ZTI7S7457C7[];
extern  VTBL_ENTRY _ZTV7S7457C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C7[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S7457C4;
extern VTBL_ENTRY _ZTI7S7457C4[];
extern  VTBL_ENTRY _ZTV7S7457C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C4[];
extern Class_Descriptor cd_S7457C11;
extern VTBL_ENTRY _ZTI8S7457C11[];
extern  VTBL_ENTRY _ZTV8S7457C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C11[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C10;
extern VTBL_ENTRY _ZTI8S7457C10[];
extern  VTBL_ENTRY _ZTV8S7457C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C10[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C8;
extern VTBL_ENTRY _ZTI7S7457C8[];
extern  VTBL_ENTRY _ZTV7S7457C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C8[];
extern Class_Descriptor cd_S7457C13;
extern VTBL_ENTRY _ZTI8S7457C13[];
extern  VTBL_ENTRY _ZTV8S7457C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C13[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C8;
extern VTBL_ENTRY _ZTI7S7457C8[];
extern  VTBL_ENTRY _ZTV7S7457C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C8[];
extern Class_Descriptor cd_S7457C14;
extern VTBL_ENTRY _ZTI8S7457C14[];
extern  VTBL_ENTRY _ZTV8S7457C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C14[];
extern Class_Descriptor cd_S7457C12;
extern VTBL_ENTRY _ZTI8S7457C12[];
extern  VTBL_ENTRY _ZTV8S7457C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C12[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S7457C16;
extern VTBL_ENTRY _ZTI8S7457C16[];
extern  VTBL_ENTRY _ZTV8S7457C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C16[];
static Base_Class bases_S7457C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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, 1},
  {&cd_S19572C5,    ABISELECT(66,38), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7457C5,    ABISELECT(66,38), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7457C6,    ABISELECT(72,40), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7457C6,    ABISELECT(80,44), //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
    10, //immediately_derived
  0, 0},
  {&cd_S7457C9,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    7, //immediately_derived
  0, 0},
  {&cd_S7457C5,    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
    8, //immediately_derived
  0, 0},
  {&cd_S7457C8,    ABISELECT(88,48), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7457C9,    ABISELECT(104,56), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7457C7,    ABISELECT(80,44), //bcp->offset
    33, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7457C9,    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
    15, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7457C4,    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
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7457C11,    ABISELECT(192,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7457C9,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19572C5,    ABISELECT(200,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
    16, //immediately_derived
  0, 0},
  {&cd_S7457C10,    ABISELECT(192,120), //bcp->offset
    48, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S7457C9,    ABISELECT(208,132), //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
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(216,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
    19, //immediately_derived
  0, 0},
  {&cd_S7457C5,    ABISELECT(216,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
    20, //immediately_derived
  0, 0},
  {&cd_S7457C8,    ABISELECT(208,132), //bcp->offset
    57, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S7457C13,    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
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7457C9,    ABISELECT(224,140), //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_S19572C5,    ABISELECT(232,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
    24, //immediately_derived
  0, 0},
  {&cd_S7457C5,    ABISELECT(232,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
    25, //immediately_derived
  0, 0},
  {&cd_S7457C8,    ABISELECT(224,140), //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
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7457C14,    ABISELECT(224,140), //bcp->offset
    63, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S7457C12,    ABISELECT(48,28), //bcp->offset
    14, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S629C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7457C16,    ABISELECT(56,32), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7457C2[];
extern void _ZN7S7457C42v1Ev();
extern void _ZN7S7457C2D1Ev();
extern void _ZN7S7457C2D0Ev();
extern void ABISELECT(_ZThn48_N7S7457C2D1Ev,_ZThn28_N7S7457C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S7457C2D0Ev,_ZThn28_N7S7457C2D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7457C2D1Ev,_ZTv0_n20_N7S7457C2D1Ev)();
extern void ABISELECT(_ZThn80_N7S7457C2D1Ev,_ZThn44_N7S7457C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7457C2D0Ev,_ZTv0_n20_N7S7457C2D0Ev)();
extern void ABISELECT(_ZThn80_N7S7457C2D0Ev,_ZThn44_N7S7457C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N7S7457C2D1Ev,_ZTvn4_n20_N7S7457C2D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7457C2D0Ev,_ZTvn4_n20_N7S7457C2D0Ev)();
extern void ABISELECT(_ZTv0_n56_N7S7457C2D1Ev,_ZTv0_n28_N7S7457C2D1Ev)();
extern void ABISELECT(_ZThn192_N7S7457C2D1Ev,_ZThn120_N7S7457C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7457C2D0Ev,_ZTv0_n28_N7S7457C2D0Ev)();
extern void ABISELECT(_ZThn192_N7S7457C2D0Ev,_ZThn120_N7S7457C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7457C2D1Ev,_ZTv0_n16_N7S7457C2D1Ev)();
extern void ABISELECT(_ZThn208_N7S7457C2D1Ev,_ZThn132_N7S7457C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7457C2D0Ev,_ZTv0_n16_N7S7457C2D0Ev)();
extern void ABISELECT(_ZThn208_N7S7457C2D0Ev,_ZThn132_N7S7457C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7457C2D1Ev,_ZTv0_n32_N7S7457C2D1Ev)();
extern void ABISELECT(_ZThn224_N7S7457C2D1Ev,_ZThn140_N7S7457C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7457C2D0Ev,_ZTv0_n32_N7S7457C2D0Ev)();
extern void ABISELECT(_ZThn224_N7S7457C2D0Ev,_ZThn140_N7S7457C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7457C2[] = {
  ABISELECT(224,140),
  ABISELECT(208,132),
  ABISELECT(48,28),
  ABISELECT(192,120),
  ABISELECT(192,120),
  ABISELECT(80,44),
  ABISELECT(72,40),
  ABISELECT(66,38),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&_ZN7S7457C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7457C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C2D0Ev,
  ABISELECT(176,112),
  ABISELECT(160,104),
  ABISELECT(24,12),
  ABISELECT(18,10),
  ABISELECT(144,92),
  ABISELECT(144,92),
  0,
  ABISELECT(16,8),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7457C2D1Ev,_ZThn28_N7S7457C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7457C2D0Ev,_ZThn28_N7S7457C2D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(8,4),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  ABISELECT(-6,-2),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  ABISELECT(-80,-44),
  ABISELECT(-16,-8),
  ABISELECT(-14,-6),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7457C2D1Ev,_ZTv0_n20_N7S7457C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7457C2D0Ev,_ZTv0_n20_N7S7457C2D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7457C2D1Ev,_ZTvn4_n20_N7S7457C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7457C2D0Ev,_ZTvn4_n20_N7S7457C2D0Ev),
  ABISELECT(-40,-20),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  ABISELECT(-192,-120),
  ABISELECT(-126,-82),
  ABISELECT(-144,-92),
  0,
  ABISELECT(-128,-84),
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7457C2D1Ev,_ZTv0_n28_N7S7457C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7457C2D0Ev,_ZTv0_n28_N7S7457C2D0Ev),
  ABISELECT(-208,-132),
  ABISELECT(-144,-96),
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7457C2D1Ev,_ZTv0_n16_N7S7457C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7457C2D0Ev,_ZTv0_n16_N7S7457C2D0Ev),
  ABISELECT(-224,-140),
  ABISELECT(-176,-112),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-158,-102),
  ABISELECT(-160,-104),
  ABISELECT(-224,-140),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7457C2D1Ev,_ZTv0_n32_N7S7457C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7457C2D0Ev,_ZTv0_n32_N7S7457C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S7457C2[];
extern void _ZN7S7457C42v1Ev();
extern void _ZN7S7457C4D1Ev();
extern void _ZN7S7457C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C4__7S7457C2[] = {
  ABISELECT(80,44),
  ABISELECT(72,40),
  ABISELECT(66,38),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
  (VTBL_ENTRY)&_ZN7S7457C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7457C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C4__A2__7S7457C2[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C6__7S7457C4__7S7457C2[] = {
  ABISELECT(-6,-2),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S7457C4D1Ev,_ZTv0_n20_N7S7457C4D1Ev)();
extern void ABISELECT(_ZThn80_N7S7457C4D1Ev,_ZThn44_N7S7457C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7457C4D0Ev,_ZTv0_n20_N7S7457C4D0Ev)();
extern void ABISELECT(_ZThn80_N7S7457C4D0Ev,_ZThn44_N7S7457C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7457C7__7S7457C4__7S7457C2[] = {
  ABISELECT(-80,-44),
  ABISELECT(-16,-8),
  ABISELECT(-14,-6),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7457C4D1Ev,_ZTv0_n20_N7S7457C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7457C4D0Ev,_ZTv0_n20_N7S7457C4D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N7S7457C4D1Ev,_ZTvn4_n20_N7S7457C4D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7457C4D0Ev,_ZTvn4_n20_N7S7457C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7457C87S7457C7__7S7457C4__7S7457C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7457C4D1Ev,_ZTvn4_n20_N7S7457C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7457C4D0Ev,_ZTvn4_n20_N7S7457C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C7__A1__7S7457C4__7S7457C2[] = {
  ABISELECT(-40,-20),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
};
extern void _ZN8S7457C12D1Ev();
extern void _ZN8S7457C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7457C12__7S7457C2[] = {
  ABISELECT(176,112),
  ABISELECT(160,104),
  ABISELECT(24,12),
  ABISELECT(18,10),
  ABISELECT(144,92),
  ABISELECT(144,92),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  (VTBL_ENTRY)&_ZN8S7457C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7457C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7457C138S7457C12__7S7457C2[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C13[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S7457C12D1Ev,_ZTv0_n28_N8S7457C12D1Ev)();
extern void ABISELECT(_ZThn144_N8S7457C12D1Ev,_ZThn92_N8S7457C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7457C12D0Ev,_ZTv0_n28_N8S7457C12D0Ev)();
extern void ABISELECT(_ZThn144_N8S7457C12D0Ev,_ZThn92_N8S7457C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7457C10__8S7457C12__7S7457C2[] = {
  ABISELECT(-144,-92),
  ABISELECT(-126,-82),
  ABISELECT(-144,-92),
  0,
  ABISELECT(-128,-84),
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C12D1Ev,_ZTv0_n28_N8S7457C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C12D0Ev,_ZTv0_n28_N8S7457C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7457C6__8S7457C12__7S7457C2[] = {
  ABISELECT(-6,-2),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S7457C12D1Ev,_ZTv0_n16_N8S7457C12D1Ev)();
extern void ABISELECT(_ZThn160_N8S7457C12D1Ev,_ZThn104_N8S7457C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7457C12D0Ev,_ZTv0_n16_N8S7457C12D0Ev)();
extern void ABISELECT(_ZThn160_N8S7457C12D0Ev,_ZThn104_N8S7457C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7457C8__8S7457C12__7S7457C2[] = {
  ABISELECT(-160,-104),
  ABISELECT(-144,-96),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7457C12D1Ev,_ZTv0_n16_N8S7457C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7457C12D0Ev,_ZTv0_n16_N8S7457C12D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S7457C12D1Ev,_ZTv0_n32_N8S7457C12D1Ev)();
extern void ABISELECT(_ZThn176_N8S7457C12D1Ev,_ZThn112_N8S7457C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7457C12D0Ev,_ZTv0_n32_N8S7457C12D0Ev)();
extern void ABISELECT(_ZThn176_N8S7457C12D0Ev,_ZThn112_N8S7457C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7457C14__8S7457C12__7S7457C2[] = {
  ABISELECT(-176,-112),
  ABISELECT(-176,-112),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-158,-102),
  ABISELECT(-160,-104),
  ABISELECT(-176,-112),
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7457C12D1Ev,_ZTv0_n32_N8S7457C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7457C12D0Ev,_ZTv0_n32_N8S7457C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7457C16__7S7457C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C16__7S7457C2[] = {
  ABISELECT(16,8),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S7457C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C6__7S7457C2[] = {
  ABISELECT(-6,-2),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C6[0]),
};
extern void _ZN7S7457C7D1Ev();
extern void _ZN7S7457C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C7__7S7457C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-14,-6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C7[0]),
  (VTBL_ENTRY)&_ZN7S7457C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C67S7457C7__A1__7S7457C2[] = {
  ABISELECT(-14,-6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C6[0]),
};
extern void _ZN7S7457C8D1Ev();
extern void _ZN7S7457C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C87S7457C7__7S7457C2[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C8[0]),
  (VTBL_ENTRY)&_ZN7S7457C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C87S7457C7__7S7457C2[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C7__A1__7S7457C2[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern void ABISELECT(_ZThn8_N7S7457C7D1Ev,_ZThn4_N7S7457C7D1Ev)();
extern void ABISELECT(_ZThn8_N7S7457C7D0Ev,_ZThn4_N7S7457C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7457C8__7S7457C7__7S7457C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7457C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7457C7D1Ev,_ZThn4_N7S7457C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7457C7D0Ev,_ZThn4_N7S7457C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__A1__7S7457C7__7S7457C2[] = {
  ABISELECT(-40,-20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7457C7[0]),
};
extern void _ZN8S7457C10D1Ev();
extern void _ZN8S7457C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7457C10__7S7457C2[] = {
  ABISELECT(-126,-82),
  ABISELECT(-144,-92),
  0,
  ABISELECT(-128,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C10[0]),
  (VTBL_ENTRY)&_ZN8S7457C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7457C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C10__7S7457C2[] = {
  ABISELECT(16,8),
  ABISELECT(144,92),
  (VTBL_ENTRY)&(_ZTI8S7457C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7457C11__7S7457C2[] = {
  ABISELECT(-128,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__A3__7S7457C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern void _ZN7S7457C8D1Ev();
extern void _ZN7S7457C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C8__A1__7S7457C2[] = {
  ABISELECT(-144,-96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C8[0]),
  (VTBL_ENTRY)&_ZN7S7457C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C8__A4__7S7457C2[] = {
  ABISELECT(-144,-96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern void _ZN8S7457C14D1Ev();
extern void _ZN8S7457C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7457C14__7S7457C2[] = {
  ABISELECT(-176,-112),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-158,-102),
  ABISELECT(-160,-104),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C14[0]),
  (VTBL_ENTRY)&_ZN8S7457C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7457C14D0Ev,
};
extern void _ZN7S7457C8D1Ev();
extern void _ZN7S7457C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C88S7457C14__A2__7S7457C2[] = {
  ABISELECT(-160,-104),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C8[0]),
  (VTBL_ENTRY)&_ZN7S7457C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C88S7457C14__A5__7S7457C2[] = {
  ABISELECT(-160,-104),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S7457C14D1Ev,_ZTv0_n28_N8S7457C14D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S7457C14D0Ev,_ZTv0_n28_N8S7457C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7457C10__8S7457C14__7S7457C2[] = {
  ABISELECT(32,20),
  ABISELECT(-126,-82),
  ABISELECT(-144,-92),
  0,
  ABISELECT(-128,-84),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S7457C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C14D1Ev,_ZTv0_n28_N8S7457C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C14D0Ev,_ZTv0_n28_N8S7457C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C14__7S7457C2[] = {
  ABISELECT(16,8),
  ABISELECT(176,112),
  (VTBL_ENTRY)&(_ZTI8S7457C14[0]),
};
static  VTT_ENTRY vtt_S7457C2[] = {
  {&(_ZTV7S7457C2[11]),  11,73},
  {&(_tg__ZTV7S7457C4__7S7457C2[6]),  6,9},
  {&(_tg__ZTV7S7457C97S7457C4__A2__7S7457C2[3]),  3,3},
  {&(_tg__ZTV7S7457C6__7S7457C4__7S7457C2[3]),  3,3},
  {&(_tg__ZTV7S7457C7__7S7457C4__7S7457C2[5]),  5,7},
  {&(_tg__ZTV7S7457C87S7457C7__7S7457C4__7S7457C2[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C7__A1__7S7457C4__7S7457C2[3]),  3,3},
  {&(_tg__ZTV8S7457C12__7S7457C2[10]),  10,12},
  {&(_tg__ZTV8S7457C138S7457C12__7S7457C2[4]),  4,4},
  {&(_tg__ZTV8S7457C138S7457C12__7S7457C2[4]),  4,4},
  {&(_tg__ZTV8S7457C10__8S7457C12__7S7457C2[7]),  7,9},
  {&(_tg__ZTV8S7457C10__8S7457C12__7S7457C2[7]),  7,9},
  {&(_tg__ZTV8S7457C12__7S7457C2[10]),  10,12},
  {&(_tg__ZTV7S7457C6__8S7457C12__7S7457C2[3]),  3,3},
  {&(_tg__ZTV7S7457C8__8S7457C12__7S7457C2[4]),  4,6},
  {&(_tg__ZTV8S7457C14__8S7457C12__7S7457C2[8]),  8,10},
  {&(_tg__ZTV8S7457C16__7S7457C2[4]),  4,4},
  {&(_tg__ZTV7S7457C9__8S7457C16__7S7457C2[3]),  3,3},
  {&(_ZTV7S7457C2[33]),  33,73},
  {&(_ZTV7S7457C2[38]),  38,73},
  {&(_ZTV7S7457C2[43]),  43,73},
  {&(_ZTV7S7457C2[48]),  48,73},
  {&(_ZTV7S7457C2[24]),  24,73},
  {&(_ZTV7S7457C2[55]),  55,73},
  {&(_ZTV7S7457C2[55]),  55,73},
  {&(_ZTV7S7457C2[24]),  24,73},
  {&(_ZTV7S7457C2[61]),  61,73},
  {&(_ZTV7S7457C2[71]),  71,73},
  {&(_ZTV7S7457C2[30]),  30,73},
  {&(_tg__ZTV7S7457C6__7S7457C2[3]),  3,3},
  {&(_tg__ZTV7S7457C7__7S7457C2[4]),  4,6},
  {&(_tg__ZTV7S7457C67S7457C7__A1__7S7457C2[3]),  3,3},
  {&(_tg__ZTV7S7457C87S7457C7__7S7457C2[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C87S7457C7__7S7457C2[3]),  3,3},
  {&(_tg__ZTV7S7457C97S7457C7__A1__7S7457C2[3]),  3,3},
  {&(_tg__ZTV7S7457C8__7S7457C7__7S7457C2[3]),  3,5},
  {&(_tg__ZTV7S7457C9__A1__7S7457C7__7S7457C2[3]),  3,3},
  {&(_tg__ZTV8S7457C10__7S7457C2[6]),  6,8},
  {&(_tg__ZTV8S7457C10__7S7457C2[6]),  6,8},
  {&(_tg__ZTV7S7457C9__8S7457C10__7S7457C2[3]),  3,3},
  {&(_tg__ZTV8S7457C11__7S7457C2[3]),  3,3},
  {&(_tg__ZTV7S7457C9__A3__7S7457C2[3]),  3,3},
  {&(_tg__ZTV7S7457C8__A1__7S7457C2[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C8__A4__7S7457C2[3]),  3,3},
  {&(_tg__ZTV8S7457C14__7S7457C2[7]),  7,9},
  {&(_tg__ZTV7S7457C88S7457C14__A2__7S7457C2[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C88S7457C14__A5__7S7457C2[3]),  3,3},
  {&(_tg__ZTV8S7457C10__8S7457C14__7S7457C2[7]),  7,9},
  {&(_tg__ZTV8S7457C10__8S7457C14__7S7457C2[7]),  7,9},
  {&(_tg__ZTV7S7457C9__8S7457C14__7S7457C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7457C2[];
extern  VTBL_ENTRY _ZTV7S7457C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C2[];
static VTBL_ENTRY alt_thunk_names43[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7457C12D0Ev,_ZTv0_n32_N8S7457C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S7457C12D0Ev,_ZThn112_N8S7457C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7457C12D1Ev,_ZTv0_n32_N8S7457C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S7457C12D1Ev,_ZThn112_N8S7457C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7457C12D0Ev,_ZTv0_n16_N8S7457C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S7457C12D0Ev,_ZThn104_N8S7457C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7457C12D1Ev,_ZTv0_n16_N8S7457C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S7457C12D1Ev,_ZThn104_N8S7457C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7457C12D0Ev,_ZTv0_n28_N8S7457C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S7457C12D0Ev,_ZThn92_N8S7457C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7457C12D1Ev,_ZTv0_n28_N8S7457C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S7457C12D1Ev,_ZThn92_N8S7457C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7457C4D0Ev,_ZTv0_n20_N7S7457C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7457C4D0Ev,_ZThn44_N7S7457C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7457C4D1Ev,_ZTv0_n20_N7S7457C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7457C4D1Ev,_ZThn44_N7S7457C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7457C2D0Ev,_ZTv0_n32_N7S7457C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7457C2D0Ev,_ZThn140_N7S7457C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7457C2D1Ev,_ZTv0_n32_N7S7457C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7457C2D1Ev,_ZThn140_N7S7457C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7457C2D0Ev,_ZTv0_n16_N7S7457C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7457C2D0Ev,_ZThn132_N7S7457C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7457C2D1Ev,_ZTv0_n16_N7S7457C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7457C2D1Ev,_ZThn132_N7S7457C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7457C2D0Ev,_ZTv0_n28_N7S7457C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7457C2D0Ev,_ZThn120_N7S7457C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7457C2D1Ev,_ZTv0_n28_N7S7457C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7457C2D1Ev,_ZThn120_N7S7457C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7457C2D0Ev,_ZTv0_n20_N7S7457C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7457C2D0Ev,_ZThn44_N7S7457C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7457C2D1Ev,_ZTv0_n20_N7S7457C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7457C2D1Ev,_ZThn44_N7S7457C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7457C2 = {  "S7457C2", // class name
  bases_S7457C2, 30,
  &(vtc_S7457C2[0]), // expected_vtbl_contents
  &(vtt_S7457C2[0]), // expected_vtt_contents
  ABISELECT(240,148), // object size
  NSPAIRA(_ZTI7S7457C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7457C2),73, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7457C2),50, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names43,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7457C1  : S7457C2 , S7457C11 {
  virtual  ~S7457C1(); // _ZN7S7457C1D2Ev
  S7457C1(); // tgen
};
//SIG(1 S7457C1) C1{ BC2{ VBC3{ m Fs:13} BC4{ VBC5{ BC3} VBC6{ VBC5} VBC7{ VBC3 VBC5 BC6 BC8{ BC9{ VBC3} BC5 vd} BC9 vd FD[5]} BC9 v1 FC10{ VBC11{ VBC3} VBC9 BC3 VBC5 vd Fi}} BC12{ VBC10 VBC6 VBC8 BC13{ VBC3 VBC9} VBC14{ VBC5 VBC10 BC8 vd} vd} BC15{ m} BC16{ VBC9} vd} BC11 vd}


 S7457C1 ::~S7457C1(){ note_dtor("S7457C1", this);}
S7457C1 ::S7457C1(){ note_ctor("S7457C1", this);} // tgen

static void Test_S7457C1()
{
  extern Class_Descriptor cd_S7457C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,39)];
    init_test(&cd_S7457C1, buf);
    S7457C1 *dp, &lv = *(dp=new (buf) S7457C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,152), "sizeof(S7457C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7457C1)");
    /*is_ambiguous_... S7457C2::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C2*), ABISELECT(72,40), "S7457C1");
    /*is_ambiguous_... S7457C7::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C7*), ABISELECT(72,40), "S7457C1");
    check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C8*)(S7457C7*), ABISELECT(72,40), "S7457C1");
    /*is_ambiguous_... S7457C7::S7457C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C7*), ABISELECT(72,40), "S7457C1");
    /*is_ambiguous_... S7457C4::S7457C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C4*)(S7457C2*), ABISELECT(72,40), "S7457C1");
    /*is_ambiguous_... S7457C1::S7457C11 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C11*), ABISELECT(72,40), "S7457C1");
    /*is_ambiguous_... S7457C1::S7457C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*), ABISELECT(72,40), "S7457C1");
    /*is_ambiguous_... S7457C1::S7457C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C8*), ABISELECT(72,40), "S7457C1");
    check_base_class_offset(lv, (S19572C5*)(S7457C13*)(S7457C12*)(S7457C2*), ABISELECT(72,40), "S7457C1");
    check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C8*)(S7457C14*), ABISELECT(72,40), "S7457C1");
    /*is_ambiguous_... S7457C1::S7457C11 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C11*), ABISELECT(72,40), "S7457C1");
    /*is_ambiguous_... S7457C1::S7457C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C5*), ABISELECT(74,42), "S7457C1");
    /*is_ambiguous_... S7457C4::S7457C5 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C4*)(S7457C2*), ABISELECT(74,42), "S7457C1");
    /*is_ambiguous_... S7457C1::S7457C6 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C6*), ABISELECT(74,42), "S7457C1");
    /*is_ambiguous_... S7457C7::S7457C5 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C7*), ABISELECT(74,42), "S7457C1");
    check_base_class_offset(lv, (S7457C5*)(S7457C6*)(S7457C7*), ABISELECT(74,42), "S7457C1");
    check_base_class_offset(lv, (S7457C5*)(S7457C10*), ABISELECT(74,42), "S7457C1");
    /*is_ambiguous_... S7457C14::S7457C5 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C14*), ABISELECT(74,42), "S7457C1");
    /*is_ambiguous_... S7457C4::S7457C6 */ AMB_check_base_class_offset(lv, (S7457C6*)(S7457C4*)(S7457C2*), ABISELECT(80,44), "S7457C1");
    check_base_class_offset(lv, (S7457C6*)(S7457C12*)(S7457C2*), ABISELECT(80,44), "S7457C1");
    check_base_class_offset(lv, (S7457C6*)(S7457C7*), ABISELECT(96,48), "S7457C1");
    check_base_class_offset(lv, (S7457C9*)(S7457C8*)(S7457C7*), ABISELECT(104,52), "S7457C1");
    check_base_class_offset(lv, (S19572C5*)(S7457C5*)(S7457C8*)(S7457C7*), ABISELECT(112,56), "S7457C1");
    check_base_class_offset(lv, (S7457C5*)(S7457C8*)(S7457C7*), ABISELECT(112,56), "S7457C1");
    check_base_class_offset(lv, (S7457C8*)(S7457C7*), ABISELECT(104,52), "S7457C1");
    /*is_ambiguous_... S7457C7::S7457C9 */ AMB_check_base_class_offset(lv, (S7457C9*)(S7457C7*), ABISELECT(120,60), "S7457C1");
    check_base_class_offset(lv, (S7457C7*)(S7457C4*)(S7457C2*), ABISELECT(96,48), "S7457C1");
    /*is_ambiguous_... S7457C4::S7457C9 */ AMB_check_base_class_offset(lv, (S7457C9*)(S7457C4*)(S7457C2*), 0, "S7457C1");
    check_base_class_offset(lv, (S7457C4*)(S7457C2*), 0, "S7457C1");
    check_base_class_offset(lv, (S7457C11*)(S7457C10*), ABISELECT(208,124), "S7457C1");
    check_base_class_offset(lv, (S7457C9*)(S7457C10*), ABISELECT(48,28), "S7457C1");
    check_base_class_offset(lv, (S7457C9*)(S7457C13*)(S7457C12*)(S7457C2*), ABISELECT(48,28), "S7457C1");
    check_base_class_offset(lv, (S7457C9*)(S7457C16*)(S7457C2*), ABISELECT(48,28), "S7457C1");
    /*is_ambiguous_... S7457C10::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C10*), ABISELECT(216,128), "S7457C1");
    check_base_class_offset(lv, (S7457C10*)(S7457C12*)(S7457C2*), ABISELECT(208,124), "S7457C1");
    check_base_class_offset(lv, (S7457C10*)(S7457C14*), ABISELECT(208,124), "S7457C1");
    /*is_ambiguous_... S7457C1::S7457C8 */ AMB_check_base_class_offset(lv, (S7457C9*)(S7457C8*), ABISELECT(224,136), "S7457C1");
    /*is_ambiguous_... S7457C1::S7457C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C5*)(S7457C8*), ABISELECT(232,140), "S7457C1");
    /*is_ambiguous_... S7457C1::S7457C8 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C8*), ABISELECT(232,140), "S7457C1");
    /*is_ambiguous_... S7457C12::S7457C8 */ AMB_check_base_class_offset(lv, (S7457C8*)(S7457C12*)(S7457C2*), ABISELECT(224,136), "S7457C1");
    check_base_class_offset(lv, (S7457C13*)(S7457C12*)(S7457C2*), ABISELECT(48,28), "S7457C1");
    check_base_class_offset(lv, (S7457C9*)(S7457C8*)(S7457C14*), ABISELECT(240,144), "S7457C1");
    check_base_class_offset(lv, (S19572C5*)(S7457C5*)(S7457C8*)(S7457C14*), ABISELECT(248,148), "S7457C1");
    check_base_class_offset(lv, (S7457C5*)(S7457C8*)(S7457C14*), ABISELECT(248,148), "S7457C1");
    check_base_class_offset(lv, (S7457C8*)(S7457C14*), ABISELECT(240,144), "S7457C1");
    check_base_class_offset(lv, (S7457C14*)(S7457C12*)(S7457C2*), ABISELECT(240,144), "S7457C1");
    check_base_class_offset(lv, (S7457C12*)(S7457C2*), ABISELECT(48,28), "S7457C1");
    check_base_class_offset(lv, (S629C14*)(S7457C2*), 0, "S7457C1");
    check_base_class_offset(lv, (S7457C16*)(S7457C2*), ABISELECT(56,32), "S7457C1");
    check_base_class_offset(lv, (S7457C2*), 0, "S7457C1");
    /*is_ambiguous_... S7457C1::S7457C11 */ AMB_check_base_class_offset(lv, (S7457C11*), ABISELECT(64,36), "S7457C1");
    test_class_info(&lv, &cd_S7457C1);
    dp->~S7457C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C1(Test_S7457C1, "S7457C1", ABISELECT(256,152));

#else // __cplusplus

extern void _ZN7S7457C1C1Ev();
extern void _ZN7S7457C1D2Ev();
Name_Map name_map_S7457C1[] = {
  NSPAIR(_ZN7S7457C1C1Ev),
  NSPAIR(_ZN7S7457C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C6;
extern VTBL_ENTRY _ZTI7S7457C6[];
extern  VTBL_ENTRY _ZTV7S7457C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C6[];
extern Class_Descriptor cd_S7457C6;
extern VTBL_ENTRY _ZTI7S7457C6[];
extern  VTBL_ENTRY _ZTV7S7457C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C6[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C8;
extern VTBL_ENTRY _ZTI7S7457C8[];
extern  VTBL_ENTRY _ZTV7S7457C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C8[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S7457C7;
extern VTBL_ENTRY _ZTI7S7457C7[];
extern  VTBL_ENTRY _ZTV7S7457C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C7[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S7457C4;
extern VTBL_ENTRY _ZTI7S7457C4[];
extern  VTBL_ENTRY _ZTV7S7457C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C4[];
extern Class_Descriptor cd_S7457C11;
extern VTBL_ENTRY _ZTI8S7457C11[];
extern  VTBL_ENTRY _ZTV8S7457C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C11[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C10;
extern VTBL_ENTRY _ZTI8S7457C10[];
extern  VTBL_ENTRY _ZTV8S7457C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C10[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C8;
extern VTBL_ENTRY _ZTI7S7457C8[];
extern  VTBL_ENTRY _ZTV7S7457C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C8[];
extern Class_Descriptor cd_S7457C13;
extern VTBL_ENTRY _ZTI8S7457C13[];
extern  VTBL_ENTRY _ZTV8S7457C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C13[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C8;
extern VTBL_ENTRY _ZTI7S7457C8[];
extern  VTBL_ENTRY _ZTV7S7457C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C8[];
extern Class_Descriptor cd_S7457C14;
extern VTBL_ENTRY _ZTI8S7457C14[];
extern  VTBL_ENTRY _ZTV8S7457C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C14[];
extern Class_Descriptor cd_S7457C12;
extern VTBL_ENTRY _ZTI8S7457C12[];
extern  VTBL_ENTRY _ZTV8S7457C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C12[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S7457C16;
extern VTBL_ENTRY _ZTI8S7457C16[];
extern  VTBL_ENTRY _ZTV8S7457C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C16[];
extern Class_Descriptor cd_S7457C2;
extern VTBL_ENTRY _ZTI7S7457C2[];
extern  VTBL_ENTRY _ZTV7S7457C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C2[];
extern Class_Descriptor cd_S7457C11;
extern VTBL_ENTRY _ZTI8S7457C11[];
extern  VTBL_ENTRY _ZTV8S7457C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C11[];
static Base_Class bases_S7457C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(72,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
    5, //immediately_derived
  0, 1},
  {&cd_S19572C5,    ABISELECT(74,42), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7457C5,    ABISELECT(74,42), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7457C6,    ABISELECT(80,44), //bcp->offset
    33, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7457C6,    ABISELECT(96,48), //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
    2, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7457C9,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    7, //immediately_derived
  0, 0},
  {&cd_S7457C5,    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
    8, //immediately_derived
  0, 0},
  {&cd_S7457C8,    ABISELECT(104,52), //bcp->offset
    43, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7457C9,    ABISELECT(120,60), //bcp->offset
    48, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7457C7,    ABISELECT(96,48), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7457C9,    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
    15, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7457C4,    0, //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
    16, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S7457C11,    ABISELECT(208,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7457C9,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19572C5,    ABISELECT(216,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
    16, //immediately_derived
  0, 0},
  {&cd_S7457C10,    ABISELECT(208,124), //bcp->offset
    51, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S7457C9,    ABISELECT(224,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(232,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
    19, //immediately_derived
  0, 0},
  {&cd_S7457C5,    ABISELECT(232,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
    20, //immediately_derived
  0, 0},
  {&cd_S7457C8,    ABISELECT(224,136), //bcp->offset
    60, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S7457C13,    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
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7457C9,    ABISELECT(240,144), //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
    12, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(248,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
    24, //immediately_derived
  0, 0},
  {&cd_S7457C5,    ABISELECT(248,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
    25, //immediately_derived
  0, 0},
  {&cd_S7457C8,    ABISELECT(240,144), //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
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7457C14,    ABISELECT(240,144), //bcp->offset
    66, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S7457C12,    ABISELECT(48,28), //bcp->offset
    14, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S629C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7457C16,    ABISELECT(56,32), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S7457C2,    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
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7457C11,    ABISELECT(64,36), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7457C1[];
extern void _ZN7S7457C42v1Ev();
extern void _ZN7S7457C1D1Ev();
extern void _ZN7S7457C1D0Ev();
extern void ABISELECT(_ZThn48_N7S7457C1D1Ev,_ZThn28_N7S7457C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7457C1D0Ev,_ZThn28_N7S7457C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7457C1D1Ev,_ZTv0_n20_N7S7457C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S7457C1D1Ev,_ZThn48_N7S7457C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7457C1D0Ev,_ZTv0_n20_N7S7457C1D0Ev)();
extern void ABISELECT(_ZThn96_N7S7457C1D0Ev,_ZThn48_N7S7457C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N7S7457C1D1Ev,_ZTvn4_n20_N7S7457C1D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7457C1D0Ev,_ZTvn4_n20_N7S7457C1D0Ev)();
extern void ABISELECT(_ZTv0_n56_N7S7457C1D1Ev,_ZTv0_n28_N7S7457C1D1Ev)();
extern void ABISELECT(_ZThn208_N7S7457C1D1Ev,_ZThn124_N7S7457C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7457C1D0Ev,_ZTv0_n28_N7S7457C1D0Ev)();
extern void ABISELECT(_ZThn208_N7S7457C1D0Ev,_ZThn124_N7S7457C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7457C1D1Ev,_ZTv0_n16_N7S7457C1D1Ev)();
extern void ABISELECT(_ZThn224_N7S7457C1D1Ev,_ZThn136_N7S7457C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7457C1D0Ev,_ZTv0_n16_N7S7457C1D0Ev)();
extern void ABISELECT(_ZThn224_N7S7457C1D0Ev,_ZThn136_N7S7457C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7457C1D1Ev,_ZTv0_n32_N7S7457C1D1Ev)();
extern void ABISELECT(_ZThn240_N7S7457C1D1Ev,_ZThn144_N7S7457C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7457C1D0Ev,_ZTv0_n32_N7S7457C1D0Ev)();
extern void ABISELECT(_ZThn240_N7S7457C1D0Ev,_ZThn144_N7S7457C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7457C1[] = {
  ABISELECT(240,144),
  ABISELECT(224,136),
  ABISELECT(48,28),
  ABISELECT(208,124),
  ABISELECT(208,124),
  ABISELECT(96,48),
  ABISELECT(80,44),
  ABISELECT(74,42),
  ABISELECT(72,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C1[0]),
  (VTBL_ENTRY)&_ZN7S7457C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7457C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C1D0Ev,
  ABISELECT(192,116),
  ABISELECT(176,108),
  ABISELECT(32,16),
  ABISELECT(26,14),
  ABISELECT(160,96),
  ABISELECT(160,96),
  0,
  ABISELECT(24,12),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7457C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7457C1D1Ev,_ZThn28_N7S7457C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7457C1D0Ev,_ZThn28_N7S7457C1D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7457C1[0]),
  ABISELECT(8,4),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7457C1[0]),
  ABISELECT(-6,-2),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S7457C1[0]),
  ABISELECT(-96,-48),
  ABISELECT(-24,-8),
  ABISELECT(-22,-6),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S7457C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7457C1D1Ev,_ZTv0_n20_N7S7457C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7457C1D0Ev,_ZTv0_n20_N7S7457C1D0Ev),
  ABISELECT(-32,-12),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7457C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7457C1D1Ev,_ZTvn4_n20_N7S7457C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7457C1D0Ev,_ZTvn4_n20_N7S7457C1D0Ev),
  ABISELECT(-48,-20),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7457C1[0]),
  ABISELECT(-208,-124),
  ABISELECT(-134,-82),
  ABISELECT(-160,-96),
  0,
  ABISELECT(-136,-84),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7457C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7457C1D1Ev,_ZTv0_n28_N7S7457C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7457C1D0Ev,_ZTv0_n28_N7S7457C1D0Ev),
  ABISELECT(-224,-136),
  ABISELECT(-152,-96),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI7S7457C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7457C1D1Ev,_ZTv0_n16_N7S7457C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7457C1D0Ev,_ZTv0_n16_N7S7457C1D0Ev),
  ABISELECT(-240,-144),
  ABISELECT(-192,-116),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-166,-102),
  ABISELECT(-168,-104),
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI7S7457C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7457C1D1Ev,_ZTv0_n32_N7S7457C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7457C1D0Ev,_ZTv0_n32_N7S7457C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7457C1[];
extern void _ZN7S7457C42v1Ev();
extern void _ZN7S7457C2D1Ev();
extern void _ZN7S7457C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C2__7S7457C1[] = {
  ABISELECT(240,144),
  ABISELECT(224,136),
  ABISELECT(48,28),
  ABISELECT(208,124),
  ABISELECT(208,124),
  ABISELECT(96,48),
  ABISELECT(80,44),
  ABISELECT(74,42),
  ABISELECT(72,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&_ZN7S7457C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7457C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C2D0Ev,
};
extern void _ZN7S7457C42v1Ev();
extern void _ZN7S7457C4D1Ev();
extern void _ZN7S7457C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C47S7457C2__7S7457C1[] = {
  ABISELECT(96,48),
  ABISELECT(80,44),
  ABISELECT(74,42),
  ABISELECT(72,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
  (VTBL_ENTRY)&_ZN7S7457C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7457C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C47S7457C2__A2__7S7457C1[] = {
  ABISELECT(72,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C6__7S7457C47S7457C2__7S7457C1[] = {
  ABISELECT(-6,-2),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S7457C4D1Ev,_ZTv0_n20_N7S7457C4D1Ev)();
extern void ABISELECT(_ZThn96_N7S7457C4D1Ev,_ZThn48_N7S7457C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7457C4D0Ev,_ZTv0_n20_N7S7457C4D0Ev)();
extern void ABISELECT(_ZThn96_N7S7457C4D0Ev,_ZThn48_N7S7457C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7457C7__7S7457C47S7457C2__7S7457C1[] = {
  ABISELECT(-96,-48),
  ABISELECT(-24,-8),
  ABISELECT(-22,-6),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7457C4D1Ev,_ZTv0_n20_N7S7457C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7457C4D0Ev,_ZTv0_n20_N7S7457C4D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N7S7457C4D1Ev,_ZTvn4_n20_N7S7457C4D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7457C4D0Ev,_ZTvn4_n20_N7S7457C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7457C87S7457C7__7S7457C47S7457C2__7S7457C1[] = {
  ABISELECT(-32,-12),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7457C4D1Ev,_ZTvn4_n20_N7S7457C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7457C4D0Ev,_ZTvn4_n20_N7S7457C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C7__A1__7S7457C47S7457C2__7S7457C1[] = {
  ABISELECT(-48,-20),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
};
extern void _ZN8S7457C12D1Ev();
extern void _ZN8S7457C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7457C127S7457C2__7S7457C1[] = {
  ABISELECT(192,116),
  ABISELECT(176,108),
  ABISELECT(32,16),
  ABISELECT(26,14),
  ABISELECT(160,96),
  ABISELECT(160,96),
  0,
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  (VTBL_ENTRY)&_ZN8S7457C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7457C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7457C138S7457C127S7457C2__7S7457C1[] = {
  0,
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C13[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S7457C12D1Ev,_ZTv0_n28_N8S7457C12D1Ev)();
extern void ABISELECT(_ZThn160_N8S7457C12D1Ev,_ZThn96_N8S7457C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7457C12D0Ev,_ZTv0_n28_N8S7457C12D0Ev)();
extern void ABISELECT(_ZThn160_N8S7457C12D0Ev,_ZThn96_N8S7457C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7457C10__8S7457C127S7457C2__7S7457C1[] = {
  ABISELECT(-160,-96),
  ABISELECT(-134,-82),
  ABISELECT(-160,-96),
  0,
  ABISELECT(-136,-84),
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C12D1Ev,_ZTv0_n28_N8S7457C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C12D0Ev,_ZTv0_n28_N8S7457C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7457C6__8S7457C127S7457C2__7S7457C1[] = {
  ABISELECT(-6,-2),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S7457C12D1Ev,_ZTv0_n16_N8S7457C12D1Ev)();
extern void ABISELECT(_ZThn176_N8S7457C12D1Ev,_ZThn108_N8S7457C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7457C12D0Ev,_ZTv0_n16_N8S7457C12D0Ev)();
extern void ABISELECT(_ZThn176_N8S7457C12D0Ev,_ZThn108_N8S7457C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7457C8__8S7457C127S7457C2__7S7457C1[] = {
  ABISELECT(-176,-108),
  ABISELECT(-152,-96),
  ABISELECT(-176,-108),
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7457C12D1Ev,_ZTv0_n16_N8S7457C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7457C12D0Ev,_ZTv0_n16_N8S7457C12D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S7457C12D1Ev,_ZTv0_n32_N8S7457C12D1Ev)();
extern void ABISELECT(_ZThn192_N8S7457C12D1Ev,_ZThn116_N8S7457C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7457C12D0Ev,_ZTv0_n32_N8S7457C12D0Ev)();
extern void ABISELECT(_ZThn192_N8S7457C12D0Ev,_ZThn116_N8S7457C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7457C14__8S7457C127S7457C2__7S7457C1[] = {
  ABISELECT(-192,-116),
  ABISELECT(-192,-116),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-166,-102),
  ABISELECT(-168,-104),
  ABISELECT(-192,-116),
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7457C12D1Ev,_ZTv0_n32_N8S7457C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7457C12D0Ev,_ZTv0_n32_N8S7457C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7457C167S7457C2__7S7457C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C167S7457C2__7S7457C1[] = {
  ABISELECT(24,12),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S7457C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C6__7S7457C2__7S7457C1[] = {
  ABISELECT(-6,-2),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S7457C2D1Ev,_ZTv0_n20_N7S7457C2D1Ev)();
extern void ABISELECT(_ZThn96_N7S7457C2D1Ev,_ZThn48_N7S7457C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7457C2D0Ev,_ZTv0_n20_N7S7457C2D0Ev)();
extern void ABISELECT(_ZThn96_N7S7457C2D0Ev,_ZThn48_N7S7457C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7457C7__7S7457C2__7S7457C1[] = {
  ABISELECT(-96,-48),
  ABISELECT(-24,-8),
  ABISELECT(-22,-6),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7457C2D1Ev,_ZTv0_n20_N7S7457C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7457C2D0Ev,_ZTv0_n20_N7S7457C2D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N7S7457C2D1Ev,_ZTvn4_n20_N7S7457C2D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7457C2D0Ev,_ZTvn4_n20_N7S7457C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7457C87S7457C7__7S7457C2__7S7457C1[] = {
  ABISELECT(-32,-12),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7457C2D1Ev,_ZTvn4_n20_N7S7457C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7457C2D0Ev,_ZTvn4_n20_N7S7457C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C7__A1__7S7457C2__7S7457C1[] = {
  ABISELECT(-48,-20),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
};
extern void ABISELECT(_ZThn48_N7S7457C2D1Ev,_ZThn28_N7S7457C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S7457C2D0Ev,_ZThn28_N7S7457C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7457C12__7S7457C2__7S7457C1[] = {
  ABISELECT(192,116),
  ABISELECT(176,108),
  ABISELECT(32,16),
  ABISELECT(26,14),
  ABISELECT(160,96),
  ABISELECT(160,96),
  0,
  ABISELECT(24,12),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7457C2D1Ev,_ZThn28_N7S7457C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7457C2D0Ev,_ZThn28_N7S7457C2D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N7S7457C2D1Ev,_ZTv0_n28_N7S7457C2D1Ev)();
extern void ABISELECT(_ZThn208_N7S7457C2D1Ev,_ZThn124_N7S7457C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7457C2D0Ev,_ZTv0_n28_N7S7457C2D0Ev)();
extern void ABISELECT(_ZThn208_N7S7457C2D0Ev,_ZThn124_N7S7457C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7457C10__7S7457C2__7S7457C1[] = {
  ABISELECT(-208,-124),
  ABISELECT(-134,-82),
  ABISELECT(-160,-96),
  0,
  ABISELECT(-136,-84),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7457C2D1Ev,_ZTv0_n28_N7S7457C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7457C2D0Ev,_ZTv0_n28_N7S7457C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7457C2D1Ev,_ZTv0_n16_N7S7457C2D1Ev)();
extern void ABISELECT(_ZThn224_N7S7457C2D1Ev,_ZThn136_N7S7457C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7457C2D0Ev,_ZTv0_n16_N7S7457C2D0Ev)();
extern void ABISELECT(_ZThn224_N7S7457C2D0Ev,_ZThn136_N7S7457C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7457C8__A1__7S7457C2__7S7457C1[] = {
  ABISELECT(-224,-136),
  ABISELECT(-152,-96),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7457C2D1Ev,_ZTv0_n16_N7S7457C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7457C2D0Ev,_ZTv0_n16_N7S7457C2D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N7S7457C2D1Ev,_ZTv0_n32_N7S7457C2D1Ev)();
extern void ABISELECT(_ZThn240_N7S7457C2D1Ev,_ZThn144_N7S7457C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7457C2D0Ev,_ZTv0_n32_N7S7457C2D0Ev)();
extern void ABISELECT(_ZThn240_N7S7457C2D0Ev,_ZThn144_N7S7457C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7457C14__7S7457C2__7S7457C1[] = {
  ABISELECT(-240,-144),
  ABISELECT(-192,-116),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-166,-102),
  ABISELECT(-168,-104),
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7457C2D1Ev,_ZTv0_n32_N7S7457C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7457C2D0Ev,_ZTv0_n32_N7S7457C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7457C16__7S7457C2__7S7457C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7457C11__A__7S7457C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C6__7S7457C1[] = {
  ABISELECT(-6,-2),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C6[0]),
};
extern void _ZN7S7457C7D1Ev();
extern void _ZN7S7457C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C7__7S7457C1[] = {
  ABISELECT(-24,-8),
  ABISELECT(-22,-6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C7[0]),
  (VTBL_ENTRY)&_ZN7S7457C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C67S7457C7__A1__7S7457C1[] = {
  ABISELECT(-22,-6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C6[0]),
};
extern void _ZN7S7457C8D1Ev();
extern void _ZN7S7457C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C87S7457C7__7S7457C1[] = {
  ABISELECT(-32,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C8[0]),
  (VTBL_ENTRY)&_ZN7S7457C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C87S7457C7__7S7457C1[] = {
  ABISELECT(-32,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C7__A1__7S7457C1[] = {
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern void ABISELECT(_ZThn8_N7S7457C7D1Ev,_ZThn4_N7S7457C7D1Ev)();
extern void ABISELECT(_ZThn8_N7S7457C7D0Ev,_ZThn4_N7S7457C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7457C8__7S7457C7__7S7457C1[] = {
  ABISELECT(-32,-12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7457C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7457C7D1Ev,_ZThn4_N7S7457C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7457C7D0Ev,_ZThn4_N7S7457C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__A1__7S7457C7__7S7457C1[] = {
  ABISELECT(-48,-20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7457C7[0]),
};
extern void _ZN8S7457C10D1Ev();
extern void _ZN8S7457C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7457C10__7S7457C1[] = {
  ABISELECT(-134,-82),
  ABISELECT(-160,-96),
  0,
  ABISELECT(-136,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C10[0]),
  (VTBL_ENTRY)&_ZN8S7457C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7457C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C10__7S7457C1[] = {
  ABISELECT(24,12),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI8S7457C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7457C11__7S7457C1[] = {
  ABISELECT(-136,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__A3__7S7457C1[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern void _ZN7S7457C8D1Ev();
extern void _ZN7S7457C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C8__A1__7S7457C1[] = {
  ABISELECT(-152,-96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C8[0]),
  (VTBL_ENTRY)&_ZN7S7457C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C8__A4__7S7457C1[] = {
  ABISELECT(-152,-96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern void _ZN8S7457C14D1Ev();
extern void _ZN8S7457C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7457C14__7S7457C1[] = {
  ABISELECT(-192,-116),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-166,-102),
  ABISELECT(-168,-104),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C14[0]),
  (VTBL_ENTRY)&_ZN8S7457C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7457C14D0Ev,
};
extern void _ZN7S7457C8D1Ev();
extern void _ZN7S7457C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C88S7457C14__A2__7S7457C1[] = {
  ABISELECT(-168,-104),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C8[0]),
  (VTBL_ENTRY)&_ZN7S7457C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C88S7457C14__A5__7S7457C1[] = {
  ABISELECT(-168,-104),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S7457C14D1Ev,_ZTv0_n28_N8S7457C14D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S7457C14D0Ev,_ZTv0_n28_N8S7457C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7457C10__8S7457C14__7S7457C1[] = {
  ABISELECT(32,20),
  ABISELECT(-134,-82),
  ABISELECT(-160,-96),
  0,
  ABISELECT(-136,-84),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S7457C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C14D1Ev,_ZTv0_n28_N8S7457C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C14D0Ev,_ZTv0_n28_N8S7457C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C14__7S7457C1[] = {
  ABISELECT(24,12),
  ABISELECT(192,116),
  (VTBL_ENTRY)&(_ZTI8S7457C14[0]),
};
static  VTT_ENTRY vtt_S7457C1[] = {
  {&(_ZTV7S7457C1[11]),  11,76},
  {&(_tg__ZTV7S7457C2__7S7457C1[11]),  11,14},
  {&(_tg__ZTV7S7457C47S7457C2__7S7457C1[6]),  6,9},
  {&(_tg__ZTV7S7457C97S7457C47S7457C2__A2__7S7457C1[3]),  3,3},
  {&(_tg__ZTV7S7457C6__7S7457C47S7457C2__7S7457C1[3]),  3,3},
  {&(_tg__ZTV7S7457C7__7S7457C47S7457C2__7S7457C1[5]),  5,7},
  {&(_tg__ZTV7S7457C87S7457C7__7S7457C47S7457C2__7S7457C1[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C7__A1__7S7457C47S7457C2__7S7457C1[3]),  3,3},
  {&(_tg__ZTV8S7457C127S7457C2__7S7457C1[10]),  10,12},
  {&(_tg__ZTV8S7457C138S7457C127S7457C2__7S7457C1[4]),  4,4},
  {&(_tg__ZTV8S7457C138S7457C127S7457C2__7S7457C1[4]),  4,4},
  {&(_tg__ZTV8S7457C10__8S7457C127S7457C2__7S7457C1[7]),  7,9},
  {&(_tg__ZTV8S7457C10__8S7457C127S7457C2__7S7457C1[7]),  7,9},
  {&(_tg__ZTV8S7457C127S7457C2__7S7457C1[10]),  10,12},
  {&(_tg__ZTV7S7457C6__8S7457C127S7457C2__7S7457C1[3]),  3,3},
  {&(_tg__ZTV7S7457C8__8S7457C127S7457C2__7S7457C1[4]),  4,6},
  {&(_tg__ZTV8S7457C14__8S7457C127S7457C2__7S7457C1[8]),  8,10},
  {&(_tg__ZTV8S7457C167S7457C2__7S7457C1[4]),  4,4},
  {&(_tg__ZTV7S7457C9__8S7457C167S7457C2__7S7457C1[3]),  3,3},
  {&(_tg__ZTV7S7457C6__7S7457C2__7S7457C1[3]),  3,3},
  {&(_tg__ZTV7S7457C7__7S7457C2__7S7457C1[5]),  5,7},
  {&(_tg__ZTV7S7457C87S7457C7__7S7457C2__7S7457C1[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C7__A1__7S7457C2__7S7457C1[3]),  3,3},
  {&(_tg__ZTV8S7457C12__7S7457C2__7S7457C1[10]),  10,12},
  {&(_tg__ZTV8S7457C10__7S7457C2__7S7457C1[7]),  7,9},
  {&(_tg__ZTV8S7457C10__7S7457C2__7S7457C1[7]),  7,9},
  {&(_tg__ZTV8S7457C12__7S7457C2__7S7457C1[10]),  10,12},
  {&(_tg__ZTV7S7457C8__A1__7S7457C2__7S7457C1[4]),  4,6},
  {&(_tg__ZTV8S7457C14__7S7457C2__7S7457C1[8]),  8,10},
  {&(_tg__ZTV8S7457C16__7S7457C2__7S7457C1[4]),  4,4},
  {&(_tg__ZTV8S7457C11__A__7S7457C1[3]),  3,3},
  {&(_ZTV7S7457C1[36]),  36,76},
  {&(_ZTV7S7457C1[41]),  41,76},
  {&(_ZTV7S7457C1[46]),  46,76},
  {&(_ZTV7S7457C1[51]),  51,76},
  {&(_ZTV7S7457C1[24]),  24,76},
  {&(_ZTV7S7457C1[58]),  58,76},
  {&(_ZTV7S7457C1[58]),  58,76},
  {&(_ZTV7S7457C1[24]),  24,76},
  {&(_ZTV7S7457C1[64]),  64,76},
  {&(_ZTV7S7457C1[74]),  74,76},
  {&(_ZTV7S7457C1[30]),  30,76},
  {&(_ZTV7S7457C1[33]),  33,76},
  {&(_tg__ZTV7S7457C6__7S7457C1[3]),  3,3},
  {&(_tg__ZTV7S7457C7__7S7457C1[4]),  4,6},
  {&(_tg__ZTV7S7457C67S7457C7__A1__7S7457C1[3]),  3,3},
  {&(_tg__ZTV7S7457C87S7457C7__7S7457C1[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C87S7457C7__7S7457C1[3]),  3,3},
  {&(_tg__ZTV7S7457C97S7457C7__A1__7S7457C1[3]),  3,3},
  {&(_tg__ZTV7S7457C8__7S7457C7__7S7457C1[3]),  3,5},
  {&(_tg__ZTV7S7457C9__A1__7S7457C7__7S7457C1[3]),  3,3},
  {&(_tg__ZTV8S7457C10__7S7457C1[6]),  6,8},
  {&(_tg__ZTV8S7457C10__7S7457C1[6]),  6,8},
  {&(_tg__ZTV7S7457C9__8S7457C10__7S7457C1[3]),  3,3},
  {&(_tg__ZTV8S7457C11__7S7457C1[3]),  3,3},
  {&(_tg__ZTV7S7457C9__A3__7S7457C1[3]),  3,3},
  {&(_tg__ZTV7S7457C8__A1__7S7457C1[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C8__A4__7S7457C1[3]),  3,3},
  {&(_tg__ZTV8S7457C14__7S7457C1[7]),  7,9},
  {&(_tg__ZTV7S7457C88S7457C14__A2__7S7457C1[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C88S7457C14__A5__7S7457C1[3]),  3,3},
  {&(_tg__ZTV8S7457C10__8S7457C14__7S7457C1[7]),  7,9},
  {&(_tg__ZTV8S7457C10__8S7457C14__7S7457C1[7]),  7,9},
  {&(_tg__ZTV7S7457C9__8S7457C14__7S7457C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7457C1[];
extern  VTBL_ENTRY _ZTV7S7457C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C1[];
static VTBL_ENTRY alt_thunk_names44[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7457C2D0Ev,_ZTv0_n32_N7S7457C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7457C2D0Ev,_ZThn144_N7S7457C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7457C2D1Ev,_ZTv0_n32_N7S7457C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7457C2D1Ev,_ZThn144_N7S7457C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7457C2D0Ev,_ZTv0_n16_N7S7457C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7457C2D0Ev,_ZThn136_N7S7457C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7457C2D1Ev,_ZTv0_n16_N7S7457C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7457C2D1Ev,_ZThn136_N7S7457C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7457C2D0Ev,_ZTv0_n28_N7S7457C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7457C2D0Ev,_ZThn124_N7S7457C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7457C2D1Ev,_ZTv0_n28_N7S7457C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7457C2D1Ev,_ZThn124_N7S7457C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7457C2D0Ev,_ZTv0_n20_N7S7457C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7457C2D0Ev,_ZThn48_N7S7457C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7457C2D1Ev,_ZTv0_n20_N7S7457C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7457C2D1Ev,_ZThn48_N7S7457C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7457C12D0Ev,_ZTv0_n32_N8S7457C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S7457C12D0Ev,_ZThn116_N8S7457C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7457C12D1Ev,_ZTv0_n32_N8S7457C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S7457C12D1Ev,_ZThn116_N8S7457C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7457C12D0Ev,_ZTv0_n16_N8S7457C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S7457C12D0Ev,_ZThn108_N8S7457C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7457C12D1Ev,_ZTv0_n16_N8S7457C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S7457C12D1Ev,_ZThn108_N8S7457C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7457C12D0Ev,_ZTv0_n28_N8S7457C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S7457C12D0Ev,_ZThn96_N8S7457C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7457C12D1Ev,_ZTv0_n28_N8S7457C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S7457C12D1Ev,_ZThn96_N8S7457C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7457C4D0Ev,_ZTv0_n20_N7S7457C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7457C4D0Ev,_ZThn48_N7S7457C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7457C4D1Ev,_ZTv0_n20_N7S7457C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7457C4D1Ev,_ZThn48_N7S7457C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7457C1D0Ev,_ZTv0_n32_N7S7457C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7457C1D0Ev,_ZThn144_N7S7457C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7457C1D1Ev,_ZTv0_n32_N7S7457C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7457C1D1Ev,_ZThn144_N7S7457C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7457C1D0Ev,_ZTv0_n16_N7S7457C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7457C1D0Ev,_ZThn136_N7S7457C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7457C1D1Ev,_ZTv0_n16_N7S7457C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7457C1D1Ev,_ZThn136_N7S7457C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7457C1D0Ev,_ZTv0_n28_N7S7457C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7457C1D0Ev,_ZThn124_N7S7457C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7457C1D1Ev,_ZTv0_n28_N7S7457C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7457C1D1Ev,_ZThn124_N7S7457C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7457C1D0Ev,_ZTv0_n20_N7S7457C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7457C1D0Ev,_ZThn48_N7S7457C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7457C1D1Ev,_ZTv0_n20_N7S7457C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7457C1D1Ev,_ZThn48_N7S7457C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7457C1 = {  "S7457C1", // class name
  bases_S7457C1, 32,
  &(vtc_S7457C1[0]), // expected_vtbl_contents
  &(vtt_S7457C1[0]), // expected_vtt_contents
  ABISELECT(256,152), // object size
  NSPAIRA(_ZTI7S7457C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7457C1),76, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7457C1),64, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names44,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19306C3  {
  __tsi64 s19306c3f0[9];
  virtual  ~S19306C3(); // _ZN8S19306C3D1Ev
  virtual void  v2(); // _ZN8S19306C32v2Ev
  virtual void  v3(); // _ZN8S19306C32v3Ev
  virtual void  v4(); // _ZN8S19306C32v4Ev
  virtual void  v5(); // _ZN8S19306C32v5Ev
  virtual void  v6(); // _ZN8S19306C32v6Ev
  virtual void  v7(); // _ZN8S19306C32v7Ev
  virtual void  v8(); // _ZN8S19306C32v8Ev
  S19306C3(); // tgen
};
//SIG(-1 S19306C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 FL[9]}


 S19306C3 ::~S19306C3(){ note_dtor("S19306C3", this);}
void  S19306C3 ::v2(){vfunc_called(this, "_ZN8S19306C32v2Ev");}
void  S19306C3 ::v3(){vfunc_called(this, "_ZN8S19306C32v3Ev");}
void  S19306C3 ::v4(){vfunc_called(this, "_ZN8S19306C32v4Ev");}
void  S19306C3 ::v5(){vfunc_called(this, "_ZN8S19306C32v5Ev");}
void  S19306C3 ::v6(){vfunc_called(this, "_ZN8S19306C32v6Ev");}
void  S19306C3 ::v7(){vfunc_called(this, "_ZN8S19306C32v7Ev");}
void  S19306C3 ::v8(){vfunc_called(this, "_ZN8S19306C32v8Ev");}
S19306C3 ::S19306C3(){ note_ctor("S19306C3", this);} // tgen

static void Test_S19306C3()
{
  extern Class_Descriptor cd_S19306C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,20)];
    init_test(&cd_S19306C3, buf);
    S19306C3 *dp, &lv = *(dp=new (buf) S19306C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,76), "sizeof(S19306C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19306C3)");
    check_field_offset(lv, s19306c3f0, ABISELECT(8,4), "S19306C3.s19306c3f0");
    test_class_info(&lv, &cd_S19306C3);
    dp->~S19306C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19306C3(Test_S19306C3, "S19306C3", ABISELECT(80,76));

#else // __cplusplus

extern void _ZN8S19306C3C1Ev();
extern void _ZN8S19306C3D1Ev();
Name_Map name_map_S19306C3[] = {
  NSPAIR(_ZN8S19306C3C1Ev),
  NSPAIR(_ZN8S19306C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19306C3[];
extern void _ZN8S19306C3D1Ev();
extern void _ZN8S19306C3D0Ev();
extern void _ZN8S19306C32v2Ev();
extern void _ZN8S19306C32v3Ev();
extern void _ZN8S19306C32v4Ev();
extern void _ZN8S19306C32v5Ev();
extern void _ZN8S19306C32v6Ev();
extern void _ZN8S19306C32v7Ev();
extern void _ZN8S19306C32v8Ev();
static  VTBL_ENTRY vtc_S19306C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C3[0]),
  (VTBL_ENTRY)&_ZN8S19306C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19306C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v8Ev,
};
extern VTBL_ENTRY _ZTI8S19306C3[];
extern  VTBL_ENTRY _ZTV8S19306C3[];
Class_Descriptor cd_S19306C3 = {  "S19306C3", // class name
  0,0,//no base classes
  &(vtc_S19306C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,76), // object size
  NSPAIRA(_ZTI8S19306C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19306C3),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  S19306C7  {
  void *s19306c7f0;
  long double s19306c7f1;
  int s19306c7f2;
  virtual void  v9(); // _ZN8S19306C72v9Ev
  virtual void  v10(); // _ZN8S19306C73v10Ev
  ~S19306C7(); // tgen
  S19306C7(); // tgen
};
//SIG(-1 S19306C7) C1{ v1 v2 Fp FD Fi}


void  S19306C7 ::v9(){vfunc_called(this, "_ZN8S19306C72v9Ev");}
void  S19306C7 ::v10(){vfunc_called(this, "_ZN8S19306C73v10Ev");}
S19306C7 ::~S19306C7(){ note_dtor("S19306C7", this);} // tgen
S19306C7 ::S19306C7(){ note_ctor("S19306C7", this);} // tgen

static void Test_S19306C7()
{
  extern Class_Descriptor cd_S19306C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S19306C7, buf);
    S19306C7 *dp, &lv = *(dp=new (buf) S19306C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19306C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19306C7)");
    check_field_offset(lv, s19306c7f0, ABISELECT(8,4), "S19306C7.s19306c7f0");
    check_field_offset(lv, s19306c7f1, ABISELECT(16,8), "S19306C7.s19306c7f1");
    check_field_offset(lv, s19306c7f2, ABISELECT(32,20), "S19306C7.s19306c7f2");
    test_class_info(&lv, &cd_S19306C7);
    dp->~S19306C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19306C7(Test_S19306C7, "S19306C7", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19306C7C1Ev();
extern void _ZN8S19306C7D1Ev();
Name_Map name_map_S19306C7[] = {
  NSPAIR(_ZN8S19306C7C1Ev),
  NSPAIR(_ZN8S19306C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19306C7[];
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
static  VTBL_ENTRY vtc_S19306C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C7[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
};
extern VTBL_ENTRY _ZTI8S19306C7[];
extern  VTBL_ENTRY _ZTV8S19306C7[];
Class_Descriptor cd_S19306C7 = {  "S19306C7", // class name
  0,0,//no base classes
  &(vtc_S19306C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19306C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19306C7),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  S19306C6  : S19306C7 {
  virtual void  v11(); // _ZN8S19306C63v11Ev
  virtual void  v12(); // _ZN8S19306C63v12Ev
  ~S19306C6(); // tgen
  S19306C6(); // tgen
};
//SIG(-1 S19306C6) C1{ BC2{ v3 v4 Fp FD Fi} v1 v2}


void  S19306C6 ::v11(){vfunc_called(this, "_ZN8S19306C63v11Ev");}
void  S19306C6 ::v12(){vfunc_called(this, "_ZN8S19306C63v12Ev");}
S19306C6 ::~S19306C6(){ note_dtor("S19306C6", this);} // tgen
S19306C6 ::S19306C6(){ note_ctor("S19306C6", this);} // tgen

static void Test_S19306C6()
{
  extern Class_Descriptor cd_S19306C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S19306C6, buf);
    S19306C6 *dp, &lv = *(dp=new (buf) S19306C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19306C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19306C6)");
    check_base_class_offset(lv, (S19306C7*), 0, "S19306C6");
    test_class_info(&lv, &cd_S19306C6);
    dp->~S19306C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19306C6(Test_S19306C6, "S19306C6", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19306C6C1Ev();
extern void _ZN8S19306C6D1Ev();
Name_Map name_map_S19306C6[] = {
  NSPAIR(_ZN8S19306C6C1Ev),
  NSPAIR(_ZN8S19306C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19306C7;
extern VTBL_ENTRY _ZTI8S19306C7[];
extern  VTBL_ENTRY _ZTV8S19306C7[];
static Base_Class bases_S19306C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19306C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19306C6[];
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
extern void _ZN8S19306C63v11Ev();
extern void _ZN8S19306C63v12Ev();
static  VTBL_ENTRY vtc_S19306C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C6[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v12Ev,
};
extern VTBL_ENTRY _ZTI8S19306C6[];
extern  VTBL_ENTRY _ZTV8S19306C6[];
Class_Descriptor cd_S19306C6 = {  "S19306C6", // class name
  bases_S19306C6, 1,
  &(vtc_S19306C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19306C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19306C6),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  S19306C5  : S19306C6 , S19306C7 {
  virtual void  v13(); // _ZN8S19306C53v13Ev
  virtual void  v14(); // _ZN8S19306C53v14Ev
  virtual void  v15(); // _ZN8S19306C53v15Ev
  virtual void  v16(); // _ZN8S19306C53v16Ev
  ~S19306C5(); // tgen
  S19306C5(); // tgen
};
//SIG(-1 S19306C5) C1{ BC2{ BC3{ v5 v6 Fp FD Fi} v7 v8} BC3 v1 v2 v3 v4}


void  S19306C5 ::v13(){vfunc_called(this, "_ZN8S19306C53v13Ev");}
void  S19306C5 ::v14(){vfunc_called(this, "_ZN8S19306C53v14Ev");}
void  S19306C5 ::v15(){vfunc_called(this, "_ZN8S19306C53v15Ev");}
void  S19306C5 ::v16(){vfunc_called(this, "_ZN8S19306C53v16Ev");}
S19306C5 ::~S19306C5(){ note_dtor("S19306C5", this);} // tgen
S19306C5 ::S19306C5(){ note_ctor("S19306C5", this);} // tgen

static void Test_S19306C5()
{
  extern Class_Descriptor cd_S19306C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S19306C5, buf);
    S19306C5 *dp, &lv = *(dp=new (buf) S19306C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S19306C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19306C5)");
    check_base_class_offset(lv, (S19306C7*)(S19306C6*), 0, "S19306C5");
    check_base_class_offset(lv, (S19306C6*), 0, "S19306C5");
    /*is_ambiguous_... S19306C5::S19306C7 */ AMB_check_base_class_offset(lv, (S19306C7*), ABISELECT(48,24), "S19306C5");
    test_class_info(&lv, &cd_S19306C5);
    dp->~S19306C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19306C5(Test_S19306C5, "S19306C5", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S19306C5C1Ev();
extern void _ZN8S19306C5D1Ev();
Name_Map name_map_S19306C5[] = {
  NSPAIR(_ZN8S19306C5C1Ev),
  NSPAIR(_ZN8S19306C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19306C7;
extern VTBL_ENTRY _ZTI8S19306C7[];
extern  VTBL_ENTRY _ZTV8S19306C7[];
extern Class_Descriptor cd_S19306C6;
extern VTBL_ENTRY _ZTI8S19306C6[];
extern  VTBL_ENTRY _ZTV8S19306C6[];
extern Class_Descriptor cd_S19306C7;
extern VTBL_ENTRY _ZTI8S19306C7[];
extern  VTBL_ENTRY _ZTV8S19306C7[];
static Base_Class bases_S19306C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19306C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19306C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19306C7,    ABISELECT(48,24), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19306C5[];
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
extern void _ZN8S19306C63v11Ev();
extern void _ZN8S19306C63v12Ev();
extern void _ZN8S19306C53v13Ev();
extern void _ZN8S19306C53v14Ev();
extern void _ZN8S19306C53v15Ev();
extern void _ZN8S19306C53v16Ev();
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
static  VTBL_ENTRY vtc_S19306C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C5[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v16Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19306C5[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
};
extern VTBL_ENTRY _ZTI8S19306C5[];
extern  VTBL_ENTRY _ZTV8S19306C5[];
Class_Descriptor cd_S19306C5 = {  "S19306C5", // class name
  bases_S19306C5, 3,
  &(vtc_S19306C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S19306C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19306C5),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  S19306C10  {
  ::S1400C17_nt s19306c10f0;
  void *s19306c10f1;
  virtual void  v17(); // _ZN9S19306C103v17Ev
  ~S19306C10(); // tgen
  S19306C10(); // tgen
};
//SIG(-1 S19306C10) C1{ v1 FC2{ v2 v3} Fp}


void  S19306C10 ::v17(){vfunc_called(this, "_ZN9S19306C103v17Ev");}
S19306C10 ::~S19306C10(){ note_dtor("S19306C10", this);} // tgen
S19306C10 ::S19306C10(){ note_ctor("S19306C10", this);} // tgen

static void Test_S19306C10()
{
  extern Class_Descriptor cd_S19306C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19306C10, buf);
    S19306C10 *dp, &lv = *(dp=new (buf) S19306C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19306C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19306C10)");
    check_field_offset(lv, s19306c10f0, ABISELECT(8,4), "S19306C10.s19306c10f0");
    check_field_offset(lv, s19306c10f1, ABISELECT(16,8), "S19306C10.s19306c10f1");
    test_class_info(&lv, &cd_S19306C10);
    dp->~S19306C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19306C10(Test_S19306C10, "S19306C10", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S19306C10C1Ev();
extern void _ZN9S19306C10D1Ev();
Name_Map name_map_S19306C10[] = {
  NSPAIR(_ZN9S19306C10C1Ev),
  NSPAIR(_ZN9S19306C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19306C10[];
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY vtc_S19306C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19306C10[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern VTBL_ENTRY _ZTI9S19306C10[];
extern  VTBL_ENTRY _ZTV9S19306C10[];
Class_Descriptor cd_S19306C10 = {  "S19306C10", // class name
  0,0,//no base classes
  &(vtc_S19306C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S19306C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19306C10),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  S19306C9  : virtual S19306C10 {
  virtual void  v18(); // _ZN8S19306C93v18Ev
  ~S19306C9(); // tgen
  S19306C9(); // tgen
};
//SIG(-1 S19306C9) C1{ VBC2{ v2 FC3{ v3 v4} Fp} v1}


void  S19306C9 ::v18(){vfunc_called(this, "_ZN8S19306C93v18Ev");}
S19306C9 ::~S19306C9(){ note_dtor("S19306C9", this);} // tgen
S19306C9 ::S19306C9(){ note_ctor("S19306C9", this);} // tgen

static void Test_S19306C9()
{
  extern Class_Descriptor cd_S19306C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19306C9, buf);
    S19306C9 *dp, &lv = *(dp=new (buf) S19306C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19306C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19306C9)");
    check_base_class_offset(lv, (S19306C10*), ABISELECT(8,4), "S19306C9");
    test_class_info(&lv, &cd_S19306C9);
    dp->~S19306C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19306C9(Test_S19306C9, "S19306C9", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19306C9C1Ev();
extern void _ZN8S19306C9D1Ev();
Name_Map name_map_S19306C9[] = {
  NSPAIR(_ZN8S19306C9C1Ev),
  NSPAIR(_ZN8S19306C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19306C10;
extern VTBL_ENTRY _ZTI9S19306C10[];
extern  VTBL_ENTRY _ZTV9S19306C10[];
static Base_Class bases_S19306C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19306C10,    ABISELECT(8,4), //bcp->offset
    4, //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 _ZTI8S19306C9[];
extern void _ZN8S19306C93v18Ev();
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY vtc_S19306C9[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19306C9[];
static  VTT_ENTRY vtt_S19306C9[] = {
  {&(_ZTV8S19306C9[3]),  3,8},
  {&(_ZTV8S19306C9[7]),  7,8},
};
extern VTBL_ENTRY _ZTI8S19306C9[];
extern  VTBL_ENTRY _ZTV8S19306C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C9[];
Class_Descriptor cd_S19306C9 = {  "S19306C9", // class name
  bases_S19306C9, 1,
  &(vtc_S19306C9[0]), // expected_vtbl_contents
  &(vtt_S19306C9[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19306C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19306C9),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19306C9),2, //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  S19306C8  : virtual S19306C9 {
  virtual void  v19(); // _ZN8S19306C83v19Ev
  virtual void  v20(); // _ZN8S19306C83v20Ev
  virtual void  v21(); // _ZN8S19306C83v21Ev
  ~S19306C8(); // tgen
  S19306C8(); // tgen
};
//SIG(-1 S19306C8) C1{ VBC2{ VBC3{ v4 FC4{ v6 v7} Fp} v5} v1 v2 v3}


void  S19306C8 ::v19(){vfunc_called(this, "_ZN8S19306C83v19Ev");}
void  S19306C8 ::v20(){vfunc_called(this, "_ZN8S19306C83v20Ev");}
void  S19306C8 ::v21(){vfunc_called(this, "_ZN8S19306C83v21Ev");}
S19306C8 ::~S19306C8(){ note_dtor("S19306C8", this);} // tgen
S19306C8 ::S19306C8(){ note_ctor("S19306C8", this);} // tgen

static void Test_S19306C8()
{
  extern Class_Descriptor cd_S19306C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19306C8, buf);
    S19306C8 *dp, &lv = *(dp=new (buf) S19306C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19306C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19306C8)");
    check_base_class_offset(lv, (S19306C10*)(S19306C9*), ABISELECT(8,4), "S19306C8");
    check_base_class_offset(lv, (S19306C9*), 0, "S19306C8");
    test_class_info(&lv, &cd_S19306C8);
    dp->~S19306C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19306C8(Test_S19306C8, "S19306C8", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19306C8C1Ev();
extern void _ZN8S19306C8D1Ev();
Name_Map name_map_S19306C8[] = {
  NSPAIR(_ZN8S19306C8C1Ev),
  NSPAIR(_ZN8S19306C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19306C10;
extern VTBL_ENTRY _ZTI9S19306C10[];
extern  VTBL_ENTRY _ZTV9S19306C10[];
extern Class_Descriptor cd_S19306C9;
extern VTBL_ENTRY _ZTI8S19306C9[];
extern  VTBL_ENTRY _ZTV8S19306C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C9[];
static Base_Class bases_S19306C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19306C10,    ABISELECT(8,4), //bcp->offset
    9, //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
    1, //immediately_derived
  0, 1},
  {&cd_S19306C9,    0, //bcp->offset
    -1, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S19306C8[];
extern void _ZN8S19306C93v18Ev();
extern void _ZN8S19306C83v19Ev();
extern void _ZN8S19306C83v20Ev();
extern void _ZN8S19306C83v21Ev();
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY vtc_S19306C8[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C8[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v21Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19306C8[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19306C8[];
extern void _ZN8S19306C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C9__8S19306C8[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__8S19306C9__8S19306C8[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
static  VTT_ENTRY vtt_S19306C8[] = {
  {&(_ZTV8S19306C8[5]),  5,13},
  {&(_ZTV8S19306C8[5]),  5,13},
  {&(_ZTV8S19306C8[12]),  12,13},
  {&(_tg__ZTV8S19306C9__8S19306C8[3]),  3,4},
  {&(_tg__ZTV9S19306C10__8S19306C9__8S19306C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19306C8[];
extern  VTBL_ENTRY _ZTV8S19306C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C8[];
Class_Descriptor cd_S19306C8 = {  "S19306C8", // class name
  bases_S19306C8, 2,
  &(vtc_S19306C8[0]), // expected_vtbl_contents
  &(vtt_S19306C8[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19306C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19306C8),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19306C8),5, //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  S19306C4  : S19306C5 , virtual S19306C8 {
  virtual void  v22(); // _ZN8S19306C43v22Ev
  virtual void  v23(); // _ZN8S19306C43v23Ev
  virtual void  v24(); // _ZN8S19306C43v24Ev
  ~S19306C4(); // tgen
  S19306C4(); // tgen
};
//SIG(-1 S19306C4) C1{ BC2{ BC3{ BC4{ v4 v5 Fp FD Fi} v6 v7} BC4 v8 v9 v10 v11} VBC5{ VBC6{ VBC7{ v12 FC8{ v17 v18} Fp} v13} v14 v15 v16} v1 v2 v3}


void  S19306C4 ::v22(){vfunc_called(this, "_ZN8S19306C43v22Ev");}
void  S19306C4 ::v23(){vfunc_called(this, "_ZN8S19306C43v23Ev");}
void  S19306C4 ::v24(){vfunc_called(this, "_ZN8S19306C43v24Ev");}
S19306C4 ::~S19306C4(){ note_dtor("S19306C4", this);} // tgen
S19306C4 ::S19306C4(){ note_ctor("S19306C4", this);} // tgen

static void Test_S19306C4()
{
  extern Class_Descriptor cd_S19306C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,17)];
    init_test(&cd_S19306C4, buf);
    S19306C4 *dp, &lv = *(dp=new (buf) S19306C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S19306C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19306C4)");
    check_base_class_offset(lv, (S19306C7*)(S19306C6*)(S19306C5*), 0, "S19306C4");
    check_base_class_offset(lv, (S19306C6*)(S19306C5*), 0, "S19306C4");
    /*is_ambiguous_... S19306C5::S19306C7 */ AMB_check_base_class_offset(lv, (S19306C7*)(S19306C5*), ABISELECT(48,24), "S19306C4");
    check_base_class_offset(lv, (S19306C5*), 0, "S19306C4");
    check_base_class_offset(lv, (S19306C10*)(S19306C9*), ABISELECT(96,52), "S19306C4");
    check_base_class_offset(lv, (S19306C9*)(S19306C8*), ABISELECT(88,48), "S19306C4");
    check_base_class_offset(lv, (S19306C8*), ABISELECT(88,48), "S19306C4");
    test_class_info(&lv, &cd_S19306C4);
    dp->~S19306C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19306C4(Test_S19306C4, "S19306C4", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S19306C4C1Ev();
extern void _ZN8S19306C4D1Ev();
Name_Map name_map_S19306C4[] = {
  NSPAIR(_ZN8S19306C4C1Ev),
  NSPAIR(_ZN8S19306C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19306C7;
extern VTBL_ENTRY _ZTI8S19306C7[];
extern  VTBL_ENTRY _ZTV8S19306C7[];
extern Class_Descriptor cd_S19306C6;
extern VTBL_ENTRY _ZTI8S19306C6[];
extern  VTBL_ENTRY _ZTV8S19306C6[];
extern Class_Descriptor cd_S19306C7;
extern VTBL_ENTRY _ZTI8S19306C7[];
extern  VTBL_ENTRY _ZTV8S19306C7[];
extern Class_Descriptor cd_S19306C5;
extern VTBL_ENTRY _ZTI8S19306C5[];
extern  VTBL_ENTRY _ZTV8S19306C5[];
extern Class_Descriptor cd_S19306C10;
extern VTBL_ENTRY _ZTI9S19306C10[];
extern  VTBL_ENTRY _ZTV9S19306C10[];
extern Class_Descriptor cd_S19306C9;
extern VTBL_ENTRY _ZTI8S19306C9[];
extern  VTBL_ENTRY _ZTV8S19306C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C9[];
extern Class_Descriptor cd_S19306C8;
extern VTBL_ENTRY _ZTI8S19306C8[];
extern  VTBL_ENTRY _ZTV8S19306C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C8[];
static Base_Class bases_S19306C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19306C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S19306C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19306C7,    ABISELECT(48,24), //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
    6, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19306C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19306C10,    ABISELECT(96,52), //bcp->offset
    32, //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
    5, //immediately_derived
  0, 1},
  {&cd_S19306C9,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19306C8,    ABISELECT(88,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    8, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S19306C4[];
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
extern void _ZN8S19306C63v11Ev();
extern void _ZN8S19306C63v12Ev();
extern void _ZN8S19306C53v13Ev();
extern void _ZN8S19306C53v14Ev();
extern void _ZN8S19306C53v15Ev();
extern void _ZN8S19306C53v16Ev();
extern void _ZN8S19306C43v22Ev();
extern void _ZN8S19306C43v23Ev();
extern void _ZN8S19306C43v24Ev();
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
extern void _ZN8S19306C93v18Ev();
extern void _ZN8S19306C83v19Ev();
extern void _ZN8S19306C83v20Ev();
extern void _ZN8S19306C83v21Ev();
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY vtc_S19306C4[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C4[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v24Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19306C4[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19306C4[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v21Ev,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19306C4[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19306C4[];
extern void _ZN8S19306C93v18Ev();
extern void _ZN8S19306C83v19Ev();
extern void _ZN8S19306C83v20Ev();
extern void _ZN8S19306C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C8__8S19306C4[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C8[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v21Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__8S19306C8__8S19306C4[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19306C8[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern void _ZN8S19306C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C9__8S19306C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__8S19306C9__8S19306C4[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
static  VTT_ENTRY vtt_S19306C4[] = {
  {&(_ZTV8S19306C4[5]),  5,36},
  {&(_ZTV8S19306C4[28]),  28,36},
  {&(_ZTV8S19306C4[28]),  28,36},
  {&(_ZTV8S19306C4[35]),  35,36},
  {&(_tg__ZTV8S19306C8__8S19306C4[5]),  5,9},
  {&(_tg__ZTV8S19306C8__8S19306C4[5]),  5,9},
  {&(_tg__ZTV9S19306C10__8S19306C8__8S19306C4[3]),  3,4},
  {&(_tg__ZTV8S19306C9__8S19306C4[3]),  3,4},
  {&(_tg__ZTV9S19306C10__8S19306C9__8S19306C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19306C4[];
extern  VTBL_ENTRY _ZTV8S19306C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C4[];
Class_Descriptor cd_S19306C4 = {  "S19306C4", // class name
  bases_S19306C4, 7,
  &(vtc_S19306C4[0]), // expected_vtbl_contents
  &(vtt_S19306C4[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S19306C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19306C4),36, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19306C4),9, //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  S19306C2  : S19306C3 , virtual S19306C4 {
  __tsi64 s19306c2f0[2];
  long double s19306c2f1;
  short s19306c2f2;
  int s19306c2f3;
  virtual void  v25(); // _ZN8S19306C23v25Ev
  virtual void  v26(); // _ZN8S19306C23v26Ev
  virtual void  v27(); // _ZN8S19306C23v27Ev
  ~S19306C2(); // tgen
  S19306C2(); // tgen
};
//SIG(-1 S19306C2) C1{ BC2{ vd v4 v5 v6 v7 v8 v9 v10 FL[9]} VBC3{ BC4{ BC5{ BC6{ v11 v12 Fp FD Fi} v13 v14} BC6 v15 v16 v17 v18} VBC7{ VBC8{ VBC9{ v19 FC10{ v27 v28} Fp} v20} v21 v22 v23} v24 v25 v26} v1 v2 v3 FL[2] FD Fs Fi}


void  S19306C2 ::v25(){vfunc_called(this, "_ZN8S19306C23v25Ev");}
void  S19306C2 ::v26(){vfunc_called(this, "_ZN8S19306C23v26Ev");}
void  S19306C2 ::v27(){vfunc_called(this, "_ZN8S19306C23v27Ev");}
S19306C2 ::~S19306C2(){ note_dtor("S19306C2", this);} // tgen
S19306C2 ::S19306C2(){ note_ctor("S19306C2", this);} // tgen

static void Test_S19306C2()
{
  extern Class_Descriptor cd_S19306C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,45)];
    init_test(&cd_S19306C2, buf);
    S19306C2 *dp, &lv = *(dp=new (buf) S19306C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,176), "sizeof(S19306C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19306C2)");
    check_base_class_offset(lv, (S19306C3*), 0, "S19306C2");
    check_base_class_offset(lv, (S19306C7*)(S19306C6*)(S19306C5*)(S19306C4*), ABISELECT(128,112), "S19306C2");
    check_base_class_offset(lv, (S19306C6*)(S19306C5*)(S19306C4*), ABISELECT(128,112), "S19306C2");
    /*is_ambiguous_... S19306C5::S19306C7 */ AMB_check_base_class_offset(lv, (S19306C7*)(S19306C5*)(S19306C4*), ABISELECT(176,136), "S19306C2");
    check_base_class_offset(lv, (S19306C5*)(S19306C4*), ABISELECT(128,112), "S19306C2");
    check_base_class_offset(lv, (S19306C10*)(S19306C9*), ABISELECT(224,164), "S19306C2");
    check_base_class_offset(lv, (S19306C9*)(S19306C8*), ABISELECT(216,160), "S19306C2");
    check_base_class_offset(lv, (S19306C8*)(S19306C4*), ABISELECT(216,160), "S19306C2");
    check_base_class_offset(lv, (S19306C4*), ABISELECT(128,112), "S19306C2");
    check_field_offset(lv, s19306c2f0, ABISELECT(80,76), "S19306C2.s19306c2f0");
    check_field_offset(lv, s19306c2f1, ABISELECT(96,92), "S19306C2.s19306c2f1");
    check_field_offset(lv, s19306c2f2, ABISELECT(112,104), "S19306C2.s19306c2f2");
    check_field_offset(lv, s19306c2f3, ABISELECT(116,108), "S19306C2.s19306c2f3");
    test_class_info(&lv, &cd_S19306C2);
    dp->~S19306C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19306C2(Test_S19306C2, "S19306C2", ABISELECT(256,176));

#else // __cplusplus

extern void _ZN8S19306C2C1Ev();
extern void _ZN8S19306C2D1Ev();
Name_Map name_map_S19306C2[] = {
  NSPAIR(_ZN8S19306C2C1Ev),
  NSPAIR(_ZN8S19306C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19306C3;
extern VTBL_ENTRY _ZTI8S19306C3[];
extern  VTBL_ENTRY _ZTV8S19306C3[];
extern Class_Descriptor cd_S19306C7;
extern VTBL_ENTRY _ZTI8S19306C7[];
extern  VTBL_ENTRY _ZTV8S19306C7[];
extern Class_Descriptor cd_S19306C6;
extern VTBL_ENTRY _ZTI8S19306C6[];
extern  VTBL_ENTRY _ZTV8S19306C6[];
extern Class_Descriptor cd_S19306C7;
extern VTBL_ENTRY _ZTI8S19306C7[];
extern  VTBL_ENTRY _ZTV8S19306C7[];
extern Class_Descriptor cd_S19306C5;
extern VTBL_ENTRY _ZTI8S19306C5[];
extern  VTBL_ENTRY _ZTV8S19306C5[];
extern Class_Descriptor cd_S19306C10;
extern VTBL_ENTRY _ZTI9S19306C10[];
extern  VTBL_ENTRY _ZTV9S19306C10[];
extern Class_Descriptor cd_S19306C9;
extern VTBL_ENTRY _ZTI8S19306C9[];
extern  VTBL_ENTRY _ZTV8S19306C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C9[];
extern Class_Descriptor cd_S19306C8;
extern VTBL_ENTRY _ZTI8S19306C8[];
extern  VTBL_ENTRY _ZTV8S19306C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C8[];
extern Class_Descriptor cd_S19306C4;
extern VTBL_ENTRY _ZTI8S19306C4[];
extern  VTBL_ENTRY _ZTV8S19306C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C4[];
static Base_Class bases_S19306C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19306C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19306C7,    ABISELECT(128,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
    2, //immediately_derived
  0, 0},
  {&cd_S19306C6,    ABISELECT(128,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
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19306C7,    ABISELECT(176,136), //bcp->offset
    45, //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
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19306C5,    ABISELECT(128,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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19306C10,    ABISELECT(224,164), //bcp->offset
    61, //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
    6, //immediately_derived
  0, 1},
  {&cd_S19306C9,    ABISELECT(216,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19306C8,    ABISELECT(216,160), //bcp->offset
    49, //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
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19306C4,    ABISELECT(128,112), //bcp->offset
    18, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19306C2[];
extern void _ZN8S19306C2D1Ev();
extern void _ZN8S19306C2D0Ev();
extern void _ZN8S19306C32v2Ev();
extern void _ZN8S19306C32v3Ev();
extern void _ZN8S19306C32v4Ev();
extern void _ZN8S19306C32v5Ev();
extern void _ZN8S19306C32v6Ev();
extern void _ZN8S19306C32v7Ev();
extern void _ZN8S19306C32v8Ev();
extern void _ZN8S19306C23v25Ev();
extern void _ZN8S19306C23v26Ev();
extern void _ZN8S19306C23v27Ev();
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
extern void _ZN8S19306C63v11Ev();
extern void _ZN8S19306C63v12Ev();
extern void _ZN8S19306C53v13Ev();
extern void _ZN8S19306C53v14Ev();
extern void _ZN8S19306C53v15Ev();
extern void _ZN8S19306C53v16Ev();
extern void _ZN8S19306C43v22Ev();
extern void _ZN8S19306C43v23Ev();
extern void _ZN8S19306C43v24Ev();
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
extern void _ZN8S19306C93v18Ev();
extern void _ZN8S19306C83v19Ev();
extern void _ZN8S19306C83v20Ev();
extern void _ZN8S19306C83v21Ev();
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY vtc_S19306C2[] = {
  ABISELECT(224,164),
  ABISELECT(216,160),
  ABISELECT(216,160),
  ABISELECT(128,112),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C2[0]),
  (VTBL_ENTRY)&_ZN8S19306C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19306C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19306C23v25Ev,
  (VTBL_ENTRY)&_ZN8S19306C23v26Ev,
  (VTBL_ENTRY)&_ZN8S19306C23v27Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-128,-112),
  (VTBL_ENTRY)&(_ZTI8S19306C2[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v24Ev,
  ABISELECT(-176,-136),
  (VTBL_ENTRY)&(_ZTI8S19306C2[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-216,-160),
  (VTBL_ENTRY)&(_ZTI8S19306C2[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v21Ev,
  0,
  ABISELECT(-224,-164),
  (VTBL_ENTRY)&(_ZTI8S19306C2[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19306C2[];
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
extern void _ZN8S19306C63v11Ev();
extern void _ZN8S19306C63v12Ev();
extern void _ZN8S19306C53v13Ev();
extern void _ZN8S19306C53v14Ev();
extern void _ZN8S19306C53v15Ev();
extern void _ZN8S19306C53v16Ev();
extern void _ZN8S19306C43v22Ev();
extern void _ZN8S19306C43v23Ev();
extern void _ZN8S19306C43v24Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C4__8S19306C2[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C4[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v24Ev,
};
extern void _ZN8S19306C93v18Ev();
extern void _ZN8S19306C83v19Ev();
extern void _ZN8S19306C83v20Ev();
extern void _ZN8S19306C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C8__8S19306C4__8S19306C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19306C4[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v21Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__8S19306C4__8S19306C2[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19306C4[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern void _ZN8S19306C93v18Ev();
extern void _ZN8S19306C83v19Ev();
extern void _ZN8S19306C83v20Ev();
extern void _ZN8S19306C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C8__8S19306C2[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C8[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v21Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__8S19306C8__8S19306C2[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19306C8[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern void _ZN8S19306C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C9__8S19306C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__8S19306C9__8S19306C2[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
static  VTT_ENTRY vtt_S19306C2[] = {
  {&(_ZTV8S19306C2[6]),  6,65},
  {&(_ZTV8S19306C2[34]),  34,65},
  {&(_ZTV8S19306C2[47]),  47,65},
  {&(_ZTV8S19306C2[57]),  57,65},
  {&(_ZTV8S19306C2[57]),  57,65},
  {&(_ZTV8S19306C2[64]),  64,65},
  {&(_tg__ZTV8S19306C4__8S19306C2[5]),  5,16},
  {&(_tg__ZTV8S19306C8__8S19306C4__8S19306C2[8]),  8,12},
  {&(_tg__ZTV8S19306C8__8S19306C4__8S19306C2[8]),  8,12},
  {&(_tg__ZTV9S19306C10__8S19306C4__8S19306C2[3]),  3,4},
  {&(_tg__ZTV8S19306C8__8S19306C2[5]),  5,9},
  {&(_tg__ZTV8S19306C8__8S19306C2[5]),  5,9},
  {&(_tg__ZTV9S19306C10__8S19306C8__8S19306C2[3]),  3,4},
  {&(_tg__ZTV8S19306C9__8S19306C2[3]),  3,4},
  {&(_tg__ZTV9S19306C10__8S19306C9__8S19306C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19306C2[];
extern  VTBL_ENTRY _ZTV8S19306C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C2[];
Class_Descriptor cd_S19306C2 = {  "S19306C2", // class name
  bases_S19306C2, 9,
  &(vtc_S19306C2[0]), // expected_vtbl_contents
  &(vtt_S19306C2[0]), // expected_vtt_contents
  ABISELECT(256,176), // object size
  NSPAIRA(_ZTI8S19306C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19306C2),65, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19306C2),15, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19306C12  : S19306C10 , S19306C9 {
  int s19306c12f0;
  virtual  ~S19306C12(); // _ZN9S19306C12D2Ev
  virtual void  v28(); // _ZN9S19306C123v28Ev
  S19306C12(); // tgen
};
//SIG(-1 S19306C12) C1{ BC2{ v2 FC3{ v4 v5} Fp} BC4{ VBC2 v3} vd v1 Fi}


 S19306C12 ::~S19306C12(){ note_dtor("S19306C12", this);}
void  S19306C12 ::v28(){vfunc_called(this, "_ZN9S19306C123v28Ev");}
S19306C12 ::S19306C12(){ note_ctor("S19306C12", this);} // tgen

static void Test_S19306C12()
{
  extern Class_Descriptor cd_S19306C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S19306C12, buf);
    S19306C12 *dp, &lv = *(dp=new (buf) S19306C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S19306C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19306C12)");
    /*is_ambiguous_... S19306C12::S19306C10 */ AMB_check_base_class_offset(lv, (S19306C10*), 0, "S19306C12");
    check_base_class_offset(lv, (S19306C10*)(S19306C9*), ABISELECT(40,20), "S19306C12");
    check_base_class_offset(lv, (S19306C9*), ABISELECT(24,12), "S19306C12");
    check_field_offset(lv, s19306c12f0, ABISELECT(32,16), "S19306C12.s19306c12f0");
    test_class_info(&lv, &cd_S19306C12);
    dp->~S19306C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19306C12(Test_S19306C12, "S19306C12", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN9S19306C12C1Ev();
extern void _ZN9S19306C12D2Ev();
Name_Map name_map_S19306C12[] = {
  NSPAIR(_ZN9S19306C12C1Ev),
  NSPAIR(_ZN9S19306C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19306C10;
extern VTBL_ENTRY _ZTI9S19306C10[];
extern  VTBL_ENTRY _ZTV9S19306C10[];
extern Class_Descriptor cd_S19306C10;
extern VTBL_ENTRY _ZTI9S19306C10[];
extern  VTBL_ENTRY _ZTV9S19306C10[];
extern Class_Descriptor cd_S19306C9;
extern VTBL_ENTRY _ZTI8S19306C9[];
extern  VTBL_ENTRY _ZTV8S19306C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C9[];
static Base_Class bases_S19306C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19306C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19306C10,    ABISELECT(40,20), //bcp->offset
    11, //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
    2, //immediately_derived
  0, 1},
  {&cd_S19306C9,    ABISELECT(24,12), //bcp->offset
    7, //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19306C12[];
extern void _ZN9S19306C103v17Ev();
extern void _ZN9S19306C12D1Ev();
extern void _ZN9S19306C12D0Ev();
extern void _ZN9S19306C123v28Ev();
extern void _ZN8S19306C93v18Ev();
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY vtc_S19306C12[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19306C12[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
  (VTBL_ENTRY)&_ZN9S19306C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19306C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19306C123v28Ev,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19306C12[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19306C12[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern VTBL_ENTRY _ZTV9S19306C12[];
extern void _ZN8S19306C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C9__9S19306C12[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__8S19306C9__9S19306C12[] = {
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
static  VTT_ENTRY vtt_S19306C12[] = {
  {&(_ZTV9S19306C12[3]),  3,15},
  {&(_tg__ZTV8S19306C9__9S19306C12[3]),  3,4},
  {&(_tg__ZTV9S19306C10__8S19306C9__9S19306C12[3]),  3,4},
  {&(_ZTV9S19306C12[10]),  10,15},
  {&(_ZTV9S19306C12[14]),  14,15},
};
extern VTBL_ENTRY _ZTI9S19306C12[];
extern  VTBL_ENTRY _ZTV9S19306C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19306C12[];
Class_Descriptor cd_S19306C12 = {  "S19306C12", // class name
  bases_S19306C12, 3,
  &(vtc_S19306C12[0]), // expected_vtbl_contents
  &(vtt_S19306C12[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI9S19306C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19306C12),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19306C12),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  S19306C1  : virtual S19306C2 , virtual S19306C12 {
  int s19306c1f0;
  virtual void  v1(); // _ZN8S19306C12v1Ev
  ~S19306C1(); // tgen
  S19306C1(); // tgen
};
//SIG(1 S19306C1) C1{ VBC2{ BC3{ vd v2 v3 v4 v5 v6 v7 v8 FL[9]} VBC4{ BC5{ BC6{ BC7{ v9 v10 Fp FD Fi} v11 v12} BC7 v13 v14 v15 v16} VBC8{ VBC9{ VBC10{ v17 FC11{ v29 v30} Fp} v18} v19 v20 v21} v22 v23 v24} v25 v26 v27 FL[2] FD Fs Fi} VBC12{ BC10 BC9 vd v28 Fi} v1 Fi}


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

static void Test_S19306C1()
{
  extern Class_Descriptor cd_S19306C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,51)];
    init_test(&cd_S19306C1, buf);
    S19306C1 *dp, &lv = *(dp=new (buf) S19306C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,200), "sizeof(S19306C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19306C1)");
    check_base_class_offset(lv, (S19306C3*)(S19306C2*), ABISELECT(16,8), "S19306C1");
    check_base_class_offset(lv, (S19306C7*)(S19306C6*)(S19306C5*)(S19306C4*), ABISELECT(144,120), "S19306C1");
    check_base_class_offset(lv, (S19306C6*)(S19306C5*)(S19306C4*), ABISELECT(144,120), "S19306C1");
    /*is_ambiguous_... S19306C5::S19306C7 */ AMB_check_base_class_offset(lv, (S19306C7*)(S19306C5*)(S19306C4*), ABISELECT(192,144), "S19306C1");
    check_base_class_offset(lv, (S19306C5*)(S19306C4*), ABISELECT(144,120), "S19306C1");
    /*is_ambiguous_... S19306C1::S19306C9 */ AMB_check_base_class_offset(lv, (S19306C10*)(S19306C9*), ABISELECT(232,168), "S19306C1");
    check_base_class_offset(lv, (S19306C10*)(S19306C9*)(S19306C12*), ABISELECT(232,168), "S19306C1");
    check_base_class_offset(lv, (S19306C9*)(S19306C8*), 0, "S19306C1");
    check_base_class_offset(lv, (S19306C8*)(S19306C4*), 0, "S19306C1");
    check_base_class_offset(lv, (S19306C4*)(S19306C2*), ABISELECT(144,120), "S19306C1");
    check_base_class_offset(lv, (S19306C2*), ABISELECT(16,8), "S19306C1");
    /*is_ambiguous_... S19306C12::S19306C10 */ AMB_check_base_class_offset(lv, (S19306C10*)(S19306C12*), ABISELECT(256,180), "S19306C1");
    check_base_class_offset(lv, (S19306C9*)(S19306C12*), ABISELECT(280,192), "S19306C1");
    check_base_class_offset(lv, (S19306C12*), ABISELECT(256,180), "S19306C1");
    check_field_offset(lv, s19306c1f0, ABISELECT(8,4), "S19306C1.s19306c1f0");
    test_class_info(&lv, &cd_S19306C1);
    dp->~S19306C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19306C1(Test_S19306C1, "S19306C1", ABISELECT(304,200));

#else // __cplusplus

extern void _ZN8S19306C1C1Ev();
extern void _ZN8S19306C1D1Ev();
Name_Map name_map_S19306C1[] = {
  NSPAIR(_ZN8S19306C1C1Ev),
  NSPAIR(_ZN8S19306C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19306C3;
extern VTBL_ENTRY _ZTI8S19306C3[];
extern  VTBL_ENTRY _ZTV8S19306C3[];
extern Class_Descriptor cd_S19306C7;
extern VTBL_ENTRY _ZTI8S19306C7[];
extern  VTBL_ENTRY _ZTV8S19306C7[];
extern Class_Descriptor cd_S19306C6;
extern VTBL_ENTRY _ZTI8S19306C6[];
extern  VTBL_ENTRY _ZTV8S19306C6[];
extern Class_Descriptor cd_S19306C7;
extern VTBL_ENTRY _ZTI8S19306C7[];
extern  VTBL_ENTRY _ZTV8S19306C7[];
extern Class_Descriptor cd_S19306C5;
extern VTBL_ENTRY _ZTI8S19306C5[];
extern  VTBL_ENTRY _ZTV8S19306C5[];
extern Class_Descriptor cd_S19306C10;
extern VTBL_ENTRY _ZTI9S19306C10[];
extern  VTBL_ENTRY _ZTV9S19306C10[];
extern Class_Descriptor cd_S19306C9;
extern VTBL_ENTRY _ZTI8S19306C9[];
extern  VTBL_ENTRY _ZTV8S19306C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C9[];
extern Class_Descriptor cd_S19306C8;
extern VTBL_ENTRY _ZTI8S19306C8[];
extern  VTBL_ENTRY _ZTV8S19306C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C8[];
extern Class_Descriptor cd_S19306C4;
extern VTBL_ENTRY _ZTI8S19306C4[];
extern  VTBL_ENTRY _ZTV8S19306C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C4[];
extern Class_Descriptor cd_S19306C2;
extern VTBL_ENTRY _ZTI8S19306C2[];
extern  VTBL_ENTRY _ZTV8S19306C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C2[];
extern Class_Descriptor cd_S19306C10;
extern VTBL_ENTRY _ZTI9S19306C10[];
extern  VTBL_ENTRY _ZTV9S19306C10[];
extern Class_Descriptor cd_S19306C9;
extern VTBL_ENTRY _ZTI8S19306C9[];
extern  VTBL_ENTRY _ZTV8S19306C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C9[];
extern Class_Descriptor cd_S19306C12;
extern VTBL_ENTRY _ZTI9S19306C12[];
extern  VTBL_ENTRY _ZTV9S19306C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19306C12[];
static Base_Class bases_S19306C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19306C3,    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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19306C7,    ABISELECT(144,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
    4, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19306C6,    ABISELECT(144,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
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19306C7,    ABISELECT(192,144), //bcp->offset
    75, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19306C5,    ABISELECT(144,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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19306C10,    ABISELECT(232,168), //bcp->offset
    79, //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
    6, //immediately_derived
  0, 1},
  {&cd_S19306C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19306C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19306C4,    ABISELECT(144,120), //bcp->offset
    48, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19306C2,    ABISELECT(16,8), //bcp->offset
    19, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19306C10,    ABISELECT(256,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
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19306C9,    ABISELECT(280,192), //bcp->offset
    94, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19306C12,    ABISELECT(256,180), //bcp->offset
    83, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19306C1[];
extern void _ZN8S19306C93v18Ev();
extern void _ZN8S19306C83v19Ev();
extern void _ZN8S19306C83v20Ev();
extern void _ZN8S19306C83v21Ev();
extern void _ZN8S19306C12v1Ev();
extern void _ZN8S19306C1D1Ev();
extern void _ZN8S19306C1D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S19306C1D1Ev,_ZTv0_n28_N8S19306C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19306C1D1Ev,_ZThn8_N8S19306C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19306C1D0Ev,_ZTv0_n28_N8S19306C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19306C1D0Ev,_ZThn8_N8S19306C1D0Ev)() __attribute__((weak));
extern void _ZN8S19306C32v2Ev();
extern void _ZN8S19306C32v3Ev();
extern void _ZN8S19306C32v4Ev();
extern void _ZN8S19306C32v5Ev();
extern void _ZN8S19306C32v6Ev();
extern void _ZN8S19306C32v7Ev();
extern void _ZN8S19306C32v8Ev();
extern void _ZN8S19306C23v25Ev();
extern void _ZN8S19306C23v26Ev();
extern void _ZN8S19306C23v27Ev();
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
extern void _ZN8S19306C63v11Ev();
extern void _ZN8S19306C63v12Ev();
extern void _ZN8S19306C53v13Ev();
extern void _ZN8S19306C53v14Ev();
extern void _ZN8S19306C53v15Ev();
extern void _ZN8S19306C53v16Ev();
extern void _ZN8S19306C43v22Ev();
extern void _ZN8S19306C43v23Ev();
extern void _ZN8S19306C43v24Ev();
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
extern void _ZN9S19306C103v17Ev();
extern void _ZN9S19306C103v17Ev();
extern void ABISELECT(_ZTv0_n40_N8S19306C1D1Ev,_ZTv0_n20_N8S19306C1D1Ev)();
extern void ABISELECT(_ZThn256_N8S19306C1D1Ev,_ZThn180_N8S19306C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19306C1D0Ev,_ZTv0_n20_N8S19306C1D0Ev)();
extern void ABISELECT(_ZThn256_N8S19306C1D0Ev,_ZThn180_N8S19306C1D0Ev)() __attribute__((weak));
extern void _ZN9S19306C123v28Ev();
extern void _ZN8S19306C93v18Ev();
static  VTBL_ENTRY vtc_S19306C1[] = {
  ABISELECT(256,180),
  0,
  ABISELECT(144,120),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(232,168),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C1[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19306C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19306C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19306C1D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(216,160),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(128,112),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19306C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19306C1D1Ev,_ZTv0_n28_N8S19306C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19306C1D0Ev,_ZTv0_n28_N8S19306C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19306C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19306C23v25Ev,
  (VTBL_ENTRY)&_ZN8S19306C23v26Ev,
  (VTBL_ENTRY)&_ZN8S19306C23v27Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,48),
  ABISELECT(-144,-120),
  ABISELECT(-144,-120),
  ABISELECT(-144,-120),
  (VTBL_ENTRY)&(_ZTI8S19306C1[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v24Ev,
  ABISELECT(-192,-144),
  (VTBL_ENTRY)&(_ZTI8S19306C1[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
  0,
  ABISELECT(-232,-168),
  (VTBL_ENTRY)&(_ZTI8S19306C1[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
  ABISELECT(24,12),
  0,
  ABISELECT(-256,-180),
  0,
  ABISELECT(-24,-12),
  ABISELECT(-256,-180),
  (VTBL_ENTRY)&(_ZTI8S19306C1[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19306C1D1Ev,_ZTv0_n20_N8S19306C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19306C1D0Ev,_ZTv0_n20_N8S19306C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19306C123v28Ev,
  ABISELECT(-48,-24),
  ABISELECT(-280,-192),
  (VTBL_ENTRY)&(_ZTI8S19306C1[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
};
extern VTBL_ENTRY _ZTV8S19306C1[];
extern void _ZN8S19306C2D1Ev();
extern void _ZN8S19306C2D0Ev();
extern void _ZN8S19306C32v2Ev();
extern void _ZN8S19306C32v3Ev();
extern void _ZN8S19306C32v4Ev();
extern void _ZN8S19306C32v5Ev();
extern void _ZN8S19306C32v6Ev();
extern void _ZN8S19306C32v7Ev();
extern void _ZN8S19306C32v8Ev();
extern void _ZN8S19306C23v25Ev();
extern void _ZN8S19306C23v26Ev();
extern void _ZN8S19306C23v27Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C2__8S19306C1[] = {
  ABISELECT(216,160),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(128,112),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C2[0]),
  (VTBL_ENTRY)&_ZN8S19306C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19306C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19306C23v25Ev,
  (VTBL_ENTRY)&_ZN8S19306C23v26Ev,
  (VTBL_ENTRY)&_ZN8S19306C23v27Ev,
};
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
extern void _ZN8S19306C63v11Ev();
extern void _ZN8S19306C63v12Ev();
extern void _ZN8S19306C53v13Ev();
extern void _ZN8S19306C53v14Ev();
extern void _ZN8S19306C53v15Ev();
extern void _ZN8S19306C53v16Ev();
extern void _ZN8S19306C43v22Ev();
extern void _ZN8S19306C43v23Ev();
extern void _ZN8S19306C43v24Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C4__8S19306C2__8S19306C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,48),
  ABISELECT(-144,-120),
  ABISELECT(-144,-120),
  ABISELECT(-128,-112),
  (VTBL_ENTRY)&(_ZTI8S19306C2[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v24Ev,
};
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C78S19306C58S19306C4__A1__8S19306C2__8S19306C1[] = {
  ABISELECT(-176,-136),
  (VTBL_ENTRY)&(_ZTI8S19306C2[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
};
extern void _ZN8S19306C93v18Ev();
extern void _ZN8S19306C83v19Ev();
extern void _ZN8S19306C83v20Ev();
extern void _ZN8S19306C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C8__8S19306C2__8S19306C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(232,168),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19306C2[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v21Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__8S19306C2__8S19306C1[] = {
  0,
  ABISELECT(-216,-160),
  (VTBL_ENTRY)&(_ZTI8S19306C2[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
extern void _ZN8S19306C63v11Ev();
extern void _ZN8S19306C63v12Ev();
extern void _ZN8S19306C53v13Ev();
extern void _ZN8S19306C53v14Ev();
extern void _ZN8S19306C53v15Ev();
extern void _ZN8S19306C53v16Ev();
extern void _ZN8S19306C43v22Ev();
extern void _ZN8S19306C43v23Ev();
extern void _ZN8S19306C43v24Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C4__8S19306C1[] = {
  ABISELECT(88,48),
  ABISELECT(-144,-120),
  ABISELECT(-144,-120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C4[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v24Ev,
};
extern void _ZN8S19306C93v18Ev();
extern void _ZN8S19306C83v19Ev();
extern void _ZN8S19306C83v20Ev();
extern void _ZN8S19306C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C8__8S19306C4__8S19306C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(232,168),
  ABISELECT(144,120),
  (VTBL_ENTRY)&(_ZTI8S19306C4[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v21Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__8S19306C4__8S19306C1[] = {
  0,
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19306C4[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern void _ZN8S19306C93v18Ev();
extern void _ZN8S19306C83v19Ev();
extern void _ZN8S19306C83v20Ev();
extern void _ZN8S19306C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C8__8S19306C1[] = {
  0,
  0,
  ABISELECT(232,168),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C8[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v21Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__8S19306C8__8S19306C1[] = {
  0,
  ABISELECT(-232,-168),
  (VTBL_ENTRY)&(_ZTI8S19306C8[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern void _ZN8S19306C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C9__8S19306C1[] = {
  ABISELECT(232,168),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__8S19306C9__8S19306C1[] = {
  0,
  ABISELECT(-232,-168),
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern void _ZN9S19306C103v17Ev();
extern void _ZN9S19306C12D1Ev();
extern void _ZN9S19306C12D0Ev();
extern void _ZN9S19306C123v28Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C12__8S19306C1[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19306C12[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
  (VTBL_ENTRY)&_ZN9S19306C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19306C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19306C123v28Ev,
};
extern void _ZN8S19306C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C99S19306C12__A1__8S19306C1[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__8S19306C99S19306C12__A1__8S19306C1[] = {
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern void _ZN8S19306C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C9__9S19306C12__8S19306C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19306C12[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__A1__9S19306C12__8S19306C1[] = {
  0,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S19306C12[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
static  VTT_ENTRY vtt_S19306C1[] = {
  {&(_ZTV8S19306C1[12]),  12,98},
  {&(_ZTV8S19306C1[36]),  36,98},
  {&(_ZTV8S19306C1[64]),  64,98},
  {&(_ZTV8S19306C1[77]),  77,98},
  {&(_ZTV8S19306C1[12]),  12,98},
  {&(_ZTV8S19306C1[12]),  12,98},
  {&(_ZTV8S19306C1[82]),  82,98},
  {&(_ZTV8S19306C1[90]),  90,98},
  {&(_ZTV8S19306C1[97]),  97,98},
  {&(_tg__ZTV8S19306C2__8S19306C1[6]),  6,18},
  {&(_tg__ZTV8S19306C4__8S19306C2__8S19306C1[16]),  16,27},
  {&(_tg__ZTV8S19306C78S19306C58S19306C4__A1__8S19306C2__8S19306C1[2]),  2,4},
  {&(_tg__ZTV8S19306C8__8S19306C2__8S19306C1[8]),  8,12},
  {&(_tg__ZTV8S19306C8__8S19306C2__8S19306C1[8]),  8,12},
  {&(_tg__ZTV9S19306C10__8S19306C2__8S19306C1[3]),  3,4},
  {&(_tg__ZTV8S19306C4__8S19306C1[5]),  5,16},
  {&(_tg__ZTV8S19306C8__8S19306C4__8S19306C1[8]),  8,12},
  {&(_tg__ZTV8S19306C8__8S19306C4__8S19306C1[8]),  8,12},
  {&(_tg__ZTV9S19306C10__8S19306C4__8S19306C1[3]),  3,4},
  {&(_tg__ZTV8S19306C8__8S19306C1[5]),  5,9},
  {&(_tg__ZTV8S19306C8__8S19306C1[5]),  5,9},
  {&(_tg__ZTV9S19306C10__8S19306C8__8S19306C1[3]),  3,4},
  {&(_tg__ZTV8S19306C9__8S19306C1[3]),  3,4},
  {&(_tg__ZTV9S19306C10__8S19306C9__8S19306C1[3]),  3,4},
  {&(_tg__ZTV9S19306C12__8S19306C1[3]),  3,7},
  {&(_tg__ZTV8S19306C99S19306C12__A1__8S19306C1[3]),  3,4},
  {&(_tg__ZTV9S19306C10__8S19306C99S19306C12__A1__8S19306C1[3]),  3,4},
  {&(_tg__ZTV8S19306C9__9S19306C12__8S19306C1[3]),  3,4},
  {&(_tg__ZTV9S19306C10__A1__9S19306C12__8S19306C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19306C1[];
extern  VTBL_ENTRY _ZTV8S19306C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C1[];
static VTBL_ENTRY alt_thunk_names45[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19306C1D0Ev,_ZTv0_n20_N8S19306C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19306C1D0Ev,_ZThn180_N8S19306C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19306C1D1Ev,_ZTv0_n20_N8S19306C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19306C1D1Ev,_ZThn180_N8S19306C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19306C1D0Ev,_ZTv0_n28_N8S19306C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19306C1D0Ev,_ZThn8_N8S19306C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19306C1D1Ev,_ZTv0_n28_N8S19306C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19306C1D1Ev,_ZThn8_N8S19306C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19306C1 = {  "S19306C1", // class name
  bases_S19306C1, 13,
  &(vtc_S19306C1[0]), // expected_vtbl_contents
  &(vtt_S19306C1[0]), // expected_vtt_contents
  ABISELECT(304,200), // object size
  NSPAIRA(_ZTI8S19306C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19306C1),98, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19306C1),29, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names45,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19305C3  {
  __tsi64 s19305c3f0[9];
  virtual  ~S19305C3(); // _ZN8S19305C3D1Ev
  virtual void  v2(); // _ZN8S19305C32v2Ev
  virtual void  v3(); // _ZN8S19305C32v3Ev
  virtual void  v4(); // _ZN8S19305C32v4Ev
  virtual void  v5(); // _ZN8S19305C32v5Ev
  virtual void  v6(); // _ZN8S19305C32v6Ev
  virtual void  v7(); // _ZN8S19305C32v7Ev
  virtual void  v8(); // _ZN8S19305C32v8Ev
  S19305C3(); // tgen
};
//SIG(-1 S19305C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 FL[9]}


 S19305C3 ::~S19305C3(){ note_dtor("S19305C3", this);}
void  S19305C3 ::v2(){vfunc_called(this, "_ZN8S19305C32v2Ev");}
void  S19305C3 ::v3(){vfunc_called(this, "_ZN8S19305C32v3Ev");}
void  S19305C3 ::v4(){vfunc_called(this, "_ZN8S19305C32v4Ev");}
void  S19305C3 ::v5(){vfunc_called(this, "_ZN8S19305C32v5Ev");}
void  S19305C3 ::v6(){vfunc_called(this, "_ZN8S19305C32v6Ev");}
void  S19305C3 ::v7(){vfunc_called(this, "_ZN8S19305C32v7Ev");}
void  S19305C3 ::v8(){vfunc_called(this, "_ZN8S19305C32v8Ev");}
S19305C3 ::S19305C3(){ note_ctor("S19305C3", this);} // tgen

static void Test_S19305C3()
{
  extern Class_Descriptor cd_S19305C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,20)];
    init_test(&cd_S19305C3, buf);
    S19305C3 *dp, &lv = *(dp=new (buf) S19305C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,76), "sizeof(S19305C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19305C3)");
    check_field_offset(lv, s19305c3f0, ABISELECT(8,4), "S19305C3.s19305c3f0");
    test_class_info(&lv, &cd_S19305C3);
    dp->~S19305C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19305C3(Test_S19305C3, "S19305C3", ABISELECT(80,76));

#else // __cplusplus

extern void _ZN8S19305C3C1Ev();
extern void _ZN8S19305C3D1Ev();
Name_Map name_map_S19305C3[] = {
  NSPAIR(_ZN8S19305C3C1Ev),
  NSPAIR(_ZN8S19305C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19305C3[];
extern void _ZN8S19305C3D1Ev();
extern void _ZN8S19305C3D0Ev();
extern void _ZN8S19305C32v2Ev();
extern void _ZN8S19305C32v3Ev();
extern void _ZN8S19305C32v4Ev();
extern void _ZN8S19305C32v5Ev();
extern void _ZN8S19305C32v6Ev();
extern void _ZN8S19305C32v7Ev();
extern void _ZN8S19305C32v8Ev();
static  VTBL_ENTRY vtc_S19305C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C3[0]),
  (VTBL_ENTRY)&_ZN8S19305C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19305C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v8Ev,
};
extern VTBL_ENTRY _ZTI8S19305C3[];
extern  VTBL_ENTRY _ZTV8S19305C3[];
Class_Descriptor cd_S19305C3 = {  "S19305C3", // class name
  0,0,//no base classes
  &(vtc_S19305C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,76), // object size
  NSPAIRA(_ZTI8S19305C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19305C3),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  S19305C7  {
  void *s19305c7f0;
  long double s19305c7f1;
  int s19305c7f2;
  virtual void  v9(); // _ZN8S19305C72v9Ev
  virtual void  v10(); // _ZN8S19305C73v10Ev
  ~S19305C7(); // tgen
  S19305C7(); // tgen
};
//SIG(-1 S19305C7) C1{ v1 v2 Fp FD Fi}


void  S19305C7 ::v9(){vfunc_called(this, "_ZN8S19305C72v9Ev");}
void  S19305C7 ::v10(){vfunc_called(this, "_ZN8S19305C73v10Ev");}
S19305C7 ::~S19305C7(){ note_dtor("S19305C7", this);} // tgen
S19305C7 ::S19305C7(){ note_ctor("S19305C7", this);} // tgen

static void Test_S19305C7()
{
  extern Class_Descriptor cd_S19305C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S19305C7, buf);
    S19305C7 *dp, &lv = *(dp=new (buf) S19305C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19305C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19305C7)");
    check_field_offset(lv, s19305c7f0, ABISELECT(8,4), "S19305C7.s19305c7f0");
    check_field_offset(lv, s19305c7f1, ABISELECT(16,8), "S19305C7.s19305c7f1");
    check_field_offset(lv, s19305c7f2, ABISELECT(32,20), "S19305C7.s19305c7f2");
    test_class_info(&lv, &cd_S19305C7);
    dp->~S19305C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19305C7(Test_S19305C7, "S19305C7", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19305C7C1Ev();
extern void _ZN8S19305C7D1Ev();
Name_Map name_map_S19305C7[] = {
  NSPAIR(_ZN8S19305C7C1Ev),
  NSPAIR(_ZN8S19305C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19305C7[];
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
static  VTBL_ENTRY vtc_S19305C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C7[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
};
extern VTBL_ENTRY _ZTI8S19305C7[];
extern  VTBL_ENTRY _ZTV8S19305C7[];
Class_Descriptor cd_S19305C7 = {  "S19305C7", // class name
  0,0,//no base classes
  &(vtc_S19305C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19305C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19305C7),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  S19305C6  : S19305C7 {
  virtual void  v11(); // _ZN8S19305C63v11Ev
  virtual void  v12(); // _ZN8S19305C63v12Ev
  ~S19305C6(); // tgen
  S19305C6(); // tgen
};
//SIG(-1 S19305C6) C1{ BC2{ v3 v4 Fp FD Fi} v1 v2}


void  S19305C6 ::v11(){vfunc_called(this, "_ZN8S19305C63v11Ev");}
void  S19305C6 ::v12(){vfunc_called(this, "_ZN8S19305C63v12Ev");}
S19305C6 ::~S19305C6(){ note_dtor("S19305C6", this);} // tgen
S19305C6 ::S19305C6(){ note_ctor("S19305C6", this);} // tgen

static void Test_S19305C6()
{
  extern Class_Descriptor cd_S19305C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S19305C6, buf);
    S19305C6 *dp, &lv = *(dp=new (buf) S19305C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19305C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19305C6)");
    check_base_class_offset(lv, (S19305C7*), 0, "S19305C6");
    test_class_info(&lv, &cd_S19305C6);
    dp->~S19305C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19305C6(Test_S19305C6, "S19305C6", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19305C6C1Ev();
extern void _ZN8S19305C6D1Ev();
Name_Map name_map_S19305C6[] = {
  NSPAIR(_ZN8S19305C6C1Ev),
  NSPAIR(_ZN8S19305C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19305C7;
extern VTBL_ENTRY _ZTI8S19305C7[];
extern  VTBL_ENTRY _ZTV8S19305C7[];
static Base_Class bases_S19305C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19305C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19305C6[];
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
extern void _ZN8S19305C63v11Ev();
extern void _ZN8S19305C63v12Ev();
static  VTBL_ENTRY vtc_S19305C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C6[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v12Ev,
};
extern VTBL_ENTRY _ZTI8S19305C6[];
extern  VTBL_ENTRY _ZTV8S19305C6[];
Class_Descriptor cd_S19305C6 = {  "S19305C6", // class name
  bases_S19305C6, 1,
  &(vtc_S19305C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19305C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19305C6),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  S19305C5  : S19305C6 , S19305C7 {
  virtual void  v13(); // _ZN8S19305C53v13Ev
  virtual void  v14(); // _ZN8S19305C53v14Ev
  virtual void  v15(); // _ZN8S19305C53v15Ev
  virtual void  v16(); // _ZN8S19305C53v16Ev
  ~S19305C5(); // tgen
  S19305C5(); // tgen
};
//SIG(-1 S19305C5) C1{ BC2{ BC3{ v5 v6 Fp FD Fi} v7 v8} BC3 v1 v2 v3 v4}


void  S19305C5 ::v13(){vfunc_called(this, "_ZN8S19305C53v13Ev");}
void  S19305C5 ::v14(){vfunc_called(this, "_ZN8S19305C53v14Ev");}
void  S19305C5 ::v15(){vfunc_called(this, "_ZN8S19305C53v15Ev");}
void  S19305C5 ::v16(){vfunc_called(this, "_ZN8S19305C53v16Ev");}
S19305C5 ::~S19305C5(){ note_dtor("S19305C5", this);} // tgen
S19305C5 ::S19305C5(){ note_ctor("S19305C5", this);} // tgen

static void Test_S19305C5()
{
  extern Class_Descriptor cd_S19305C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S19305C5, buf);
    S19305C5 *dp, &lv = *(dp=new (buf) S19305C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S19305C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19305C5)");
    check_base_class_offset(lv, (S19305C7*)(S19305C6*), 0, "S19305C5");
    check_base_class_offset(lv, (S19305C6*), 0, "S19305C5");
    /*is_ambiguous_... S19305C5::S19305C7 */ AMB_check_base_class_offset(lv, (S19305C7*), ABISELECT(48,24), "S19305C5");
    test_class_info(&lv, &cd_S19305C5);
    dp->~S19305C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19305C5(Test_S19305C5, "S19305C5", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S19305C5C1Ev();
extern void _ZN8S19305C5D1Ev();
Name_Map name_map_S19305C5[] = {
  NSPAIR(_ZN8S19305C5C1Ev),
  NSPAIR(_ZN8S19305C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19305C7;
extern VTBL_ENTRY _ZTI8S19305C7[];
extern  VTBL_ENTRY _ZTV8S19305C7[];
extern Class_Descriptor cd_S19305C6;
extern VTBL_ENTRY _ZTI8S19305C6[];
extern  VTBL_ENTRY _ZTV8S19305C6[];
extern Class_Descriptor cd_S19305C7;
extern VTBL_ENTRY _ZTI8S19305C7[];
extern  VTBL_ENTRY _ZTV8S19305C7[];
static Base_Class bases_S19305C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19305C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19305C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19305C7,    ABISELECT(48,24), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19305C5[];
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
extern void _ZN8S19305C63v11Ev();
extern void _ZN8S19305C63v12Ev();
extern void _ZN8S19305C53v13Ev();
extern void _ZN8S19305C53v14Ev();
extern void _ZN8S19305C53v15Ev();
extern void _ZN8S19305C53v16Ev();
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
static  VTBL_ENTRY vtc_S19305C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C5[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v16Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19305C5[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
};
extern VTBL_ENTRY _ZTI8S19305C5[];
extern  VTBL_ENTRY _ZTV8S19305C5[];
Class_Descriptor cd_S19305C5 = {  "S19305C5", // class name
  bases_S19305C5, 3,
  &(vtc_S19305C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S19305C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19305C5),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  S19305C10  {
  ::S1400C17_nt s19305c10f0;
  void *s19305c10f1;
  virtual void  v17(); // _ZN9S19305C103v17Ev
  ~S19305C10(); // tgen
  S19305C10(); // tgen
};
//SIG(-1 S19305C10) C1{ v1 FC2{ v2 v3} Fp}


void  S19305C10 ::v17(){vfunc_called(this, "_ZN9S19305C103v17Ev");}
S19305C10 ::~S19305C10(){ note_dtor("S19305C10", this);} // tgen
S19305C10 ::S19305C10(){ note_ctor("S19305C10", this);} // tgen

static void Test_S19305C10()
{
  extern Class_Descriptor cd_S19305C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19305C10, buf);
    S19305C10 *dp, &lv = *(dp=new (buf) S19305C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19305C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19305C10)");
    check_field_offset(lv, s19305c10f0, ABISELECT(8,4), "S19305C10.s19305c10f0");
    check_field_offset(lv, s19305c10f1, ABISELECT(16,8), "S19305C10.s19305c10f1");
    test_class_info(&lv, &cd_S19305C10);
    dp->~S19305C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19305C10(Test_S19305C10, "S19305C10", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S19305C10C1Ev();
extern void _ZN9S19305C10D1Ev();
Name_Map name_map_S19305C10[] = {
  NSPAIR(_ZN9S19305C10C1Ev),
  NSPAIR(_ZN9S19305C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19305C10[];
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY vtc_S19305C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19305C10[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern VTBL_ENTRY _ZTI9S19305C10[];
extern  VTBL_ENTRY _ZTV9S19305C10[];
Class_Descriptor cd_S19305C10 = {  "S19305C10", // class name
  0,0,//no base classes
  &(vtc_S19305C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S19305C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19305C10),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  S19305C9  : virtual S19305C10 {
  virtual void  v18(); // _ZN8S19305C93v18Ev
  ~S19305C9(); // tgen
  S19305C9(); // tgen
};
//SIG(-1 S19305C9) C1{ VBC2{ v2 FC3{ v3 v4} Fp} v1}


void  S19305C9 ::v18(){vfunc_called(this, "_ZN8S19305C93v18Ev");}
S19305C9 ::~S19305C9(){ note_dtor("S19305C9", this);} // tgen
S19305C9 ::S19305C9(){ note_ctor("S19305C9", this);} // tgen

static void Test_S19305C9()
{
  extern Class_Descriptor cd_S19305C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19305C9, buf);
    S19305C9 *dp, &lv = *(dp=new (buf) S19305C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19305C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19305C9)");
    check_base_class_offset(lv, (S19305C10*), ABISELECT(8,4), "S19305C9");
    test_class_info(&lv, &cd_S19305C9);
    dp->~S19305C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19305C9(Test_S19305C9, "S19305C9", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19305C9C1Ev();
extern void _ZN8S19305C9D1Ev();
Name_Map name_map_S19305C9[] = {
  NSPAIR(_ZN8S19305C9C1Ev),
  NSPAIR(_ZN8S19305C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19305C10;
extern VTBL_ENTRY _ZTI9S19305C10[];
extern  VTBL_ENTRY _ZTV9S19305C10[];
static Base_Class bases_S19305C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19305C10,    ABISELECT(8,4), //bcp->offset
    4, //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 _ZTI8S19305C9[];
extern void _ZN8S19305C93v18Ev();
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY vtc_S19305C9[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19305C9[];
static  VTT_ENTRY vtt_S19305C9[] = {
  {&(_ZTV8S19305C9[3]),  3,8},
  {&(_ZTV8S19305C9[7]),  7,8},
};
extern VTBL_ENTRY _ZTI8S19305C9[];
extern  VTBL_ENTRY _ZTV8S19305C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C9[];
Class_Descriptor cd_S19305C9 = {  "S19305C9", // class name
  bases_S19305C9, 1,
  &(vtc_S19305C9[0]), // expected_vtbl_contents
  &(vtt_S19305C9[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19305C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19305C9),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19305C9),2, //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  S19305C8  : virtual S19305C9 {
  virtual void  v19(); // _ZN8S19305C83v19Ev
  virtual void  v20(); // _ZN8S19305C83v20Ev
  virtual void  v21(); // _ZN8S19305C83v21Ev
  ~S19305C8(); // tgen
  S19305C8(); // tgen
};
//SIG(-1 S19305C8) C1{ VBC2{ VBC3{ v4 FC4{ v6 v7} Fp} v5} v1 v2 v3}


void  S19305C8 ::v19(){vfunc_called(this, "_ZN8S19305C83v19Ev");}
void  S19305C8 ::v20(){vfunc_called(this, "_ZN8S19305C83v20Ev");}
void  S19305C8 ::v21(){vfunc_called(this, "_ZN8S19305C83v21Ev");}
S19305C8 ::~S19305C8(){ note_dtor("S19305C8", this);} // tgen
S19305C8 ::S19305C8(){ note_ctor("S19305C8", this);} // tgen

static void Test_S19305C8()
{
  extern Class_Descriptor cd_S19305C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19305C8, buf);
    S19305C8 *dp, &lv = *(dp=new (buf) S19305C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19305C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19305C8)");
    check_base_class_offset(lv, (S19305C10*)(S19305C9*), ABISELECT(8,4), "S19305C8");
    check_base_class_offset(lv, (S19305C9*), 0, "S19305C8");
    test_class_info(&lv, &cd_S19305C8);
    dp->~S19305C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19305C8(Test_S19305C8, "S19305C8", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19305C8C1Ev();
extern void _ZN8S19305C8D1Ev();
Name_Map name_map_S19305C8[] = {
  NSPAIR(_ZN8S19305C8C1Ev),
  NSPAIR(_ZN8S19305C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19305C10;
extern VTBL_ENTRY _ZTI9S19305C10[];
extern  VTBL_ENTRY _ZTV9S19305C10[];
extern Class_Descriptor cd_S19305C9;
extern VTBL_ENTRY _ZTI8S19305C9[];
extern  VTBL_ENTRY _ZTV8S19305C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C9[];
static Base_Class bases_S19305C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19305C10,    ABISELECT(8,4), //bcp->offset
    9, //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
    1, //immediately_derived
  0, 1},
  {&cd_S19305C9,    0, //bcp->offset
    -1, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S19305C8[];
extern void _ZN8S19305C93v18Ev();
extern void _ZN8S19305C83v19Ev();
extern void _ZN8S19305C83v20Ev();
extern void _ZN8S19305C83v21Ev();
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY vtc_S19305C8[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C8[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v21Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19305C8[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19305C8[];
extern void _ZN8S19305C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C9__8S19305C8[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__8S19305C9__8S19305C8[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
static  VTT_ENTRY vtt_S19305C8[] = {
  {&(_ZTV8S19305C8[5]),  5,13},
  {&(_ZTV8S19305C8[5]),  5,13},
  {&(_ZTV8S19305C8[12]),  12,13},
  {&(_tg__ZTV8S19305C9__8S19305C8[3]),  3,4},
  {&(_tg__ZTV9S19305C10__8S19305C9__8S19305C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19305C8[];
extern  VTBL_ENTRY _ZTV8S19305C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C8[];
Class_Descriptor cd_S19305C8 = {  "S19305C8", // class name
  bases_S19305C8, 2,
  &(vtc_S19305C8[0]), // expected_vtbl_contents
  &(vtt_S19305C8[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19305C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19305C8),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19305C8),5, //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  S19305C4  : S19305C5 , virtual S19305C8 {
  virtual void  v22(); // _ZN8S19305C43v22Ev
  virtual void  v23(); // _ZN8S19305C43v23Ev
  virtual void  v24(); // _ZN8S19305C43v24Ev
  ~S19305C4(); // tgen
  S19305C4(); // tgen
};
//SIG(-1 S19305C4) C1{ BC2{ BC3{ BC4{ v4 v5 Fp FD Fi} v6 v7} BC4 v8 v9 v10 v11} VBC5{ VBC6{ VBC7{ v12 FC8{ v17 v18} Fp} v13} v14 v15 v16} v1 v2 v3}


void  S19305C4 ::v22(){vfunc_called(this, "_ZN8S19305C43v22Ev");}
void  S19305C4 ::v23(){vfunc_called(this, "_ZN8S19305C43v23Ev");}
void  S19305C4 ::v24(){vfunc_called(this, "_ZN8S19305C43v24Ev");}
S19305C4 ::~S19305C4(){ note_dtor("S19305C4", this);} // tgen
S19305C4 ::S19305C4(){ note_ctor("S19305C4", this);} // tgen

static void Test_S19305C4()
{
  extern Class_Descriptor cd_S19305C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,17)];
    init_test(&cd_S19305C4, buf);
    S19305C4 *dp, &lv = *(dp=new (buf) S19305C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S19305C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19305C4)");
    check_base_class_offset(lv, (S19305C7*)(S19305C6*)(S19305C5*), 0, "S19305C4");
    check_base_class_offset(lv, (S19305C6*)(S19305C5*), 0, "S19305C4");
    /*is_ambiguous_... S19305C5::S19305C7 */ AMB_check_base_class_offset(lv, (S19305C7*)(S19305C5*), ABISELECT(48,24), "S19305C4");
    check_base_class_offset(lv, (S19305C5*), 0, "S19305C4");
    check_base_class_offset(lv, (S19305C10*)(S19305C9*), ABISELECT(96,52), "S19305C4");
    check_base_class_offset(lv, (S19305C9*)(S19305C8*), ABISELECT(88,48), "S19305C4");
    check_base_class_offset(lv, (S19305C8*), ABISELECT(88,48), "S19305C4");
    test_class_info(&lv, &cd_S19305C4);
    dp->~S19305C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19305C4(Test_S19305C4, "S19305C4", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S19305C4C1Ev();
extern void _ZN8S19305C4D1Ev();
Name_Map name_map_S19305C4[] = {
  NSPAIR(_ZN8S19305C4C1Ev),
  NSPAIR(_ZN8S19305C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19305C7;
extern VTBL_ENTRY _ZTI8S19305C7[];
extern  VTBL_ENTRY _ZTV8S19305C7[];
extern Class_Descriptor cd_S19305C6;
extern VTBL_ENTRY _ZTI8S19305C6[];
extern  VTBL_ENTRY _ZTV8S19305C6[];
extern Class_Descriptor cd_S19305C7;
extern VTBL_ENTRY _ZTI8S19305C7[];
extern  VTBL_ENTRY _ZTV8S19305C7[];
extern Class_Descriptor cd_S19305C5;
extern VTBL_ENTRY _ZTI8S19305C5[];
extern  VTBL_ENTRY _ZTV8S19305C5[];
extern Class_Descriptor cd_S19305C10;
extern VTBL_ENTRY _ZTI9S19305C10[];
extern  VTBL_ENTRY _ZTV9S19305C10[];
extern Class_Descriptor cd_S19305C9;
extern VTBL_ENTRY _ZTI8S19305C9[];
extern  VTBL_ENTRY _ZTV8S19305C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C9[];
extern Class_Descriptor cd_S19305C8;
extern VTBL_ENTRY _ZTI8S19305C8[];
extern  VTBL_ENTRY _ZTV8S19305C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C8[];
static Base_Class bases_S19305C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19305C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S19305C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19305C7,    ABISELECT(48,24), //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
    6, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19305C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19305C10,    ABISELECT(96,52), //bcp->offset
    32, //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
    5, //immediately_derived
  0, 1},
  {&cd_S19305C9,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19305C8,    ABISELECT(88,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    8, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S19305C4[];
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
extern void _ZN8S19305C63v11Ev();
extern void _ZN8S19305C63v12Ev();
extern void _ZN8S19305C53v13Ev();
extern void _ZN8S19305C53v14Ev();
extern void _ZN8S19305C53v15Ev();
extern void _ZN8S19305C53v16Ev();
extern void _ZN8S19305C43v22Ev();
extern void _ZN8S19305C43v23Ev();
extern void _ZN8S19305C43v24Ev();
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
extern void _ZN8S19305C93v18Ev();
extern void _ZN8S19305C83v19Ev();
extern void _ZN8S19305C83v20Ev();
extern void _ZN8S19305C83v21Ev();
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY vtc_S19305C4[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C4[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v24Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19305C4[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19305C4[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v21Ev,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19305C4[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19305C4[];
extern void _ZN8S19305C93v18Ev();
extern void _ZN8S19305C83v19Ev();
extern void _ZN8S19305C83v20Ev();
extern void _ZN8S19305C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C8__8S19305C4[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C8[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v21Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__8S19305C8__8S19305C4[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19305C8[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern void _ZN8S19305C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C9__8S19305C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__8S19305C9__8S19305C4[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
static  VTT_ENTRY vtt_S19305C4[] = {
  {&(_ZTV8S19305C4[5]),  5,36},
  {&(_ZTV8S19305C4[28]),  28,36},
  {&(_ZTV8S19305C4[28]),  28,36},
  {&(_ZTV8S19305C4[35]),  35,36},
  {&(_tg__ZTV8S19305C8__8S19305C4[5]),  5,9},
  {&(_tg__ZTV8S19305C8__8S19305C4[5]),  5,9},
  {&(_tg__ZTV9S19305C10__8S19305C8__8S19305C4[3]),  3,4},
  {&(_tg__ZTV8S19305C9__8S19305C4[3]),  3,4},
  {&(_tg__ZTV9S19305C10__8S19305C9__8S19305C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19305C4[];
extern  VTBL_ENTRY _ZTV8S19305C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C4[];
Class_Descriptor cd_S19305C4 = {  "S19305C4", // class name
  bases_S19305C4, 7,
  &(vtc_S19305C4[0]), // expected_vtbl_contents
  &(vtt_S19305C4[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S19305C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19305C4),36, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19305C4),9, //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  S19305C2  : S19305C3 , virtual S19305C4 {
  long s19305c2f0;
  __tsi64 s19305c2f1;
  long double s19305c2f2;
  short s19305c2f3;
  int s19305c2f4;
  virtual void  v25(); // _ZN8S19305C23v25Ev
  virtual void  v26(); // _ZN8S19305C23v26Ev
  virtual void  v27(); // _ZN8S19305C23v27Ev
  ~S19305C2(); // tgen
  S19305C2(); // tgen
};
//SIG(-1 S19305C2) C1{ BC2{ vd v4 v5 v6 v7 v8 v9 v10 FL[9]} VBC3{ BC4{ BC5{ BC6{ v11 v12 Fp FD Fi} v13 v14} BC6 v15 v16 v17 v18} VBC7{ VBC8{ VBC9{ v19 FC10{ v27 v28} Fp} v20} v21 v22 v23} v24 v25 v26} v1 v2 v3 Fl FL FD Fs Fi}


void  S19305C2 ::v25(){vfunc_called(this, "_ZN8S19305C23v25Ev");}
void  S19305C2 ::v26(){vfunc_called(this, "_ZN8S19305C23v26Ev");}
void  S19305C2 ::v27(){vfunc_called(this, "_ZN8S19305C23v27Ev");}
S19305C2 ::~S19305C2(){ note_dtor("S19305C2", this);} // tgen
S19305C2 ::S19305C2(){ note_ctor("S19305C2", this);} // tgen

static void Test_S19305C2()
{
  extern Class_Descriptor cd_S19305C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,44)];
    init_test(&cd_S19305C2, buf);
    S19305C2 *dp, &lv = *(dp=new (buf) S19305C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,172), "sizeof(S19305C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19305C2)");
    check_base_class_offset(lv, (S19305C3*), 0, "S19305C2");
    check_base_class_offset(lv, (S19305C7*)(S19305C6*)(S19305C5*)(S19305C4*), ABISELECT(128,108), "S19305C2");
    check_base_class_offset(lv, (S19305C6*)(S19305C5*)(S19305C4*), ABISELECT(128,108), "S19305C2");
    /*is_ambiguous_... S19305C5::S19305C7 */ AMB_check_base_class_offset(lv, (S19305C7*)(S19305C5*)(S19305C4*), ABISELECT(176,132), "S19305C2");
    check_base_class_offset(lv, (S19305C5*)(S19305C4*), ABISELECT(128,108), "S19305C2");
    check_base_class_offset(lv, (S19305C10*)(S19305C9*), ABISELECT(224,160), "S19305C2");
    check_base_class_offset(lv, (S19305C9*)(S19305C8*), ABISELECT(216,156), "S19305C2");
    check_base_class_offset(lv, (S19305C8*)(S19305C4*), ABISELECT(216,156), "S19305C2");
    check_base_class_offset(lv, (S19305C4*), ABISELECT(128,108), "S19305C2");
    check_field_offset(lv, s19305c2f0, ABISELECT(80,76), "S19305C2.s19305c2f0");
    check_field_offset(lv, s19305c2f1, ABISELECT(88,80), "S19305C2.s19305c2f1");
    check_field_offset(lv, s19305c2f2, ABISELECT(96,88), "S19305C2.s19305c2f2");
    check_field_offset(lv, s19305c2f3, ABISELECT(112,100), "S19305C2.s19305c2f3");
    check_field_offset(lv, s19305c2f4, ABISELECT(116,104), "S19305C2.s19305c2f4");
    test_class_info(&lv, &cd_S19305C2);
    dp->~S19305C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19305C2(Test_S19305C2, "S19305C2", ABISELECT(256,172));

#else // __cplusplus

extern void _ZN8S19305C2C1Ev();
extern void _ZN8S19305C2D1Ev();
Name_Map name_map_S19305C2[] = {
  NSPAIR(_ZN8S19305C2C1Ev),
  NSPAIR(_ZN8S19305C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19305C3;
extern VTBL_ENTRY _ZTI8S19305C3[];
extern  VTBL_ENTRY _ZTV8S19305C3[];
extern Class_Descriptor cd_S19305C7;
extern VTBL_ENTRY _ZTI8S19305C7[];
extern  VTBL_ENTRY _ZTV8S19305C7[];
extern Class_Descriptor cd_S19305C6;
extern VTBL_ENTRY _ZTI8S19305C6[];
extern  VTBL_ENTRY _ZTV8S19305C6[];
extern Class_Descriptor cd_S19305C7;
extern VTBL_ENTRY _ZTI8S19305C7[];
extern  VTBL_ENTRY _ZTV8S19305C7[];
extern Class_Descriptor cd_S19305C5;
extern VTBL_ENTRY _ZTI8S19305C5[];
extern  VTBL_ENTRY _ZTV8S19305C5[];
extern Class_Descriptor cd_S19305C10;
extern VTBL_ENTRY _ZTI9S19305C10[];
extern  VTBL_ENTRY _ZTV9S19305C10[];
extern Class_Descriptor cd_S19305C9;
extern VTBL_ENTRY _ZTI8S19305C9[];
extern  VTBL_ENTRY _ZTV8S19305C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C9[];
extern Class_Descriptor cd_S19305C8;
extern VTBL_ENTRY _ZTI8S19305C8[];
extern  VTBL_ENTRY _ZTV8S19305C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C8[];
extern Class_Descriptor cd_S19305C4;
extern VTBL_ENTRY _ZTI8S19305C4[];
extern  VTBL_ENTRY _ZTV8S19305C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C4[];
static Base_Class bases_S19305C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19305C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19305C7,    ABISELECT(128,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
    2, //immediately_derived
  0, 0},
  {&cd_S19305C6,    ABISELECT(128,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
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19305C7,    ABISELECT(176,132), //bcp->offset
    45, //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
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19305C5,    ABISELECT(128,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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19305C10,    ABISELECT(224,160), //bcp->offset
    61, //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
    6, //immediately_derived
  0, 1},
  {&cd_S19305C9,    ABISELECT(216,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19305C8,    ABISELECT(216,156), //bcp->offset
    49, //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
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19305C4,    ABISELECT(128,108), //bcp->offset
    18, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19305C2[];
extern void _ZN8S19305C2D1Ev();
extern void _ZN8S19305C2D0Ev();
extern void _ZN8S19305C32v2Ev();
extern void _ZN8S19305C32v3Ev();
extern void _ZN8S19305C32v4Ev();
extern void _ZN8S19305C32v5Ev();
extern void _ZN8S19305C32v6Ev();
extern void _ZN8S19305C32v7Ev();
extern void _ZN8S19305C32v8Ev();
extern void _ZN8S19305C23v25Ev();
extern void _ZN8S19305C23v26Ev();
extern void _ZN8S19305C23v27Ev();
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
extern void _ZN8S19305C63v11Ev();
extern void _ZN8S19305C63v12Ev();
extern void _ZN8S19305C53v13Ev();
extern void _ZN8S19305C53v14Ev();
extern void _ZN8S19305C53v15Ev();
extern void _ZN8S19305C53v16Ev();
extern void _ZN8S19305C43v22Ev();
extern void _ZN8S19305C43v23Ev();
extern void _ZN8S19305C43v24Ev();
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
extern void _ZN8S19305C93v18Ev();
extern void _ZN8S19305C83v19Ev();
extern void _ZN8S19305C83v20Ev();
extern void _ZN8S19305C83v21Ev();
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY vtc_S19305C2[] = {
  ABISELECT(224,160),
  ABISELECT(216,156),
  ABISELECT(216,156),
  ABISELECT(128,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C2[0]),
  (VTBL_ENTRY)&_ZN8S19305C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19305C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19305C23v25Ev,
  (VTBL_ENTRY)&_ZN8S19305C23v26Ev,
  (VTBL_ENTRY)&_ZN8S19305C23v27Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-128,-108),
  (VTBL_ENTRY)&(_ZTI8S19305C2[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v24Ev,
  ABISELECT(-176,-132),
  (VTBL_ENTRY)&(_ZTI8S19305C2[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-216,-156),
  (VTBL_ENTRY)&(_ZTI8S19305C2[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v21Ev,
  0,
  ABISELECT(-224,-160),
  (VTBL_ENTRY)&(_ZTI8S19305C2[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19305C2[];
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
extern void _ZN8S19305C63v11Ev();
extern void _ZN8S19305C63v12Ev();
extern void _ZN8S19305C53v13Ev();
extern void _ZN8S19305C53v14Ev();
extern void _ZN8S19305C53v15Ev();
extern void _ZN8S19305C53v16Ev();
extern void _ZN8S19305C43v22Ev();
extern void _ZN8S19305C43v23Ev();
extern void _ZN8S19305C43v24Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C4__8S19305C2[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C4[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v24Ev,
};
extern void _ZN8S19305C93v18Ev();
extern void _ZN8S19305C83v19Ev();
extern void _ZN8S19305C83v20Ev();
extern void _ZN8S19305C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C8__8S19305C4__8S19305C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19305C4[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v21Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__8S19305C4__8S19305C2[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19305C4[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern void _ZN8S19305C93v18Ev();
extern void _ZN8S19305C83v19Ev();
extern void _ZN8S19305C83v20Ev();
extern void _ZN8S19305C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C8__8S19305C2[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C8[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v21Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__8S19305C8__8S19305C2[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19305C8[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern void _ZN8S19305C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C9__8S19305C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__8S19305C9__8S19305C2[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
static  VTT_ENTRY vtt_S19305C2[] = {
  {&(_ZTV8S19305C2[6]),  6,65},
  {&(_ZTV8S19305C2[34]),  34,65},
  {&(_ZTV8S19305C2[47]),  47,65},
  {&(_ZTV8S19305C2[57]),  57,65},
  {&(_ZTV8S19305C2[57]),  57,65},
  {&(_ZTV8S19305C2[64]),  64,65},
  {&(_tg__ZTV8S19305C4__8S19305C2[5]),  5,16},
  {&(_tg__ZTV8S19305C8__8S19305C4__8S19305C2[8]),  8,12},
  {&(_tg__ZTV8S19305C8__8S19305C4__8S19305C2[8]),  8,12},
  {&(_tg__ZTV9S19305C10__8S19305C4__8S19305C2[3]),  3,4},
  {&(_tg__ZTV8S19305C8__8S19305C2[5]),  5,9},
  {&(_tg__ZTV8S19305C8__8S19305C2[5]),  5,9},
  {&(_tg__ZTV9S19305C10__8S19305C8__8S19305C2[3]),  3,4},
  {&(_tg__ZTV8S19305C9__8S19305C2[3]),  3,4},
  {&(_tg__ZTV9S19305C10__8S19305C9__8S19305C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19305C2[];
extern  VTBL_ENTRY _ZTV8S19305C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C2[];
Class_Descriptor cd_S19305C2 = {  "S19305C2", // class name
  bases_S19305C2, 9,
  &(vtc_S19305C2[0]), // expected_vtbl_contents
  &(vtt_S19305C2[0]), // expected_vtt_contents
  ABISELECT(256,172), // object size
  NSPAIRA(_ZTI8S19305C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19305C2),65, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19305C2),15, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19305C12  : S19305C10 , S19305C9 {
  int s19305c12f0;
  virtual  ~S19305C12(); // _ZN9S19305C12D2Ev
  virtual void  v28(); // _ZN9S19305C123v28Ev
  S19305C12(); // tgen
};
//SIG(-1 S19305C12) C1{ BC2{ v2 FC3{ v4 v5} Fp} BC4{ VBC2 v3} vd v1 Fi}


 S19305C12 ::~S19305C12(){ note_dtor("S19305C12", this);}
void  S19305C12 ::v28(){vfunc_called(this, "_ZN9S19305C123v28Ev");}
S19305C12 ::S19305C12(){ note_ctor("S19305C12", this);} // tgen

static void Test_S19305C12()
{
  extern Class_Descriptor cd_S19305C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S19305C12, buf);
    S19305C12 *dp, &lv = *(dp=new (buf) S19305C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S19305C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19305C12)");
    /*is_ambiguous_... S19305C12::S19305C10 */ AMB_check_base_class_offset(lv, (S19305C10*), 0, "S19305C12");
    check_base_class_offset(lv, (S19305C10*)(S19305C9*), ABISELECT(40,20), "S19305C12");
    check_base_class_offset(lv, (S19305C9*), ABISELECT(24,12), "S19305C12");
    check_field_offset(lv, s19305c12f0, ABISELECT(32,16), "S19305C12.s19305c12f0");
    test_class_info(&lv, &cd_S19305C12);
    dp->~S19305C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19305C12(Test_S19305C12, "S19305C12", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN9S19305C12C1Ev();
extern void _ZN9S19305C12D2Ev();
Name_Map name_map_S19305C12[] = {
  NSPAIR(_ZN9S19305C12C1Ev),
  NSPAIR(_ZN9S19305C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19305C10;
extern VTBL_ENTRY _ZTI9S19305C10[];
extern  VTBL_ENTRY _ZTV9S19305C10[];
extern Class_Descriptor cd_S19305C10;
extern VTBL_ENTRY _ZTI9S19305C10[];
extern  VTBL_ENTRY _ZTV9S19305C10[];
extern Class_Descriptor cd_S19305C9;
extern VTBL_ENTRY _ZTI8S19305C9[];
extern  VTBL_ENTRY _ZTV8S19305C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C9[];
static Base_Class bases_S19305C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19305C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19305C10,    ABISELECT(40,20), //bcp->offset
    11, //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
    2, //immediately_derived
  0, 1},
  {&cd_S19305C9,    ABISELECT(24,12), //bcp->offset
    7, //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19305C12[];
extern void _ZN9S19305C103v17Ev();
extern void _ZN9S19305C12D1Ev();
extern void _ZN9S19305C12D0Ev();
extern void _ZN9S19305C123v28Ev();
extern void _ZN8S19305C93v18Ev();
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY vtc_S19305C12[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19305C12[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
  (VTBL_ENTRY)&_ZN9S19305C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19305C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19305C123v28Ev,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19305C12[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19305C12[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern VTBL_ENTRY _ZTV9S19305C12[];
extern void _ZN8S19305C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C9__9S19305C12[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__8S19305C9__9S19305C12[] = {
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
static  VTT_ENTRY vtt_S19305C12[] = {
  {&(_ZTV9S19305C12[3]),  3,15},
  {&(_tg__ZTV8S19305C9__9S19305C12[3]),  3,4},
  {&(_tg__ZTV9S19305C10__8S19305C9__9S19305C12[3]),  3,4},
  {&(_ZTV9S19305C12[10]),  10,15},
  {&(_ZTV9S19305C12[14]),  14,15},
};
extern VTBL_ENTRY _ZTI9S19305C12[];
extern  VTBL_ENTRY _ZTV9S19305C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19305C12[];
Class_Descriptor cd_S19305C12 = {  "S19305C12", // class name
  bases_S19305C12, 3,
  &(vtc_S19305C12[0]), // expected_vtbl_contents
  &(vtt_S19305C12[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI9S19305C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19305C12),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19305C12),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  S19305C1  : virtual S19305C2 , virtual S19305C12 {
  int s19305c1f0;
  virtual void  v1(); // _ZN8S19305C12v1Ev
  ~S19305C1(); // tgen
  S19305C1(); // tgen
};
//SIG(1 S19305C1) C1{ VBC2{ BC3{ vd v2 v3 v4 v5 v6 v7 v8 FL[9]} VBC4{ BC5{ BC6{ BC7{ v9 v10 Fp FD Fi} v11 v12} BC7 v13 v14 v15 v16} VBC8{ VBC9{ VBC10{ v17 FC11{ v29 v30} Fp} v18} v19 v20 v21} v22 v23 v24} v25 v26 v27 Fl FL FD Fs Fi} VBC12{ BC10 BC9 vd v28 Fi} v1 Fi}


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

static void Test_S19305C1()
{
  extern Class_Descriptor cd_S19305C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,50)];
    init_test(&cd_S19305C1, buf);
    S19305C1 *dp, &lv = *(dp=new (buf) S19305C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,196), "sizeof(S19305C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19305C1)");
    check_base_class_offset(lv, (S19305C3*)(S19305C2*), ABISELECT(16,8), "S19305C1");
    check_base_class_offset(lv, (S19305C7*)(S19305C6*)(S19305C5*)(S19305C4*), ABISELECT(144,116), "S19305C1");
    check_base_class_offset(lv, (S19305C6*)(S19305C5*)(S19305C4*), ABISELECT(144,116), "S19305C1");
    /*is_ambiguous_... S19305C5::S19305C7 */ AMB_check_base_class_offset(lv, (S19305C7*)(S19305C5*)(S19305C4*), ABISELECT(192,140), "S19305C1");
    check_base_class_offset(lv, (S19305C5*)(S19305C4*), ABISELECT(144,116), "S19305C1");
    /*is_ambiguous_... S19305C1::S19305C9 */ AMB_check_base_class_offset(lv, (S19305C10*)(S19305C9*), ABISELECT(232,164), "S19305C1");
    check_base_class_offset(lv, (S19305C10*)(S19305C9*)(S19305C12*), ABISELECT(232,164), "S19305C1");
    check_base_class_offset(lv, (S19305C9*)(S19305C8*), 0, "S19305C1");
    check_base_class_offset(lv, (S19305C8*)(S19305C4*), 0, "S19305C1");
    check_base_class_offset(lv, (S19305C4*)(S19305C2*), ABISELECT(144,116), "S19305C1");
    check_base_class_offset(lv, (S19305C2*), ABISELECT(16,8), "S19305C1");
    /*is_ambiguous_... S19305C12::S19305C10 */ AMB_check_base_class_offset(lv, (S19305C10*)(S19305C12*), ABISELECT(256,176), "S19305C1");
    check_base_class_offset(lv, (S19305C9*)(S19305C12*), ABISELECT(280,188), "S19305C1");
    check_base_class_offset(lv, (S19305C12*), ABISELECT(256,176), "S19305C1");
    check_field_offset(lv, s19305c1f0, ABISELECT(8,4), "S19305C1.s19305c1f0");
    test_class_info(&lv, &cd_S19305C1);
    dp->~S19305C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19305C1(Test_S19305C1, "S19305C1", ABISELECT(304,196));

#else // __cplusplus

extern void _ZN8S19305C1C1Ev();
extern void _ZN8S19305C1D1Ev();
Name_Map name_map_S19305C1[] = {
  NSPAIR(_ZN8S19305C1C1Ev),
  NSPAIR(_ZN8S19305C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19305C3;
extern VTBL_ENTRY _ZTI8S19305C3[];
extern  VTBL_ENTRY _ZTV8S19305C3[];
extern Class_Descriptor cd_S19305C7;
extern VTBL_ENTRY _ZTI8S19305C7[];
extern  VTBL_ENTRY _ZTV8S19305C7[];
extern Class_Descriptor cd_S19305C6;
extern VTBL_ENTRY _ZTI8S19305C6[];
extern  VTBL_ENTRY _ZTV8S19305C6[];
extern Class_Descriptor cd_S19305C7;
extern VTBL_ENTRY _ZTI8S19305C7[];
extern  VTBL_ENTRY _ZTV8S19305C7[];
extern Class_Descriptor cd_S19305C5;
extern VTBL_ENTRY _ZTI8S19305C5[];
extern  VTBL_ENTRY _ZTV8S19305C5[];
extern Class_Descriptor cd_S19305C10;
extern VTBL_ENTRY _ZTI9S19305C10[];
extern  VTBL_ENTRY _ZTV9S19305C10[];
extern Class_Descriptor cd_S19305C9;
extern VTBL_ENTRY _ZTI8S19305C9[];
extern  VTBL_ENTRY _ZTV8S19305C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C9[];
extern Class_Descriptor cd_S19305C8;
extern VTBL_ENTRY _ZTI8S19305C8[];
extern  VTBL_ENTRY _ZTV8S19305C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C8[];
extern Class_Descriptor cd_S19305C4;
extern VTBL_ENTRY _ZTI8S19305C4[];
extern  VTBL_ENTRY _ZTV8S19305C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C4[];
extern Class_Descriptor cd_S19305C2;
extern VTBL_ENTRY _ZTI8S19305C2[];
extern  VTBL_ENTRY _ZTV8S19305C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C2[];
extern Class_Descriptor cd_S19305C10;
extern VTBL_ENTRY _ZTI9S19305C10[];
extern  VTBL_ENTRY _ZTV9S19305C10[];
extern Class_Descriptor cd_S19305C9;
extern VTBL_ENTRY _ZTI8S19305C9[];
extern  VTBL_ENTRY _ZTV8S19305C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C9[];
extern Class_Descriptor cd_S19305C12;
extern VTBL_ENTRY _ZTI9S19305C12[];
extern  VTBL_ENTRY _ZTV9S19305C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19305C12[];
static Base_Class bases_S19305C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19305C3,    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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19305C7,    ABISELECT(144,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
    4, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19305C6,    ABISELECT(144,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
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19305C7,    ABISELECT(192,140), //bcp->offset
    75, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19305C5,    ABISELECT(144,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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19305C10,    ABISELECT(232,164), //bcp->offset
    79, //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
    6, //immediately_derived
  0, 1},
  {&cd_S19305C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19305C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19305C4,    ABISELECT(144,116), //bcp->offset
    48, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19305C2,    ABISELECT(16,8), //bcp->offset
    19, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19305C10,    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
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19305C9,    ABISELECT(280,188), //bcp->offset
    94, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19305C12,    ABISELECT(256,176), //bcp->offset
    83, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19305C1[];
extern void _ZN8S19305C93v18Ev();
extern void _ZN8S19305C83v19Ev();
extern void _ZN8S19305C83v20Ev();
extern void _ZN8S19305C83v21Ev();
extern void _ZN8S19305C12v1Ev();
extern void _ZN8S19305C1D1Ev();
extern void _ZN8S19305C1D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S19305C1D1Ev,_ZTv0_n28_N8S19305C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19305C1D1Ev,_ZThn8_N8S19305C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19305C1D0Ev,_ZTv0_n28_N8S19305C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19305C1D0Ev,_ZThn8_N8S19305C1D0Ev)() __attribute__((weak));
extern void _ZN8S19305C32v2Ev();
extern void _ZN8S19305C32v3Ev();
extern void _ZN8S19305C32v4Ev();
extern void _ZN8S19305C32v5Ev();
extern void _ZN8S19305C32v6Ev();
extern void _ZN8S19305C32v7Ev();
extern void _ZN8S19305C32v8Ev();
extern void _ZN8S19305C23v25Ev();
extern void _ZN8S19305C23v26Ev();
extern void _ZN8S19305C23v27Ev();
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
extern void _ZN8S19305C63v11Ev();
extern void _ZN8S19305C63v12Ev();
extern void _ZN8S19305C53v13Ev();
extern void _ZN8S19305C53v14Ev();
extern void _ZN8S19305C53v15Ev();
extern void _ZN8S19305C53v16Ev();
extern void _ZN8S19305C43v22Ev();
extern void _ZN8S19305C43v23Ev();
extern void _ZN8S19305C43v24Ev();
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
extern void _ZN9S19305C103v17Ev();
extern void _ZN9S19305C103v17Ev();
extern void ABISELECT(_ZTv0_n40_N8S19305C1D1Ev,_ZTv0_n20_N8S19305C1D1Ev)();
extern void ABISELECT(_ZThn256_N8S19305C1D1Ev,_ZThn176_N8S19305C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19305C1D0Ev,_ZTv0_n20_N8S19305C1D0Ev)();
extern void ABISELECT(_ZThn256_N8S19305C1D0Ev,_ZThn176_N8S19305C1D0Ev)() __attribute__((weak));
extern void _ZN9S19305C123v28Ev();
extern void _ZN8S19305C93v18Ev();
static  VTBL_ENTRY vtc_S19305C1[] = {
  ABISELECT(256,176),
  0,
  ABISELECT(144,116),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C1[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19305C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19305C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19305C1D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(216,156),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(128,108),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19305C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19305C1D1Ev,_ZTv0_n28_N8S19305C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19305C1D0Ev,_ZTv0_n28_N8S19305C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19305C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19305C23v25Ev,
  (VTBL_ENTRY)&_ZN8S19305C23v26Ev,
  (VTBL_ENTRY)&_ZN8S19305C23v27Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,48),
  ABISELECT(-144,-116),
  ABISELECT(-144,-116),
  ABISELECT(-144,-116),
  (VTBL_ENTRY)&(_ZTI8S19305C1[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v24Ev,
  ABISELECT(-192,-140),
  (VTBL_ENTRY)&(_ZTI8S19305C1[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
  0,
  ABISELECT(-232,-164),
  (VTBL_ENTRY)&(_ZTI8S19305C1[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
  ABISELECT(24,12),
  0,
  ABISELECT(-256,-176),
  0,
  ABISELECT(-24,-12),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI8S19305C1[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19305C1D1Ev,_ZTv0_n20_N8S19305C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19305C1D0Ev,_ZTv0_n20_N8S19305C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19305C123v28Ev,
  ABISELECT(-48,-24),
  ABISELECT(-280,-188),
  (VTBL_ENTRY)&(_ZTI8S19305C1[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
};
extern VTBL_ENTRY _ZTV8S19305C1[];
extern void _ZN8S19305C2D1Ev();
extern void _ZN8S19305C2D0Ev();
extern void _ZN8S19305C32v2Ev();
extern void _ZN8S19305C32v3Ev();
extern void _ZN8S19305C32v4Ev();
extern void _ZN8S19305C32v5Ev();
extern void _ZN8S19305C32v6Ev();
extern void _ZN8S19305C32v7Ev();
extern void _ZN8S19305C32v8Ev();
extern void _ZN8S19305C23v25Ev();
extern void _ZN8S19305C23v26Ev();
extern void _ZN8S19305C23v27Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C2__8S19305C1[] = {
  ABISELECT(216,156),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(128,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C2[0]),
  (VTBL_ENTRY)&_ZN8S19305C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19305C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19305C23v25Ev,
  (VTBL_ENTRY)&_ZN8S19305C23v26Ev,
  (VTBL_ENTRY)&_ZN8S19305C23v27Ev,
};
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
extern void _ZN8S19305C63v11Ev();
extern void _ZN8S19305C63v12Ev();
extern void _ZN8S19305C53v13Ev();
extern void _ZN8S19305C53v14Ev();
extern void _ZN8S19305C53v15Ev();
extern void _ZN8S19305C53v16Ev();
extern void _ZN8S19305C43v22Ev();
extern void _ZN8S19305C43v23Ev();
extern void _ZN8S19305C43v24Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C4__8S19305C2__8S19305C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,48),
  ABISELECT(-144,-116),
  ABISELECT(-144,-116),
  ABISELECT(-128,-108),
  (VTBL_ENTRY)&(_ZTI8S19305C2[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v24Ev,
};
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C78S19305C58S19305C4__A1__8S19305C2__8S19305C1[] = {
  ABISELECT(-176,-132),
  (VTBL_ENTRY)&(_ZTI8S19305C2[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
};
extern void _ZN8S19305C93v18Ev();
extern void _ZN8S19305C83v19Ev();
extern void _ZN8S19305C83v20Ev();
extern void _ZN8S19305C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C8__8S19305C2__8S19305C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(232,164),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19305C2[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v21Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__8S19305C2__8S19305C1[] = {
  0,
  ABISELECT(-216,-156),
  (VTBL_ENTRY)&(_ZTI8S19305C2[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
extern void _ZN8S19305C63v11Ev();
extern void _ZN8S19305C63v12Ev();
extern void _ZN8S19305C53v13Ev();
extern void _ZN8S19305C53v14Ev();
extern void _ZN8S19305C53v15Ev();
extern void _ZN8S19305C53v16Ev();
extern void _ZN8S19305C43v22Ev();
extern void _ZN8S19305C43v23Ev();
extern void _ZN8S19305C43v24Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C4__8S19305C1[] = {
  ABISELECT(88,48),
  ABISELECT(-144,-116),
  ABISELECT(-144,-116),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C4[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v24Ev,
};
extern void _ZN8S19305C93v18Ev();
extern void _ZN8S19305C83v19Ev();
extern void _ZN8S19305C83v20Ev();
extern void _ZN8S19305C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C8__8S19305C4__8S19305C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(232,164),
  ABISELECT(144,116),
  (VTBL_ENTRY)&(_ZTI8S19305C4[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v21Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__8S19305C4__8S19305C1[] = {
  0,
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19305C4[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern void _ZN8S19305C93v18Ev();
extern void _ZN8S19305C83v19Ev();
extern void _ZN8S19305C83v20Ev();
extern void _ZN8S19305C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C8__8S19305C1[] = {
  0,
  0,
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C8[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v21Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__8S19305C8__8S19305C1[] = {
  0,
  ABISELECT(-232,-164),
  (VTBL_ENTRY)&(_ZTI8S19305C8[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern void _ZN8S19305C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C9__8S19305C1[] = {
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__8S19305C9__8S19305C1[] = {
  0,
  ABISELECT(-232,-164),
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern void _ZN9S19305C103v17Ev();
extern void _ZN9S19305C12D1Ev();
extern void _ZN9S19305C12D0Ev();
extern void _ZN9S19305C123v28Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C12__8S19305C1[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19305C12[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
  (VTBL_ENTRY)&_ZN9S19305C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19305C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19305C123v28Ev,
};
extern void _ZN8S19305C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C99S19305C12__A1__8S19305C1[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__8S19305C99S19305C12__A1__8S19305C1[] = {
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern void _ZN8S19305C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C9__9S19305C12__8S19305C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19305C12[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__A1__9S19305C12__8S19305C1[] = {
  0,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S19305C12[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
static  VTT_ENTRY vtt_S19305C1[] = {
  {&(_ZTV8S19305C1[12]),  12,98},
  {&(_ZTV8S19305C1[36]),  36,98},
  {&(_ZTV8S19305C1[64]),  64,98},
  {&(_ZTV8S19305C1[77]),  77,98},
  {&(_ZTV8S19305C1[12]),  12,98},
  {&(_ZTV8S19305C1[12]),  12,98},
  {&(_ZTV8S19305C1[82]),  82,98},
  {&(_ZTV8S19305C1[90]),  90,98},
  {&(_ZTV8S19305C1[97]),  97,98},
  {&(_tg__ZTV8S19305C2__8S19305C1[6]),  6,18},
  {&(_tg__ZTV8S19305C4__8S19305C2__8S19305C1[16]),  16,27},
  {&(_tg__ZTV8S19305C78S19305C58S19305C4__A1__8S19305C2__8S19305C1[2]),  2,4},
  {&(_tg__ZTV8S19305C8__8S19305C2__8S19305C1[8]),  8,12},
  {&(_tg__ZTV8S19305C8__8S19305C2__8S19305C1[8]),  8,12},
  {&(_tg__ZTV9S19305C10__8S19305C2__8S19305C1[3]),  3,4},
  {&(_tg__ZTV8S19305C4__8S19305C1[5]),  5,16},
  {&(_tg__ZTV8S19305C8__8S19305C4__8S19305C1[8]),  8,12},
  {&(_tg__ZTV8S19305C8__8S19305C4__8S19305C1[8]),  8,12},
  {&(_tg__ZTV9S19305C10__8S19305C4__8S19305C1[3]),  3,4},
  {&(_tg__ZTV8S19305C8__8S19305C1[5]),  5,9},
  {&(_tg__ZTV8S19305C8__8S19305C1[5]),  5,9},
  {&(_tg__ZTV9S19305C10__8S19305C8__8S19305C1[3]),  3,4},
  {&(_tg__ZTV8S19305C9__8S19305C1[3]),  3,4},
  {&(_tg__ZTV9S19305C10__8S19305C9__8S19305C1[3]),  3,4},
  {&(_tg__ZTV9S19305C12__8S19305C1[3]),  3,7},
  {&(_tg__ZTV8S19305C99S19305C12__A1__8S19305C1[3]),  3,4},
  {&(_tg__ZTV9S19305C10__8S19305C99S19305C12__A1__8S19305C1[3]),  3,4},
  {&(_tg__ZTV8S19305C9__9S19305C12__8S19305C1[3]),  3,4},
  {&(_tg__ZTV9S19305C10__A1__9S19305C12__8S19305C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19305C1[];
extern  VTBL_ENTRY _ZTV8S19305C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C1[];
static VTBL_ENTRY alt_thunk_names46[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19305C1D0Ev,_ZTv0_n20_N8S19305C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19305C1D0Ev,_ZThn176_N8S19305C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19305C1D1Ev,_ZTv0_n20_N8S19305C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19305C1D1Ev,_ZThn176_N8S19305C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19305C1D0Ev,_ZTv0_n28_N8S19305C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19305C1D0Ev,_ZThn8_N8S19305C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19305C1D1Ev,_ZTv0_n28_N8S19305C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19305C1D1Ev,_ZThn8_N8S19305C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19305C1 = {  "S19305C1", // class name
  bases_S19305C1, 13,
  &(vtc_S19305C1[0]), // expected_vtbl_contents
  &(vtt_S19305C1[0]), // expected_vtt_contents
  ABISELECT(304,196), // object size
  NSPAIRA(_ZTI8S19305C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19305C1),98, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19305C1),29, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names46,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S378C6  {
  ::S4473C12_nt s378c6f0;
  int s378c6f1[2];
  char s378c6f2;
  virtual  ~S378C6(); // _ZN6S378C6D1Ev
  virtual void  v5(); // _ZN6S378C62v5Ev
  virtual void  v6(); // _ZN6S378C62v6Ev
  virtual void  v7(); // _ZN6S378C62v7Ev
  S378C6(); // tgen
};
//SIG(-1 S378C6) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S378C6 ::~S378C6(){ note_dtor("S378C6", this);}
void  S378C6 ::v5(){vfunc_called(this, "_ZN6S378C62v5Ev");}
void  S378C6 ::v6(){vfunc_called(this, "_ZN6S378C62v6Ev");}
void  S378C6 ::v7(){vfunc_called(this, "_ZN6S378C62v7Ev");}
S378C6 ::S378C6(){ note_ctor("S378C6", this);} // tgen

static void Test_S378C6()
{
  extern Class_Descriptor cd_S378C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S378C6, buf);
    S378C6 *dp, &lv = *(dp=new (buf) S378C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S378C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S378C6)");
    check_field_offset(lv, s378c6f0, ABISELECT(8,4), "S378C6.s378c6f0");
    check_field_offset(lv, s378c6f1, ABISELECT(24,16), "S378C6.s378c6f1");
    check_field_offset(lv, s378c6f2, ABISELECT(32,24), "S378C6.s378c6f2");
    test_class_info(&lv, &cd_S378C6);
    dp->~S378C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS378C6(Test_S378C6, "S378C6", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN6S378C6C1Ev();
extern void _ZN6S378C6D1Ev();
Name_Map name_map_S378C6[] = {
  NSPAIR(_ZN6S378C6C1Ev),
  NSPAIR(_ZN6S378C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S378C6[];
extern void _ZN6S378C6D1Ev();
extern void _ZN6S378C6D0Ev();
extern void _ZN6S378C62v5Ev();
extern void _ZN6S378C62v6Ev();
extern void _ZN6S378C62v7Ev();
static  VTBL_ENTRY vtc_S378C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S378C6[0]),
  (VTBL_ENTRY)&_ZN6S378C6D1Ev,
  (VTBL_ENTRY)&_ZN6S378C6D0Ev,
  (VTBL_ENTRY)&_ZN6S378C62v5Ev,
  (VTBL_ENTRY)&_ZN6S378C62v6Ev,
  (VTBL_ENTRY)&_ZN6S378C62v7Ev,
};
extern VTBL_ENTRY _ZTI6S378C6[];
extern  VTBL_ENTRY _ZTV6S378C6[];
Class_Descriptor cd_S378C6 = {  "S378C6", // class name
  0,0,//no base classes
  &(vtc_S378C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI6S378C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S378C6),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  S378C5  : S378C6 {
  void *s378c5f0;
  virtual void  v8(); // _ZN6S378C52v8Ev
  virtual void  v9(); // _ZN6S378C52v9Ev
  ~S378C5(); // tgen
  S378C5(); // tgen
};
//SIG(-1 S378C5) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S378C5 ::v8(){vfunc_called(this, "_ZN6S378C52v8Ev");}
void  S378C5 ::v9(){vfunc_called(this, "_ZN6S378C52v9Ev");}
S378C5 ::~S378C5(){ note_dtor("S378C5", this);} // tgen
S378C5 ::S378C5(){ note_ctor("S378C5", this);} // tgen

static void Test_S378C5()
{
  extern Class_Descriptor cd_S378C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S378C5, buf);
    S378C5 *dp, &lv = *(dp=new (buf) S378C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S378C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S378C5)");
    check_base_class_offset(lv, (S378C6*), 0, "S378C5");
    check_field_offset(lv, s378c5f0, ABISELECT(40,28), "S378C5.s378c5f0");
    test_class_info(&lv, &cd_S378C5);
    dp->~S378C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS378C5(Test_S378C5, "S378C5", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN6S378C5C1Ev();
extern void _ZN6S378C5D1Ev();
Name_Map name_map_S378C5[] = {
  NSPAIR(_ZN6S378C5C1Ev),
  NSPAIR(_ZN6S378C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S378C6;
extern VTBL_ENTRY _ZTI6S378C6[];
extern  VTBL_ENTRY _ZTV6S378C6[];
static Base_Class bases_S378C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S378C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S378C5[];
extern void _ZN6S378C5D1Ev();
extern void _ZN6S378C5D0Ev();
extern void _ZN6S378C62v5Ev();
extern void _ZN6S378C62v6Ev();
extern void _ZN6S378C62v7Ev();
extern void _ZN6S378C52v8Ev();
extern void _ZN6S378C52v9Ev();
static  VTBL_ENTRY vtc_S378C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S378C5[0]),
  (VTBL_ENTRY)&_ZN6S378C5D1Ev,
  (VTBL_ENTRY)&_ZN6S378C5D0Ev,
  (VTBL_ENTRY)&_ZN6S378C62v5Ev,
  (VTBL_ENTRY)&_ZN6S378C62v6Ev,
  (VTBL_ENTRY)&_ZN6S378C62v7Ev,
  (VTBL_ENTRY)&_ZN6S378C52v8Ev,
  (VTBL_ENTRY)&_ZN6S378C52v9Ev,
};
extern VTBL_ENTRY _ZTI6S378C5[];
extern  VTBL_ENTRY _ZTV6S378C5[];
Class_Descriptor cd_S378C5 = {  "S378C5", // class name
  bases_S378C5, 1,
  &(vtc_S378C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI6S378C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S378C5),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  S378C4  : S378C5 {
  void *s378c4f0;
  char s378c4f1;
  ::S2366C14_nt s378c4f2;
  virtual  ~S378C4(); // _ZN6S378C4D1Ev
  virtual void  v10(); // _ZN6S378C43v10Ev
  S378C4(); // tgen
};
//SIG(-1 S378C4) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1 Fp Fc FC6{ m Fi[2]}}


 S378C4 ::~S378C4(){ note_dtor("S378C4", this);}
void  S378C4 ::v10(){vfunc_called(this, "_ZN6S378C43v10Ev");}
S378C4 ::S378C4(){ note_ctor("S378C4", this);} // tgen

static void Test_S378C4()
{
  extern Class_Descriptor cd_S378C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S378C4, buf);
    S378C4 *dp, &lv = *(dp=new (buf) S378C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S378C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S378C4)");
    check_base_class_offset(lv, (S378C6*)(S378C5*), 0, "S378C4");
    check_base_class_offset(lv, (S378C5*), 0, "S378C4");
    check_field_offset(lv, s378c4f0, ABISELECT(48,32), "S378C4.s378c4f0");
    check_field_offset(lv, s378c4f1, ABISELECT(56,36), "S378C4.s378c4f1");
    check_field_offset(lv, s378c4f2, ABISELECT(60,40), "S378C4.s378c4f2");
    test_class_info(&lv, &cd_S378C4);
    dp->~S378C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS378C4(Test_S378C4, "S378C4", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN6S378C4C1Ev();
extern void _ZN6S378C4D1Ev();
Name_Map name_map_S378C4[] = {
  NSPAIR(_ZN6S378C4C1Ev),
  NSPAIR(_ZN6S378C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S378C6;
extern VTBL_ENTRY _ZTI6S378C6[];
extern  VTBL_ENTRY _ZTV6S378C6[];
extern Class_Descriptor cd_S378C5;
extern VTBL_ENTRY _ZTI6S378C5[];
extern  VTBL_ENTRY _ZTV6S378C5[];
static Base_Class bases_S378C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S378C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S378C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S378C4[];
extern void _ZN6S378C4D1Ev();
extern void _ZN6S378C4D0Ev();
extern void _ZN6S378C62v5Ev();
extern void _ZN6S378C62v6Ev();
extern void _ZN6S378C62v7Ev();
extern void _ZN6S378C52v8Ev();
extern void _ZN6S378C52v9Ev();
extern void _ZN6S378C43v10Ev();
static  VTBL_ENTRY vtc_S378C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S378C4[0]),
  (VTBL_ENTRY)&_ZN6S378C4D1Ev,
  (VTBL_ENTRY)&_ZN6S378C4D0Ev,
  (VTBL_ENTRY)&_ZN6S378C62v5Ev,
  (VTBL_ENTRY)&_ZN6S378C62v6Ev,
  (VTBL_ENTRY)&_ZN6S378C62v7Ev,
  (VTBL_ENTRY)&_ZN6S378C52v8Ev,
  (VTBL_ENTRY)&_ZN6S378C52v9Ev,
  (VTBL_ENTRY)&_ZN6S378C43v10Ev,
};
extern VTBL_ENTRY _ZTI6S378C4[];
extern  VTBL_ENTRY _ZTV6S378C4[];
Class_Descriptor cd_S378C4 = {  "S378C4", // class name
  bases_S378C4, 2,
  &(vtc_S378C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI6S378C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S378C4),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  S378C3  : S378C4 {
  void *s378c3f0;
  __tsi64 s378c3f1[2];
  ::S130C11_nt s378c3f2;
  __tsi64 s378c3f3;
  ::S130C12_nt s378c3f4;
  char s378c3f5;
  void *s378c3f6[2];
  virtual  ~S378C3(); // _ZN6S378C3D1Ev
  virtual void  v11(); // _ZN6S378C33v11Ev
  virtual void  v12(); // _ZN6S378C33v12Ev
  virtual void  v13(); // _ZN6S378C33v13Ev
  virtual void  v14(); // _ZN6S378C33v14Ev
  S378C3(); // tgen
};
//SIG(-1 S378C3) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v8 v9 Fp} vd v10 Fp Fc FC7{ m Fi[2]}} vd v1 v2 v3 v4 Fp FL[2] FC8{ m Fp[2]} FL FC9{ Fp Fi Fp} Fc Fp[2]}


 S378C3 ::~S378C3(){ note_dtor("S378C3", this);}
void  S378C3 ::v11(){vfunc_called(this, "_ZN6S378C33v11Ev");}
void  S378C3 ::v12(){vfunc_called(this, "_ZN6S378C33v12Ev");}
void  S378C3 ::v13(){vfunc_called(this, "_ZN6S378C33v13Ev");}
void  S378C3 ::v14(){vfunc_called(this, "_ZN6S378C33v14Ev");}
S378C3 ::S378C3(){ note_ctor("S378C3", this);} // tgen

static void Test_S378C3()
{
  extern Class_Descriptor cd_S378C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,28)];
    init_test(&cd_S378C3, buf);
    S378C3 *dp, &lv = *(dp=new (buf) S378C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,108), "sizeof(S378C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S378C3)");
    check_base_class_offset(lv, (S378C6*)(S378C5*)(S378C4*), 0, "S378C3");
    check_base_class_offset(lv, (S378C5*)(S378C4*), 0, "S378C3");
    check_base_class_offset(lv, (S378C4*), 0, "S378C3");
    check_field_offset(lv, s378c3f0, ABISELECT(72,48), "S378C3.s378c3f0");
    check_field_offset(lv, s378c3f1, ABISELECT(80,52), "S378C3.s378c3f1");
    check_field_offset(lv, s378c3f2, ABISELECT(96,68), "S378C3.s378c3f2");
    check_field_offset(lv, s378c3f3, ABISELECT(112,76), "S378C3.s378c3f3");
    check_field_offset(lv, s378c3f4, ABISELECT(120,84), "S378C3.s378c3f4");
    check_field_offset(lv, s378c3f5, ABISELECT(144,96), "S378C3.s378c3f5");
    check_field_offset(lv, s378c3f6, ABISELECT(152,100), "S378C3.s378c3f6");
    test_class_info(&lv, &cd_S378C3);
    dp->~S378C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS378C3(Test_S378C3, "S378C3", ABISELECT(168,108));

#else // __cplusplus

extern void _ZN6S378C3C1Ev();
extern void _ZN6S378C3D1Ev();
Name_Map name_map_S378C3[] = {
  NSPAIR(_ZN6S378C3C1Ev),
  NSPAIR(_ZN6S378C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S378C6;
extern VTBL_ENTRY _ZTI6S378C6[];
extern  VTBL_ENTRY _ZTV6S378C6[];
extern Class_Descriptor cd_S378C5;
extern VTBL_ENTRY _ZTI6S378C5[];
extern  VTBL_ENTRY _ZTV6S378C5[];
extern Class_Descriptor cd_S378C4;
extern VTBL_ENTRY _ZTI6S378C4[];
extern  VTBL_ENTRY _ZTV6S378C4[];
static Base_Class bases_S378C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S378C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S378C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S378C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S378C3[];
extern void _ZN6S378C3D1Ev();
extern void _ZN6S378C3D0Ev();
extern void _ZN6S378C62v5Ev();
extern void _ZN6S378C62v6Ev();
extern void _ZN6S378C62v7Ev();
extern void _ZN6S378C52v8Ev();
extern void _ZN6S378C52v9Ev();
extern void _ZN6S378C43v10Ev();
extern void _ZN6S378C33v11Ev();
extern void _ZN6S378C33v12Ev();
extern void _ZN6S378C33v13Ev();
extern void _ZN6S378C33v14Ev();
static  VTBL_ENTRY vtc_S378C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S378C3[0]),
  (VTBL_ENTRY)&_ZN6S378C3D1Ev,
  (VTBL_ENTRY)&_ZN6S378C3D0Ev,
  (VTBL_ENTRY)&_ZN6S378C62v5Ev,
  (VTBL_ENTRY)&_ZN6S378C62v6Ev,
  (VTBL_ENTRY)&_ZN6S378C62v7Ev,
  (VTBL_ENTRY)&_ZN6S378C52v8Ev,
  (VTBL_ENTRY)&_ZN6S378C52v9Ev,
  (VTBL_ENTRY)&_ZN6S378C43v10Ev,
  (VTBL_ENTRY)&_ZN6S378C33v11Ev,
  (VTBL_ENTRY)&_ZN6S378C33v12Ev,
  (VTBL_ENTRY)&_ZN6S378C33v13Ev,
  (VTBL_ENTRY)&_ZN6S378C33v14Ev,
};
extern VTBL_ENTRY _ZTI6S378C3[];
extern  VTBL_ENTRY _ZTV6S378C3[];
Class_Descriptor cd_S378C3 = {  "S378C3", // class name
  bases_S378C3, 3,
  &(vtc_S378C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,108), // object size
  NSPAIRA(_ZTI6S378C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S378C3),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S378C2  : S378C3 {
  char s378c2f0;
  void *s378c2f1[2];
  virtual  ~S378C2(); // _ZN6S378C2D1Ev
  virtual void  v15(); // _ZN6S378C23v15Ev
  virtual void  v16(); // _ZN6S378C23v16Ev
  virtual void  v17(); // _ZN6S378C23v17Ev
  virtual void  v18(); // _ZN6S378C23v18Ev
  virtual void  v19(); // _ZN6S378C23v19Ev
  virtual void  v20(); // _ZN6S378C23v20Ev
  virtual void  v21(); // _ZN6S378C23v21Ev
  virtual void  v22(); // _ZN6S378C23v22Ev
  S378C2(); // tgen
};
//SIG(-1 S378C2) C1{ BC2{ BC3{ BC4{ BC5{ vd v9 v10 v11 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} v12 v13 Fp} vd v14 Fp Fc FC8{ m Fi[2]}} vd v15 v16 v17 v18 Fp FL[2] FC9{ m Fp[2]} FL FC10{ Fp Fi Fp} Fc Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 Fc Fp[2]}


 S378C2 ::~S378C2(){ note_dtor("S378C2", this);}
void  S378C2 ::v15(){vfunc_called(this, "_ZN6S378C23v15Ev");}
void  S378C2 ::v16(){vfunc_called(this, "_ZN6S378C23v16Ev");}
void  S378C2 ::v17(){vfunc_called(this, "_ZN6S378C23v17Ev");}
void  S378C2 ::v18(){vfunc_called(this, "_ZN6S378C23v18Ev");}
void  S378C2 ::v19(){vfunc_called(this, "_ZN6S378C23v19Ev");}
void  S378C2 ::v20(){vfunc_called(this, "_ZN6S378C23v20Ev");}
void  S378C2 ::v21(){vfunc_called(this, "_ZN6S378C23v21Ev");}
void  S378C2 ::v22(){vfunc_called(this, "_ZN6S378C23v22Ev");}
S378C2 ::S378C2(){ note_ctor("S378C2", this);} // tgen

static void Test_S378C2()
{
  extern Class_Descriptor cd_S378C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,31)];
    init_test(&cd_S378C2, buf);
    S378C2 *dp, &lv = *(dp=new (buf) S378C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,120), "sizeof(S378C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S378C2)");
    check_base_class_offset(lv, (S378C6*)(S378C5*)(S378C4*)(S378C3*), 0, "S378C2");
    check_base_class_offset(lv, (S378C5*)(S378C4*)(S378C3*), 0, "S378C2");
    check_base_class_offset(lv, (S378C4*)(S378C3*), 0, "S378C2");
    check_base_class_offset(lv, (S378C3*), 0, "S378C2");
    check_field_offset(lv, s378c2f0, ABISELECT(168,108), "S378C2.s378c2f0");
    check_field_offset(lv, s378c2f1, ABISELECT(176,112), "S378C2.s378c2f1");
    test_class_info(&lv, &cd_S378C2);
    dp->~S378C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS378C2(Test_S378C2, "S378C2", ABISELECT(192,120));

#else // __cplusplus

extern void _ZN6S378C2C1Ev();
extern void _ZN6S378C2D1Ev();
Name_Map name_map_S378C2[] = {
  NSPAIR(_ZN6S378C2C1Ev),
  NSPAIR(_ZN6S378C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S378C6;
extern VTBL_ENTRY _ZTI6S378C6[];
extern  VTBL_ENTRY _ZTV6S378C6[];
extern Class_Descriptor cd_S378C5;
extern VTBL_ENTRY _ZTI6S378C5[];
extern  VTBL_ENTRY _ZTV6S378C5[];
extern Class_Descriptor cd_S378C4;
extern VTBL_ENTRY _ZTI6S378C4[];
extern  VTBL_ENTRY _ZTV6S378C4[];
extern Class_Descriptor cd_S378C3;
extern VTBL_ENTRY _ZTI6S378C3[];
extern  VTBL_ENTRY _ZTV6S378C3[];
static Base_Class bases_S378C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S378C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S378C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S378C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S378C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S378C2[];
extern void _ZN6S378C2D1Ev();
extern void _ZN6S378C2D0Ev();
extern void _ZN6S378C62v5Ev();
extern void _ZN6S378C62v6Ev();
extern void _ZN6S378C62v7Ev();
extern void _ZN6S378C52v8Ev();
extern void _ZN6S378C52v9Ev();
extern void _ZN6S378C43v10Ev();
extern void _ZN6S378C33v11Ev();
extern void _ZN6S378C33v12Ev();
extern void _ZN6S378C33v13Ev();
extern void _ZN6S378C33v14Ev();
extern void _ZN6S378C23v15Ev();
extern void _ZN6S378C23v16Ev();
extern void _ZN6S378C23v17Ev();
extern void _ZN6S378C23v18Ev();
extern void _ZN6S378C23v19Ev();
extern void _ZN6S378C23v20Ev();
extern void _ZN6S378C23v21Ev();
extern void _ZN6S378C23v22Ev();
static  VTBL_ENTRY vtc_S378C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S378C2[0]),
  (VTBL_ENTRY)&_ZN6S378C2D1Ev,
  (VTBL_ENTRY)&_ZN6S378C2D0Ev,
  (VTBL_ENTRY)&_ZN6S378C62v5Ev,
  (VTBL_ENTRY)&_ZN6S378C62v6Ev,
  (VTBL_ENTRY)&_ZN6S378C62v7Ev,
  (VTBL_ENTRY)&_ZN6S378C52v8Ev,
  (VTBL_ENTRY)&_ZN6S378C52v9Ev,
  (VTBL_ENTRY)&_ZN6S378C43v10Ev,
  (VTBL_ENTRY)&_ZN6S378C33v11Ev,
  (VTBL_ENTRY)&_ZN6S378C33v12Ev,
  (VTBL_ENTRY)&_ZN6S378C33v13Ev,
  (VTBL_ENTRY)&_ZN6S378C33v14Ev,
  (VTBL_ENTRY)&_ZN6S378C23v15Ev,
  (VTBL_ENTRY)&_ZN6S378C23v16Ev,
  (VTBL_ENTRY)&_ZN6S378C23v17Ev,
  (VTBL_ENTRY)&_ZN6S378C23v18Ev,
  (VTBL_ENTRY)&_ZN6S378C23v19Ev,
  (VTBL_ENTRY)&_ZN6S378C23v20Ev,
  (VTBL_ENTRY)&_ZN6S378C23v21Ev,
  (VTBL_ENTRY)&_ZN6S378C23v22Ev,
};
extern VTBL_ENTRY _ZTI6S378C2[];
extern  VTBL_ENTRY _ZTV6S378C2[];
Class_Descriptor cd_S378C2 = {  "S378C2", // class name
  bases_S378C2, 4,
  &(vtc_S378C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,120), // object size
  NSPAIRA(_ZTI6S378C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S378C2),22, //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  S378C1  : S378C2 {
  virtual  ~S378C1(); // _ZN6S378C1D1Ev
  virtual void  v1(); // _ZN6S378C12v1Ev
  virtual void  v2(); // _ZN6S378C12v2Ev
  virtual void  v3(); // _ZN6S378C12v3Ev
  virtual void  v4(); // _ZN6S378C12v4Ev
  S378C1(); // tgen
};
//SIG(1 S378C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v5 v6 v7 FC7{ m Fp Fi FC8{ m}} Fi[2] Fc} v8 v9 Fp} vd v10 Fp Fc FC9{ m Fi[2]}} vd v11 v12 v13 v14 Fp FL[2] FC10{ m Fp[2]} FL FC11{ Fp Fi Fp} Fc Fp[2]} vd v15 v16 v17 v18 v19 v20 v21 v22 Fc Fp[2]} vd v1 v2 v3 v4}


 S378C1 ::~S378C1(){ note_dtor("S378C1", this);}
void  S378C1 ::v1(){vfunc_called(this, "_ZN6S378C12v1Ev");}
void  S378C1 ::v2(){vfunc_called(this, "_ZN6S378C12v2Ev");}
void  S378C1 ::v3(){vfunc_called(this, "_ZN6S378C12v3Ev");}
void  S378C1 ::v4(){vfunc_called(this, "_ZN6S378C12v4Ev");}
S378C1 ::S378C1(){ note_ctor("S378C1", this);} // tgen

static void Test_S378C1()
{
  extern Class_Descriptor cd_S378C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,31)];
    init_test(&cd_S378C1, buf);
    S378C1 *dp, &lv = *(dp=new (buf) S378C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,120), "sizeof(S378C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S378C1)");
    check_base_class_offset(lv, (S378C6*)(S378C5*)(S378C4*)(S378C3*)(S378C2*), 0, "S378C1");
    check_base_class_offset(lv, (S378C5*)(S378C4*)(S378C3*)(S378C2*), 0, "S378C1");
    check_base_class_offset(lv, (S378C4*)(S378C3*)(S378C2*), 0, "S378C1");
    check_base_class_offset(lv, (S378C3*)(S378C2*), 0, "S378C1");
    check_base_class_offset(lv, (S378C2*), 0, "S378C1");
    test_class_info(&lv, &cd_S378C1);
    dp->~S378C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS378C1(Test_S378C1, "S378C1", ABISELECT(192,120));

#else // __cplusplus

extern void _ZN6S378C1C1Ev();
extern void _ZN6S378C1D1Ev();
Name_Map name_map_S378C1[] = {
  NSPAIR(_ZN6S378C1C1Ev),
  NSPAIR(_ZN6S378C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S378C6;
extern VTBL_ENTRY _ZTI6S378C6[];
extern  VTBL_ENTRY _ZTV6S378C6[];
extern Class_Descriptor cd_S378C5;
extern VTBL_ENTRY _ZTI6S378C5[];
extern  VTBL_ENTRY _ZTV6S378C5[];
extern Class_Descriptor cd_S378C4;
extern VTBL_ENTRY _ZTI6S378C4[];
extern  VTBL_ENTRY _ZTV6S378C4[];
extern Class_Descriptor cd_S378C3;
extern VTBL_ENTRY _ZTI6S378C3[];
extern  VTBL_ENTRY _ZTV6S378C3[];
extern Class_Descriptor cd_S378C2;
extern VTBL_ENTRY _ZTI6S378C2[];
extern  VTBL_ENTRY _ZTV6S378C2[];
static Base_Class bases_S378C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S378C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S378C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S378C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S378C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S378C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S378C1[];
extern void _ZN6S378C1D1Ev();
extern void _ZN6S378C1D0Ev();
extern void _ZN6S378C62v5Ev();
extern void _ZN6S378C62v6Ev();
extern void _ZN6S378C62v7Ev();
extern void _ZN6S378C52v8Ev();
extern void _ZN6S378C52v9Ev();
extern void _ZN6S378C43v10Ev();
extern void _ZN6S378C33v11Ev();
extern void _ZN6S378C33v12Ev();
extern void _ZN6S378C33v13Ev();
extern void _ZN6S378C33v14Ev();
extern void _ZN6S378C23v15Ev();
extern void _ZN6S378C23v16Ev();
extern void _ZN6S378C23v17Ev();
extern void _ZN6S378C23v18Ev();
extern void _ZN6S378C23v19Ev();
extern void _ZN6S378C23v20Ev();
extern void _ZN6S378C23v21Ev();
extern void _ZN6S378C23v22Ev();
extern void _ZN6S378C12v1Ev();
extern void _ZN6S378C12v2Ev();
extern void _ZN6S378C12v3Ev();
extern void _ZN6S378C12v4Ev();
static  VTBL_ENTRY vtc_S378C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S378C1[0]),
  (VTBL_ENTRY)&_ZN6S378C1D1Ev,
  (VTBL_ENTRY)&_ZN6S378C1D0Ev,
  (VTBL_ENTRY)&_ZN6S378C62v5Ev,
  (VTBL_ENTRY)&_ZN6S378C62v6Ev,
  (VTBL_ENTRY)&_ZN6S378C62v7Ev,
  (VTBL_ENTRY)&_ZN6S378C52v8Ev,
  (VTBL_ENTRY)&_ZN6S378C52v9Ev,
  (VTBL_ENTRY)&_ZN6S378C43v10Ev,
  (VTBL_ENTRY)&_ZN6S378C33v11Ev,
  (VTBL_ENTRY)&_ZN6S378C33v12Ev,
  (VTBL_ENTRY)&_ZN6S378C33v13Ev,
  (VTBL_ENTRY)&_ZN6S378C33v14Ev,
  (VTBL_ENTRY)&_ZN6S378C23v15Ev,
  (VTBL_ENTRY)&_ZN6S378C23v16Ev,
  (VTBL_ENTRY)&_ZN6S378C23v17Ev,
  (VTBL_ENTRY)&_ZN6S378C23v18Ev,
  (VTBL_ENTRY)&_ZN6S378C23v19Ev,
  (VTBL_ENTRY)&_ZN6S378C23v20Ev,
  (VTBL_ENTRY)&_ZN6S378C23v21Ev,
  (VTBL_ENTRY)&_ZN6S378C23v22Ev,
  (VTBL_ENTRY)&_ZN6S378C12v1Ev,
  (VTBL_ENTRY)&_ZN6S378C12v2Ev,
  (VTBL_ENTRY)&_ZN6S378C12v3Ev,
  (VTBL_ENTRY)&_ZN6S378C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S378C1[];
extern  VTBL_ENTRY _ZTV6S378C1[];
Class_Descriptor cd_S378C1 = {  "S378C1", // class name
  bases_S378C1, 5,
  &(vtc_S378C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,120), // object size
  NSPAIRA(_ZTI6S378C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S378C1),26, //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  S19317C3  {
  virtual void  v2(); // _ZN8S19317C32v2Ev
  ~S19317C3(); // tgen
  S19317C3(); // tgen
};
//SIG(-1 S19317C3) C1{ v1}


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

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

#else // __cplusplus

extern void _ZN8S19317C3C1Ev();
extern void _ZN8S19317C3D1Ev();
Name_Map name_map_S19317C3[] = {
  NSPAIR(_ZN8S19317C3C1Ev),
  NSPAIR(_ZN8S19317C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19317C3[];
extern void _ZN8S19317C32v2Ev();
static  VTBL_ENTRY vtc_S19317C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19317C3[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
};
extern VTBL_ENTRY _ZTI8S19317C3[];
extern  VTBL_ENTRY _ZTV8S19317C3[];
Class_Descriptor cd_S19317C3 = {  "S19317C3", // class name
  0,0,//no base classes
  &(vtc_S19317C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19317C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19317C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19317C5  {
  void *s19317c5f0[4];
  virtual void  v3(); // _ZN8S19317C52v3Ev
  virtual void  v4(); // _ZN8S19317C52v4Ev
  virtual void  v5(); // _ZN8S19317C52v5Ev
  virtual void  v6(); // _ZN8S19317C52v6Ev
  virtual void  v7(); // _ZN8S19317C52v7Ev
  virtual void  v8(); // _ZN8S19317C52v8Ev
  ~S19317C5(); // tgen
  S19317C5(); // tgen
};
//SIG(-1 S19317C5) C1{ v1 v2 v3 v4 v5 v6 Fp[4]}


void  S19317C5 ::v3(){vfunc_called(this, "_ZN8S19317C52v3Ev");}
void  S19317C5 ::v4(){vfunc_called(this, "_ZN8S19317C52v4Ev");}
void  S19317C5 ::v5(){vfunc_called(this, "_ZN8S19317C52v5Ev");}
void  S19317C5 ::v6(){vfunc_called(this, "_ZN8S19317C52v6Ev");}
void  S19317C5 ::v7(){vfunc_called(this, "_ZN8S19317C52v7Ev");}
void  S19317C5 ::v8(){vfunc_called(this, "_ZN8S19317C52v8Ev");}
S19317C5 ::~S19317C5(){ note_dtor("S19317C5", this);} // tgen
S19317C5 ::S19317C5(){ note_ctor("S19317C5", this);} // tgen

static void Test_S19317C5()
{
  extern Class_Descriptor cd_S19317C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19317C5, buf);
    S19317C5 *dp, &lv = *(dp=new (buf) S19317C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19317C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19317C5)");
    check_field_offset(lv, s19317c5f0, ABISELECT(8,4), "S19317C5.s19317c5f0");
    test_class_info(&lv, &cd_S19317C5);
    dp->~S19317C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19317C5(Test_S19317C5, "S19317C5", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19317C5C1Ev();
extern void _ZN8S19317C5D1Ev();
Name_Map name_map_S19317C5[] = {
  NSPAIR(_ZN8S19317C5C1Ev),
  NSPAIR(_ZN8S19317C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19317C5[];
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
static  VTBL_ENTRY vtc_S19317C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19317C5[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
};
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
Class_Descriptor cd_S19317C5 = {  "S19317C5", // class name
  0,0,//no base classes
  &(vtc_S19317C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19317C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19317C5),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  S19317C4  : S19317C5 {
  __tsi64 s19317c4f0;
  virtual  ~S19317C4(); // _ZN8S19317C4D1Ev
  virtual void  v9(); // _ZN8S19317C42v9Ev
  virtual void  v10(); // _ZN8S19317C43v10Ev
  S19317C4(); // tgen
};
//SIG(-1 S19317C4) C1{ BC2{ v3 v4 v5 v6 v7 v8 Fp[4]} vd v1 v2 FL}


 S19317C4 ::~S19317C4(){ note_dtor("S19317C4", this);}
void  S19317C4 ::v9(){vfunc_called(this, "_ZN8S19317C42v9Ev");}
void  S19317C4 ::v10(){vfunc_called(this, "_ZN8S19317C43v10Ev");}
S19317C4 ::S19317C4(){ note_ctor("S19317C4", this);} // tgen

static void Test_S19317C4()
{
  extern Class_Descriptor cd_S19317C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S19317C4, buf);
    S19317C4 *dp, &lv = *(dp=new (buf) S19317C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S19317C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19317C4)");
    check_base_class_offset(lv, (S19317C5*), 0, "S19317C4");
    check_field_offset(lv, s19317c4f0, ABISELECT(40,20), "S19317C4.s19317c4f0");
    test_class_info(&lv, &cd_S19317C4);
    dp->~S19317C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19317C4(Test_S19317C4, "S19317C4", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S19317C4C1Ev();
extern void _ZN8S19317C4D1Ev();
Name_Map name_map_S19317C4[] = {
  NSPAIR(_ZN8S19317C4C1Ev),
  NSPAIR(_ZN8S19317C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19317C5;
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
static Base_Class bases_S19317C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19317C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19317C4[];
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void _ZN8S19317C4D1Ev();
extern void _ZN8S19317C4D0Ev();
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
static  VTBL_ENTRY vtc_S19317C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19317C4[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19317C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19317C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
};
extern VTBL_ENTRY _ZTI8S19317C4[];
extern  VTBL_ENTRY _ZTV8S19317C4[];
Class_Descriptor cd_S19317C4 = {  "S19317C4", // class name
  bases_S19317C4, 1,
  &(vtc_S19317C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S19317C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19317C4),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19317C6  {
  int s19317c6f0;
  virtual void  v11(); // _ZN8S19317C63v11Ev
  ~S19317C6(); // tgen
  S19317C6(); // tgen
};
//SIG(-1 S19317C6) C1{ v1 Fi}


void  S19317C6 ::v11(){vfunc_called(this, "_ZN8S19317C63v11Ev");}
S19317C6 ::~S19317C6(){ note_dtor("S19317C6", this);} // tgen
S19317C6 ::S19317C6(){ note_ctor("S19317C6", this);} // tgen

static void Test_S19317C6()
{
  extern Class_Descriptor cd_S19317C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19317C6, buf);
    S19317C6 *dp, &lv = *(dp=new (buf) S19317C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19317C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19317C6)");
    check_field_offset(lv, s19317c6f0, ABISELECT(8,4), "S19317C6.s19317c6f0");
    test_class_info(&lv, &cd_S19317C6);
    dp->~S19317C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19317C6(Test_S19317C6, "S19317C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19317C6C1Ev();
extern void _ZN8S19317C6D1Ev();
Name_Map name_map_S19317C6[] = {
  NSPAIR(_ZN8S19317C6C1Ev),
  NSPAIR(_ZN8S19317C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19317C6[];
extern void _ZN8S19317C63v11Ev();
static  VTBL_ENTRY vtc_S19317C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19317C6[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
};
extern VTBL_ENTRY _ZTI8S19317C6[];
extern  VTBL_ENTRY _ZTV8S19317C6[];
Class_Descriptor cd_S19317C6 = {  "S19317C6", // class name
  0,0,//no base classes
  &(vtc_S19317C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19317C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19317C6),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19317C2  : S19317C3 , S19317C4 , virtual S19317C6 {
  int s19317c2f0;
  ::S20677C6_nt s19317c2f1;
  virtual void  v12(); // _ZN8S19317C23v12Ev
  virtual void  v13(); // _ZN8S19317C23v13Ev
  ~S19317C2(); // tgen
  S19317C2(); // tgen
};
//SIG(-1 S19317C2) C1{ BC2{ v3} BC3{ BC4{ v4 v5 v6 v7 v8 v9 Fp[4]} vd v10 v11 FL} VBC5{ v12 Fi} v1 v2 Fi FC6{}}


void  S19317C2 ::v12(){vfunc_called(this, "_ZN8S19317C23v12Ev");}
void  S19317C2 ::v13(){vfunc_called(this, "_ZN8S19317C23v13Ev");}
S19317C2 ::~S19317C2(){ note_dtor("S19317C2", this);} // tgen
S19317C2 ::S19317C2(){ note_ctor("S19317C2", this);} // tgen

static void Test_S19317C2()
{
  extern Class_Descriptor cd_S19317C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S19317C2, buf);
    S19317C2 *dp, &lv = *(dp=new (buf) S19317C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S19317C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19317C2)");
    check_base_class_offset(lv, (S19317C3*), 0, "S19317C2");
    check_base_class_offset(lv, (S19317C5*)(S19317C4*), ABISELECT(8,4), "S19317C2");
    check_base_class_offset(lv, (S19317C4*), ABISELECT(8,4), "S19317C2");
    check_base_class_offset(lv, (S19317C6*), ABISELECT(64,40), "S19317C2");
    check_field_offset(lv, s19317c2f0, ABISELECT(56,32), "S19317C2.s19317c2f0");
    check_field_offset(lv, s19317c2f1, ABISELECT(60,36), "S19317C2.s19317c2f1");
    test_class_info(&lv, &cd_S19317C2);
    dp->~S19317C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19317C2(Test_S19317C2, "S19317C2", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN8S19317C2C1Ev();
extern void _ZN8S19317C2D1Ev();
Name_Map name_map_S19317C2[] = {
  NSPAIR(_ZN8S19317C2C1Ev),
  NSPAIR(_ZN8S19317C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19317C3;
extern VTBL_ENTRY _ZTI8S19317C3[];
extern  VTBL_ENTRY _ZTV8S19317C3[];
extern Class_Descriptor cd_S19317C5;
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
extern Class_Descriptor cd_S19317C4;
extern VTBL_ENTRY _ZTI8S19317C4[];
extern  VTBL_ENTRY _ZTV8S19317C4[];
extern Class_Descriptor cd_S19317C6;
extern VTBL_ENTRY _ZTI8S19317C6[];
extern  VTBL_ENTRY _ZTV8S19317C6[];
static Base_Class bases_S19317C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19317C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19317C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19317C4,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19317C6,    ABISELECT(64,40), //bcp->offset
    20, //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 _ZTI8S19317C2[];
extern void _ZN8S19317C32v2Ev();
extern void _ZN8S19317C23v12Ev();
extern void _ZN8S19317C23v13Ev();
extern void _ZN8S19317C2D1Ev();
extern void _ZN8S19317C2D0Ev();
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void ABISELECT(_ZThn8_N8S19317C2D1Ev,_ZThn4_N8S19317C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S19317C2D0Ev,_ZThn4_N8S19317C2D0Ev)();
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
extern void _ZN8S19317C63v11Ev();
static  VTBL_ENTRY vtc_S19317C2[] = {
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19317C2[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19317C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19317C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19317C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19317C2D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19317C2[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19317C2D1Ev,_ZThn4_N8S19317C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19317C2D0Ev,_ZThn4_N8S19317C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
  0,
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19317C2[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
};
extern VTBL_ENTRY _ZTV8S19317C2[];
static  VTT_ENTRY vtt_S19317C2[] = {
  {&(_ZTV8S19317C2[3]),  3,24},
  {&(_ZTV8S19317C2[23]),  23,24},
};
extern VTBL_ENTRY _ZTI8S19317C2[];
extern  VTBL_ENTRY _ZTV8S19317C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19317C2[];
Class_Descriptor cd_S19317C2 = {  "S19317C2", // class name
  bases_S19317C2, 4,
  &(vtc_S19317C2[0]), // expected_vtbl_contents
  &(vtt_S19317C2[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI8S19317C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19317C2),24, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19317C2),2, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19317C9  {
  short s19317c9f0:16;
  __tsi64 s19317c9f1;
  void *s19317c9f2[8];
  virtual void  v14(); // _ZN8S19317C93v14Ev
  virtual void  v15(); // _ZN8S19317C93v15Ev
  ~S19317C9(); // tgen
  S19317C9(); // tgen
};
//SIG(-1 S19317C9) C1{ v1 v2 Fs:16 FL Fp[8]}


void  S19317C9 ::v14(){vfunc_called(this, "_ZN8S19317C93v14Ev");}
void  S19317C9 ::v15(){vfunc_called(this, "_ZN8S19317C93v15Ev");}
S19317C9 ::~S19317C9(){ note_dtor("S19317C9", this);} // tgen
S19317C9 ::S19317C9(){ note_ctor("S19317C9", this);} // tgen

static void Test_S19317C9()
{
  extern Class_Descriptor cd_S19317C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S19317C9, buf);
    S19317C9 *dp, &lv = *(dp=new (buf) S19317C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S19317C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19317C9)");
    set_bf_and_test(lv, s19317c9f0, ABISELECT(8,4), 0, 16, 1, "S19317C9");
    set_bf_and_test(lv, s19317c9f0, ABISELECT(8,4), 0, 16, hide_sll(1LL<<15), "S19317C9");
    check_field_offset(lv, s19317c9f1, ABISELECT(16,8), "S19317C9.s19317c9f1");
    check_field_offset(lv, s19317c9f2, ABISELECT(24,16), "S19317C9.s19317c9f2");
    test_class_info(&lv, &cd_S19317C9);
    dp->~S19317C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19317C9(Test_S19317C9, "S19317C9", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN8S19317C9C1Ev();
extern void _ZN8S19317C9D1Ev();
Name_Map name_map_S19317C9[] = {
  NSPAIR(_ZN8S19317C9C1Ev),
  NSPAIR(_ZN8S19317C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19317C9[];
extern void _ZN8S19317C93v14Ev();
extern void _ZN8S19317C93v15Ev();
static  VTBL_ENTRY vtc_S19317C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19317C9[0]),
  (VTBL_ENTRY)&_ZN8S19317C93v14Ev,
  (VTBL_ENTRY)&_ZN8S19317C93v15Ev,
};
extern VTBL_ENTRY _ZTI8S19317C9[];
extern  VTBL_ENTRY _ZTV8S19317C9[];
Class_Descriptor cd_S19317C9 = {  "S19317C9", // class name
  0,0,//no base classes
  &(vtc_S19317C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI8S19317C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19317C9),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  S19317C10  : S19317C6 , S19317C9 , S19317C3 , virtual S19317C4 , S19317C5 {
  int s19317c10f0;
  virtual  ~S19317C10(); // _ZN9S19317C10D2Ev
  virtual void  v16(); // _ZN9S19317C103v16Ev
  virtual void  v17(); // _ZN9S19317C103v17Ev
  virtual void  v18(); // _ZN9S19317C103v18Ev
  S19317C10(); // tgen
};
//SIG(-1 S19317C10) C1{ BC2{ v4 Fi} BC3{ v5 v6 Fs:16 FL Fp[8]} BC4{ v7} VBC5{ BC6{ v8 v9 v10 v11 v12 v13 Fp[4]} vd v14 v15 FL} BC6 vd v1 v2 v3 Fi}


 S19317C10 ::~S19317C10(){ note_dtor("S19317C10", this);}
void  S19317C10 ::v16(){vfunc_called(this, "_ZN9S19317C103v16Ev");}
void  S19317C10 ::v17(){vfunc_called(this, "_ZN9S19317C103v17Ev");}
void  S19317C10 ::v18(){vfunc_called(this, "_ZN9S19317C103v18Ev");}
S19317C10 ::S19317C10(){ note_ctor("S19317C10", this);} // tgen

static void Test_S19317C10()
{
  extern Class_Descriptor cd_S19317C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,29)];
    init_test(&cd_S19317C10, buf);
    S19317C10 *dp, &lv = *(dp=new (buf) S19317C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,112), "sizeof(S19317C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19317C10)");
    check_base_class_offset(lv, (S19317C6*), 0, "S19317C10");
    check_base_class_offset(lv, (S19317C9*), ABISELECT(16,8), "S19317C10");
    check_base_class_offset(lv, (S19317C3*), ABISELECT(104,56), "S19317C10");
    check_base_class_offset(lv, (S19317C5*)(S19317C4*), ABISELECT(160,84), "S19317C10");
    check_base_class_offset(lv, (S19317C4*), ABISELECT(160,84), "S19317C10");
    /*is_ambiguous_... S19317C10::S19317C5 */ AMB_check_base_class_offset(lv, (S19317C5*), ABISELECT(112,60), "S19317C10");
    check_field_offset(lv, s19317c10f0, ABISELECT(152,80), "S19317C10.s19317c10f0");
    test_class_info(&lv, &cd_S19317C10);
    dp->~S19317C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19317C10(Test_S19317C10, "S19317C10", ABISELECT(208,112));

#else // __cplusplus

extern void _ZN9S19317C10C1Ev();
extern void _ZN9S19317C10D2Ev();
Name_Map name_map_S19317C10[] = {
  NSPAIR(_ZN9S19317C10C1Ev),
  NSPAIR(_ZN9S19317C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19317C6;
extern VTBL_ENTRY _ZTI8S19317C6[];
extern  VTBL_ENTRY _ZTV8S19317C6[];
extern Class_Descriptor cd_S19317C9;
extern VTBL_ENTRY _ZTI8S19317C9[];
extern  VTBL_ENTRY _ZTV8S19317C9[];
extern Class_Descriptor cd_S19317C3;
extern VTBL_ENTRY _ZTI8S19317C3[];
extern  VTBL_ENTRY _ZTV8S19317C3[];
extern Class_Descriptor cd_S19317C5;
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
extern Class_Descriptor cd_S19317C4;
extern VTBL_ENTRY _ZTI8S19317C4[];
extern  VTBL_ENTRY _ZTV8S19317C4[];
extern Class_Descriptor cd_S19317C5;
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
static Base_Class bases_S19317C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19317C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19317C9,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19317C3,    ABISELECT(104,56), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19317C5,    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
    4, //immediately_derived
  0, 0},
  {&cd_S19317C4,    ABISELECT(160,84), //bcp->offset
    24, //bcp->virtual_function_table_offset
    11, //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_S19317C5,    ABISELECT(112,60), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19317C10[];
extern void _ZN8S19317C63v11Ev();
extern void _ZN9S19317C10D1Ev();
extern void _ZN9S19317C10D0Ev();
extern void _ZN9S19317C103v16Ev();
extern void _ZN9S19317C103v17Ev();
extern void _ZN9S19317C103v18Ev();
extern void _ZN8S19317C93v14Ev();
extern void _ZN8S19317C93v15Ev();
extern void _ZN8S19317C32v2Ev();
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void ABISELECT(_ZTv0_n72_N9S19317C10D1Ev,_ZTv0_n36_N9S19317C10D1Ev)();
extern void ABISELECT(_ZThn160_N9S19317C10D1Ev,_ZThn84_N9S19317C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19317C10D0Ev,_ZTv0_n36_N9S19317C10D0Ev)();
extern void ABISELECT(_ZThn160_N9S19317C10D0Ev,_ZThn84_N9S19317C10D0Ev)() __attribute__((weak));
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
static  VTBL_ENTRY vtc_S19317C10[] = {
  ABISELECT(160,84),
  0,
  (VTBL_ENTRY)&(_ZTI9S19317C10[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
  (VTBL_ENTRY)&_ZN9S19317C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19317C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v16Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v17Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v18Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19317C10[0]),
  (VTBL_ENTRY)&_ZN8S19317C93v14Ev,
  (VTBL_ENTRY)&_ZN8S19317C93v15Ev,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI9S19317C10[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S19317C10[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  0,
  0,
  ABISELECT(-160,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI9S19317C10[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19317C10D1Ev,_ZTv0_n36_N9S19317C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19317C10D0Ev,_ZTv0_n36_N9S19317C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
};
extern VTBL_ENTRY _ZTV9S19317C10[];
static  VTT_ENTRY vtt_S19317C10[] = {
  {&(_ZTV9S19317C10[3]),  3,45},
  {&(_ZTV9S19317C10[35]),  35,45},
};
extern VTBL_ENTRY _ZTI9S19317C10[];
extern  VTBL_ENTRY _ZTV9S19317C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19317C10[];
static VTBL_ENTRY alt_thunk_names47[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19317C10D0Ev,_ZTv0_n36_N9S19317C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19317C10D0Ev,_ZThn84_N9S19317C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19317C10D1Ev,_ZTv0_n36_N9S19317C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19317C10D1Ev,_ZThn84_N9S19317C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19317C10 = {  "S19317C10", // class name
  bases_S19317C10, 6,
  &(vtc_S19317C10[0]), // expected_vtbl_contents
  &(vtt_S19317C10[0]), // expected_vtt_contents
  ABISELECT(208,112), // object size
  NSPAIRA(_ZTI9S19317C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19317C10),45, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19317C10),2, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names47,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19317C8  : virtual S19317C2 , S19317C3 , S19317C4 , virtual S19317C9 , S19317C10 {
  char s19317c8f0;
  virtual  ~S19317C8(); // _ZN8S19317C8D2Ev
  virtual void  v19(); // _ZN8S19317C83v19Ev
  virtual void  v20(); // _ZN8S19317C83v20Ev
  virtual void  v21(); // _ZN8S19317C83v21Ev
  virtual void  v22(); // _ZN8S19317C83v22Ev
  virtual void  v23(); // _ZN8S19317C83v23Ev
  virtual void  v24(); // _ZN8S19317C83v24Ev
  virtual void  v25(); // _ZN8S19317C83v25Ev
  S19317C8(); // tgen
};
//SIG(-1 S19317C8) C1{ VBC2{ BC3{ v8} BC4{ BC5{ v9 v10 v11 v12 v13 v14 Fp[4]} vd v15 v16 FL} VBC6{ v17 Fi} v18 v19 Fi FC7{}} BC3 BC4 VBC8{ v20 v21 Fs:16 FL Fp[8]} BC9{ BC6 BC8 BC3 VBC4 BC5 vd v22 v23 v24 Fi} vd v1 v2 v3 v4 v5 v6 v7 Fc}


 S19317C8 ::~S19317C8(){ note_dtor("S19317C8", this);}
void  S19317C8 ::v19(){vfunc_called(this, "_ZN8S19317C83v19Ev");}
void  S19317C8 ::v20(){vfunc_called(this, "_ZN8S19317C83v20Ev");}
void  S19317C8 ::v21(){vfunc_called(this, "_ZN8S19317C83v21Ev");}
void  S19317C8 ::v22(){vfunc_called(this, "_ZN8S19317C83v22Ev");}
void  S19317C8 ::v23(){vfunc_called(this, "_ZN8S19317C83v23Ev");}
void  S19317C8 ::v24(){vfunc_called(this, "_ZN8S19317C83v24Ev");}
void  S19317C8 ::v25(){vfunc_called(this, "_ZN8S19317C83v25Ev");}
S19317C8 ::S19317C8(){ note_ctor("S19317C8", this);} // tgen

static void Test_S19317C8()
{
  extern Class_Descriptor cd_S19317C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(55,62)];
    init_test(&cd_S19317C8, buf);
    S19317C8 *dp, &lv = *(dp=new (buf) S19317C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,244), "sizeof(S19317C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19317C8)");
    check_base_class_offset(lv, (S19317C3*)(S19317C2*), ABISELECT(216,120), "S19317C8");
    check_base_class_offset(lv, (S19317C5*)(S19317C4*)(S19317C2*), ABISELECT(224,124), "S19317C8");
    check_base_class_offset(lv, (S19317C4*)(S19317C2*), ABISELECT(224,124), "S19317C8");
    check_base_class_offset(lv, (S19317C6*)(S19317C2*), ABISELECT(280,160), "S19317C8");
    check_base_class_offset(lv, (S19317C2*), ABISELECT(216,120), "S19317C8");
    /*is_ambiguous_... S19317C8::S19317C3 */ AMB_check_base_class_offset(lv, (S19317C3*), 0, "S19317C8");
    /*is_ambiguous_... S19317C8::S19317C4 */ AMB_check_base_class_offset(lv, (S19317C5*)(S19317C4*), ABISELECT(8,4), "S19317C8");
    /*is_ambiguous_... S19317C8::S19317C4 */ AMB_check_base_class_offset(lv, (S19317C4*), ABISELECT(8,4), "S19317C8");
    /*is_ambiguous_... S19317C8::S19317C9 */ AMB_check_base_class_offset(lv, (S19317C9*), ABISELECT(296,168), "S19317C8");
    check_base_class_offset(lv, (S19317C6*)(S19317C10*), ABISELECT(56,32), "S19317C8");
    check_base_class_offset(lv, (S19317C9*)(S19317C10*), ABISELECT(72,40), "S19317C8");
    check_base_class_offset(lv, (S19317C3*)(S19317C10*), ABISELECT(160,88), "S19317C8");
    /*is_ambiguous_... S19317C8::S19317C4 */ AMB_check_base_class_offset(lv, (S19317C5*)(S19317C4*), ABISELECT(384,216), "S19317C8");
    check_base_class_offset(lv, (S19317C4*)(S19317C10*), ABISELECT(384,216), "S19317C8");
    /*is_ambiguous_... S19317C10::S19317C5 */ AMB_check_base_class_offset(lv, (S19317C5*)(S19317C10*), ABISELECT(168,92), "S19317C8");
    check_base_class_offset(lv, (S19317C10*), ABISELECT(56,32), "S19317C8");
    check_field_offset(lv, s19317c8f0, ABISELECT(212,116), "S19317C8.s19317c8f0");
    test_class_info(&lv, &cd_S19317C8);
    dp->~S19317C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19317C8(Test_S19317C8, "S19317C8", ABISELECT(432,244));

#else // __cplusplus

extern void _ZN8S19317C8C1Ev();
extern void _ZN8S19317C8D2Ev();
Name_Map name_map_S19317C8[] = {
  NSPAIR(_ZN8S19317C8C1Ev),
  NSPAIR(_ZN8S19317C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19317C3;
extern VTBL_ENTRY _ZTI8S19317C3[];
extern  VTBL_ENTRY _ZTV8S19317C3[];
extern Class_Descriptor cd_S19317C5;
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
extern Class_Descriptor cd_S19317C4;
extern VTBL_ENTRY _ZTI8S19317C4[];
extern  VTBL_ENTRY _ZTV8S19317C4[];
extern Class_Descriptor cd_S19317C6;
extern VTBL_ENTRY _ZTI8S19317C6[];
extern  VTBL_ENTRY _ZTV8S19317C6[];
extern Class_Descriptor cd_S19317C2;
extern VTBL_ENTRY _ZTI8S19317C2[];
extern  VTBL_ENTRY _ZTV8S19317C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19317C2[];
extern Class_Descriptor cd_S19317C3;
extern VTBL_ENTRY _ZTI8S19317C3[];
extern  VTBL_ENTRY _ZTV8S19317C3[];
extern Class_Descriptor cd_S19317C5;
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
extern Class_Descriptor cd_S19317C4;
extern VTBL_ENTRY _ZTI8S19317C4[];
extern  VTBL_ENTRY _ZTV8S19317C4[];
extern Class_Descriptor cd_S19317C9;
extern VTBL_ENTRY _ZTI8S19317C9[];
extern  VTBL_ENTRY _ZTV8S19317C9[];
extern Class_Descriptor cd_S19317C6;
extern VTBL_ENTRY _ZTI8S19317C6[];
extern  VTBL_ENTRY _ZTV8S19317C6[];
extern Class_Descriptor cd_S19317C9;
extern VTBL_ENTRY _ZTI8S19317C9[];
extern  VTBL_ENTRY _ZTV8S19317C9[];
extern Class_Descriptor cd_S19317C3;
extern VTBL_ENTRY _ZTI8S19317C3[];
extern  VTBL_ENTRY _ZTV8S19317C3[];
extern Class_Descriptor cd_S19317C5;
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
extern Class_Descriptor cd_S19317C4;
extern VTBL_ENTRY _ZTI8S19317C4[];
extern  VTBL_ENTRY _ZTV8S19317C4[];
extern Class_Descriptor cd_S19317C5;
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
extern Class_Descriptor cd_S19317C10;
extern VTBL_ENTRY _ZTI9S19317C10[];
extern  VTBL_ENTRY _ZTV9S19317C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19317C10[];
static Base_Class bases_S19317C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19317C3,    ABISELECT(216,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
    4, //immediately_derived
  0, 0},
  {&cd_S19317C5,    ABISELECT(224,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
    3, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19317C4,    ABISELECT(224,124), //bcp->offset
    72, //bcp->virtual_function_table_offset
    2, //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
    4, //immediately_derived
  0, 0},
  {&cd_S19317C6,    ABISELECT(280,160), //bcp->offset
    84, //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_S19317C2,    ABISELECT(216,120), //bcp->offset
    52, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19317C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19317C5,    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
    10, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19317C4,    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
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19317C9,    ABISELECT(296,168), //bcp->offset
    88, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S19317C6,    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
    12, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19317C9,    ABISELECT(72,40), //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
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19317C3,    ABISELECT(160,88), //bcp->offset
    41, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S19317C5,    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
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19317C4,    ABISELECT(384,216), //bcp->offset
    94, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19317C5,    ABISELECT(168,92), //bcp->offset
    44, //bcp->virtual_function_table_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_S19317C10,    ABISELECT(56,32), //bcp->offset
    28, //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
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19317C8[];
extern void _ZN8S19317C32v2Ev();
extern void _ZN8S19317C8D1Ev();
extern void _ZN8S19317C8D0Ev();
extern void _ZN8S19317C83v19Ev();
extern void _ZN8S19317C83v20Ev();
extern void _ZN8S19317C83v21Ev();
extern void _ZN8S19317C83v22Ev();
extern void _ZN8S19317C83v23Ev();
extern void _ZN8S19317C83v24Ev();
extern void _ZN8S19317C83v25Ev();
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void ABISELECT(_ZThn8_N8S19317C8D1Ev,_ZThn4_N8S19317C8D1Ev)();
extern void ABISELECT(_ZThn8_N8S19317C8D0Ev,_ZThn4_N8S19317C8D0Ev)();
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
extern void _ZN8S19317C63v11Ev();
extern void ABISELECT(_ZThn56_N8S19317C8D1Ev,_ZThn32_N8S19317C8D1Ev)();
extern void ABISELECT(_ZThn56_N8S19317C8D0Ev,_ZThn32_N8S19317C8D0Ev)();
extern void _ZN9S19317C103v16Ev();
extern void _ZN9S19317C103v17Ev();
extern void _ZN9S19317C103v18Ev();
extern void _ZN8S19317C93v14Ev();
extern void _ZN8S19317C93v15Ev();
extern void _ZN8S19317C32v2Ev();
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void _ZN8S19317C32v2Ev();
extern void _ZN8S19317C23v12Ev();
extern void _ZN8S19317C23v13Ev();
extern void ABISELECT(_ZTv0_n56_N8S19317C8D1Ev,_ZTv0_n28_N8S19317C8D1Ev)();
extern void ABISELECT(_ZThn216_N8S19317C8D1Ev,_ZThn120_N8S19317C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19317C8D0Ev,_ZTv0_n28_N8S19317C8D0Ev)();
extern void ABISELECT(_ZThn216_N8S19317C8D0Ev,_ZThn120_N8S19317C8D0Ev)() __attribute__((weak));
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void ABISELECT(_ZTvn8_n56_N8S19317C8D1Ev,_ZTvn4_n28_N8S19317C8D1Ev)();
extern void ABISELECT(_ZTvn8_n56_N8S19317C8D0Ev,_ZTvn4_n28_N8S19317C8D0Ev)();
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
extern void _ZN8S19317C63v11Ev();
extern void _ZN8S19317C93v14Ev();
extern void _ZN8S19317C93v15Ev();
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void ABISELECT(_ZTv0_n72_N8S19317C8D1Ev,_ZTv0_n36_N8S19317C8D1Ev)();
extern void ABISELECT(_ZThn384_N8S19317C8D1Ev,_ZThn216_N8S19317C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19317C8D0Ev,_ZTv0_n36_N8S19317C8D0Ev)();
extern void ABISELECT(_ZThn384_N8S19317C8D0Ev,_ZThn216_N8S19317C8D0Ev)() __attribute__((weak));
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
static  VTBL_ENTRY vtc_S19317C8[] = {
  ABISELECT(384,216),
  ABISELECT(296,168),
  ABISELECT(280,160),
  ABISELECT(216,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19317C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19317C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v25Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19317C8D1Ev,_ZThn4_N8S19317C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19317C8D0Ev,_ZThn4_N8S19317C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
  ABISELECT(328,184),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19317C8D1Ev,_ZThn32_N8S19317C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19317C8D0Ev,_ZThn32_N8S19317C8D0Ev),
  (VTBL_ENTRY)&_ZN9S19317C103v16Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v17Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v18Ev,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C93v14Ev,
  (VTBL_ENTRY)&_ZN8S19317C93v15Ev,
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
  ABISELECT(-168,-92),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(-216,-120),
  0,
  0,
  0,
  ABISELECT(64,40),
  ABISELECT(-216,-120),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19317C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19317C23v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19317C8D1Ev,_ZTv0_n28_N8S19317C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19317C8D0Ev,_ZTv0_n28_N8S19317C8D0Ev),
  ABISELECT(-224,-124),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n56_N8S19317C8D1Ev,_ZTvn4_n28_N8S19317C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n56_N8S19317C8D0Ev,_ZTvn4_n28_N8S19317C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
  0,
  ABISELECT(-280,-160),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
  0,
  0,
  ABISELECT(-296,-168),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C93v14Ev,
  (VTBL_ENTRY)&_ZN8S19317C93v15Ev,
  0,
  0,
  ABISELECT(-384,-216),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-216),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19317C8D1Ev,_ZTv0_n36_N8S19317C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19317C8D0Ev,_ZTv0_n36_N8S19317C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
};
extern VTBL_ENTRY _ZTV8S19317C8[];
extern void _ZN8S19317C63v11Ev();
extern void _ZN9S19317C10D1Ev();
extern void _ZN9S19317C10D0Ev();
extern void _ZN9S19317C103v16Ev();
extern void _ZN9S19317C103v17Ev();
extern void _ZN9S19317C103v18Ev();
static  VTBL_ENTRY _tg__ZTV9S19317C10__8S19317C8[] = {
  ABISELECT(328,184),
  0,
  (VTBL_ENTRY)&(_ZTI9S19317C10[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
  (VTBL_ENTRY)&_ZN9S19317C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19317C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v16Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v17Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v18Ev,
};
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void ABISELECT(_ZTv0_n72_N9S19317C10D1Ev,_ZTv0_n36_N9S19317C10D1Ev)();
extern void ABISELECT(_ZThn328_N9S19317C10D1Ev,_ZThn184_N9S19317C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19317C10D0Ev,_ZTv0_n36_N9S19317C10D0Ev)();
extern void ABISELECT(_ZThn328_N9S19317C10D0Ev,_ZThn184_N9S19317C10D0Ev)() __attribute__((weak));
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19317C4__9S19317C10__8S19317C8[] = {
  0,
  0,
  ABISELECT(-328,-184),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-184),
  (VTBL_ENTRY)&(_ZTI9S19317C10[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19317C10D1Ev,_ZTv0_n36_N9S19317C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19317C10D0Ev,_ZTv0_n36_N9S19317C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
};
extern void _ZN8S19317C32v2Ev();
extern void _ZN8S19317C23v12Ev();
extern void _ZN8S19317C23v13Ev();
extern void _ZN8S19317C2D1Ev();
extern void _ZN8S19317C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19317C2__8S19317C8[] = {
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19317C2[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19317C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19317C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19317C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19317C2D0Ev,
};
extern void _ZN8S19317C63v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19317C6__8S19317C2__8S19317C8[] = {
  0,
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19317C2[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
};
static  VTT_ENTRY vtt_S19317C8[] = {
  {&(_ZTV8S19317C8[6]),  6,115},
  {&(_tg__ZTV9S19317C10__8S19317C8[3]),  3,9},
  {&(_tg__ZTV8S19317C4__9S19317C10__8S19317C8[11]),  11,21},
  {&(_ZTV8S19317C8[67]),  67,115},
  {&(_ZTV8S19317C8[74]),  74,115},
  {&(_ZTV8S19317C8[87]),  87,115},
  {&(_ZTV8S19317C8[92]),  92,115},
  {&(_ZTV8S19317C8[31]),  31,115},
  {&(_ZTV8S19317C8[105]),  105,115},
  {&(_tg__ZTV8S19317C2__8S19317C8[3]),  3,8},
  {&(_tg__ZTV8S19317C6__8S19317C2__8S19317C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19317C8[];
extern  VTBL_ENTRY _ZTV8S19317C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19317C8[];
static VTBL_ENTRY alt_thunk_names48[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19317C10D0Ev,_ZTv0_n36_N9S19317C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N9S19317C10D0Ev,_ZThn184_N9S19317C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19317C10D1Ev,_ZTv0_n36_N9S19317C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N9S19317C10D1Ev,_ZThn184_N9S19317C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19317C8D0Ev,_ZTv0_n36_N8S19317C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19317C8D0Ev,_ZThn216_N8S19317C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19317C8D1Ev,_ZTv0_n36_N8S19317C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19317C8D1Ev,_ZThn216_N8S19317C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19317C8D0Ev,_ZTv0_n28_N8S19317C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19317C8D0Ev,_ZThn120_N8S19317C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19317C8D1Ev,_ZTv0_n28_N8S19317C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19317C8D1Ev,_ZThn120_N8S19317C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19317C8 = {  "S19317C8", // class name
  bases_S19317C8, 16,
  &(vtc_S19317C8[0]), // expected_vtbl_contents
  &(vtt_S19317C8[0]), // expected_vtt_contents
  ABISELECT(432,244), // object size
  NSPAIRA(_ZTI8S19317C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19317C8),115, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19317C8),11, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names48,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19317C1  : virtual S19317C2 , S19317C8 {
  virtual  ~S19317C1(); // _ZN8S19317C1D2Ev
  virtual void  v1(); // _ZN8S19317C12v1Ev
  S19317C1(); // tgen
};
//SIG(1 S19317C1) C1{ VBC2{ BC3{ v2} BC4{ BC5{ v3 v4 v5 v6 v7 v8 Fp[4]} vd v9 v10 FL} VBC6{ v11 Fi} v12 v13 Fi FC7{}} BC8{ VBC2 BC3 BC4 VBC9{ v14 v15 Fs:16 FL Fp[8]} BC10{ BC6 BC9 BC3 VBC4 BC5 vd v16 v17 v18 Fi} vd v19 v20 v21 v22 v23 v24 v25 Fc} vd v1}


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

static void Test_S19317C1()
{
  extern Class_Descriptor cd_S19317C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(55,62)];
    init_test(&cd_S19317C1, buf);
    S19317C1 *dp, &lv = *(dp=new (buf) S19317C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,244), "sizeof(S19317C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19317C1)");
    check_base_class_offset(lv, (S19317C3*)(S19317C2*), ABISELECT(216,120), "S19317C1");
    check_base_class_offset(lv, (S19317C5*)(S19317C4*)(S19317C2*), ABISELECT(224,124), "S19317C1");
    check_base_class_offset(lv, (S19317C4*)(S19317C2*), ABISELECT(224,124), "S19317C1");
    check_base_class_offset(lv, (S19317C6*)(S19317C2*), ABISELECT(280,160), "S19317C1");
    check_base_class_offset(lv, (S19317C2*), ABISELECT(216,120), "S19317C1");
    check_base_class_offset(lv, (S19317C2*)(S19317C8*), ABISELECT(216,120), "S19317C1");
    /*is_ambiguous_... S19317C8::S19317C3 */ AMB_check_base_class_offset(lv, (S19317C3*)(S19317C8*), 0, "S19317C1");
    /*is_ambiguous_... S19317C8::S19317C4 */ AMB_check_base_class_offset(lv, (S19317C5*)(S19317C4*)(S19317C8*), ABISELECT(8,4), "S19317C1");
    /*is_ambiguous_... S19317C8::S19317C4 */ AMB_check_base_class_offset(lv, (S19317C4*)(S19317C8*), ABISELECT(8,4), "S19317C1");
    /*is_ambiguous_... S19317C8::S19317C9 */ AMB_check_base_class_offset(lv, (S19317C9*)(S19317C8*), ABISELECT(296,168), "S19317C1");
    check_base_class_offset(lv, (S19317C6*)(S19317C10*)(S19317C8*), ABISELECT(56,32), "S19317C1");
    check_base_class_offset(lv, (S19317C9*)(S19317C10*)(S19317C8*), ABISELECT(72,40), "S19317C1");
    check_base_class_offset(lv, (S19317C3*)(S19317C10*)(S19317C8*), ABISELECT(160,88), "S19317C1");
    /*is_ambiguous_... S19317C1::S19317C4 */ AMB_check_base_class_offset(lv, (S19317C5*)(S19317C4*), ABISELECT(384,216), "S19317C1");
    check_base_class_offset(lv, (S19317C4*)(S19317C10*)(S19317C8*), ABISELECT(384,216), "S19317C1");
    /*is_ambiguous_... S19317C10::S19317C5 */ AMB_check_base_class_offset(lv, (S19317C5*)(S19317C10*)(S19317C8*), ABISELECT(168,92), "S19317C1");
    check_base_class_offset(lv, (S19317C10*)(S19317C8*), ABISELECT(56,32), "S19317C1");
    check_base_class_offset(lv, (S19317C8*), 0, "S19317C1");
    test_class_info(&lv, &cd_S19317C1);
    dp->~S19317C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19317C1(Test_S19317C1, "S19317C1", ABISELECT(432,244));

#else // __cplusplus

extern void _ZN8S19317C1C1Ev();
extern void _ZN8S19317C1D2Ev();
Name_Map name_map_S19317C1[] = {
  NSPAIR(_ZN8S19317C1C1Ev),
  NSPAIR(_ZN8S19317C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19317C3;
extern VTBL_ENTRY _ZTI8S19317C3[];
extern  VTBL_ENTRY _ZTV8S19317C3[];
extern Class_Descriptor cd_S19317C5;
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
extern Class_Descriptor cd_S19317C4;
extern VTBL_ENTRY _ZTI8S19317C4[];
extern  VTBL_ENTRY _ZTV8S19317C4[];
extern Class_Descriptor cd_S19317C6;
extern VTBL_ENTRY _ZTI8S19317C6[];
extern  VTBL_ENTRY _ZTV8S19317C6[];
extern Class_Descriptor cd_S19317C2;
extern VTBL_ENTRY _ZTI8S19317C2[];
extern  VTBL_ENTRY _ZTV8S19317C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19317C2[];
extern Class_Descriptor cd_S19317C3;
extern VTBL_ENTRY _ZTI8S19317C3[];
extern  VTBL_ENTRY _ZTV8S19317C3[];
extern Class_Descriptor cd_S19317C5;
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
extern Class_Descriptor cd_S19317C4;
extern VTBL_ENTRY _ZTI8S19317C4[];
extern  VTBL_ENTRY _ZTV8S19317C4[];
extern Class_Descriptor cd_S19317C9;
extern VTBL_ENTRY _ZTI8S19317C9[];
extern  VTBL_ENTRY _ZTV8S19317C9[];
extern Class_Descriptor cd_S19317C6;
extern VTBL_ENTRY _ZTI8S19317C6[];
extern  VTBL_ENTRY _ZTV8S19317C6[];
extern Class_Descriptor cd_S19317C9;
extern VTBL_ENTRY _ZTI8S19317C9[];
extern  VTBL_ENTRY _ZTV8S19317C9[];
extern Class_Descriptor cd_S19317C3;
extern VTBL_ENTRY _ZTI8S19317C3[];
extern  VTBL_ENTRY _ZTV8S19317C3[];
extern Class_Descriptor cd_S19317C5;
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
extern Class_Descriptor cd_S19317C4;
extern VTBL_ENTRY _ZTI8S19317C4[];
extern  VTBL_ENTRY _ZTV8S19317C4[];
extern Class_Descriptor cd_S19317C5;
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
extern Class_Descriptor cd_S19317C10;
extern VTBL_ENTRY _ZTI9S19317C10[];
extern  VTBL_ENTRY _ZTV9S19317C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19317C10[];
extern Class_Descriptor cd_S19317C8;
extern VTBL_ENTRY _ZTI8S19317C8[];
extern  VTBL_ENTRY _ZTV8S19317C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19317C8[];
static Base_Class bases_S19317C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19317C3,    ABISELECT(216,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
    4, //immediately_derived
  0, 0},
  {&cd_S19317C5,    ABISELECT(224,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
    3, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19317C4,    ABISELECT(224,124), //bcp->offset
    73, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19317C6,    ABISELECT(280,160), //bcp->offset
    85, //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
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19317C2,    ABISELECT(216,120), //bcp->offset
    53, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19317C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19317C5,    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
    10, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19317C4,    ABISELECT(8,4), //bcp->offset
    17, //bcp->virtual_function_table_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
    16, //immediately_derived
  0, 0},
  {&cd_S19317C9,    ABISELECT(296,168), //bcp->offset
    89, //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
    6, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19317C6,    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
    12, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19317C9,    ABISELECT(72,40), //bcp->offset
    38, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S19317C3,    ABISELECT(160,88), //bcp->offset
    42, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S19317C5,    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
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19317C4,    ABISELECT(384,216), //bcp->offset
    95, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19317C5,    ABISELECT(168,92), //bcp->offset
    45, //bcp->virtual_function_table_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_S19317C10,    ABISELECT(56,32), //bcp->offset
    29, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19317C8,    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
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19317C1[];
extern void _ZN8S19317C32v2Ev();
extern void _ZN8S19317C1D1Ev();
extern void _ZN8S19317C1D0Ev();
extern void _ZN8S19317C83v19Ev();
extern void _ZN8S19317C83v20Ev();
extern void _ZN8S19317C83v21Ev();
extern void _ZN8S19317C83v22Ev();
extern void _ZN8S19317C83v23Ev();
extern void _ZN8S19317C83v24Ev();
extern void _ZN8S19317C83v25Ev();
extern void _ZN8S19317C12v1Ev();
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void ABISELECT(_ZThn8_N8S19317C1D1Ev,_ZThn4_N8S19317C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S19317C1D0Ev,_ZThn4_N8S19317C1D0Ev)();
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
extern void _ZN8S19317C63v11Ev();
extern void ABISELECT(_ZThn56_N8S19317C1D1Ev,_ZThn32_N8S19317C1D1Ev)();
extern void ABISELECT(_ZThn56_N8S19317C1D0Ev,_ZThn32_N8S19317C1D0Ev)();
extern void _ZN9S19317C103v16Ev();
extern void _ZN9S19317C103v17Ev();
extern void _ZN9S19317C103v18Ev();
extern void _ZN8S19317C93v14Ev();
extern void _ZN8S19317C93v15Ev();
extern void _ZN8S19317C32v2Ev();
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void _ZN8S19317C32v2Ev();
extern void _ZN8S19317C23v12Ev();
extern void _ZN8S19317C23v13Ev();
extern void ABISELECT(_ZTv0_n56_N8S19317C1D1Ev,_ZTv0_n28_N8S19317C1D1Ev)();
extern void ABISELECT(_ZThn216_N8S19317C1D1Ev,_ZThn120_N8S19317C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19317C1D0Ev,_ZTv0_n28_N8S19317C1D0Ev)();
extern void ABISELECT(_ZThn216_N8S19317C1D0Ev,_ZThn120_N8S19317C1D0Ev)() __attribute__((weak));
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void ABISELECT(_ZTvn8_n56_N8S19317C1D1Ev,_ZTvn4_n28_N8S19317C1D1Ev)();
extern void ABISELECT(_ZTvn8_n56_N8S19317C1D0Ev,_ZTvn4_n28_N8S19317C1D0Ev)();
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
extern void _ZN8S19317C63v11Ev();
extern void _ZN8S19317C93v14Ev();
extern void _ZN8S19317C93v15Ev();
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void ABISELECT(_ZTv0_n72_N8S19317C1D1Ev,_ZTv0_n36_N8S19317C1D1Ev)();
extern void ABISELECT(_ZThn384_N8S19317C1D1Ev,_ZThn216_N8S19317C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19317C1D0Ev,_ZTv0_n36_N8S19317C1D0Ev)();
extern void ABISELECT(_ZThn384_N8S19317C1D0Ev,_ZThn216_N8S19317C1D0Ev)() __attribute__((weak));
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
static  VTBL_ENTRY vtc_S19317C1[] = {
  ABISELECT(384,216),
  ABISELECT(296,168),
  ABISELECT(280,160),
  ABISELECT(216,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19317C1[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19317C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19317C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19317C12v1Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19317C1[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19317C1D1Ev,_ZThn4_N8S19317C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19317C1D0Ev,_ZThn4_N8S19317C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
  ABISELECT(328,184),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S19317C1[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19317C1D1Ev,_ZThn32_N8S19317C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19317C1D0Ev,_ZThn32_N8S19317C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19317C103v16Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v17Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v18Ev,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S19317C1[0]),
  (VTBL_ENTRY)&_ZN8S19317C93v14Ev,
  (VTBL_ENTRY)&_ZN8S19317C93v15Ev,
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S19317C1[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
  ABISELECT(-168,-92),
  (VTBL_ENTRY)&(_ZTI8S19317C1[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(-216,-120),
  0,
  0,
  0,
  ABISELECT(64,40),
  ABISELECT(-216,-120),
  (VTBL_ENTRY)&(_ZTI8S19317C1[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19317C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19317C23v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19317C1D1Ev,_ZTv0_n28_N8S19317C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19317C1D0Ev,_ZTv0_n28_N8S19317C1D0Ev),
  ABISELECT(-224,-124),
  (VTBL_ENTRY)&(_ZTI8S19317C1[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n56_N8S19317C1D1Ev,_ZTvn4_n28_N8S19317C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n56_N8S19317C1D0Ev,_ZTvn4_n28_N8S19317C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
  0,
  ABISELECT(-280,-160),
  (VTBL_ENTRY)&(_ZTI8S19317C1[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
  0,
  0,
  ABISELECT(-296,-168),
  (VTBL_ENTRY)&(_ZTI8S19317C1[0]),
  (VTBL_ENTRY)&_ZN8S19317C93v14Ev,
  (VTBL_ENTRY)&_ZN8S19317C93v15Ev,
  0,
  0,
  ABISELECT(-384,-216),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-216),
  (VTBL_ENTRY)&(_ZTI8S19317C1[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19317C1D1Ev,_ZTv0_n36_N8S19317C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19317C1D0Ev,_ZTv0_n36_N8S19317C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
};
extern VTBL_ENTRY _ZTV8S19317C1[];
extern void _ZN8S19317C32v2Ev();
extern void _ZN8S19317C8D1Ev();
extern void _ZN8S19317C8D0Ev();
extern void _ZN8S19317C83v19Ev();
extern void _ZN8S19317C83v20Ev();
extern void _ZN8S19317C83v21Ev();
extern void _ZN8S19317C83v22Ev();
extern void _ZN8S19317C83v23Ev();
extern void _ZN8S19317C83v24Ev();
extern void _ZN8S19317C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S19317C8__8S19317C1[] = {
  ABISELECT(384,216),
  ABISELECT(296,168),
  ABISELECT(280,160),
  ABISELECT(216,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19317C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19317C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v25Ev,
};
extern void _ZN8S19317C63v11Ev();
extern void _ZN9S19317C10D1Ev();
extern void _ZN9S19317C10D0Ev();
extern void _ZN9S19317C103v16Ev();
extern void _ZN9S19317C103v17Ev();
extern void _ZN9S19317C103v18Ev();
static  VTBL_ENTRY _tg__ZTV9S19317C108S19317C8__8S19317C1[] = {
  ABISELECT(328,184),
  0,
  (VTBL_ENTRY)&(_ZTI9S19317C10[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
  (VTBL_ENTRY)&_ZN9S19317C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19317C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v16Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v17Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v18Ev,
};
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void ABISELECT(_ZTv0_n72_N9S19317C10D1Ev,_ZTv0_n36_N9S19317C10D1Ev)();
extern void ABISELECT(_ZThn328_N9S19317C10D1Ev,_ZThn184_N9S19317C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19317C10D0Ev,_ZTv0_n36_N9S19317C10D0Ev)();
extern void ABISELECT(_ZThn328_N9S19317C10D0Ev,_ZThn184_N9S19317C10D0Ev)() __attribute__((weak));
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19317C4__9S19317C108S19317C8__8S19317C1[] = {
  0,
  0,
  ABISELECT(-328,-184),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-184),
  (VTBL_ENTRY)&(_ZTI9S19317C10[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19317C10D1Ev,_ZTv0_n36_N9S19317C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19317C10D0Ev,_ZTv0_n36_N9S19317C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
};
extern void _ZN8S19317C32v2Ev();
extern void _ZN8S19317C23v12Ev();
extern void _ZN8S19317C23v13Ev();
extern void ABISELECT(_ZTv0_n56_N8S19317C8D1Ev,_ZTv0_n28_N8S19317C8D1Ev)();
extern void ABISELECT(_ZThn216_N8S19317C8D1Ev,_ZThn120_N8S19317C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19317C8D0Ev,_ZTv0_n28_N8S19317C8D0Ev)();
extern void ABISELECT(_ZThn216_N8S19317C8D0Ev,_ZThn120_N8S19317C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19317C2__8S19317C8__8S19317C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(-216,-120),
  0,
  0,
  0,
  ABISELECT(64,40),
  ABISELECT(-216,-120),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19317C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19317C23v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19317C8D1Ev,_ZTv0_n28_N8S19317C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19317C8D0Ev,_ZTv0_n28_N8S19317C8D0Ev),
};
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void ABISELECT(_ZTvn8_n56_N8S19317C8D1Ev,_ZTvn4_n28_N8S19317C8D1Ev)();
extern void ABISELECT(_ZTvn8_n56_N8S19317C8D0Ev,_ZTvn4_n28_N8S19317C8D0Ev)();
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19317C48S19317C2__8S19317C8__8S19317C1[] = {
  ABISELECT(-224,-124),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n56_N8S19317C8D1Ev,_ZTvn4_n28_N8S19317C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n56_N8S19317C8D0Ev,_ZTvn4_n28_N8S19317C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
};
extern void _ZN8S19317C63v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19317C6__8S19317C8__8S19317C1[] = {
  0,
  ABISELECT(-280,-160),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
};
extern void _ZN8S19317C93v14Ev();
extern void _ZN8S19317C93v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19317C9__8S19317C8__8S19317C1[] = {
  0,
  0,
  ABISELECT(-296,-168),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C93v14Ev,
  (VTBL_ENTRY)&_ZN8S19317C93v15Ev,
};
extern void _ZN8S19317C63v11Ev();
extern void ABISELECT(_ZThn56_N8S19317C8D1Ev,_ZThn32_N8S19317C8D1Ev)();
extern void ABISELECT(_ZThn56_N8S19317C8D0Ev,_ZThn32_N8S19317C8D0Ev)();
extern void _ZN9S19317C103v16Ev();
extern void _ZN9S19317C103v17Ev();
extern void _ZN9S19317C103v18Ev();
static  VTBL_ENTRY _tg__ZTV9S19317C10__8S19317C8__8S19317C1[] = {
  ABISELECT(328,184),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19317C8D1Ev,_ZThn32_N8S19317C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19317C8D0Ev,_ZThn32_N8S19317C8D0Ev),
  (VTBL_ENTRY)&_ZN9S19317C103v16Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v17Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v18Ev,
};
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void ABISELECT(_ZTv0_n72_N8S19317C8D1Ev,_ZTv0_n36_N8S19317C8D1Ev)();
extern void ABISELECT(_ZThn384_N8S19317C8D1Ev,_ZThn216_N8S19317C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19317C8D0Ev,_ZTv0_n36_N8S19317C8D0Ev)();
extern void ABISELECT(_ZThn384_N8S19317C8D0Ev,_ZThn216_N8S19317C8D0Ev)() __attribute__((weak));
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19317C4__A2__8S19317C8__8S19317C1[] = {
  0,
  0,
  ABISELECT(-384,-216),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-216),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19317C8D1Ev,_ZTv0_n36_N8S19317C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19317C8D0Ev,_ZTv0_n36_N8S19317C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
};
extern void _ZN8S19317C32v2Ev();
extern void _ZN8S19317C23v12Ev();
extern void _ZN8S19317C23v13Ev();
extern void _ZN8S19317C2D1Ev();
extern void _ZN8S19317C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19317C2__8S19317C1[] = {
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19317C2[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19317C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19317C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19317C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19317C2D0Ev,
};
extern void _ZN8S19317C63v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19317C6__8S19317C2__8S19317C1[] = {
  0,
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19317C2[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
};
static  VTT_ENTRY vtt_S19317C1[] = {
  {&(_ZTV8S19317C1[6]),  6,116},
  {&(_tg__ZTV8S19317C8__8S19317C1[6]),  6,16},
  {&(_tg__ZTV9S19317C108S19317C8__8S19317C1[3]),  3,9},
  {&(_tg__ZTV8S19317C4__9S19317C108S19317C8__8S19317C1[11]),  11,21},
  {&(_tg__ZTV8S19317C2__8S19317C8__8S19317C1[15]),  15,20},
  {&(_tg__ZTV8S19317C48S19317C2__8S19317C8__8S19317C1[2]),  2,12},
  {&(_tg__ZTV8S19317C6__8S19317C8__8S19317C1[3]),  3,4},
  {&(_tg__ZTV8S19317C9__8S19317C8__8S19317C1[4]),  4,6},
  {&(_tg__ZTV9S19317C10__8S19317C8__8S19317C1[3]),  3,9},
  {&(_tg__ZTV8S19317C4__A2__8S19317C8__8S19317C1[11]),  11,21},
  {&(_ZTV8S19317C1[68]),  68,116},
  {&(_ZTV8S19317C1[75]),  75,116},
  {&(_ZTV8S19317C1[88]),  88,116},
  {&(_ZTV8S19317C1[93]),  93,116},
  {&(_ZTV8S19317C1[32]),  32,116},
  {&(_ZTV8S19317C1[106]),  106,116},
  {&(_tg__ZTV8S19317C2__8S19317C1[3]),  3,8},
  {&(_tg__ZTV8S19317C6__8S19317C2__8S19317C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19317C1[];
extern  VTBL_ENTRY _ZTV8S19317C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19317C1[];
static VTBL_ENTRY alt_thunk_names49[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19317C8D0Ev,_ZTv0_n36_N8S19317C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19317C8D0Ev,_ZThn216_N8S19317C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19317C8D1Ev,_ZTv0_n36_N8S19317C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19317C8D1Ev,_ZThn216_N8S19317C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19317C8D0Ev,_ZTv0_n28_N8S19317C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19317C8D0Ev,_ZThn120_N8S19317C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19317C8D1Ev,_ZTv0_n28_N8S19317C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19317C8D1Ev,_ZThn120_N8S19317C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19317C10D0Ev,_ZTv0_n36_N9S19317C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N9S19317C10D0Ev,_ZThn184_N9S19317C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19317C10D1Ev,_ZTv0_n36_N9S19317C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N9S19317C10D1Ev,_ZThn184_N9S19317C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19317C1D0Ev,_ZTv0_n36_N8S19317C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19317C1D0Ev,_ZThn216_N8S19317C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19317C1D1Ev,_ZTv0_n36_N8S19317C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19317C1D1Ev,_ZThn216_N8S19317C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19317C1D0Ev,_ZTv0_n28_N8S19317C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19317C1D0Ev,_ZThn120_N8S19317C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19317C1D1Ev,_ZTv0_n28_N8S19317C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19317C1D1Ev,_ZThn120_N8S19317C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19317C1 = {  "S19317C1", // class name
  bases_S19317C1, 17,
  &(vtc_S19317C1[0]), // expected_vtbl_contents
  &(vtt_S19317C1[0]), // expected_vtt_contents
  ABISELECT(432,244), // object size
  NSPAIRA(_ZTI8S19317C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19317C1),116, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19317C1),18, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names49,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S350C6  {
  ::S4473C12_nt s350c6f0;
  int s350c6f1[2];
  char s350c6f2;
  virtual  ~S350C6(); // _ZN6S350C6D1Ev
  virtual void  v3(); // _ZN6S350C62v3Ev
  virtual void  v4(); // _ZN6S350C62v4Ev
  virtual void  v5(); // _ZN6S350C62v5Ev
  S350C6(); // tgen
};
//SIG(-1 S350C6) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S350C6 ::~S350C6(){ note_dtor("S350C6", this);}
void  S350C6 ::v3(){vfunc_called(this, "_ZN6S350C62v3Ev");}
void  S350C6 ::v4(){vfunc_called(this, "_ZN6S350C62v4Ev");}
void  S350C6 ::v5(){vfunc_called(this, "_ZN6S350C62v5Ev");}
S350C6 ::S350C6(){ note_ctor("S350C6", this);} // tgen

static void Test_S350C6()
{
  extern Class_Descriptor cd_S350C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S350C6, buf);
    S350C6 *dp, &lv = *(dp=new (buf) S350C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S350C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S350C6)");
    check_field_offset(lv, s350c6f0, ABISELECT(8,4), "S350C6.s350c6f0");
    check_field_offset(lv, s350c6f1, ABISELECT(24,16), "S350C6.s350c6f1");
    check_field_offset(lv, s350c6f2, ABISELECT(32,24), "S350C6.s350c6f2");
    test_class_info(&lv, &cd_S350C6);
    dp->~S350C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS350C6(Test_S350C6, "S350C6", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN6S350C6C1Ev();
extern void _ZN6S350C6D1Ev();
Name_Map name_map_S350C6[] = {
  NSPAIR(_ZN6S350C6C1Ev),
  NSPAIR(_ZN6S350C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S350C6[];
extern void _ZN6S350C6D1Ev();
extern void _ZN6S350C6D0Ev();
extern void _ZN6S350C62v3Ev();
extern void _ZN6S350C62v4Ev();
extern void _ZN6S350C62v5Ev();
static  VTBL_ENTRY vtc_S350C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S350C6[0]),
  (VTBL_ENTRY)&_ZN6S350C6D1Ev,
  (VTBL_ENTRY)&_ZN6S350C6D0Ev,
  (VTBL_ENTRY)&_ZN6S350C62v3Ev,
  (VTBL_ENTRY)&_ZN6S350C62v4Ev,
  (VTBL_ENTRY)&_ZN6S350C62v5Ev,
};
extern VTBL_ENTRY _ZTI6S350C6[];
extern  VTBL_ENTRY _ZTV6S350C6[];
Class_Descriptor cd_S350C6 = {  "S350C6", // class name
  0,0,//no base classes
  &(vtc_S350C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI6S350C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S350C6),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  S350C5  : S350C6 {
  void *s350c5f0;
  virtual void  v6(); // _ZN6S350C52v6Ev
  virtual void  v7(); // _ZN6S350C52v7Ev
  ~S350C5(); // tgen
  S350C5(); // tgen
};
//SIG(-1 S350C5) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S350C5 ::v6(){vfunc_called(this, "_ZN6S350C52v6Ev");}
void  S350C5 ::v7(){vfunc_called(this, "_ZN6S350C52v7Ev");}
S350C5 ::~S350C5(){ note_dtor("S350C5", this);} // tgen
S350C5 ::S350C5(){ note_ctor("S350C5", this);} // tgen

static void Test_S350C5()
{
  extern Class_Descriptor cd_S350C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S350C5, buf);
    S350C5 *dp, &lv = *(dp=new (buf) S350C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S350C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S350C5)");
    check_base_class_offset(lv, (S350C6*), 0, "S350C5");
    check_field_offset(lv, s350c5f0, ABISELECT(40,28), "S350C5.s350c5f0");
    test_class_info(&lv, &cd_S350C5);
    dp->~S350C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS350C5(Test_S350C5, "S350C5", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN6S350C5C1Ev();
extern void _ZN6S350C5D1Ev();
Name_Map name_map_S350C5[] = {
  NSPAIR(_ZN6S350C5C1Ev),
  NSPAIR(_ZN6S350C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S350C6;
extern VTBL_ENTRY _ZTI6S350C6[];
extern  VTBL_ENTRY _ZTV6S350C6[];
static Base_Class bases_S350C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S350C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S350C5[];
extern void _ZN6S350C5D1Ev();
extern void _ZN6S350C5D0Ev();
extern void _ZN6S350C62v3Ev();
extern void _ZN6S350C62v4Ev();
extern void _ZN6S350C62v5Ev();
extern void _ZN6S350C52v6Ev();
extern void _ZN6S350C52v7Ev();
static  VTBL_ENTRY vtc_S350C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S350C5[0]),
  (VTBL_ENTRY)&_ZN6S350C5D1Ev,
  (VTBL_ENTRY)&_ZN6S350C5D0Ev,
  (VTBL_ENTRY)&_ZN6S350C62v3Ev,
  (VTBL_ENTRY)&_ZN6S350C62v4Ev,
  (VTBL_ENTRY)&_ZN6S350C62v5Ev,
  (VTBL_ENTRY)&_ZN6S350C52v6Ev,
  (VTBL_ENTRY)&_ZN6S350C52v7Ev,
};
extern VTBL_ENTRY _ZTI6S350C5[];
extern  VTBL_ENTRY _ZTV6S350C5[];
Class_Descriptor cd_S350C5 = {  "S350C5", // class name
  bases_S350C5, 1,
  &(vtc_S350C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI6S350C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S350C5),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  S350C4  : S350C5 {
  void *s350c4f0;
  char s350c4f1;
  ::S2366C14_nt s350c4f2;
  virtual  ~S350C4(); // _ZN6S350C4D1Ev
  virtual void  v8(); // _ZN6S350C42v8Ev
  S350C4(); // tgen
};
//SIG(-1 S350C4) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1 Fp Fc FC6{ m Fi[2]}}


 S350C4 ::~S350C4(){ note_dtor("S350C4", this);}
void  S350C4 ::v8(){vfunc_called(this, "_ZN6S350C42v8Ev");}
S350C4 ::S350C4(){ note_ctor("S350C4", this);} // tgen

static void Test_S350C4()
{
  extern Class_Descriptor cd_S350C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S350C4, buf);
    S350C4 *dp, &lv = *(dp=new (buf) S350C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S350C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S350C4)");
    check_base_class_offset(lv, (S350C6*)(S350C5*), 0, "S350C4");
    check_base_class_offset(lv, (S350C5*), 0, "S350C4");
    check_field_offset(lv, s350c4f0, ABISELECT(48,32), "S350C4.s350c4f0");
    check_field_offset(lv, s350c4f1, ABISELECT(56,36), "S350C4.s350c4f1");
    check_field_offset(lv, s350c4f2, ABISELECT(60,40), "S350C4.s350c4f2");
    test_class_info(&lv, &cd_S350C4);
    dp->~S350C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS350C4(Test_S350C4, "S350C4", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN6S350C4C1Ev();
extern void _ZN6S350C4D1Ev();
Name_Map name_map_S350C4[] = {
  NSPAIR(_ZN6S350C4C1Ev),
  NSPAIR(_ZN6S350C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S350C6;
extern VTBL_ENTRY _ZTI6S350C6[];
extern  VTBL_ENTRY _ZTV6S350C6[];
extern Class_Descriptor cd_S350C5;
extern VTBL_ENTRY _ZTI6S350C5[];
extern  VTBL_ENTRY _ZTV6S350C5[];
static Base_Class bases_S350C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S350C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S350C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S350C4[];
extern void _ZN6S350C4D1Ev();
extern void _ZN6S350C4D0Ev();
extern void _ZN6S350C62v3Ev();
extern void _ZN6S350C62v4Ev();
extern void _ZN6S350C62v5Ev();
extern void _ZN6S350C52v6Ev();
extern void _ZN6S350C52v7Ev();
extern void _ZN6S350C42v8Ev();
static  VTBL_ENTRY vtc_S350C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S350C4[0]),
  (VTBL_ENTRY)&_ZN6S350C4D1Ev,
  (VTBL_ENTRY)&_ZN6S350C4D0Ev,
  (VTBL_ENTRY)&_ZN6S350C62v3Ev,
  (VTBL_ENTRY)&_ZN6S350C62v4Ev,
  (VTBL_ENTRY)&_ZN6S350C62v5Ev,
  (VTBL_ENTRY)&_ZN6S350C52v6Ev,
  (VTBL_ENTRY)&_ZN6S350C52v7Ev,
  (VTBL_ENTRY)&_ZN6S350C42v8Ev,
};
extern VTBL_ENTRY _ZTI6S350C4[];
extern  VTBL_ENTRY _ZTV6S350C4[];
Class_Descriptor cd_S350C4 = {  "S350C4", // class name
  bases_S350C4, 2,
  &(vtc_S350C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI6S350C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S350C4),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  S350C3  : S350C4 {
  void *s350c3f0;
  __tsi64 s350c3f1[2];
  ::S130C11_nt s350c3f2;
  __tsi64 s350c3f3;
  ::S130C12_nt s350c3f4;
  char s350c3f5;
  void *s350c3f6[2];
  virtual  ~S350C3(); // _ZN6S350C3D1Ev
  virtual void  v9(); // _ZN6S350C32v9Ev
  virtual void  v10(); // _ZN6S350C33v10Ev
  virtual void  v11(); // _ZN6S350C33v11Ev
  virtual void  v12(); // _ZN6S350C33v12Ev
  S350C3(); // tgen
};
//SIG(-1 S350C3) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v8 v9 Fp} vd v10 Fp Fc FC7{ m Fi[2]}} vd v1 v2 v3 v4 Fp FL[2] FC8{ m Fp[2]} FL FC9{ Fp Fi Fp} Fc Fp[2]}


 S350C3 ::~S350C3(){ note_dtor("S350C3", this);}
void  S350C3 ::v9(){vfunc_called(this, "_ZN6S350C32v9Ev");}
void  S350C3 ::v10(){vfunc_called(this, "_ZN6S350C33v10Ev");}
void  S350C3 ::v11(){vfunc_called(this, "_ZN6S350C33v11Ev");}
void  S350C3 ::v12(){vfunc_called(this, "_ZN6S350C33v12Ev");}
S350C3 ::S350C3(){ note_ctor("S350C3", this);} // tgen

static void Test_S350C3()
{
  extern Class_Descriptor cd_S350C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,28)];
    init_test(&cd_S350C3, buf);
    S350C3 *dp, &lv = *(dp=new (buf) S350C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,108), "sizeof(S350C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S350C3)");
    check_base_class_offset(lv, (S350C6*)(S350C5*)(S350C4*), 0, "S350C3");
    check_base_class_offset(lv, (S350C5*)(S350C4*), 0, "S350C3");
    check_base_class_offset(lv, (S350C4*), 0, "S350C3");
    check_field_offset(lv, s350c3f0, ABISELECT(72,48), "S350C3.s350c3f0");
    check_field_offset(lv, s350c3f1, ABISELECT(80,52), "S350C3.s350c3f1");
    check_field_offset(lv, s350c3f2, ABISELECT(96,68), "S350C3.s350c3f2");
    check_field_offset(lv, s350c3f3, ABISELECT(112,76), "S350C3.s350c3f3");
    check_field_offset(lv, s350c3f4, ABISELECT(120,84), "S350C3.s350c3f4");
    check_field_offset(lv, s350c3f5, ABISELECT(144,96), "S350C3.s350c3f5");
    check_field_offset(lv, s350c3f6, ABISELECT(152,100), "S350C3.s350c3f6");
    test_class_info(&lv, &cd_S350C3);
    dp->~S350C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS350C3(Test_S350C3, "S350C3", ABISELECT(168,108));

#else // __cplusplus

extern void _ZN6S350C3C1Ev();
extern void _ZN6S350C3D1Ev();
Name_Map name_map_S350C3[] = {
  NSPAIR(_ZN6S350C3C1Ev),
  NSPAIR(_ZN6S350C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S350C6;
extern VTBL_ENTRY _ZTI6S350C6[];
extern  VTBL_ENTRY _ZTV6S350C6[];
extern Class_Descriptor cd_S350C5;
extern VTBL_ENTRY _ZTI6S350C5[];
extern  VTBL_ENTRY _ZTV6S350C5[];
extern Class_Descriptor cd_S350C4;
extern VTBL_ENTRY _ZTI6S350C4[];
extern  VTBL_ENTRY _ZTV6S350C4[];
static Base_Class bases_S350C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S350C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S350C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S350C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S350C3[];
extern void _ZN6S350C3D1Ev();
extern void _ZN6S350C3D0Ev();
extern void _ZN6S350C62v3Ev();
extern void _ZN6S350C62v4Ev();
extern void _ZN6S350C62v5Ev();
extern void _ZN6S350C52v6Ev();
extern void _ZN6S350C52v7Ev();
extern void _ZN6S350C42v8Ev();
extern void _ZN6S350C32v9Ev();
extern void _ZN6S350C33v10Ev();
extern void _ZN6S350C33v11Ev();
extern void _ZN6S350C33v12Ev();
static  VTBL_ENTRY vtc_S350C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S350C3[0]),
  (VTBL_ENTRY)&_ZN6S350C3D1Ev,
  (VTBL_ENTRY)&_ZN6S350C3D0Ev,
  (VTBL_ENTRY)&_ZN6S350C62v3Ev,
  (VTBL_ENTRY)&_ZN6S350C62v4Ev,
  (VTBL_ENTRY)&_ZN6S350C62v5Ev,
  (VTBL_ENTRY)&_ZN6S350C52v6Ev,
  (VTBL_ENTRY)&_ZN6S350C52v7Ev,
  (VTBL_ENTRY)&_ZN6S350C42v8Ev,
  (VTBL_ENTRY)&_ZN6S350C32v9Ev,
  (VTBL_ENTRY)&_ZN6S350C33v10Ev,
  (VTBL_ENTRY)&_ZN6S350C33v11Ev,
  (VTBL_ENTRY)&_ZN6S350C33v12Ev,
};
extern VTBL_ENTRY _ZTI6S350C3[];
extern  VTBL_ENTRY _ZTV6S350C3[];
Class_Descriptor cd_S350C3 = {  "S350C3", // class name
  bases_S350C3, 3,
  &(vtc_S350C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,108), // object size
  NSPAIRA(_ZTI6S350C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S350C3),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S350C2  : S350C3 {
  char s350c2f0;
  void *s350c2f1[2];
  virtual  ~S350C2(); // _ZN6S350C2D1Ev
  virtual void  v13(); // _ZN6S350C23v13Ev
  virtual void  v14(); // _ZN6S350C23v14Ev
  virtual void  v15(); // _ZN6S350C23v15Ev
  virtual void  v16(); // _ZN6S350C23v16Ev
  virtual void  v17(); // _ZN6S350C23v17Ev
  virtual void  v18(); // _ZN6S350C23v18Ev
  virtual void  v19(); // _ZN6S350C23v19Ev
  virtual void  v20(); // _ZN6S350C23v20Ev
  S350C2(); // tgen
};
//SIG(-1 S350C2) C1{ BC2{ BC3{ BC4{ BC5{ vd v9 v10 v11 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} v12 v13 Fp} vd v14 Fp Fc FC8{ m Fi[2]}} vd v15 v16 v17 v18 Fp FL[2] FC9{ m Fp[2]} FL FC10{ Fp Fi Fp} Fc Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 Fc Fp[2]}


 S350C2 ::~S350C2(){ note_dtor("S350C2", this);}
void  S350C2 ::v13(){vfunc_called(this, "_ZN6S350C23v13Ev");}
void  S350C2 ::v14(){vfunc_called(this, "_ZN6S350C23v14Ev");}
void  S350C2 ::v15(){vfunc_called(this, "_ZN6S350C23v15Ev");}
void  S350C2 ::v16(){vfunc_called(this, "_ZN6S350C23v16Ev");}
void  S350C2 ::v17(){vfunc_called(this, "_ZN6S350C23v17Ev");}
void  S350C2 ::v18(){vfunc_called(this, "_ZN6S350C23v18Ev");}
void  S350C2 ::v19(){vfunc_called(this, "_ZN6S350C23v19Ev");}
void  S350C2 ::v20(){vfunc_called(this, "_ZN6S350C23v20Ev");}
S350C2 ::S350C2(){ note_ctor("S350C2", this);} // tgen

static void Test_S350C2()
{
  extern Class_Descriptor cd_S350C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,31)];
    init_test(&cd_S350C2, buf);
    S350C2 *dp, &lv = *(dp=new (buf) S350C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,120), "sizeof(S350C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S350C2)");
    check_base_class_offset(lv, (S350C6*)(S350C5*)(S350C4*)(S350C3*), 0, "S350C2");
    check_base_class_offset(lv, (S350C5*)(S350C4*)(S350C3*), 0, "S350C2");
    check_base_class_offset(lv, (S350C4*)(S350C3*), 0, "S350C2");
    check_base_class_offset(lv, (S350C3*), 0, "S350C2");
    check_field_offset(lv, s350c2f0, ABISELECT(168,108), "S350C2.s350c2f0");
    check_field_offset(lv, s350c2f1, ABISELECT(176,112), "S350C2.s350c2f1");
    test_class_info(&lv, &cd_S350C2);
    dp->~S350C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS350C2(Test_S350C2, "S350C2", ABISELECT(192,120));

#else // __cplusplus

extern void _ZN6S350C2C1Ev();
extern void _ZN6S350C2D1Ev();
Name_Map name_map_S350C2[] = {
  NSPAIR(_ZN6S350C2C1Ev),
  NSPAIR(_ZN6S350C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S350C6;
extern VTBL_ENTRY _ZTI6S350C6[];
extern  VTBL_ENTRY _ZTV6S350C6[];
extern Class_Descriptor cd_S350C5;
extern VTBL_ENTRY _ZTI6S350C5[];
extern  VTBL_ENTRY _ZTV6S350C5[];
extern Class_Descriptor cd_S350C4;
extern VTBL_ENTRY _ZTI6S350C4[];
extern  VTBL_ENTRY _ZTV6S350C4[];
extern Class_Descriptor cd_S350C3;
extern VTBL_ENTRY _ZTI6S350C3[];
extern  VTBL_ENTRY _ZTV6S350C3[];
static Base_Class bases_S350C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S350C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S350C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S350C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S350C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S350C2[];
extern void _ZN6S350C2D1Ev();
extern void _ZN6S350C2D0Ev();
extern void _ZN6S350C62v3Ev();
extern void _ZN6S350C62v4Ev();
extern void _ZN6S350C62v5Ev();
extern void _ZN6S350C52v6Ev();
extern void _ZN6S350C52v7Ev();
extern void _ZN6S350C42v8Ev();
extern void _ZN6S350C32v9Ev();
extern void _ZN6S350C33v10Ev();
extern void _ZN6S350C33v11Ev();
extern void _ZN6S350C33v12Ev();
extern void _ZN6S350C23v13Ev();
extern void _ZN6S350C23v14Ev();
extern void _ZN6S350C23v15Ev();
extern void _ZN6S350C23v16Ev();
extern void _ZN6S350C23v17Ev();
extern void _ZN6S350C23v18Ev();
extern void _ZN6S350C23v19Ev();
extern void _ZN6S350C23v20Ev();
static  VTBL_ENTRY vtc_S350C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S350C2[0]),
  (VTBL_ENTRY)&_ZN6S350C2D1Ev,
  (VTBL_ENTRY)&_ZN6S350C2D0Ev,
  (VTBL_ENTRY)&_ZN6S350C62v3Ev,
  (VTBL_ENTRY)&_ZN6S350C62v4Ev,
  (VTBL_ENTRY)&_ZN6S350C62v5Ev,
  (VTBL_ENTRY)&_ZN6S350C52v6Ev,
  (VTBL_ENTRY)&_ZN6S350C52v7Ev,
  (VTBL_ENTRY)&_ZN6S350C42v8Ev,
  (VTBL_ENTRY)&_ZN6S350C32v9Ev,
  (VTBL_ENTRY)&_ZN6S350C33v10Ev,
  (VTBL_ENTRY)&_ZN6S350C33v11Ev,
  (VTBL_ENTRY)&_ZN6S350C33v12Ev,
  (VTBL_ENTRY)&_ZN6S350C23v13Ev,
  (VTBL_ENTRY)&_ZN6S350C23v14Ev,
  (VTBL_ENTRY)&_ZN6S350C23v15Ev,
  (VTBL_ENTRY)&_ZN6S350C23v16Ev,
  (VTBL_ENTRY)&_ZN6S350C23v17Ev,
  (VTBL_ENTRY)&_ZN6S350C23v18Ev,
  (VTBL_ENTRY)&_ZN6S350C23v19Ev,
  (VTBL_ENTRY)&_ZN6S350C23v20Ev,
};
extern VTBL_ENTRY _ZTI6S350C2[];
extern  VTBL_ENTRY _ZTV6S350C2[];
Class_Descriptor cd_S350C2 = {  "S350C2", // class name
  bases_S350C2, 4,
  &(vtc_S350C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,120), // object size
  NSPAIRA(_ZTI6S350C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S350C2),22, //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  S350C1  : S350C2 {
  virtual  ~S350C1(); // _ZN6S350C1D1Ev
  virtual void  v1(); // _ZN6S350C12v1Ev
  virtual void  v2(); // _ZN6S350C12v2Ev
  S350C1(); // tgen
};
//SIG(1 S350C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v3 v4 v5 FC7{ m Fp Fi FC8{ m}} Fi[2] Fc} v6 v7 Fp} vd v8 Fp Fc FC9{ m Fi[2]}} vd v9 v10 v11 v12 Fp FL[2] FC10{ m Fp[2]} FL FC11{ Fp Fi Fp} Fc Fp[2]} vd v13 v14 v15 v16 v17 v18 v19 v20 Fc Fp[2]} vd v1 v2}


 S350C1 ::~S350C1(){ note_dtor("S350C1", this);}
void  S350C1 ::v1(){vfunc_called(this, "_ZN6S350C12v1Ev");}
void  S350C1 ::v2(){vfunc_called(this, "_ZN6S350C12v2Ev");}
S350C1 ::S350C1(){ note_ctor("S350C1", this);} // tgen

static void Test_S350C1()
{
  extern Class_Descriptor cd_S350C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,31)];
    init_test(&cd_S350C1, buf);
    S350C1 *dp, &lv = *(dp=new (buf) S350C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,120), "sizeof(S350C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S350C1)");
    check_base_class_offset(lv, (S350C6*)(S350C5*)(S350C4*)(S350C3*)(S350C2*), 0, "S350C1");
    check_base_class_offset(lv, (S350C5*)(S350C4*)(S350C3*)(S350C2*), 0, "S350C1");
    check_base_class_offset(lv, (S350C4*)(S350C3*)(S350C2*), 0, "S350C1");
    check_base_class_offset(lv, (S350C3*)(S350C2*), 0, "S350C1");
    check_base_class_offset(lv, (S350C2*), 0, "S350C1");
    test_class_info(&lv, &cd_S350C1);
    dp->~S350C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS350C1(Test_S350C1, "S350C1", ABISELECT(192,120));

#else // __cplusplus

extern void _ZN6S350C1C1Ev();
extern void _ZN6S350C1D1Ev();
Name_Map name_map_S350C1[] = {
  NSPAIR(_ZN6S350C1C1Ev),
  NSPAIR(_ZN6S350C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S350C6;
extern VTBL_ENTRY _ZTI6S350C6[];
extern  VTBL_ENTRY _ZTV6S350C6[];
extern Class_Descriptor cd_S350C5;
extern VTBL_ENTRY _ZTI6S350C5[];
extern  VTBL_ENTRY _ZTV6S350C5[];
extern Class_Descriptor cd_S350C4;
extern VTBL_ENTRY _ZTI6S350C4[];
extern  VTBL_ENTRY _ZTV6S350C4[];
extern Class_Descriptor cd_S350C3;
extern VTBL_ENTRY _ZTI6S350C3[];
extern  VTBL_ENTRY _ZTV6S350C3[];
extern Class_Descriptor cd_S350C2;
extern VTBL_ENTRY _ZTI6S350C2[];
extern  VTBL_ENTRY _ZTV6S350C2[];
static Base_Class bases_S350C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S350C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S350C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S350C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S350C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S350C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S350C1[];
extern void _ZN6S350C1D1Ev();
extern void _ZN6S350C1D0Ev();
extern void _ZN6S350C62v3Ev();
extern void _ZN6S350C62v4Ev();
extern void _ZN6S350C62v5Ev();
extern void _ZN6S350C52v6Ev();
extern void _ZN6S350C52v7Ev();
extern void _ZN6S350C42v8Ev();
extern void _ZN6S350C32v9Ev();
extern void _ZN6S350C33v10Ev();
extern void _ZN6S350C33v11Ev();
extern void _ZN6S350C33v12Ev();
extern void _ZN6S350C23v13Ev();
extern void _ZN6S350C23v14Ev();
extern void _ZN6S350C23v15Ev();
extern void _ZN6S350C23v16Ev();
extern void _ZN6S350C23v17Ev();
extern void _ZN6S350C23v18Ev();
extern void _ZN6S350C23v19Ev();
extern void _ZN6S350C23v20Ev();
extern void _ZN6S350C12v1Ev();
extern void _ZN6S350C12v2Ev();
static  VTBL_ENTRY vtc_S350C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S350C1[0]),
  (VTBL_ENTRY)&_ZN6S350C1D1Ev,
  (VTBL_ENTRY)&_ZN6S350C1D0Ev,
  (VTBL_ENTRY)&_ZN6S350C62v3Ev,
  (VTBL_ENTRY)&_ZN6S350C62v4Ev,
  (VTBL_ENTRY)&_ZN6S350C62v5Ev,
  (VTBL_ENTRY)&_ZN6S350C52v6Ev,
  (VTBL_ENTRY)&_ZN6S350C52v7Ev,
  (VTBL_ENTRY)&_ZN6S350C42v8Ev,
  (VTBL_ENTRY)&_ZN6S350C32v9Ev,
  (VTBL_ENTRY)&_ZN6S350C33v10Ev,
  (VTBL_ENTRY)&_ZN6S350C33v11Ev,
  (VTBL_ENTRY)&_ZN6S350C33v12Ev,
  (VTBL_ENTRY)&_ZN6S350C23v13Ev,
  (VTBL_ENTRY)&_ZN6S350C23v14Ev,
  (VTBL_ENTRY)&_ZN6S350C23v15Ev,
  (VTBL_ENTRY)&_ZN6S350C23v16Ev,
  (VTBL_ENTRY)&_ZN6S350C23v17Ev,
  (VTBL_ENTRY)&_ZN6S350C23v18Ev,
  (VTBL_ENTRY)&_ZN6S350C23v19Ev,
  (VTBL_ENTRY)&_ZN6S350C23v20Ev,
  (VTBL_ENTRY)&_ZN6S350C12v1Ev,
  (VTBL_ENTRY)&_ZN6S350C12v2Ev,
};
extern VTBL_ENTRY _ZTI6S350C1[];
extern  VTBL_ENTRY _ZTV6S350C1[];
Class_Descriptor cd_S350C1 = {  "S350C1", // class name
  bases_S350C1, 5,
  &(vtc_S350C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,120), // object size
  NSPAIRA(_ZTI6S350C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S350C1),24, //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  S19332C3  {
  virtual void  v3(); // _ZN8S19332C32v3Ev
  virtual void  v4(); // _ZN8S19332C32v4Ev
  virtual void  v5(); // _ZN8S19332C32v5Ev
  virtual void  v6(); // _ZN8S19332C32v6Ev
  virtual void  v7(); // _ZN8S19332C32v7Ev
  virtual void  v8(); // _ZN8S19332C32v8Ev
  ~S19332C3(); // tgen
  S19332C3(); // tgen
};
//SIG(-1 S19332C3) C1{ v1 v2 v3 v4 v5 v6}


void  S19332C3 ::v3(){vfunc_called(this, "_ZN8S19332C32v3Ev");}
void  S19332C3 ::v4(){vfunc_called(this, "_ZN8S19332C32v4Ev");}
void  S19332C3 ::v5(){vfunc_called(this, "_ZN8S19332C32v5Ev");}
void  S19332C3 ::v6(){vfunc_called(this, "_ZN8S19332C32v6Ev");}
void  S19332C3 ::v7(){vfunc_called(this, "_ZN8S19332C32v7Ev");}
void  S19332C3 ::v8(){vfunc_called(this, "_ZN8S19332C32v8Ev");}
S19332C3 ::~S19332C3(){ note_dtor("S19332C3", this);} // tgen
S19332C3 ::S19332C3(){ note_ctor("S19332C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19332C3C1Ev();
extern void _ZN8S19332C3D1Ev();
Name_Map name_map_S19332C3[] = {
  NSPAIR(_ZN8S19332C3C1Ev),
  NSPAIR(_ZN8S19332C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19332C3[];
extern void _ZN8S19332C32v3Ev();
extern void _ZN8S19332C32v4Ev();
extern void _ZN8S19332C32v5Ev();
extern void _ZN8S19332C32v6Ev();
extern void _ZN8S19332C32v7Ev();
extern void _ZN8S19332C32v8Ev();
static  VTBL_ENTRY vtc_S19332C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C3[0]),
  (VTBL_ENTRY)&_ZN8S19332C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v8Ev,
};
extern VTBL_ENTRY _ZTI8S19332C3[];
extern  VTBL_ENTRY _ZTV8S19332C3[];
Class_Descriptor cd_S19332C3 = {  "S19332C3", // class name
  0,0,//no base classes
  &(vtc_S19332C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19332C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19332C3),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  S19332C7  {
  void *s19332c7f0;
  long double s19332c7f1;
  int s19332c7f2;
  virtual void  v9(); // _ZN8S19332C72v9Ev
  virtual void  v10(); // _ZN8S19332C73v10Ev
  ~S19332C7(); // tgen
  S19332C7(); // tgen
};
//SIG(-1 S19332C7) C1{ v1 v2 Fp FD Fi}


void  S19332C7 ::v9(){vfunc_called(this, "_ZN8S19332C72v9Ev");}
void  S19332C7 ::v10(){vfunc_called(this, "_ZN8S19332C73v10Ev");}
S19332C7 ::~S19332C7(){ note_dtor("S19332C7", this);} // tgen
S19332C7 ::S19332C7(){ note_ctor("S19332C7", this);} // tgen

static void Test_S19332C7()
{
  extern Class_Descriptor cd_S19332C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S19332C7, buf);
    S19332C7 *dp, &lv = *(dp=new (buf) S19332C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19332C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19332C7)");
    check_field_offset(lv, s19332c7f0, ABISELECT(8,4), "S19332C7.s19332c7f0");
    check_field_offset(lv, s19332c7f1, ABISELECT(16,8), "S19332C7.s19332c7f1");
    check_field_offset(lv, s19332c7f2, ABISELECT(32,20), "S19332C7.s19332c7f2");
    test_class_info(&lv, &cd_S19332C7);
    dp->~S19332C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19332C7(Test_S19332C7, "S19332C7", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19332C7C1Ev();
extern void _ZN8S19332C7D1Ev();
Name_Map name_map_S19332C7[] = {
  NSPAIR(_ZN8S19332C7C1Ev),
  NSPAIR(_ZN8S19332C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19332C7[];
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
static  VTBL_ENTRY vtc_S19332C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C7[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
};
extern VTBL_ENTRY _ZTI8S19332C7[];
extern  VTBL_ENTRY _ZTV8S19332C7[];
Class_Descriptor cd_S19332C7 = {  "S19332C7", // class name
  0,0,//no base classes
  &(vtc_S19332C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19332C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19332C7),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  S19332C6  : S19332C7 {
  virtual void  v11(); // _ZN8S19332C63v11Ev
  virtual void  v12(); // _ZN8S19332C63v12Ev
  ~S19332C6(); // tgen
  S19332C6(); // tgen
};
//SIG(-1 S19332C6) C1{ BC2{ v3 v4 Fp FD Fi} v1 v2}


void  S19332C6 ::v11(){vfunc_called(this, "_ZN8S19332C63v11Ev");}
void  S19332C6 ::v12(){vfunc_called(this, "_ZN8S19332C63v12Ev");}
S19332C6 ::~S19332C6(){ note_dtor("S19332C6", this);} // tgen
S19332C6 ::S19332C6(){ note_ctor("S19332C6", this);} // tgen

static void Test_S19332C6()
{
  extern Class_Descriptor cd_S19332C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S19332C6, buf);
    S19332C6 *dp, &lv = *(dp=new (buf) S19332C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19332C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19332C6)");
    check_base_class_offset(lv, (S19332C7*), 0, "S19332C6");
    test_class_info(&lv, &cd_S19332C6);
    dp->~S19332C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19332C6(Test_S19332C6, "S19332C6", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19332C6C1Ev();
extern void _ZN8S19332C6D1Ev();
Name_Map name_map_S19332C6[] = {
  NSPAIR(_ZN8S19332C6C1Ev),
  NSPAIR(_ZN8S19332C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19332C7;
extern VTBL_ENTRY _ZTI8S19332C7[];
extern  VTBL_ENTRY _ZTV8S19332C7[];
static Base_Class bases_S19332C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19332C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19332C6[];
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
extern void _ZN8S19332C63v11Ev();
extern void _ZN8S19332C63v12Ev();
static  VTBL_ENTRY vtc_S19332C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C6[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v12Ev,
};
extern VTBL_ENTRY _ZTI8S19332C6[];
extern  VTBL_ENTRY _ZTV8S19332C6[];
Class_Descriptor cd_S19332C6 = {  "S19332C6", // class name
  bases_S19332C6, 1,
  &(vtc_S19332C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19332C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19332C6),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  S19332C5  : S19332C6 , S19332C7 {
  virtual void  v13(); // _ZN8S19332C53v13Ev
  virtual void  v14(); // _ZN8S19332C53v14Ev
  virtual void  v15(); // _ZN8S19332C53v15Ev
  virtual void  v16(); // _ZN8S19332C53v16Ev
  ~S19332C5(); // tgen
  S19332C5(); // tgen
};
//SIG(-1 S19332C5) C1{ BC2{ BC3{ v5 v6 Fp FD Fi} v7 v8} BC3 v1 v2 v3 v4}


void  S19332C5 ::v13(){vfunc_called(this, "_ZN8S19332C53v13Ev");}
void  S19332C5 ::v14(){vfunc_called(this, "_ZN8S19332C53v14Ev");}
void  S19332C5 ::v15(){vfunc_called(this, "_ZN8S19332C53v15Ev");}
void  S19332C5 ::v16(){vfunc_called(this, "_ZN8S19332C53v16Ev");}
S19332C5 ::~S19332C5(){ note_dtor("S19332C5", this);} // tgen
S19332C5 ::S19332C5(){ note_ctor("S19332C5", this);} // tgen

static void Test_S19332C5()
{
  extern Class_Descriptor cd_S19332C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S19332C5, buf);
    S19332C5 *dp, &lv = *(dp=new (buf) S19332C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S19332C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19332C5)");
    check_base_class_offset(lv, (S19332C7*)(S19332C6*), 0, "S19332C5");
    check_base_class_offset(lv, (S19332C6*), 0, "S19332C5");
    /*is_ambiguous_... S19332C5::S19332C7 */ AMB_check_base_class_offset(lv, (S19332C7*), ABISELECT(48,24), "S19332C5");
    test_class_info(&lv, &cd_S19332C5);
    dp->~S19332C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19332C5(Test_S19332C5, "S19332C5", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S19332C5C1Ev();
extern void _ZN8S19332C5D1Ev();
Name_Map name_map_S19332C5[] = {
  NSPAIR(_ZN8S19332C5C1Ev),
  NSPAIR(_ZN8S19332C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19332C7;
extern VTBL_ENTRY _ZTI8S19332C7[];
extern  VTBL_ENTRY _ZTV8S19332C7[];
extern Class_Descriptor cd_S19332C6;
extern VTBL_ENTRY _ZTI8S19332C6[];
extern  VTBL_ENTRY _ZTV8S19332C6[];
extern Class_Descriptor cd_S19332C7;
extern VTBL_ENTRY _ZTI8S19332C7[];
extern  VTBL_ENTRY _ZTV8S19332C7[];
static Base_Class bases_S19332C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19332C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19332C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19332C7,    ABISELECT(48,24), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19332C5[];
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
extern void _ZN8S19332C63v11Ev();
extern void _ZN8S19332C63v12Ev();
extern void _ZN8S19332C53v13Ev();
extern void _ZN8S19332C53v14Ev();
extern void _ZN8S19332C53v15Ev();
extern void _ZN8S19332C53v16Ev();
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
static  VTBL_ENTRY vtc_S19332C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C5[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v16Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19332C5[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
};
extern VTBL_ENTRY _ZTI8S19332C5[];
extern  VTBL_ENTRY _ZTV8S19332C5[];
Class_Descriptor cd_S19332C5 = {  "S19332C5", // class name
  bases_S19332C5, 3,
  &(vtc_S19332C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S19332C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19332C5),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  S19332C10  {
  ::S1400C17_nt s19332c10f0;
  void *s19332c10f1;
  virtual void  v17(); // _ZN9S19332C103v17Ev
  ~S19332C10(); // tgen
  S19332C10(); // tgen
};
//SIG(-1 S19332C10) C1{ v1 FC2{ v2 v3} Fp}


void  S19332C10 ::v17(){vfunc_called(this, "_ZN9S19332C103v17Ev");}
S19332C10 ::~S19332C10(){ note_dtor("S19332C10", this);} // tgen
S19332C10 ::S19332C10(){ note_ctor("S19332C10", this);} // tgen

static void Test_S19332C10()
{
  extern Class_Descriptor cd_S19332C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19332C10, buf);
    S19332C10 *dp, &lv = *(dp=new (buf) S19332C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19332C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19332C10)");
    check_field_offset(lv, s19332c10f0, ABISELECT(8,4), "S19332C10.s19332c10f0");
    check_field_offset(lv, s19332c10f1, ABISELECT(16,8), "S19332C10.s19332c10f1");
    test_class_info(&lv, &cd_S19332C10);
    dp->~S19332C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19332C10(Test_S19332C10, "S19332C10", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S19332C10C1Ev();
extern void _ZN9S19332C10D1Ev();
Name_Map name_map_S19332C10[] = {
  NSPAIR(_ZN9S19332C10C1Ev),
  NSPAIR(_ZN9S19332C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19332C10[];
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY vtc_S19332C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19332C10[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
extern VTBL_ENTRY _ZTI9S19332C10[];
extern  VTBL_ENTRY _ZTV9S19332C10[];
Class_Descriptor cd_S19332C10 = {  "S19332C10", // class name
  0,0,//no base classes
  &(vtc_S19332C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S19332C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19332C10),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  S19332C9  : virtual S19332C10 {
  virtual void  v18(); // _ZN8S19332C93v18Ev
  ~S19332C9(); // tgen
  S19332C9(); // tgen
};
//SIG(-1 S19332C9) C1{ VBC2{ v2 FC3{ v3 v4} Fp} v1}


void  S19332C9 ::v18(){vfunc_called(this, "_ZN8S19332C93v18Ev");}
S19332C9 ::~S19332C9(){ note_dtor("S19332C9", this);} // tgen
S19332C9 ::S19332C9(){ note_ctor("S19332C9", this);} // tgen

static void Test_S19332C9()
{
  extern Class_Descriptor cd_S19332C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19332C9, buf);
    S19332C9 *dp, &lv = *(dp=new (buf) S19332C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19332C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19332C9)");
    check_base_class_offset(lv, (S19332C10*), ABISELECT(8,4), "S19332C9");
    test_class_info(&lv, &cd_S19332C9);
    dp->~S19332C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19332C9(Test_S19332C9, "S19332C9", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19332C9C1Ev();
extern void _ZN8S19332C9D1Ev();
Name_Map name_map_S19332C9[] = {
  NSPAIR(_ZN8S19332C9C1Ev),
  NSPAIR(_ZN8S19332C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19332C10;
extern VTBL_ENTRY _ZTI9S19332C10[];
extern  VTBL_ENTRY _ZTV9S19332C10[];
static Base_Class bases_S19332C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19332C10,    ABISELECT(8,4), //bcp->offset
    4, //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 _ZTI8S19332C9[];
extern void _ZN8S19332C93v18Ev();
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY vtc_S19332C9[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C9[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19332C9[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19332C9[];
static  VTT_ENTRY vtt_S19332C9[] = {
  {&(_ZTV8S19332C9[3]),  3,8},
  {&(_ZTV8S19332C9[7]),  7,8},
};
extern VTBL_ENTRY _ZTI8S19332C9[];
extern  VTBL_ENTRY _ZTV8S19332C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C9[];
Class_Descriptor cd_S19332C9 = {  "S19332C9", // class name
  bases_S19332C9, 1,
  &(vtc_S19332C9[0]), // expected_vtbl_contents
  &(vtt_S19332C9[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19332C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19332C9),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19332C9),2, //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  S19332C8  : virtual S19332C9 {
  virtual void  v19(); // _ZN8S19332C83v19Ev
  virtual void  v20(); // _ZN8S19332C83v20Ev
  virtual void  v21(); // _ZN8S19332C83v21Ev
  ~S19332C8(); // tgen
  S19332C8(); // tgen
};
//SIG(-1 S19332C8) C1{ VBC2{ VBC3{ v4 FC4{ v6 v7} Fp} v5} v1 v2 v3}


void  S19332C8 ::v19(){vfunc_called(this, "_ZN8S19332C83v19Ev");}
void  S19332C8 ::v20(){vfunc_called(this, "_ZN8S19332C83v20Ev");}
void  S19332C8 ::v21(){vfunc_called(this, "_ZN8S19332C83v21Ev");}
S19332C8 ::~S19332C8(){ note_dtor("S19332C8", this);} // tgen
S19332C8 ::S19332C8(){ note_ctor("S19332C8", this);} // tgen

static void Test_S19332C8()
{
  extern Class_Descriptor cd_S19332C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19332C8, buf);
    S19332C8 *dp, &lv = *(dp=new (buf) S19332C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19332C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19332C8)");
    check_base_class_offset(lv, (S19332C10*)(S19332C9*), ABISELECT(8,4), "S19332C8");
    check_base_class_offset(lv, (S19332C9*), 0, "S19332C8");
    test_class_info(&lv, &cd_S19332C8);
    dp->~S19332C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19332C8(Test_S19332C8, "S19332C8", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19332C8C1Ev();
extern void _ZN8S19332C8D1Ev();
Name_Map name_map_S19332C8[] = {
  NSPAIR(_ZN8S19332C8C1Ev),
  NSPAIR(_ZN8S19332C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19332C10;
extern VTBL_ENTRY _ZTI9S19332C10[];
extern  VTBL_ENTRY _ZTV9S19332C10[];
extern Class_Descriptor cd_S19332C9;
extern VTBL_ENTRY _ZTI8S19332C9[];
extern  VTBL_ENTRY _ZTV8S19332C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C9[];
static Base_Class bases_S19332C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19332C10,    ABISELECT(8,4), //bcp->offset
    9, //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
    1, //immediately_derived
  0, 1},
  {&cd_S19332C9,    0, //bcp->offset
    -1, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S19332C8[];
extern void _ZN8S19332C93v18Ev();
extern void _ZN8S19332C83v19Ev();
extern void _ZN8S19332C83v20Ev();
extern void _ZN8S19332C83v21Ev();
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY vtc_S19332C8[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C8[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v21Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19332C8[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19332C8[];
extern void _ZN8S19332C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C9__8S19332C8[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C9[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
};
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19332C10__8S19332C9__8S19332C8[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19332C9[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
static  VTT_ENTRY vtt_S19332C8[] = {
  {&(_ZTV8S19332C8[5]),  5,13},
  {&(_ZTV8S19332C8[5]),  5,13},
  {&(_ZTV8S19332C8[12]),  12,13},
  {&(_tg__ZTV8S19332C9__8S19332C8[3]),  3,4},
  {&(_tg__ZTV9S19332C10__8S19332C9__8S19332C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19332C8[];
extern  VTBL_ENTRY _ZTV8S19332C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C8[];
Class_Descriptor cd_S19332C8 = {  "S19332C8", // class name
  bases_S19332C8, 2,
  &(vtc_S19332C8[0]), // expected_vtbl_contents
  &(vtt_S19332C8[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19332C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19332C8),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19332C8),5, //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  S19332C4  : S19332C5 , virtual S19332C8 {
  virtual void  v22(); // _ZN8S19332C43v22Ev
  virtual void  v23(); // _ZN8S19332C43v23Ev
  virtual void  v24(); // _ZN8S19332C43v24Ev
  ~S19332C4(); // tgen
  S19332C4(); // tgen
};
//SIG(-1 S19332C4) C1{ BC2{ BC3{ BC4{ v4 v5 Fp FD Fi} v6 v7} BC4 v8 v9 v10 v11} VBC5{ VBC6{ VBC7{ v12 FC8{ v17 v18} Fp} v13} v14 v15 v16} v1 v2 v3}


void  S19332C4 ::v22(){vfunc_called(this, "_ZN8S19332C43v22Ev");}
void  S19332C4 ::v23(){vfunc_called(this, "_ZN8S19332C43v23Ev");}
void  S19332C4 ::v24(){vfunc_called(this, "_ZN8S19332C43v24Ev");}
S19332C4 ::~S19332C4(){ note_dtor("S19332C4", this);} // tgen
S19332C4 ::S19332C4(){ note_ctor("S19332C4", this);} // tgen

static void Test_S19332C4()
{
  extern Class_Descriptor cd_S19332C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,17)];
    init_test(&cd_S19332C4, buf);
    S19332C4 *dp, &lv = *(dp=new (buf) S19332C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S19332C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19332C4)");
    check_base_class_offset(lv, (S19332C7*)(S19332C6*)(S19332C5*), 0, "S19332C4");
    check_base_class_offset(lv, (S19332C6*)(S19332C5*), 0, "S19332C4");
    /*is_ambiguous_... S19332C5::S19332C7 */ AMB_check_base_class_offset(lv, (S19332C7*)(S19332C5*), ABISELECT(48,24), "S19332C4");
    check_base_class_offset(lv, (S19332C5*), 0, "S19332C4");
    check_base_class_offset(lv, (S19332C10*)(S19332C9*), ABISELECT(96,52), "S19332C4");
    check_base_class_offset(lv, (S19332C9*)(S19332C8*), ABISELECT(88,48), "S19332C4");
    check_base_class_offset(lv, (S19332C8*), ABISELECT(88,48), "S19332C4");
    test_class_info(&lv, &cd_S19332C4);
    dp->~S19332C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19332C4(Test_S19332C4, "S19332C4", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S19332C4C1Ev();
extern void _ZN8S19332C4D1Ev();
Name_Map name_map_S19332C4[] = {
  NSPAIR(_ZN8S19332C4C1Ev),
  NSPAIR(_ZN8S19332C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19332C7;
extern VTBL_ENTRY _ZTI8S19332C7[];
extern  VTBL_ENTRY _ZTV8S19332C7[];
extern Class_Descriptor cd_S19332C6;
extern VTBL_ENTRY _ZTI8S19332C6[];
extern  VTBL_ENTRY _ZTV8S19332C6[];
extern Class_Descriptor cd_S19332C7;
extern VTBL_ENTRY _ZTI8S19332C7[];
extern  VTBL_ENTRY _ZTV8S19332C7[];
extern Class_Descriptor cd_S19332C5;
extern VTBL_ENTRY _ZTI8S19332C5[];
extern  VTBL_ENTRY _ZTV8S19332C5[];
extern Class_Descriptor cd_S19332C10;
extern VTBL_ENTRY _ZTI9S19332C10[];
extern  VTBL_ENTRY _ZTV9S19332C10[];
extern Class_Descriptor cd_S19332C9;
extern VTBL_ENTRY _ZTI8S19332C9[];
extern  VTBL_ENTRY _ZTV8S19332C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C9[];
extern Class_Descriptor cd_S19332C8;
extern VTBL_ENTRY _ZTI8S19332C8[];
extern  VTBL_ENTRY _ZTV8S19332C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C8[];
static Base_Class bases_S19332C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19332C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S19332C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19332C7,    ABISELECT(48,24), //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
    6, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19332C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19332C10,    ABISELECT(96,52), //bcp->offset
    32, //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
    5, //immediately_derived
  0, 1},
  {&cd_S19332C9,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19332C8,    ABISELECT(88,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    8, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S19332C4[];
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
extern void _ZN8S19332C63v11Ev();
extern void _ZN8S19332C63v12Ev();
extern void _ZN8S19332C53v13Ev();
extern void _ZN8S19332C53v14Ev();
extern void _ZN8S19332C53v15Ev();
extern void _ZN8S19332C53v16Ev();
extern void _ZN8S19332C43v22Ev();
extern void _ZN8S19332C43v23Ev();
extern void _ZN8S19332C43v24Ev();
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
extern void _ZN8S19332C93v18Ev();
extern void _ZN8S19332C83v19Ev();
extern void _ZN8S19332C83v20Ev();
extern void _ZN8S19332C83v21Ev();
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY vtc_S19332C4[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C4[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v24Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19332C4[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19332C4[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v21Ev,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19332C4[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19332C4[];
extern void _ZN8S19332C93v18Ev();
extern void _ZN8S19332C83v19Ev();
extern void _ZN8S19332C83v20Ev();
extern void _ZN8S19332C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C8__8S19332C4[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C8[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v21Ev,
};
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19332C10__8S19332C8__8S19332C4[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19332C8[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
extern void _ZN8S19332C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C9__8S19332C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C9[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
};
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19332C10__8S19332C9__8S19332C4[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19332C9[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
static  VTT_ENTRY vtt_S19332C4[] = {
  {&(_ZTV8S19332C4[5]),  5,36},
  {&(_ZTV8S19332C4[28]),  28,36},
  {&(_ZTV8S19332C4[28]),  28,36},
  {&(_ZTV8S19332C4[35]),  35,36},
  {&(_tg__ZTV8S19332C8__8S19332C4[5]),  5,9},
  {&(_tg__ZTV8S19332C8__8S19332C4[5]),  5,9},
  {&(_tg__ZTV9S19332C10__8S19332C8__8S19332C4[3]),  3,4},
  {&(_tg__ZTV8S19332C9__8S19332C4[3]),  3,4},
  {&(_tg__ZTV9S19332C10__8S19332C9__8S19332C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19332C4[];
extern  VTBL_ENTRY _ZTV8S19332C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C4[];
Class_Descriptor cd_S19332C4 = {  "S19332C4", // class name
  bases_S19332C4, 7,
  &(vtc_S19332C4[0]), // expected_vtbl_contents
  &(vtt_S19332C4[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S19332C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19332C4),36, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19332C4),9, //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  S19332C2  : S19332C3 , virtual S19332C4 {
  void *s19332c2f0;
  __tsi64 s19332c2f1:5;
  virtual  ~S19332C2(); // _ZN8S19332C2D2Ev
  virtual void  v25(); // _ZN8S19332C23v25Ev
  S19332C2(); // tgen
};
//SIG(-1 S19332C2) C1{ BC2{ v2 v3 v4 v5 v6 v7} VBC3{ BC4{ BC5{ BC6{ v8 v9 Fp FD Fi} v10 v11} BC6 v12 v13 v14 v15} VBC7{ VBC8{ VBC9{ v16 FC10{ v24 v25} Fp} v17} v18 v19 v20} v21 v22 v23} vd v1 Fp FL:5}


 S19332C2 ::~S19332C2(){ note_dtor("S19332C2", this);}
void  S19332C2 ::v25(){vfunc_called(this, "_ZN8S19332C23v25Ev");}
S19332C2 ::S19332C2(){ note_ctor("S19332C2", this);} // tgen

static void Test_S19332C2()
{
  extern Class_Descriptor cd_S19332C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,20)];
    init_test(&cd_S19332C2, buf);
    S19332C2 *dp, &lv = *(dp=new (buf) S19332C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,76), "sizeof(S19332C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19332C2)");
    check_base_class_offset(lv, (S19332C3*), 0, "S19332C2");
    check_base_class_offset(lv, (S19332C7*)(S19332C6*)(S19332C5*)(S19332C4*), ABISELECT(32,12), "S19332C2");
    check_base_class_offset(lv, (S19332C6*)(S19332C5*)(S19332C4*), ABISELECT(32,12), "S19332C2");
    /*is_ambiguous_... S19332C5::S19332C7 */ AMB_check_base_class_offset(lv, (S19332C7*)(S19332C5*)(S19332C4*), ABISELECT(80,36), "S19332C2");
    check_base_class_offset(lv, (S19332C5*)(S19332C4*), ABISELECT(32,12), "S19332C2");
    check_base_class_offset(lv, (S19332C10*)(S19332C9*), ABISELECT(128,64), "S19332C2");
    check_base_class_offset(lv, (S19332C9*)(S19332C8*), ABISELECT(120,60), "S19332C2");
    check_base_class_offset(lv, (S19332C8*)(S19332C4*), ABISELECT(120,60), "S19332C2");
    check_base_class_offset(lv, (S19332C4*), ABISELECT(32,12), "S19332C2");
    check_field_offset(lv, s19332c2f0, ABISELECT(8,4), "S19332C2.s19332c2f0");
    set_bf_and_test(lv, s19332c2f1, ABISELECT(16,8), 0, 5, 1, "S19332C2");
    set_bf_and_test(lv, s19332c2f1, ABISELECT(16,8), 0, 5, hide_sll(1LL<<4), "S19332C2");
    test_class_info(&lv, &cd_S19332C2);
    dp->~S19332C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19332C2(Test_S19332C2, "S19332C2", ABISELECT(160,76));

#else // __cplusplus

extern void _ZN8S19332C2C1Ev();
extern void _ZN8S19332C2D2Ev();
Name_Map name_map_S19332C2[] = {
  NSPAIR(_ZN8S19332C2C1Ev),
  NSPAIR(_ZN8S19332C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19332C3;
extern VTBL_ENTRY _ZTI8S19332C3[];
extern  VTBL_ENTRY _ZTV8S19332C3[];
extern Class_Descriptor cd_S19332C7;
extern VTBL_ENTRY _ZTI8S19332C7[];
extern  VTBL_ENTRY _ZTV8S19332C7[];
extern Class_Descriptor cd_S19332C6;
extern VTBL_ENTRY _ZTI8S19332C6[];
extern  VTBL_ENTRY _ZTV8S19332C6[];
extern Class_Descriptor cd_S19332C7;
extern VTBL_ENTRY _ZTI8S19332C7[];
extern  VTBL_ENTRY _ZTV8S19332C7[];
extern Class_Descriptor cd_S19332C5;
extern VTBL_ENTRY _ZTI8S19332C5[];
extern  VTBL_ENTRY _ZTV8S19332C5[];
extern Class_Descriptor cd_S19332C10;
extern VTBL_ENTRY _ZTI9S19332C10[];
extern  VTBL_ENTRY _ZTV9S19332C10[];
extern Class_Descriptor cd_S19332C9;
extern VTBL_ENTRY _ZTI8S19332C9[];
extern  VTBL_ENTRY _ZTV8S19332C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C9[];
extern Class_Descriptor cd_S19332C8;
extern VTBL_ENTRY _ZTI8S19332C8[];
extern  VTBL_ENTRY _ZTV8S19332C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C8[];
extern Class_Descriptor cd_S19332C4;
extern VTBL_ENTRY _ZTI8S19332C4[];
extern  VTBL_ENTRY _ZTV8S19332C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C4[];
static Base_Class bases_S19332C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19332C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19332C7,    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
    4, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19332C6,    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
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19332C7,    ABISELECT(80,36), //bcp->offset
    42, //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
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19332C5,    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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19332C10,    ABISELECT(128,64), //bcp->offset
    58, //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
    6, //immediately_derived
  0, 1},
  {&cd_S19332C9,    ABISELECT(120,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19332C8,    ABISELECT(120,60), //bcp->offset
    46, //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
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19332C4,    ABISELECT(32,12), //bcp->offset
    15, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19332C2[];
extern void _ZN8S19332C32v3Ev();
extern void _ZN8S19332C32v4Ev();
extern void _ZN8S19332C32v5Ev();
extern void _ZN8S19332C32v6Ev();
extern void _ZN8S19332C32v7Ev();
extern void _ZN8S19332C32v8Ev();
extern void _ZN8S19332C2D1Ev();
extern void _ZN8S19332C2D0Ev();
extern void _ZN8S19332C23v25Ev();
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
extern void _ZN8S19332C63v11Ev();
extern void _ZN8S19332C63v12Ev();
extern void _ZN8S19332C53v13Ev();
extern void _ZN8S19332C53v14Ev();
extern void _ZN8S19332C53v15Ev();
extern void _ZN8S19332C53v16Ev();
extern void _ZN8S19332C43v22Ev();
extern void _ZN8S19332C43v23Ev();
extern void _ZN8S19332C43v24Ev();
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
extern void _ZN8S19332C93v18Ev();
extern void _ZN8S19332C83v19Ev();
extern void _ZN8S19332C83v20Ev();
extern void _ZN8S19332C83v21Ev();
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY vtc_S19332C2[] = {
  ABISELECT(128,64),
  ABISELECT(120,60),
  ABISELECT(120,60),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C2[0]),
  (VTBL_ENTRY)&_ZN8S19332C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19332C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19332C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19332C23v25Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S19332C2[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v24Ev,
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI8S19332C2[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S19332C2[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v21Ev,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI8S19332C2[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19332C2[];
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
extern void _ZN8S19332C63v11Ev();
extern void _ZN8S19332C63v12Ev();
extern void _ZN8S19332C53v13Ev();
extern void _ZN8S19332C53v14Ev();
extern void _ZN8S19332C53v15Ev();
extern void _ZN8S19332C53v16Ev();
extern void _ZN8S19332C43v22Ev();
extern void _ZN8S19332C43v23Ev();
extern void _ZN8S19332C43v24Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C4__8S19332C2[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C4[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v24Ev,
};
extern void _ZN8S19332C93v18Ev();
extern void _ZN8S19332C83v19Ev();
extern void _ZN8S19332C83v20Ev();
extern void _ZN8S19332C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C8__8S19332C4__8S19332C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19332C4[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v21Ev,
};
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19332C10__8S19332C4__8S19332C2[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19332C4[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
extern void _ZN8S19332C93v18Ev();
extern void _ZN8S19332C83v19Ev();
extern void _ZN8S19332C83v20Ev();
extern void _ZN8S19332C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C8__8S19332C2[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C8[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v21Ev,
};
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19332C10__8S19332C8__8S19332C2[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19332C8[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
extern void _ZN8S19332C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C9__8S19332C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C9[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
};
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19332C10__8S19332C9__8S19332C2[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19332C9[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
static  VTT_ENTRY vtt_S19332C2[] = {
  {&(_ZTV8S19332C2[6]),  6,62},
  {&(_ZTV8S19332C2[31]),  31,62},
  {&(_ZTV8S19332C2[44]),  44,62},
  {&(_ZTV8S19332C2[54]),  54,62},
  {&(_ZTV8S19332C2[54]),  54,62},
  {&(_ZTV8S19332C2[61]),  61,62},
  {&(_tg__ZTV8S19332C4__8S19332C2[5]),  5,16},
  {&(_tg__ZTV8S19332C8__8S19332C4__8S19332C2[8]),  8,12},
  {&(_tg__ZTV8S19332C8__8S19332C4__8S19332C2[8]),  8,12},
  {&(_tg__ZTV9S19332C10__8S19332C4__8S19332C2[3]),  3,4},
  {&(_tg__ZTV8S19332C8__8S19332C2[5]),  5,9},
  {&(_tg__ZTV8S19332C8__8S19332C2[5]),  5,9},
  {&(_tg__ZTV9S19332C10__8S19332C8__8S19332C2[3]),  3,4},
  {&(_tg__ZTV8S19332C9__8S19332C2[3]),  3,4},
  {&(_tg__ZTV9S19332C10__8S19332C9__8S19332C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19332C2[];
extern  VTBL_ENTRY _ZTV8S19332C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C2[];
Class_Descriptor cd_S19332C2 = {  "S19332C2", // class name
  bases_S19332C2, 9,
  &(vtc_S19332C2[0]), // expected_vtbl_contents
  &(vtt_S19332C2[0]), // expected_vtt_contents
  ABISELECT(160,76), // object size
  NSPAIRA(_ZTI8S19332C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19332C2),62, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19332C2),15, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19332C12  {
  void *s19332c12f0[8];
  virtual void  v26(); // _ZN9S19332C123v26Ev
  ~S19332C12(); // tgen
  S19332C12(); // tgen
};
//SIG(-1 S19332C12) C1{ v1 Fp[8]}


void  S19332C12 ::v26(){vfunc_called(this, "_ZN9S19332C123v26Ev");}
S19332C12 ::~S19332C12(){ note_dtor("S19332C12", this);} // tgen
S19332C12 ::S19332C12(){ note_ctor("S19332C12", this);} // tgen

static void Test_S19332C12()
{
  extern Class_Descriptor cd_S19332C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S19332C12, buf);
    S19332C12 *dp, &lv = *(dp=new (buf) S19332C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S19332C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19332C12)");
    check_field_offset(lv, s19332c12f0, ABISELECT(8,4), "S19332C12.s19332c12f0");
    test_class_info(&lv, &cd_S19332C12);
    dp->~S19332C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19332C12(Test_S19332C12, "S19332C12", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN9S19332C12C1Ev();
extern void _ZN9S19332C12D1Ev();
Name_Map name_map_S19332C12[] = {
  NSPAIR(_ZN9S19332C12C1Ev),
  NSPAIR(_ZN9S19332C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19332C12[];
extern void _ZN9S19332C123v26Ev();
static  VTBL_ENTRY vtc_S19332C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19332C12[0]),
  (VTBL_ENTRY)&_ZN9S19332C123v26Ev,
};
extern VTBL_ENTRY _ZTI9S19332C12[];
extern  VTBL_ENTRY _ZTV9S19332C12[];
Class_Descriptor cd_S19332C12 = {  "S19332C12", // class name
  0,0,//no base classes
  &(vtc_S19332C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI9S19332C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19332C12),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19332C1  : virtual S19332C2 , S19332C12 {
  virtual  ~S19332C1(); // _ZN8S19332C1D2Ev
  virtual void  v1(); // _ZN8S19332C12v1Ev
  virtual void  v2(); // _ZN8S19332C12v2Ev
  S19332C1(); // tgen
};
//SIG(1 S19332C1) C1{ VBC2{ BC3{ v3 v4 v5 v6 v7 v8} VBC4{ BC5{ BC6{ BC7{ v9 v10 Fp FD Fi} v11 v12} BC7 v13 v14 v15 v16} VBC8{ VBC9{ VBC10{ v17 FC11{ v27 v28} Fp} v18} v19 v20 v21} v22 v23 v24} vd v25 Fp FL:5} BC12{ v26 Fp[8]} vd v1 v2}


 S19332C1 ::~S19332C1(){ note_dtor("S19332C1", this);}
void  S19332C1 ::v1(){vfunc_called(this, "_ZN8S19332C12v1Ev");}
void  S19332C1 ::v2(){vfunc_called(this, "_ZN8S19332C12v2Ev");}
S19332C1 ::S19332C1(){ note_ctor("S19332C1", this);} // tgen

static void Test_S19332C1()
{
  extern Class_Descriptor cd_S19332C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,29)];
    init_test(&cd_S19332C1, buf);
    S19332C1 *dp, &lv = *(dp=new (buf) S19332C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,112), "sizeof(S19332C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19332C1)");
    check_base_class_offset(lv, (S19332C3*)(S19332C2*), ABISELECT(72,36), "S19332C1");
    check_base_class_offset(lv, (S19332C7*)(S19332C6*)(S19332C5*)(S19332C4*), ABISELECT(96,48), "S19332C1");
    check_base_class_offset(lv, (S19332C6*)(S19332C5*)(S19332C4*), ABISELECT(96,48), "S19332C1");
    /*is_ambiguous_... S19332C5::S19332C7 */ AMB_check_base_class_offset(lv, (S19332C7*)(S19332C5*)(S19332C4*), ABISELECT(144,72), "S19332C1");
    check_base_class_offset(lv, (S19332C5*)(S19332C4*), ABISELECT(96,48), "S19332C1");
    check_base_class_offset(lv, (S19332C10*)(S19332C9*), ABISELECT(192,100), "S19332C1");
    check_base_class_offset(lv, (S19332C9*)(S19332C8*), ABISELECT(184,96), "S19332C1");
    check_base_class_offset(lv, (S19332C8*)(S19332C4*), ABISELECT(184,96), "S19332C1");
    check_base_class_offset(lv, (S19332C4*)(S19332C2*), ABISELECT(96,48), "S19332C1");
    check_base_class_offset(lv, (S19332C2*), ABISELECT(72,36), "S19332C1");
    check_base_class_offset(lv, (S19332C12*), 0, "S19332C1");
    test_class_info(&lv, &cd_S19332C1);
    dp->~S19332C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19332C1(Test_S19332C1, "S19332C1", ABISELECT(224,112));

#else // __cplusplus

extern void _ZN8S19332C1C1Ev();
extern void _ZN8S19332C1D2Ev();
Name_Map name_map_S19332C1[] = {
  NSPAIR(_ZN8S19332C1C1Ev),
  NSPAIR(_ZN8S19332C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19332C3;
extern VTBL_ENTRY _ZTI8S19332C3[];
extern  VTBL_ENTRY _ZTV8S19332C3[];
extern Class_Descriptor cd_S19332C7;
extern VTBL_ENTRY _ZTI8S19332C7[];
extern  VTBL_ENTRY _ZTV8S19332C7[];
extern Class_Descriptor cd_S19332C6;
extern VTBL_ENTRY _ZTI8S19332C6[];
extern  VTBL_ENTRY _ZTV8S19332C6[];
extern Class_Descriptor cd_S19332C7;
extern VTBL_ENTRY _ZTI8S19332C7[];
extern  VTBL_ENTRY _ZTV8S19332C7[];
extern Class_Descriptor cd_S19332C5;
extern VTBL_ENTRY _ZTI8S19332C5[];
extern  VTBL_ENTRY _ZTV8S19332C5[];
extern Class_Descriptor cd_S19332C10;
extern VTBL_ENTRY _ZTI9S19332C10[];
extern  VTBL_ENTRY _ZTV9S19332C10[];
extern Class_Descriptor cd_S19332C9;
extern VTBL_ENTRY _ZTI8S19332C9[];
extern  VTBL_ENTRY _ZTV8S19332C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C9[];
extern Class_Descriptor cd_S19332C8;
extern VTBL_ENTRY _ZTI8S19332C8[];
extern  VTBL_ENTRY _ZTV8S19332C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C8[];
extern Class_Descriptor cd_S19332C4;
extern VTBL_ENTRY _ZTI8S19332C4[];
extern  VTBL_ENTRY _ZTV8S19332C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C4[];
extern Class_Descriptor cd_S19332C2;
extern VTBL_ENTRY _ZTI8S19332C2[];
extern  VTBL_ENTRY _ZTV8S19332C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C2[];
extern Class_Descriptor cd_S19332C12;
extern VTBL_ENTRY _ZTI9S19332C12[];
extern  VTBL_ENTRY _ZTV9S19332C12[];
static Base_Class bases_S19332C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19332C3,    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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19332C7,    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
    4, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19332C6,    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
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19332C7,    ABISELECT(144,72), //bcp->offset
    62, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19332C5,    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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19332C10,    ABISELECT(192,100), //bcp->offset
    78, //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
    6, //immediately_derived
  0, 1},
  {&cd_S19332C9,    ABISELECT(184,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19332C8,    ABISELECT(184,96), //bcp->offset
    66, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19332C4,    ABISELECT(96,48), //bcp->offset
    35, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19332C2,    ABISELECT(72,36), //bcp->offset
    12, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19332C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {0}};
extern VTBL_ENTRY _ZTI8S19332C1[];
extern void _ZN9S19332C123v26Ev();
extern void _ZN8S19332C1D1Ev();
extern void _ZN8S19332C1D0Ev();
extern void _ZN8S19332C12v1Ev();
extern void _ZN8S19332C12v2Ev();
extern void _ZN8S19332C32v3Ev();
extern void _ZN8S19332C32v4Ev();
extern void _ZN8S19332C32v5Ev();
extern void _ZN8S19332C32v6Ev();
extern void _ZN8S19332C32v7Ev();
extern void _ZN8S19332C32v8Ev();
extern void ABISELECT(_ZTv0_n104_N8S19332C1D1Ev,_ZTv0_n52_N8S19332C1D1Ev)();
extern void ABISELECT(_ZThn72_N8S19332C1D1Ev,_ZThn36_N8S19332C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S19332C1D0Ev,_ZTv0_n52_N8S19332C1D0Ev)();
extern void ABISELECT(_ZThn72_N8S19332C1D0Ev,_ZThn36_N8S19332C1D0Ev)() __attribute__((weak));
extern void _ZN8S19332C23v25Ev();
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
extern void _ZN8S19332C63v11Ev();
extern void _ZN8S19332C63v12Ev();
extern void _ZN8S19332C53v13Ev();
extern void _ZN8S19332C53v14Ev();
extern void _ZN8S19332C53v15Ev();
extern void _ZN8S19332C53v16Ev();
extern void _ZN8S19332C43v22Ev();
extern void _ZN8S19332C43v23Ev();
extern void _ZN8S19332C43v24Ev();
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
extern void _ZN8S19332C93v18Ev();
extern void _ZN8S19332C83v19Ev();
extern void _ZN8S19332C83v20Ev();
extern void _ZN8S19332C83v21Ev();
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY vtc_S19332C1[] = {
  ABISELECT(192,100),
  ABISELECT(184,96),
  ABISELECT(184,96),
  ABISELECT(96,48),
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C1[0]),
  (VTBL_ENTRY)&_ZN9S19332C123v26Ev,
  (VTBL_ENTRY)&_ZN8S19332C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19332C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19332C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19332C12v2Ev,
  0,
  ABISELECT(-72,-36),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,64),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(24,12),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S19332C1[0]),
  (VTBL_ENTRY)&_ZN8S19332C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19332C1D1Ev,_ZTv0_n52_N8S19332C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19332C1D0Ev,_ZTv0_n52_N8S19332C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19332C23v25Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S19332C1[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v24Ev,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI8S19332C1[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-184,-96),
  (VTBL_ENTRY)&(_ZTI8S19332C1[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v21Ev,
  0,
  ABISELECT(-192,-100),
  (VTBL_ENTRY)&(_ZTI8S19332C1[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19332C1[];
extern void _ZN8S19332C32v3Ev();
extern void _ZN8S19332C32v4Ev();
extern void _ZN8S19332C32v5Ev();
extern void _ZN8S19332C32v6Ev();
extern void _ZN8S19332C32v7Ev();
extern void _ZN8S19332C32v8Ev();
extern void _ZN8S19332C2D1Ev();
extern void _ZN8S19332C2D0Ev();
extern void _ZN8S19332C23v25Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C2__8S19332C1[] = {
  ABISELECT(120,64),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C2[0]),
  (VTBL_ENTRY)&_ZN8S19332C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19332C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19332C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19332C23v25Ev,
};
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
extern void _ZN8S19332C63v11Ev();
extern void _ZN8S19332C63v12Ev();
extern void _ZN8S19332C53v13Ev();
extern void _ZN8S19332C53v14Ev();
extern void _ZN8S19332C53v15Ev();
extern void _ZN8S19332C53v16Ev();
extern void _ZN8S19332C43v22Ev();
extern void _ZN8S19332C43v23Ev();
extern void _ZN8S19332C43v24Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C4__8S19332C2__8S19332C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19332C2[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v24Ev,
};
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C78S19332C58S19332C4__A1__8S19332C2__8S19332C1[] = {
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S19332C2[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
};
extern void _ZN8S19332C93v18Ev();
extern void _ZN8S19332C83v19Ev();
extern void _ZN8S19332C83v20Ev();
extern void _ZN8S19332C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C8__8S19332C2__8S19332C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S19332C2[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v21Ev,
};
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19332C10__8S19332C2__8S19332C1[] = {
  0,
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI8S19332C2[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
extern void _ZN8S19332C63v11Ev();
extern void _ZN8S19332C63v12Ev();
extern void _ZN8S19332C53v13Ev();
extern void _ZN8S19332C53v14Ev();
extern void _ZN8S19332C53v15Ev();
extern void _ZN8S19332C53v16Ev();
extern void _ZN8S19332C43v22Ev();
extern void _ZN8S19332C43v23Ev();
extern void _ZN8S19332C43v24Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C4__8S19332C1[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C4[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v24Ev,
};
extern void _ZN8S19332C93v18Ev();
extern void _ZN8S19332C83v19Ev();
extern void _ZN8S19332C83v20Ev();
extern void _ZN8S19332C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C8__8S19332C4__8S19332C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19332C4[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v21Ev,
};
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19332C10__8S19332C4__8S19332C1[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19332C4[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
extern void _ZN8S19332C93v18Ev();
extern void _ZN8S19332C83v19Ev();
extern void _ZN8S19332C83v20Ev();
extern void _ZN8S19332C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C8__8S19332C1[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C8[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v21Ev,
};
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19332C10__8S19332C8__8S19332C1[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19332C8[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
extern void _ZN8S19332C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C9__8S19332C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C9[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
};
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19332C10__8S19332C9__8S19332C1[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19332C9[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
static  VTT_ENTRY vtt_S19332C1[] = {
  {&(_ZTV8S19332C1[7]),  7,82},
  {&(_ZTV8S19332C1[26]),  26,82},
  {&(_ZTV8S19332C1[51]),  51,82},
  {&(_ZTV8S19332C1[64]),  64,82},
  {&(_ZTV8S19332C1[74]),  74,82},
  {&(_ZTV8S19332C1[74]),  74,82},
  {&(_ZTV8S19332C1[81]),  81,82},
  {&(_tg__ZTV8S19332C2__8S19332C1[6]),  6,15},
  {&(_tg__ZTV8S19332C4__8S19332C2__8S19332C1[16]),  16,27},
  {&(_tg__ZTV8S19332C78S19332C58S19332C4__A1__8S19332C2__8S19332C1[2]),  2,4},
  {&(_tg__ZTV8S19332C8__8S19332C2__8S19332C1[8]),  8,12},
  {&(_tg__ZTV8S19332C8__8S19332C2__8S19332C1[8]),  8,12},
  {&(_tg__ZTV9S19332C10__8S19332C2__8S19332C1[3]),  3,4},
  {&(_tg__ZTV8S19332C4__8S19332C1[5]),  5,16},
  {&(_tg__ZTV8S19332C8__8S19332C4__8S19332C1[8]),  8,12},
  {&(_tg__ZTV8S19332C8__8S19332C4__8S19332C1[8]),  8,12},
  {&(_tg__ZTV9S19332C10__8S19332C4__8S19332C1[3]),  3,4},
  {&(_tg__ZTV8S19332C8__8S19332C1[5]),  5,9},
  {&(_tg__ZTV8S19332C8__8S19332C1[5]),  5,9},
  {&(_tg__ZTV9S19332C10__8S19332C8__8S19332C1[3]),  3,4},
  {&(_tg__ZTV8S19332C9__8S19332C1[3]),  3,4},
  {&(_tg__ZTV9S19332C10__8S19332C9__8S19332C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19332C1[];
extern  VTBL_ENTRY _ZTV8S19332C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C1[];
static VTBL_ENTRY alt_thunk_names50[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19332C1D0Ev,_ZTv0_n52_N8S19332C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19332C1D0Ev,_ZThn36_N8S19332C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19332C1D1Ev,_ZTv0_n52_N8S19332C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19332C1D1Ev,_ZThn36_N8S19332C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19332C1 = {  "S19332C1", // class name
  bases_S19332C1, 11,
  &(vtc_S19332C1[0]), // expected_vtbl_contents
  &(vtt_S19332C1[0]), // expected_vtt_contents
  ABISELECT(224,112), // object size
  NSPAIRA(_ZTI8S19332C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19332C1),82, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19332C1),22, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names50,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S370C6  {
  ::S4473C12_nt s370c6f0;
  int s370c6f1[2];
  char s370c6f2;
  virtual  ~S370C6(); // _ZN6S370C6D1Ev
  virtual void  v4(); // _ZN6S370C62v4Ev
  virtual void  v5(); // _ZN6S370C62v5Ev
  virtual void  v6(); // _ZN6S370C62v6Ev
  S370C6(); // tgen
};
//SIG(-1 S370C6) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S370C6 ::~S370C6(){ note_dtor("S370C6", this);}
void  S370C6 ::v4(){vfunc_called(this, "_ZN6S370C62v4Ev");}
void  S370C6 ::v5(){vfunc_called(this, "_ZN6S370C62v5Ev");}
void  S370C6 ::v6(){vfunc_called(this, "_ZN6S370C62v6Ev");}
S370C6 ::S370C6(){ note_ctor("S370C6", this);} // tgen

static void Test_S370C6()
{
  extern Class_Descriptor cd_S370C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S370C6, buf);
    S370C6 *dp, &lv = *(dp=new (buf) S370C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S370C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S370C6)");
    check_field_offset(lv, s370c6f0, ABISELECT(8,4), "S370C6.s370c6f0");
    check_field_offset(lv, s370c6f1, ABISELECT(24,16), "S370C6.s370c6f1");
    check_field_offset(lv, s370c6f2, ABISELECT(32,24), "S370C6.s370c6f2");
    test_class_info(&lv, &cd_S370C6);
    dp->~S370C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS370C6(Test_S370C6, "S370C6", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN6S370C6C1Ev();
extern void _ZN6S370C6D1Ev();
Name_Map name_map_S370C6[] = {
  NSPAIR(_ZN6S370C6C1Ev),
  NSPAIR(_ZN6S370C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S370C6[];
extern void _ZN6S370C6D1Ev();
extern void _ZN6S370C6D0Ev();
extern void _ZN6S370C62v4Ev();
extern void _ZN6S370C62v5Ev();
extern void _ZN6S370C62v6Ev();
static  VTBL_ENTRY vtc_S370C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S370C6[0]),
  (VTBL_ENTRY)&_ZN6S370C6D1Ev,
  (VTBL_ENTRY)&_ZN6S370C6D0Ev,
  (VTBL_ENTRY)&_ZN6S370C62v4Ev,
  (VTBL_ENTRY)&_ZN6S370C62v5Ev,
  (VTBL_ENTRY)&_ZN6S370C62v6Ev,
};
extern VTBL_ENTRY _ZTI6S370C6[];
extern  VTBL_ENTRY _ZTV6S370C6[];
Class_Descriptor cd_S370C6 = {  "S370C6", // class name
  0,0,//no base classes
  &(vtc_S370C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI6S370C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S370C6),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  S370C5  : S370C6 {
  void *s370c5f0;
  virtual void  v7(); // _ZN6S370C52v7Ev
  virtual void  v8(); // _ZN6S370C52v8Ev
  ~S370C5(); // tgen
  S370C5(); // tgen
};
//SIG(-1 S370C5) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S370C5 ::v7(){vfunc_called(this, "_ZN6S370C52v7Ev");}
void  S370C5 ::v8(){vfunc_called(this, "_ZN6S370C52v8Ev");}
S370C5 ::~S370C5(){ note_dtor("S370C5", this);} // tgen
S370C5 ::S370C5(){ note_ctor("S370C5", this);} // tgen

static void Test_S370C5()
{
  extern Class_Descriptor cd_S370C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S370C5, buf);
    S370C5 *dp, &lv = *(dp=new (buf) S370C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S370C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S370C5)");
    check_base_class_offset(lv, (S370C6*), 0, "S370C5");
    check_field_offset(lv, s370c5f0, ABISELECT(40,28), "S370C5.s370c5f0");
    test_class_info(&lv, &cd_S370C5);
    dp->~S370C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS370C5(Test_S370C5, "S370C5", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN6S370C5C1Ev();
extern void _ZN6S370C5D1Ev();
Name_Map name_map_S370C5[] = {
  NSPAIR(_ZN6S370C5C1Ev),
  NSPAIR(_ZN6S370C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S370C6;
extern VTBL_ENTRY _ZTI6S370C6[];
extern  VTBL_ENTRY _ZTV6S370C6[];
static Base_Class bases_S370C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S370C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S370C5[];
extern void _ZN6S370C5D1Ev();
extern void _ZN6S370C5D0Ev();
extern void _ZN6S370C62v4Ev();
extern void _ZN6S370C62v5Ev();
extern void _ZN6S370C62v6Ev();
extern void _ZN6S370C52v7Ev();
extern void _ZN6S370C52v8Ev();
static  VTBL_ENTRY vtc_S370C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S370C5[0]),
  (VTBL_ENTRY)&_ZN6S370C5D1Ev,
  (VTBL_ENTRY)&_ZN6S370C5D0Ev,
  (VTBL_ENTRY)&_ZN6S370C62v4Ev,
  (VTBL_ENTRY)&_ZN6S370C62v5Ev,
  (VTBL_ENTRY)&_ZN6S370C62v6Ev,
  (VTBL_ENTRY)&_ZN6S370C52v7Ev,
  (VTBL_ENTRY)&_ZN6S370C52v8Ev,
};
extern VTBL_ENTRY _ZTI6S370C5[];
extern  VTBL_ENTRY _ZTV6S370C5[];
Class_Descriptor cd_S370C5 = {  "S370C5", // class name
  bases_S370C5, 1,
  &(vtc_S370C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI6S370C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S370C5),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  S370C4  : S370C5 {
  void *s370c4f0;
  char s370c4f1;
  ::S2366C14_nt s370c4f2;
  virtual  ~S370C4(); // _ZN6S370C4D1Ev
  virtual void  v9(); // _ZN6S370C42v9Ev
  S370C4(); // tgen
};
//SIG(-1 S370C4) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1 Fp Fc FC6{ m Fi[2]}}


 S370C4 ::~S370C4(){ note_dtor("S370C4", this);}
void  S370C4 ::v9(){vfunc_called(this, "_ZN6S370C42v9Ev");}
S370C4 ::S370C4(){ note_ctor("S370C4", this);} // tgen

static void Test_S370C4()
{
  extern Class_Descriptor cd_S370C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S370C4, buf);
    S370C4 *dp, &lv = *(dp=new (buf) S370C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S370C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S370C4)");
    check_base_class_offset(lv, (S370C6*)(S370C5*), 0, "S370C4");
    check_base_class_offset(lv, (S370C5*), 0, "S370C4");
    check_field_offset(lv, s370c4f0, ABISELECT(48,32), "S370C4.s370c4f0");
    check_field_offset(lv, s370c4f1, ABISELECT(56,36), "S370C4.s370c4f1");
    check_field_offset(lv, s370c4f2, ABISELECT(60,40), "S370C4.s370c4f2");
    test_class_info(&lv, &cd_S370C4);
    dp->~S370C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS370C4(Test_S370C4, "S370C4", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN6S370C4C1Ev();
extern void _ZN6S370C4D1Ev();
Name_Map name_map_S370C4[] = {
  NSPAIR(_ZN6S370C4C1Ev),
  NSPAIR(_ZN6S370C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S370C6;
extern VTBL_ENTRY _ZTI6S370C6[];
extern  VTBL_ENTRY _ZTV6S370C6[];
extern Class_Descriptor cd_S370C5;
extern VTBL_ENTRY _ZTI6S370C5[];
extern  VTBL_ENTRY _ZTV6S370C5[];
static Base_Class bases_S370C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S370C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S370C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S370C4[];
extern void _ZN6S370C4D1Ev();
extern void _ZN6S370C4D0Ev();
extern void _ZN6S370C62v4Ev();
extern void _ZN6S370C62v5Ev();
extern void _ZN6S370C62v6Ev();
extern void _ZN6S370C52v7Ev();
extern void _ZN6S370C52v8Ev();
extern void _ZN6S370C42v9Ev();
static  VTBL_ENTRY vtc_S370C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S370C4[0]),
  (VTBL_ENTRY)&_ZN6S370C4D1Ev,
  (VTBL_ENTRY)&_ZN6S370C4D0Ev,
  (VTBL_ENTRY)&_ZN6S370C62v4Ev,
  (VTBL_ENTRY)&_ZN6S370C62v5Ev,
  (VTBL_ENTRY)&_ZN6S370C62v6Ev,
  (VTBL_ENTRY)&_ZN6S370C52v7Ev,
  (VTBL_ENTRY)&_ZN6S370C52v8Ev,
  (VTBL_ENTRY)&_ZN6S370C42v9Ev,
};
extern VTBL_ENTRY _ZTI6S370C4[];
extern  VTBL_ENTRY _ZTV6S370C4[];
Class_Descriptor cd_S370C4 = {  "S370C4", // class name
  bases_S370C4, 2,
  &(vtc_S370C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI6S370C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S370C4),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  S370C3  : S370C4 {
  void *s370c3f0[3];
  int s370c3f1;
  ::S130C11_nt s370c3f2;
  virtual  ~S370C3(); // _ZN6S370C3D1Ev
  virtual void  v10(); // _ZN6S370C33v10Ev
  virtual void  v11(); // _ZN6S370C33v11Ev
  virtual void  v12(); // _ZN6S370C33v12Ev
  virtual void  v13(); // _ZN6S370C33v13Ev
  virtual void  v14(); // _ZN6S370C33v14Ev
  virtual void  v15(); // _ZN6S370C33v15Ev
  virtual void  v16(); // _ZN6S370C33v16Ev
  S370C3(); // tgen
};
//SIG(-1 S370C3) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v11 v12 Fp} vd v13 Fp Fc FC7{ m Fi[2]}} vd v1 v2 v3 v4 v5 v6 v7 Fp[3] Fi FC8{ m Fp[2]}}


 S370C3 ::~S370C3(){ note_dtor("S370C3", this);}
void  S370C3 ::v10(){vfunc_called(this, "_ZN6S370C33v10Ev");}
void  S370C3 ::v11(){vfunc_called(this, "_ZN6S370C33v11Ev");}
void  S370C3 ::v12(){vfunc_called(this, "_ZN6S370C33v12Ev");}
void  S370C3 ::v13(){vfunc_called(this, "_ZN6S370C33v13Ev");}
void  S370C3 ::v14(){vfunc_called(this, "_ZN6S370C33v14Ev");}
void  S370C3 ::v15(){vfunc_called(this, "_ZN6S370C33v15Ev");}
void  S370C3 ::v16(){vfunc_called(this, "_ZN6S370C33v16Ev");}
S370C3 ::S370C3(){ note_ctor("S370C3", this);} // tgen

static void Test_S370C3()
{
  extern Class_Descriptor cd_S370C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S370C3, buf);
    S370C3 *dp, &lv = *(dp=new (buf) S370C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S370C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S370C3)");
    check_base_class_offset(lv, (S370C6*)(S370C5*)(S370C4*), 0, "S370C3");
    check_base_class_offset(lv, (S370C5*)(S370C4*), 0, "S370C3");
    check_base_class_offset(lv, (S370C4*), 0, "S370C3");
    check_field_offset(lv, s370c3f0, ABISELECT(72,48), "S370C3.s370c3f0");
    check_field_offset(lv, s370c3f1, ABISELECT(96,60), "S370C3.s370c3f1");
    check_field_offset(lv, s370c3f2, ABISELECT(104,64), "S370C3.s370c3f2");
    test_class_info(&lv, &cd_S370C3);
    dp->~S370C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS370C3(Test_S370C3, "S370C3", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN6S370C3C1Ev();
extern void _ZN6S370C3D1Ev();
Name_Map name_map_S370C3[] = {
  NSPAIR(_ZN6S370C3C1Ev),
  NSPAIR(_ZN6S370C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S370C6;
extern VTBL_ENTRY _ZTI6S370C6[];
extern  VTBL_ENTRY _ZTV6S370C6[];
extern Class_Descriptor cd_S370C5;
extern VTBL_ENTRY _ZTI6S370C5[];
extern  VTBL_ENTRY _ZTV6S370C5[];
extern Class_Descriptor cd_S370C4;
extern VTBL_ENTRY _ZTI6S370C4[];
extern  VTBL_ENTRY _ZTV6S370C4[];
static Base_Class bases_S370C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S370C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S370C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S370C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S370C3[];
extern void _ZN6S370C3D1Ev();
extern void _ZN6S370C3D0Ev();
extern void _ZN6S370C62v4Ev();
extern void _ZN6S370C62v5Ev();
extern void _ZN6S370C62v6Ev();
extern void _ZN6S370C52v7Ev();
extern void _ZN6S370C52v8Ev();
extern void _ZN6S370C42v9Ev();
extern void _ZN6S370C33v10Ev();
extern void _ZN6S370C33v11Ev();
extern void _ZN6S370C33v12Ev();
extern void _ZN6S370C33v13Ev();
extern void _ZN6S370C33v14Ev();
extern void _ZN6S370C33v15Ev();
extern void _ZN6S370C33v16Ev();
static  VTBL_ENTRY vtc_S370C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S370C3[0]),
  (VTBL_ENTRY)&_ZN6S370C3D1Ev,
  (VTBL_ENTRY)&_ZN6S370C3D0Ev,
  (VTBL_ENTRY)&_ZN6S370C62v4Ev,
  (VTBL_ENTRY)&_ZN6S370C62v5Ev,
  (VTBL_ENTRY)&_ZN6S370C62v6Ev,
  (VTBL_ENTRY)&_ZN6S370C52v7Ev,
  (VTBL_ENTRY)&_ZN6S370C52v8Ev,
  (VTBL_ENTRY)&_ZN6S370C42v9Ev,
  (VTBL_ENTRY)&_ZN6S370C33v10Ev,
  (VTBL_ENTRY)&_ZN6S370C33v11Ev,
  (VTBL_ENTRY)&_ZN6S370C33v12Ev,
  (VTBL_ENTRY)&_ZN6S370C33v13Ev,
  (VTBL_ENTRY)&_ZN6S370C33v14Ev,
  (VTBL_ENTRY)&_ZN6S370C33v15Ev,
  (VTBL_ENTRY)&_ZN6S370C33v16Ev,
};
extern VTBL_ENTRY _ZTI6S370C3[];
extern  VTBL_ENTRY _ZTV6S370C3[];
Class_Descriptor cd_S370C3 = {  "S370C3", // class name
  bases_S370C3, 3,
  &(vtc_S370C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI6S370C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S370C3),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S370C2  : S370C3 {
  void *s370c2f0[2];
  virtual  ~S370C2(); // _ZN6S370C2D1Ev
  virtual void  v17(); // _ZN6S370C23v17Ev
  virtual void  v18(); // _ZN6S370C23v18Ev
  virtual void  v19(); // _ZN6S370C23v19Ev
  S370C2(); // tgen
};
//SIG(-1 S370C2) C1{ BC2{ BC3{ BC4{ BC5{ vd v4 v5 v6 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} v7 v8 Fp} vd v9 Fp Fc FC8{ m Fi[2]}} vd v10 v11 v12 v13 v14 v15 v16 Fp[3] Fi FC9{ m Fp[2]}} vd v1 v2 v3 Fp[2]}


 S370C2 ::~S370C2(){ note_dtor("S370C2", this);}
void  S370C2 ::v17(){vfunc_called(this, "_ZN6S370C23v17Ev");}
void  S370C2 ::v18(){vfunc_called(this, "_ZN6S370C23v18Ev");}
void  S370C2 ::v19(){vfunc_called(this, "_ZN6S370C23v19Ev");}
S370C2 ::S370C2(){ note_ctor("S370C2", this);} // tgen

static void Test_S370C2()
{
  extern Class_Descriptor cd_S370C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S370C2, buf);
    S370C2 *dp, &lv = *(dp=new (buf) S370C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S370C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S370C2)");
    check_base_class_offset(lv, (S370C6*)(S370C5*)(S370C4*)(S370C3*), 0, "S370C2");
    check_base_class_offset(lv, (S370C5*)(S370C4*)(S370C3*), 0, "S370C2");
    check_base_class_offset(lv, (S370C4*)(S370C3*), 0, "S370C2");
    check_base_class_offset(lv, (S370C3*), 0, "S370C2");
    check_field_offset(lv, s370c2f0, ABISELECT(120,72), "S370C2.s370c2f0");
    test_class_info(&lv, &cd_S370C2);
    dp->~S370C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS370C2(Test_S370C2, "S370C2", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN6S370C2C1Ev();
extern void _ZN6S370C2D1Ev();
Name_Map name_map_S370C2[] = {
  NSPAIR(_ZN6S370C2C1Ev),
  NSPAIR(_ZN6S370C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S370C6;
extern VTBL_ENTRY _ZTI6S370C6[];
extern  VTBL_ENTRY _ZTV6S370C6[];
extern Class_Descriptor cd_S370C5;
extern VTBL_ENTRY _ZTI6S370C5[];
extern  VTBL_ENTRY _ZTV6S370C5[];
extern Class_Descriptor cd_S370C4;
extern VTBL_ENTRY _ZTI6S370C4[];
extern  VTBL_ENTRY _ZTV6S370C4[];
extern Class_Descriptor cd_S370C3;
extern VTBL_ENTRY _ZTI6S370C3[];
extern  VTBL_ENTRY _ZTV6S370C3[];
static Base_Class bases_S370C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S370C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S370C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S370C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S370C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S370C2[];
extern void _ZN6S370C2D1Ev();
extern void _ZN6S370C2D0Ev();
extern void _ZN6S370C62v4Ev();
extern void _ZN6S370C62v5Ev();
extern void _ZN6S370C62v6Ev();
extern void _ZN6S370C52v7Ev();
extern void _ZN6S370C52v8Ev();
extern void _ZN6S370C42v9Ev();
extern void _ZN6S370C33v10Ev();
extern void _ZN6S370C33v11Ev();
extern void _ZN6S370C33v12Ev();
extern void _ZN6S370C33v13Ev();
extern void _ZN6S370C33v14Ev();
extern void _ZN6S370C33v15Ev();
extern void _ZN6S370C33v16Ev();
extern void _ZN6S370C23v17Ev();
extern void _ZN6S370C23v18Ev();
extern void _ZN6S370C23v19Ev();
static  VTBL_ENTRY vtc_S370C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S370C2[0]),
  (VTBL_ENTRY)&_ZN6S370C2D1Ev,
  (VTBL_ENTRY)&_ZN6S370C2D0Ev,
  (VTBL_ENTRY)&_ZN6S370C62v4Ev,
  (VTBL_ENTRY)&_ZN6S370C62v5Ev,
  (VTBL_ENTRY)&_ZN6S370C62v6Ev,
  (VTBL_ENTRY)&_ZN6S370C52v7Ev,
  (VTBL_ENTRY)&_ZN6S370C52v8Ev,
  (VTBL_ENTRY)&_ZN6S370C42v9Ev,
  (VTBL_ENTRY)&_ZN6S370C33v10Ev,
  (VTBL_ENTRY)&_ZN6S370C33v11Ev,
  (VTBL_ENTRY)&_ZN6S370C33v12Ev,
  (VTBL_ENTRY)&_ZN6S370C33v13Ev,
  (VTBL_ENTRY)&_ZN6S370C33v14Ev,
  (VTBL_ENTRY)&_ZN6S370C33v15Ev,
  (VTBL_ENTRY)&_ZN6S370C33v16Ev,
  (VTBL_ENTRY)&_ZN6S370C23v17Ev,
  (VTBL_ENTRY)&_ZN6S370C23v18Ev,
  (VTBL_ENTRY)&_ZN6S370C23v19Ev,
};
extern VTBL_ENTRY _ZTI6S370C2[];
extern  VTBL_ENTRY _ZTV6S370C2[];
Class_Descriptor cd_S370C2 = {  "S370C2", // class name
  bases_S370C2, 4,
  &(vtc_S370C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI6S370C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S370C2),20, //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  S370C1  : S370C2 {
  void *s370c1f0[2];
  virtual  ~S370C1(); // _ZN6S370C1D1Ev
  virtual void  v1(); // _ZN6S370C12v1Ev
  virtual void  v2(); // _ZN6S370C12v2Ev
  virtual void  v3(); // _ZN6S370C12v3Ev
  S370C1(); // tgen
};
//SIG(1 S370C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v4 v5 v6 FC7{ m Fp Fi FC8{ m}} Fi[2] Fc} v7 v8 Fp} vd v9 Fp Fc FC9{ m Fi[2]}} vd v10 v11 v12 v13 v14 v15 v16 Fp[3] Fi FC10{ m Fp[2]}} vd v17 v18 v19 Fp[2]} vd v1 v2 v3 Fp[2]}


 S370C1 ::~S370C1(){ note_dtor("S370C1", this);}
void  S370C1 ::v1(){vfunc_called(this, "_ZN6S370C12v1Ev");}
void  S370C1 ::v2(){vfunc_called(this, "_ZN6S370C12v2Ev");}
void  S370C1 ::v3(){vfunc_called(this, "_ZN6S370C12v3Ev");}
S370C1 ::S370C1(){ note_ctor("S370C1", this);} // tgen

static void Test_S370C1()
{
  extern Class_Descriptor cd_S370C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,23)];
    init_test(&cd_S370C1, buf);
    S370C1 *dp, &lv = *(dp=new (buf) S370C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,88), "sizeof(S370C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S370C1)");
    check_base_class_offset(lv, (S370C6*)(S370C5*)(S370C4*)(S370C3*)(S370C2*), 0, "S370C1");
    check_base_class_offset(lv, (S370C5*)(S370C4*)(S370C3*)(S370C2*), 0, "S370C1");
    check_base_class_offset(lv, (S370C4*)(S370C3*)(S370C2*), 0, "S370C1");
    check_base_class_offset(lv, (S370C3*)(S370C2*), 0, "S370C1");
    check_base_class_offset(lv, (S370C2*), 0, "S370C1");
    check_field_offset(lv, s370c1f0, ABISELECT(136,80), "S370C1.s370c1f0");
    test_class_info(&lv, &cd_S370C1);
    dp->~S370C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS370C1(Test_S370C1, "S370C1", ABISELECT(152,88));

#else // __cplusplus

extern void _ZN6S370C1C1Ev();
extern void _ZN6S370C1D1Ev();
Name_Map name_map_S370C1[] = {
  NSPAIR(_ZN6S370C1C1Ev),
  NSPAIR(_ZN6S370C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S370C6;
extern VTBL_ENTRY _ZTI6S370C6[];
extern  VTBL_ENTRY _ZTV6S370C6[];
extern Class_Descriptor cd_S370C5;
extern VTBL_ENTRY _ZTI6S370C5[];
extern  VTBL_ENTRY _ZTV6S370C5[];
extern Class_Descriptor cd_S370C4;
extern VTBL_ENTRY _ZTI6S370C4[];
extern  VTBL_ENTRY _ZTV6S370C4[];
extern Class_Descriptor cd_S370C3;
extern VTBL_ENTRY _ZTI6S370C3[];
extern  VTBL_ENTRY _ZTV6S370C3[];
extern Class_Descriptor cd_S370C2;
extern VTBL_ENTRY _ZTI6S370C2[];
extern  VTBL_ENTRY _ZTV6S370C2[];
static Base_Class bases_S370C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S370C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S370C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S370C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S370C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S370C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S370C1[];
extern void _ZN6S370C1D1Ev();
extern void _ZN6S370C1D0Ev();
extern void _ZN6S370C62v4Ev();
extern void _ZN6S370C62v5Ev();
extern void _ZN6S370C62v6Ev();
extern void _ZN6S370C52v7Ev();
extern void _ZN6S370C52v8Ev();
extern void _ZN6S370C42v9Ev();
extern void _ZN6S370C33v10Ev();
extern void _ZN6S370C33v11Ev();
extern void _ZN6S370C33v12Ev();
extern void _ZN6S370C33v13Ev();
extern void _ZN6S370C33v14Ev();
extern void _ZN6S370C33v15Ev();
extern void _ZN6S370C33v16Ev();
extern void _ZN6S370C23v17Ev();
extern void _ZN6S370C23v18Ev();
extern void _ZN6S370C23v19Ev();
extern void _ZN6S370C12v1Ev();
extern void _ZN6S370C12v2Ev();
extern void _ZN6S370C12v3Ev();
static  VTBL_ENTRY vtc_S370C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S370C1[0]),
  (VTBL_ENTRY)&_ZN6S370C1D1Ev,
  (VTBL_ENTRY)&_ZN6S370C1D0Ev,
  (VTBL_ENTRY)&_ZN6S370C62v4Ev,
  (VTBL_ENTRY)&_ZN6S370C62v5Ev,
  (VTBL_ENTRY)&_ZN6S370C62v6Ev,
  (VTBL_ENTRY)&_ZN6S370C52v7Ev,
  (VTBL_ENTRY)&_ZN6S370C52v8Ev,
  (VTBL_ENTRY)&_ZN6S370C42v9Ev,
  (VTBL_ENTRY)&_ZN6S370C33v10Ev,
  (VTBL_ENTRY)&_ZN6S370C33v11Ev,
  (VTBL_ENTRY)&_ZN6S370C33v12Ev,
  (VTBL_ENTRY)&_ZN6S370C33v13Ev,
  (VTBL_ENTRY)&_ZN6S370C33v14Ev,
  (VTBL_ENTRY)&_ZN6S370C33v15Ev,
  (VTBL_ENTRY)&_ZN6S370C33v16Ev,
  (VTBL_ENTRY)&_ZN6S370C23v17Ev,
  (VTBL_ENTRY)&_ZN6S370C23v18Ev,
  (VTBL_ENTRY)&_ZN6S370C23v19Ev,
  (VTBL_ENTRY)&_ZN6S370C12v1Ev,
  (VTBL_ENTRY)&_ZN6S370C12v2Ev,
  (VTBL_ENTRY)&_ZN6S370C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S370C1[];
extern  VTBL_ENTRY _ZTV6S370C1[];
Class_Descriptor cd_S370C1 = {  "S370C1", // class name
  bases_S370C1, 5,
  &(vtc_S370C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,88), // object size
  NSPAIRA(_ZTI6S370C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S370C1),23, //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  S4472C3  {
  int s4472c3f0[4];
  ::S4474C4_nt s4472c3f1;
  int s4472c3f2;
  char s4472c3f3;
  ::S4474C5_nt s4472c3f4;
  int s4472c3f5;
  virtual  ~S4472C3(); // _ZN7S4472C3D1Ev
  virtual void  v2(); // _ZN7S4472C32v2Ev
  virtual void  v3(); // _ZN7S4472C32v3Ev
  virtual void  v4(); // _ZN7S4472C32v4Ev
  S4472C3(); // tgen
};
//SIG(-1 S4472C3) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4472C3 ::~S4472C3(){ note_dtor("S4472C3", this);}
void  S4472C3 ::v2(){vfunc_called(this, "_ZN7S4472C32v2Ev");}
void  S4472C3 ::v3(){vfunc_called(this, "_ZN7S4472C32v3Ev");}
void  S4472C3 ::v4(){vfunc_called(this, "_ZN7S4472C32v4Ev");}
S4472C3 ::S4472C3(){ note_ctor("S4472C3", this);} // tgen

static void Test_S4472C3()
{
  extern Class_Descriptor cd_S4472C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4472C3, buf);
    S4472C3 *dp, &lv = *(dp=new (buf) S4472C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4472C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4472C3)");
    check_field_offset(lv, s4472c3f0, ABISELECT(8,4), "S4472C3.s4472c3f0");
    check_field_offset(lv, s4472c3f1, ABISELECT(24,20), "S4472C3.s4472c3f1");
    check_field_offset(lv, s4472c3f2, ABISELECT(40,28), "S4472C3.s4472c3f2");
    check_field_offset(lv, s4472c3f3, ABISELECT(44,32), "S4472C3.s4472c3f3");
    check_field_offset(lv, s4472c3f4, ABISELECT(48,36), "S4472C3.s4472c3f4");
    check_field_offset(lv, s4472c3f5, ABISELECT(64,48), "S4472C3.s4472c3f5");
    test_class_info(&lv, &cd_S4472C3);
    dp->~S4472C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4472C3(Test_S4472C3, "S4472C3", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4472C3C1Ev();
extern void _ZN7S4472C3D1Ev();
Name_Map name_map_S4472C3[] = {
  NSPAIR(_ZN7S4472C3C1Ev),
  NSPAIR(_ZN7S4472C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4472C3[];
extern void _ZN7S4472C3D1Ev();
extern void _ZN7S4472C3D0Ev();
extern void _ZN7S4472C32v2Ev();
extern void _ZN7S4472C32v3Ev();
extern void _ZN7S4472C32v4Ev();
static  VTBL_ENTRY vtc_S4472C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4472C3[0]),
  (VTBL_ENTRY)&_ZN7S4472C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4472C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4472C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4472C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4472C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4472C3[];
extern  VTBL_ENTRY _ZTV7S4472C3[];
Class_Descriptor cd_S4472C3 = {  "S4472C3", // class name
  0,0,//no base classes
  &(vtc_S4472C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4472C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4472C3),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  S4472C6  {
  virtual  ~S4472C6(); // _ZN7S4472C6D1Ev
  virtual void  v5(); // _ZN7S4472C62v5Ev
  S4472C6(); // tgen
};
//SIG(-1 S4472C6) C1{ vd v1}


 S4472C6 ::~S4472C6(){ note_dtor("S4472C6", this);}
void  S4472C6 ::v5(){vfunc_called(this, "_ZN7S4472C62v5Ev");}
S4472C6 ::S4472C6(){ note_ctor("S4472C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S4472C6C1Ev();
extern void _ZN7S4472C6D1Ev();
Name_Map name_map_S4472C6[] = {
  NSPAIR(_ZN7S4472C6C1Ev),
  NSPAIR(_ZN7S4472C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4472C6[];
extern void _ZN7S4472C6D1Ev();
extern void _ZN7S4472C6D0Ev();
extern void _ZN7S4472C62v5Ev();
static  VTBL_ENTRY vtc_S4472C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4472C6[0]),
  (VTBL_ENTRY)&_ZN7S4472C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4472C6D0Ev,
  (VTBL_ENTRY)&_ZN7S4472C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4472C6[];
extern  VTBL_ENTRY _ZTV7S4472C6[];
Class_Descriptor cd_S4472C6 = {  "S4472C6", // class name
  0,0,//no base classes
  &(vtc_S4472C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4472C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4472C6),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  S4472C2  : S4472C3 , S4472C6 {
  void *s4472c2f0;
  int s4472c2f1;
  void *s4472c2f2;
  virtual  ~S4472C2(); // _ZN7S4472C2D1Ev
  virtual void  v6(); // _ZN7S4472C22v6Ev
  virtual void  v7(); // _ZN7S4472C22v7Ev
  S4472C2(); // tgen
};
//SIG(-1 S4472C2) C1{ BC2{ vd v3 v4 v5 Fi[4] FC3{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} BC5{ vd v6} vd v1 v2 Fp Fi Fp}


 S4472C2 ::~S4472C2(){ note_dtor("S4472C2", this);}
void  S4472C2 ::v6(){vfunc_called(this, "_ZN7S4472C22v6Ev");}
void  S4472C2 ::v7(){vfunc_called(this, "_ZN7S4472C22v7Ev");}
S4472C2 ::S4472C2(){ note_ctor("S4472C2", this);} // tgen

static void Test_S4472C2()
{
  extern Class_Descriptor cd_S4472C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4472C2, buf);
    S4472C2 *dp, &lv = *(dp=new (buf) S4472C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4472C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4472C2)");
    check_base_class_offset(lv, (S4472C3*), 0, "S4472C2");
    check_base_class_offset(lv, (S4472C6*), ABISELECT(72,52), "S4472C2");
    check_field_offset(lv, s4472c2f0, ABISELECT(80,56), "S4472C2.s4472c2f0");
    check_field_offset(lv, s4472c2f1, ABISELECT(88,60), "S4472C2.s4472c2f1");
    check_field_offset(lv, s4472c2f2, ABISELECT(96,64), "S4472C2.s4472c2f2");
    test_class_info(&lv, &cd_S4472C2);
    dp->~S4472C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4472C2(Test_S4472C2, "S4472C2", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4472C2C1Ev();
extern void _ZN7S4472C2D1Ev();
Name_Map name_map_S4472C2[] = {
  NSPAIR(_ZN7S4472C2C1Ev),
  NSPAIR(_ZN7S4472C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4472C3;
extern VTBL_ENTRY _ZTI7S4472C3[];
extern  VTBL_ENTRY _ZTV7S4472C3[];
extern Class_Descriptor cd_S4472C6;
extern VTBL_ENTRY _ZTI7S4472C6[];
extern  VTBL_ENTRY _ZTV7S4472C6[];
static Base_Class bases_S4472C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4472C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S4472C6,    ABISELECT(72,52), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4472C2[];
extern void _ZN7S4472C2D1Ev();
extern void _ZN7S4472C2D0Ev();
extern void _ZN7S4472C32v2Ev();
extern void _ZN7S4472C32v3Ev();
extern void _ZN7S4472C32v4Ev();
extern void _ZN7S4472C22v6Ev();
extern void _ZN7S4472C22v7Ev();
extern void ABISELECT(_ZThn72_N7S4472C2D1Ev,_ZThn52_N7S4472C2D1Ev)();
extern void ABISELECT(_ZThn72_N7S4472C2D0Ev,_ZThn52_N7S4472C2D0Ev)();
extern void _ZN7S4472C62v5Ev();
static  VTBL_ENTRY vtc_S4472C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4472C2[0]),
  (VTBL_ENTRY)&_ZN7S4472C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4472C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4472C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4472C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4472C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4472C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4472C22v7Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4472C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4472C2D1Ev,_ZThn52_N7S4472C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4472C2D0Ev,_ZThn52_N7S4472C2D0Ev),
  (VTBL_ENTRY)&_ZN7S4472C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4472C2[];
extern  VTBL_ENTRY _ZTV7S4472C2[];
Class_Descriptor cd_S4472C2 = {  "S4472C2", // class name
  bases_S4472C2, 2,
  &(vtc_S4472C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4472C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4472C2),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4472C9  {
  ::S4474C14_nt s4472c9f0;
  void  mf4472c9(); // _ZN7S4472C98mf4472c9Ev
};
//SIG(-1 S4472C9) C1{ m FC2{ m FC3{ vd m FL Fc} FC3}}


void  S4472C9 ::mf4472c9(){}

static void Test_S4472C9()
{
  {
    init_simple_test("S4472C9");
    S4472C9 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4472C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4472C9)");
    check_field_offset(lv, s4472c9f0, 0, "S4472C9.s4472c9f0");
  }
}
static Arrange_To_Call_Me vS4472C9(Test_S4472C9, "S4472C9", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4472C1  : S4472C2 {
  ::S4473C12_nt s4472c1f0;
  void *s4472c1f1;
  ::S4472C9 s4472c1f2;
  virtual  ~S4472C1(); // _ZN7S4472C1D1Ev
  virtual void  v1(); // _ZN7S4472C12v1Ev
  S4472C1(); // tgen
};
//SIG(1 S4472C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} BC6{ vd v5} vd v6 v7 Fp Fi Fp} vd v1 FC7{ m Fp Fi FC8{ m}} Fp FC9{ m FC10{ m FC11{ vd m FL Fc} FC11}}}


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

static void Test_S4472C1()
{
  extern Class_Descriptor cd_S4472C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,30)];
    init_test(&cd_S4472C1, buf);
    S4472C1 *dp, &lv = *(dp=new (buf) S4472C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,116), "sizeof(S4472C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4472C1)");
    check_base_class_offset(lv, (S4472C3*)(S4472C2*), 0, "S4472C1");
    check_base_class_offset(lv, (S4472C6*)(S4472C2*), ABISELECT(72,52), "S4472C1");
    check_base_class_offset(lv, (S4472C2*), 0, "S4472C1");
    check_field_offset(lv, s4472c1f0, ABISELECT(104,68), "S4472C1.s4472c1f0");
    check_field_offset(lv, s4472c1f1, ABISELECT(120,80), "S4472C1.s4472c1f1");
    check_field_offset(lv, s4472c1f2, ABISELECT(128,84), "S4472C1.s4472c1f2");
    test_class_info(&lv, &cd_S4472C1);
    dp->~S4472C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4472C1(Test_S4472C1, "S4472C1", ABISELECT(176,116));

#else // __cplusplus

extern void _ZN7S4472C1C1Ev();
extern void _ZN7S4472C1D1Ev();
Name_Map name_map_S4472C1[] = {
  NSPAIR(_ZN7S4472C1C1Ev),
  NSPAIR(_ZN7S4472C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4472C3;
extern VTBL_ENTRY _ZTI7S4472C3[];
extern  VTBL_ENTRY _ZTV7S4472C3[];
extern Class_Descriptor cd_S4472C6;
extern VTBL_ENTRY _ZTI7S4472C6[];
extern  VTBL_ENTRY _ZTV7S4472C6[];
extern Class_Descriptor cd_S4472C2;
extern VTBL_ENTRY _ZTI7S4472C2[];
extern  VTBL_ENTRY _ZTV7S4472C2[];
static Base_Class bases_S4472C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4472C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4472C6,    ABISELECT(72,52), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S4472C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4472C1[];
extern void _ZN7S4472C1D1Ev();
extern void _ZN7S4472C1D0Ev();
extern void _ZN7S4472C32v2Ev();
extern void _ZN7S4472C32v3Ev();
extern void _ZN7S4472C32v4Ev();
extern void _ZN7S4472C22v6Ev();
extern void _ZN7S4472C22v7Ev();
extern void _ZN7S4472C12v1Ev();
extern void ABISELECT(_ZThn72_N7S4472C1D1Ev,_ZThn52_N7S4472C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4472C1D0Ev,_ZThn52_N7S4472C1D0Ev)();
extern void _ZN7S4472C62v5Ev();
static  VTBL_ENTRY vtc_S4472C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4472C1[0]),
  (VTBL_ENTRY)&_ZN7S4472C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4472C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4472C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4472C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4472C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4472C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4472C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4472C12v1Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4472C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4472C1D1Ev,_ZThn52_N7S4472C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4472C1D0Ev,_ZThn52_N7S4472C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4472C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4472C1[];
extern  VTBL_ENTRY _ZTV7S4472C1[];
Class_Descriptor cd_S4472C1 = {  "S4472C1", // class name
  bases_S4472C1, 3,
  &(vtc_S4472C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,116), // object size
  NSPAIRA(_ZTI7S4472C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4472C1),15, //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  S908C5  {
  ::S4473C12_nt s908c5f0;
  int s908c5f1[2];
  char s908c5f2;
  virtual  ~S908C5(); // _ZN6S908C5D1Ev
  virtual void  v4(); // _ZN6S908C52v4Ev
  virtual void  v5(); // _ZN6S908C52v5Ev
  virtual void  v6(); // _ZN6S908C52v6Ev
  S908C5(); // tgen
};
//SIG(-1 S908C5) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S908C5 ::~S908C5(){ note_dtor("S908C5", this);}
void  S908C5 ::v4(){vfunc_called(this, "_ZN6S908C52v4Ev");}
void  S908C5 ::v5(){vfunc_called(this, "_ZN6S908C52v5Ev");}
void  S908C5 ::v6(){vfunc_called(this, "_ZN6S908C52v6Ev");}
S908C5 ::S908C5(){ note_ctor("S908C5", this);} // tgen

static void Test_S908C5()
{
  extern Class_Descriptor cd_S908C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S908C5, buf);
    S908C5 *dp, &lv = *(dp=new (buf) S908C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S908C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S908C5)");
    check_field_offset(lv, s908c5f0, ABISELECT(8,4), "S908C5.s908c5f0");
    check_field_offset(lv, s908c5f1, ABISELECT(24,16), "S908C5.s908c5f1");
    check_field_offset(lv, s908c5f2, ABISELECT(32,24), "S908C5.s908c5f2");
    test_class_info(&lv, &cd_S908C5);
    dp->~S908C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS908C5(Test_S908C5, "S908C5", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN6S908C5C1Ev();
extern void _ZN6S908C5D1Ev();
Name_Map name_map_S908C5[] = {
  NSPAIR(_ZN6S908C5C1Ev),
  NSPAIR(_ZN6S908C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S908C5[];
extern void _ZN6S908C5D1Ev();
extern void _ZN6S908C5D0Ev();
extern void _ZN6S908C52v4Ev();
extern void _ZN6S908C52v5Ev();
extern void _ZN6S908C52v6Ev();
static  VTBL_ENTRY vtc_S908C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S908C5[0]),
  (VTBL_ENTRY)&_ZN6S908C5D1Ev,
  (VTBL_ENTRY)&_ZN6S908C5D0Ev,
  (VTBL_ENTRY)&_ZN6S908C52v4Ev,
  (VTBL_ENTRY)&_ZN6S908C52v5Ev,
  (VTBL_ENTRY)&_ZN6S908C52v6Ev,
};
extern VTBL_ENTRY _ZTI6S908C5[];
extern  VTBL_ENTRY _ZTV6S908C5[];
Class_Descriptor cd_S908C5 = {  "S908C5", // class name
  0,0,//no base classes
  &(vtc_S908C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI6S908C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S908C5),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  S908C4  : S908C5 {
  void *s908c4f0;
  virtual void  v7(); // _ZN6S908C42v7Ev
  virtual void  v8(); // _ZN6S908C42v8Ev
  ~S908C4(); // tgen
  S908C4(); // tgen
};
//SIG(-1 S908C4) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S908C4 ::v7(){vfunc_called(this, "_ZN6S908C42v7Ev");}
void  S908C4 ::v8(){vfunc_called(this, "_ZN6S908C42v8Ev");}
S908C4 ::~S908C4(){ note_dtor("S908C4", this);} // tgen
S908C4 ::S908C4(){ note_ctor("S908C4", this);} // tgen

static void Test_S908C4()
{
  extern Class_Descriptor cd_S908C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S908C4, buf);
    S908C4 *dp, &lv = *(dp=new (buf) S908C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S908C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S908C4)");
    check_base_class_offset(lv, (S908C5*), 0, "S908C4");
    check_field_offset(lv, s908c4f0, ABISELECT(40,28), "S908C4.s908c4f0");
    test_class_info(&lv, &cd_S908C4);
    dp->~S908C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS908C4(Test_S908C4, "S908C4", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN6S908C4C1Ev();
extern void _ZN6S908C4D1Ev();
Name_Map name_map_S908C4[] = {
  NSPAIR(_ZN6S908C4C1Ev),
  NSPAIR(_ZN6S908C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S908C5;
extern VTBL_ENTRY _ZTI6S908C5[];
extern  VTBL_ENTRY _ZTV6S908C5[];
static Base_Class bases_S908C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S908C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S908C4[];
extern void _ZN6S908C4D1Ev();
extern void _ZN6S908C4D0Ev();
extern void _ZN6S908C52v4Ev();
extern void _ZN6S908C52v5Ev();
extern void _ZN6S908C52v6Ev();
extern void _ZN6S908C42v7Ev();
extern void _ZN6S908C42v8Ev();
static  VTBL_ENTRY vtc_S908C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S908C4[0]),
  (VTBL_ENTRY)&_ZN6S908C4D1Ev,
  (VTBL_ENTRY)&_ZN6S908C4D0Ev,
  (VTBL_ENTRY)&_ZN6S908C52v4Ev,
  (VTBL_ENTRY)&_ZN6S908C52v5Ev,
  (VTBL_ENTRY)&_ZN6S908C52v6Ev,
  (VTBL_ENTRY)&_ZN6S908C42v7Ev,
  (VTBL_ENTRY)&_ZN6S908C42v8Ev,
};
extern VTBL_ENTRY _ZTI6S908C4[];
extern  VTBL_ENTRY _ZTV6S908C4[];
Class_Descriptor cd_S908C4 = {  "S908C4", // class name
  bases_S908C4, 1,
  &(vtc_S908C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI6S908C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S908C4),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  S908C3  : S908C4 {
  void *s908c3f0;
  char s908c3f1;
  ::S2366C14_nt s908c3f2;
  virtual  ~S908C3(); // _ZN6S908C3D1Ev
  virtual void  v9(); // _ZN6S908C32v9Ev
  S908C3(); // tgen
};
//SIG(-1 S908C3) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1 Fp Fc FC6{ m Fi[2]}}


 S908C3 ::~S908C3(){ note_dtor("S908C3", this);}
void  S908C3 ::v9(){vfunc_called(this, "_ZN6S908C32v9Ev");}
S908C3 ::S908C3(){ note_ctor("S908C3", this);} // tgen

static void Test_S908C3()
{
  extern Class_Descriptor cd_S908C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S908C3, buf);
    S908C3 *dp, &lv = *(dp=new (buf) S908C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S908C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S908C3)");
    check_base_class_offset(lv, (S908C5*)(S908C4*), 0, "S908C3");
    check_base_class_offset(lv, (S908C4*), 0, "S908C3");
    check_field_offset(lv, s908c3f0, ABISELECT(48,32), "S908C3.s908c3f0");
    check_field_offset(lv, s908c3f1, ABISELECT(56,36), "S908C3.s908c3f1");
    check_field_offset(lv, s908c3f2, ABISELECT(60,40), "S908C3.s908c3f2");
    test_class_info(&lv, &cd_S908C3);
    dp->~S908C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS908C3(Test_S908C3, "S908C3", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN6S908C3C1Ev();
extern void _ZN6S908C3D1Ev();
Name_Map name_map_S908C3[] = {
  NSPAIR(_ZN6S908C3C1Ev),
  NSPAIR(_ZN6S908C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S908C5;
extern VTBL_ENTRY _ZTI6S908C5[];
extern  VTBL_ENTRY _ZTV6S908C5[];
extern Class_Descriptor cd_S908C4;
extern VTBL_ENTRY _ZTI6S908C4[];
extern  VTBL_ENTRY _ZTV6S908C4[];
static Base_Class bases_S908C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S908C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S908C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S908C3[];
extern void _ZN6S908C3D1Ev();
extern void _ZN6S908C3D0Ev();
extern void _ZN6S908C52v4Ev();
extern void _ZN6S908C52v5Ev();
extern void _ZN6S908C52v6Ev();
extern void _ZN6S908C42v7Ev();
extern void _ZN6S908C42v8Ev();
extern void _ZN6S908C32v9Ev();
static  VTBL_ENTRY vtc_S908C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S908C3[0]),
  (VTBL_ENTRY)&_ZN6S908C3D1Ev,
  (VTBL_ENTRY)&_ZN6S908C3D0Ev,
  (VTBL_ENTRY)&_ZN6S908C52v4Ev,
  (VTBL_ENTRY)&_ZN6S908C52v5Ev,
  (VTBL_ENTRY)&_ZN6S908C52v6Ev,
  (VTBL_ENTRY)&_ZN6S908C42v7Ev,
  (VTBL_ENTRY)&_ZN6S908C42v8Ev,
  (VTBL_ENTRY)&_ZN6S908C32v9Ev,
};
extern VTBL_ENTRY _ZTI6S908C3[];
extern  VTBL_ENTRY _ZTV6S908C3[];
Class_Descriptor cd_S908C3 = {  "S908C3", // class name
  bases_S908C3, 2,
  &(vtc_S908C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI6S908C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S908C3),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  S908C2  : S908C3 {
  void *s908c2f0[3];
  int s908c2f1;
  ::S130C11_nt s908c2f2;
  virtual  ~S908C2(); // _ZN6S908C2D1Ev
  virtual void  v10(); // _ZN6S908C23v10Ev
  virtual void  v11(); // _ZN6S908C23v11Ev
  virtual void  v12(); // _ZN6S908C23v12Ev
  virtual void  v13(); // _ZN6S908C23v13Ev
  virtual void  v14(); // _ZN6S908C23v14Ev
  virtual void  v15(); // _ZN6S908C23v15Ev
  virtual void  v16(); // _ZN6S908C23v16Ev
  S908C2(); // tgen
};
//SIG(-1 S908C2) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v11 v12 Fp} vd v13 Fp Fc FC7{ m Fi[2]}} vd v1 v2 v3 v4 v5 v6 v7 Fp[3] Fi FC8{ m Fp[2]}}


 S908C2 ::~S908C2(){ note_dtor("S908C2", this);}
void  S908C2 ::v10(){vfunc_called(this, "_ZN6S908C23v10Ev");}
void  S908C2 ::v11(){vfunc_called(this, "_ZN6S908C23v11Ev");}
void  S908C2 ::v12(){vfunc_called(this, "_ZN6S908C23v12Ev");}
void  S908C2 ::v13(){vfunc_called(this, "_ZN6S908C23v13Ev");}
void  S908C2 ::v14(){vfunc_called(this, "_ZN6S908C23v14Ev");}
void  S908C2 ::v15(){vfunc_called(this, "_ZN6S908C23v15Ev");}
void  S908C2 ::v16(){vfunc_called(this, "_ZN6S908C23v16Ev");}
S908C2 ::S908C2(){ note_ctor("S908C2", this);} // tgen

static void Test_S908C2()
{
  extern Class_Descriptor cd_S908C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S908C2, buf);
    S908C2 *dp, &lv = *(dp=new (buf) S908C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S908C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S908C2)");
    check_base_class_offset(lv, (S908C5*)(S908C4*)(S908C3*), 0, "S908C2");
    check_base_class_offset(lv, (S908C4*)(S908C3*), 0, "S908C2");
    check_base_class_offset(lv, (S908C3*), 0, "S908C2");
    check_field_offset(lv, s908c2f0, ABISELECT(72,48), "S908C2.s908c2f0");
    check_field_offset(lv, s908c2f1, ABISELECT(96,60), "S908C2.s908c2f1");
    check_field_offset(lv, s908c2f2, ABISELECT(104,64), "S908C2.s908c2f2");
    test_class_info(&lv, &cd_S908C2);
    dp->~S908C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS908C2(Test_S908C2, "S908C2", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN6S908C2C1Ev();
extern void _ZN6S908C2D1Ev();
Name_Map name_map_S908C2[] = {
  NSPAIR(_ZN6S908C2C1Ev),
  NSPAIR(_ZN6S908C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S908C5;
extern VTBL_ENTRY _ZTI6S908C5[];
extern  VTBL_ENTRY _ZTV6S908C5[];
extern Class_Descriptor cd_S908C4;
extern VTBL_ENTRY _ZTI6S908C4[];
extern  VTBL_ENTRY _ZTV6S908C4[];
extern Class_Descriptor cd_S908C3;
extern VTBL_ENTRY _ZTI6S908C3[];
extern  VTBL_ENTRY _ZTV6S908C3[];
static Base_Class bases_S908C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S908C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S908C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S908C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S908C2[];
extern void _ZN6S908C2D1Ev();
extern void _ZN6S908C2D0Ev();
extern void _ZN6S908C52v4Ev();
extern void _ZN6S908C52v5Ev();
extern void _ZN6S908C52v6Ev();
extern void _ZN6S908C42v7Ev();
extern void _ZN6S908C42v8Ev();
extern void _ZN6S908C32v9Ev();
extern void _ZN6S908C23v10Ev();
extern void _ZN6S908C23v11Ev();
extern void _ZN6S908C23v12Ev();
extern void _ZN6S908C23v13Ev();
extern void _ZN6S908C23v14Ev();
extern void _ZN6S908C23v15Ev();
extern void _ZN6S908C23v16Ev();
static  VTBL_ENTRY vtc_S908C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S908C2[0]),
  (VTBL_ENTRY)&_ZN6S908C2D1Ev,
  (VTBL_ENTRY)&_ZN6S908C2D0Ev,
  (VTBL_ENTRY)&_ZN6S908C52v4Ev,
  (VTBL_ENTRY)&_ZN6S908C52v5Ev,
  (VTBL_ENTRY)&_ZN6S908C52v6Ev,
  (VTBL_ENTRY)&_ZN6S908C42v7Ev,
  (VTBL_ENTRY)&_ZN6S908C42v8Ev,
  (VTBL_ENTRY)&_ZN6S908C32v9Ev,
  (VTBL_ENTRY)&_ZN6S908C23v10Ev,
  (VTBL_ENTRY)&_ZN6S908C23v11Ev,
  (VTBL_ENTRY)&_ZN6S908C23v12Ev,
  (VTBL_ENTRY)&_ZN6S908C23v13Ev,
  (VTBL_ENTRY)&_ZN6S908C23v14Ev,
  (VTBL_ENTRY)&_ZN6S908C23v15Ev,
  (VTBL_ENTRY)&_ZN6S908C23v16Ev,
};
extern VTBL_ENTRY _ZTI6S908C2[];
extern  VTBL_ENTRY _ZTV6S908C2[];
Class_Descriptor cd_S908C2 = {  "S908C2", // class name
  bases_S908C2, 3,
  &(vtc_S908C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI6S908C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S908C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S908C10  {
  ::S4473C12_nt s908c10f0;
  int s908c10f1;
  ::S4473C12_nt s908c10f2;
  __tsi64 s908c10f3;
  void  mf908c10(); // _ZN7S908C108mf908c10Ev
};
//SIG(-1 S908C10) C1{ m FC2{ m Fp Fi FC3{ m}} Fi FC2 FL}


void  S908C10 ::mf908c10(){}

static void Test_S908C10()
{
  {
    init_simple_test("S908C10");
    S908C10 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S908C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S908C10)");
    check_field_offset(lv, s908c10f0, 0, "S908C10.s908c10f0");
    check_field_offset(lv, s908c10f1, ABISELECT(16,12), "S908C10.s908c10f1");
    check_field_offset(lv, s908c10f2, ABISELECT(24,16), "S908C10.s908c10f2");
    check_field_offset(lv, s908c10f3, ABISELECT(40,28), "S908C10.s908c10f3");
  }
}
static Arrange_To_Call_Me vS908C10(Test_S908C10, "S908C10", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S908C1  : S908C2 {
  void *s908c1f0[2];
  ::S908C10 s908c1f1;
  virtual  ~S908C1(); // _ZN6S908C1D1Ev
  virtual void  v1(); // _ZN6S908C12v1Ev
  virtual void  v2(); // _ZN6S908C12v2Ev
  virtual void  v3(); // _ZN6S908C12v3Ev
  S908C1(); // tgen
};
//SIG(1 S908C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v4 v5 v6 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} v7 v8 Fp} vd v9 Fp Fc FC8{ m Fi[2]}} vd v10 v11 v12 v13 v14 v15 v16 Fp[3] Fi FC9{ m Fp[2]}} vd v1 v2 v3 Fp[2] FC10{ m FC6 Fi FC6 FL}}


 S908C1 ::~S908C1(){ note_dtor("S908C1", this);}
void  S908C1 ::v1(){vfunc_called(this, "_ZN6S908C12v1Ev");}
void  S908C1 ::v2(){vfunc_called(this, "_ZN6S908C12v2Ev");}
void  S908C1 ::v3(){vfunc_called(this, "_ZN6S908C12v3Ev");}
S908C1 ::S908C1(){ note_ctor("S908C1", this);} // tgen

static void Test_S908C1()
{
  extern Class_Descriptor cd_S908C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,30)];
    init_test(&cd_S908C1, buf);
    S908C1 *dp, &lv = *(dp=new (buf) S908C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,116), "sizeof(S908C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S908C1)");
    check_base_class_offset(lv, (S908C5*)(S908C4*)(S908C3*)(S908C2*), 0, "S908C1");
    check_base_class_offset(lv, (S908C4*)(S908C3*)(S908C2*), 0, "S908C1");
    check_base_class_offset(lv, (S908C3*)(S908C2*), 0, "S908C1");
    check_base_class_offset(lv, (S908C2*), 0, "S908C1");
    check_field_offset(lv, s908c1f0, ABISELECT(120,72), "S908C1.s908c1f0");
    check_field_offset(lv, s908c1f1, ABISELECT(136,80), "S908C1.s908c1f1");
    test_class_info(&lv, &cd_S908C1);
    dp->~S908C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS908C1(Test_S908C1, "S908C1", ABISELECT(184,116));

#else // __cplusplus

extern void _ZN6S908C1C1Ev();
extern void _ZN6S908C1D1Ev();
Name_Map name_map_S908C1[] = {
  NSPAIR(_ZN6S908C1C1Ev),
  NSPAIR(_ZN6S908C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S908C5;
extern VTBL_ENTRY _ZTI6S908C5[];
extern  VTBL_ENTRY _ZTV6S908C5[];
extern Class_Descriptor cd_S908C4;
extern VTBL_ENTRY _ZTI6S908C4[];
extern  VTBL_ENTRY _ZTV6S908C4[];
extern Class_Descriptor cd_S908C3;
extern VTBL_ENTRY _ZTI6S908C3[];
extern  VTBL_ENTRY _ZTV6S908C3[];
extern Class_Descriptor cd_S908C2;
extern VTBL_ENTRY _ZTI6S908C2[];
extern  VTBL_ENTRY _ZTV6S908C2[];
static Base_Class bases_S908C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S908C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S908C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S908C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S908C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S908C1[];
extern void _ZN6S908C1D1Ev();
extern void _ZN6S908C1D0Ev();
extern void _ZN6S908C52v4Ev();
extern void _ZN6S908C52v5Ev();
extern void _ZN6S908C52v6Ev();
extern void _ZN6S908C42v7Ev();
extern void _ZN6S908C42v8Ev();
extern void _ZN6S908C32v9Ev();
extern void _ZN6S908C23v10Ev();
extern void _ZN6S908C23v11Ev();
extern void _ZN6S908C23v12Ev();
extern void _ZN6S908C23v13Ev();
extern void _ZN6S908C23v14Ev();
extern void _ZN6S908C23v15Ev();
extern void _ZN6S908C23v16Ev();
extern void _ZN6S908C12v1Ev();
extern void _ZN6S908C12v2Ev();
extern void _ZN6S908C12v3Ev();
static  VTBL_ENTRY vtc_S908C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S908C1[0]),
  (VTBL_ENTRY)&_ZN6S908C1D1Ev,
  (VTBL_ENTRY)&_ZN6S908C1D0Ev,
  (VTBL_ENTRY)&_ZN6S908C52v4Ev,
  (VTBL_ENTRY)&_ZN6S908C52v5Ev,
  (VTBL_ENTRY)&_ZN6S908C52v6Ev,
  (VTBL_ENTRY)&_ZN6S908C42v7Ev,
  (VTBL_ENTRY)&_ZN6S908C42v8Ev,
  (VTBL_ENTRY)&_ZN6S908C32v9Ev,
  (VTBL_ENTRY)&_ZN6S908C23v10Ev,
  (VTBL_ENTRY)&_ZN6S908C23v11Ev,
  (VTBL_ENTRY)&_ZN6S908C23v12Ev,
  (VTBL_ENTRY)&_ZN6S908C23v13Ev,
  (VTBL_ENTRY)&_ZN6S908C23v14Ev,
  (VTBL_ENTRY)&_ZN6S908C23v15Ev,
  (VTBL_ENTRY)&_ZN6S908C23v16Ev,
  (VTBL_ENTRY)&_ZN6S908C12v1Ev,
  (VTBL_ENTRY)&_ZN6S908C12v2Ev,
  (VTBL_ENTRY)&_ZN6S908C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S908C1[];
extern  VTBL_ENTRY _ZTV6S908C1[];
Class_Descriptor cd_S908C1 = {  "S908C1", // class name
  bases_S908C1, 4,
  &(vtc_S908C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,116), // object size
  NSPAIRA(_ZTI6S908C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S908C1),20, //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  S2811C2  : S19572C5 {
};
//SIG(-1 S2811C2) C1{ BC2{ m Fs:13}}



static void Test_S2811C2()
{
  extern Class_Descriptor cd_S2811C2;
  void *lvp;
  {
    short buf[2];
    init_test(&cd_S2811C2, buf);
    S2811C2 &lv = *(new (buf) S2811C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 2, "sizeof(S2811C2)");
    check2(__alignof__(lv), 2, "__alignof__(S2811C2)");
    check_base_class_offset(lv, (S19572C5*), 0, "S2811C2");
    test_class_info(&lv, &cd_S2811C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2811C2(Test_S2811C2, "S2811C2", 2);

#else // __cplusplus

extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
static Base_Class bases_S2811C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2811C2[];
Class_Descriptor cd_S2811C2 = {  "S2811C2", // class name
  bases_S2811C2, 1,
  0, // no vftv
  0, //no vtt
  2, // object size
  NSPAIRA(_ZTI7S2811C2),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  S2811C6  : virtual S19572C5 {
  ~S2811C6(); // tgen
  S2811C6(); // tgen
};
//SIG(-1 S2811C6) C1{ VBC2{ m Fs:13}}


S2811C6 ::~S2811C6(){ note_dtor("S2811C6", this);} // tgen
S2811C6 ::S2811C6(){ note_ctor("S2811C6", this);} // tgen

static void Test_S2811C6()
{
  extern Class_Descriptor cd_S2811C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2811C6, buf);
    S2811C6 *dp, &lv = *(dp=new (buf) S2811C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2811C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2811C6)");
    check_base_class_offset(lv, (S19572C5*), ABISELECT(8,4), "S2811C6");
    test_class_info(&lv, &cd_S2811C6);
    dp->~S2811C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2811C6(Test_S2811C6, "S2811C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S2811C6C1Ev();
extern void _ZN7S2811C6D1Ev();
Name_Map name_map_S2811C6[] = {
  NSPAIR(_ZN7S2811C6C1Ev),
  NSPAIR(_ZN7S2811C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
static Base_Class bases_S2811C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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 _ZTI7S2811C6[];
static  VTBL_ENTRY vtc_S2811C6[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
extern VTBL_ENTRY _ZTV7S2811C6[];
static  VTT_ENTRY vtt_S2811C6[] = {
  {&(_ZTV7S2811C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
Class_Descriptor cd_S2811C6 = {  "S2811C6", // class name
  bases_S2811C6, 1,
  &(vtc_S2811C6[0]), // expected_vtbl_contents
  &(vtt_S2811C6[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2811C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S2811C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2811C6),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  S2811C5  : virtual S2811C6 {
  ~S2811C5(); // tgen
  S2811C5(); // tgen
};
//SIG(-1 S2811C5) C1{ VBC2{ VBC3{ m Fs:13}}}


S2811C5 ::~S2811C5(){ note_dtor("S2811C5", this);} // tgen
S2811C5 ::S2811C5(){ note_ctor("S2811C5", this);} // tgen

static void Test_S2811C5()
{
  extern Class_Descriptor cd_S2811C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2811C5, buf);
    S2811C5 *dp, &lv = *(dp=new (buf) S2811C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2811C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2811C5)");
    check_base_class_offset(lv, (S19572C5*)(S2811C6*), ABISELECT(8,4), "S2811C5");
    check_base_class_offset(lv, (S2811C6*), 0, "S2811C5");
    test_class_info(&lv, &cd_S2811C5);
    dp->~S2811C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2811C5(Test_S2811C5, "S2811C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S2811C5C1Ev();
extern void _ZN7S2811C5D1Ev();
Name_Map name_map_S2811C5[] = {
  NSPAIR(_ZN7S2811C5C1Ev),
  NSPAIR(_ZN7S2811C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
static Base_Class bases_S2811C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
  0, 1},
  {&cd_S2811C6,    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 _ZTI7S2811C5[];
static  VTBL_ENTRY vtc_S2811C5[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C5[0]),
};
extern VTBL_ENTRY _ZTV7S2811C5[];
static  VTBL_ENTRY _tg__ZTV7S2811C6__7S2811C5[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
static  VTT_ENTRY vtt_S2811C5[] = {
  {&(_ZTV7S2811C5[4]),  4,4},
  {&(_ZTV7S2811C5[4]),  4,4},
  {&(_tg__ZTV7S2811C6__7S2811C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2811C5[];
extern  VTBL_ENTRY _ZTV7S2811C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C5[];
Class_Descriptor cd_S2811C5 = {  "S2811C5", // class name
  bases_S2811C5, 2,
  &(vtc_S2811C5[0]), // expected_vtbl_contents
  &(vtt_S2811C5[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2811C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S2811C5),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2811C5),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  S2811C8  : virtual S2811C2 {
  ~S2811C8(); // tgen
  S2811C8(); // tgen
};
//SIG(-1 S2811C8) C1{ VBC2{ BC3{ m Fs:13}}}


S2811C8 ::~S2811C8(){ note_dtor("S2811C8", this);} // tgen
S2811C8 ::S2811C8(){ note_ctor("S2811C8", this);} // tgen

static void Test_S2811C8()
{
  extern Class_Descriptor cd_S2811C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2811C8, buf);
    S2811C8 *dp, &lv = *(dp=new (buf) S2811C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2811C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2811C8)");
    check_base_class_offset(lv, (S19572C5*)(S2811C2*), ABISELECT(8,4), "S2811C8");
    check_base_class_offset(lv, (S2811C2*), ABISELECT(8,4), "S2811C8");
    test_class_info(&lv, &cd_S2811C8);
    dp->~S2811C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2811C8(Test_S2811C8, "S2811C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S2811C8C1Ev();
extern void _ZN7S2811C8D1Ev();
Name_Map name_map_S2811C8[] = {
  NSPAIR(_ZN7S2811C8C1Ev),
  NSPAIR(_ZN7S2811C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C2;
extern VTBL_ENTRY _ZTI7S2811C2[];
static Base_Class bases_S2811C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
  0, 0},
  {&cd_S2811C2,    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 _ZTI7S2811C8[];
static  VTBL_ENTRY vtc_S2811C8[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C8[0]),
};
extern VTBL_ENTRY _ZTV7S2811C8[];
static  VTT_ENTRY vtt_S2811C8[] = {
  {&(_ZTV7S2811C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2811C8[];
extern  VTBL_ENTRY _ZTV7S2811C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C8[];
Class_Descriptor cd_S2811C8 = {  "S2811C8", // class name
  bases_S2811C8, 2,
  &(vtc_S2811C8[0]), // expected_vtbl_contents
  &(vtt_S2811C8[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2811C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S2811C8),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2811C8),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  S2811C10  : S2811C6 , S2811C2 {
  virtual  ~S2811C10(); // _ZN8S2811C10D2Ev
  S2811C10(); // tgen
};
//SIG(-1 S2811C10) C1{ BC2{ VBC3{ m Fs:13}} BC4{ BC3} vd}


 S2811C10 ::~S2811C10(){ note_dtor("S2811C10", this);}
S2811C10 ::S2811C10(){ note_ctor("S2811C10", this);} // tgen

static void Test_S2811C10()
{
  extern Class_Descriptor cd_S2811C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2811C10, buf);
    S2811C10 *dp, &lv = *(dp=new (buf) S2811C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2811C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2811C10)");
    check_base_class_offset(lv, (S19572C5*)(S2811C6*), ABISELECT(10,6), "S2811C10");
    check_base_class_offset(lv, (S2811C6*), 0, "S2811C10");
    check_base_class_offset(lv, (S19572C5*)(S2811C2*), ABISELECT(8,4), "S2811C10");
    check_base_class_offset(lv, (S2811C2*), ABISELECT(8,4), "S2811C10");
    test_class_info(&lv, &cd_S2811C10);
    dp->~S2811C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2811C10(Test_S2811C10, "S2811C10", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S2811C10C1Ev();
extern void _ZN8S2811C10D2Ev();
Name_Map name_map_S2811C10[] = {
  NSPAIR(_ZN8S2811C10C1Ev),
  NSPAIR(_ZN8S2811C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C2;
extern VTBL_ENTRY _ZTI7S2811C2[];
static Base_Class bases_S2811C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(10,6), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2811C6,    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_S19572C5,    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_S2811C2,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S2811C10[];
extern void _ZN8S2811C10D1Ev();
extern void _ZN8S2811C10D0Ev();
static  VTBL_ENTRY vtc_S2811C10[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI8S2811C10[0]),
  (VTBL_ENTRY)&_ZN8S2811C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2811C10D0Ev,
};
extern VTBL_ENTRY _ZTV8S2811C10[];
static  VTBL_ENTRY _tg__ZTV7S2811C6__8S2811C10[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
static  VTT_ENTRY vtt_S2811C10[] = {
  {&(_ZTV8S2811C10[3]),  3,5},
  {&(_tg__ZTV7S2811C6__8S2811C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2811C10[];
extern  VTBL_ENTRY _ZTV8S2811C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2811C10[];
Class_Descriptor cd_S2811C10 = {  "S2811C10", // class name
  bases_S2811C10, 4,
  &(vtc_S2811C10[0]), // expected_vtbl_contents
  &(vtt_S2811C10[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S2811C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S2811C10),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2811C10),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  S2811C9  : virtual S19572C5 , virtual S2811C2 , S2811C8 , S2811C10 , S2811C6 {
  long double s2811c9f0[5];
  virtual  ~S2811C9(); // _ZN7S2811C9D2Ev
  S2811C9(); // tgen
};
//SIG(-1 S2811C9) C1{ VBC2{ m Fs:13} VBC3{ BC2} BC4{ VBC3} BC5{ BC6{ VBC2} BC3 vd} BC6 vd FD[5]}


 S2811C9 ::~S2811C9(){ note_dtor("S2811C9", this);}
S2811C9 ::S2811C9(){ note_ctor("S2811C9", this);} // tgen

static void Test_S2811C9()
{
  extern Class_Descriptor cd_S2811C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,21)];
    init_test(&cd_S2811C9, buf);
    S2811C9 *dp, &lv = *(dp=new (buf) S2811C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,80), "sizeof(S2811C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2811C9)");
    /*is_ambiguous_... S2811C9::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*), ABISELECT(112,76), "S2811C9");
    check_base_class_offset(lv, (S19572C5*)(S2811C6*)(S2811C10*), ABISELECT(112,76), "S2811C9");
    /*is_ambiguous_... S2811C9::S2811C6 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C6*), ABISELECT(112,76), "S2811C9");
    /*is_ambiguous_... S2811C9::S2811C2 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C2*), ABISELECT(114,78), "S2811C9");
    /*is_ambiguous_... S2811C9::S2811C2 */ AMB_check_base_class_offset(lv, (S2811C2*), ABISELECT(114,78), "S2811C9");
    check_base_class_offset(lv, (S2811C2*)(S2811C8*), ABISELECT(114,78), "S2811C9");
    check_base_class_offset(lv, (S2811C8*), 0, "S2811C9");
    check_base_class_offset(lv, (S2811C6*)(S2811C10*), ABISELECT(8,4), "S2811C9");
    check_base_class_offset(lv, (S19572C5*)(S2811C2*)(S2811C10*), ABISELECT(16,8), "S2811C9");
    check_base_class_offset(lv, (S2811C2*)(S2811C10*), ABISELECT(16,8), "S2811C9");
    check_base_class_offset(lv, (S2811C10*), ABISELECT(8,4), "S2811C9");
    /*is_ambiguous_... S2811C9::S2811C6 */ AMB_check_base_class_offset(lv, (S2811C6*), ABISELECT(24,12), "S2811C9");
    check_field_offset(lv, s2811c9f0, ABISELECT(32,16), "S2811C9.s2811c9f0");
    test_class_info(&lv, &cd_S2811C9);
    dp->~S2811C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2811C9(Test_S2811C9, "S2811C9", ABISELECT(128,80));

#else // __cplusplus

extern void _ZN7S2811C9C1Ev();
extern void _ZN7S2811C9D2Ev();
Name_Map name_map_S2811C9[] = {
  NSPAIR(_ZN7S2811C9C1Ev),
  NSPAIR(_ZN7S2811C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C2;
extern VTBL_ENTRY _ZTI7S2811C2[];
extern Class_Descriptor cd_S2811C8;
extern VTBL_ENTRY _ZTI7S2811C8[];
extern  VTBL_ENTRY _ZTV7S2811C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C8[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C2;
extern VTBL_ENTRY _ZTI7S2811C2[];
extern Class_Descriptor cd_S2811C10;
extern VTBL_ENTRY _ZTI8S2811C10[];
extern  VTBL_ENTRY _ZTV8S2811C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2811C10[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
static Base_Class bases_S2811C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(112,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
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    ABISELECT(114,78), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2811C2,    ABISELECT(114,78), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2811C8,    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_S2811C6,    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
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    6, //immediately_derived
  0, 0},
  {&cd_S2811C2,    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
    7, //immediately_derived
  0, 0},
  {&cd_S2811C10,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2811C6,    ABISELECT(24,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2811C9[];
extern void _ZN7S2811C9D1Ev();
extern void _ZN7S2811C9D0Ev();
extern void ABISELECT(_ZThn8_N7S2811C9D1Ev,_ZThn4_N7S2811C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S2811C9D0Ev,_ZThn4_N7S2811C9D0Ev)();
static  VTBL_ENTRY vtc_S2811C9[] = {
  ABISELECT(112,76),
  ABISELECT(114,78),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C9[0]),
  (VTBL_ENTRY)&_ZN7S2811C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2811C9D0Ev,
  ABISELECT(104,72),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S2811C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2811C9D1Ev,_ZThn4_N7S2811C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2811C9D0Ev,_ZThn4_N7S2811C9D0Ev),
  ABISELECT(88,64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S2811C9[0]),
};
extern VTBL_ENTRY _ZTV7S2811C9[];
static  VTBL_ENTRY _tg__ZTV7S2811C8__7S2811C9[] = {
  ABISELECT(114,78),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C8[0]),
};
extern void _ZN8S2811C10D1Ev();
extern void _ZN8S2811C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2811C10__7S2811C9[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S2811C10[0]),
  (VTBL_ENTRY)&_ZN8S2811C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2811C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2811C68S2811C10__7S2811C9[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2811C6__A1__7S2811C9[] = {
  ABISELECT(88,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
static  VTT_ENTRY vtt_S2811C9[] = {
  {&(_ZTV7S2811C9[4]),  4,14},
  {&(_tg__ZTV7S2811C8__7S2811C9[3]),  3,3},
  {&(_tg__ZTV8S2811C10__7S2811C9[3]),  3,5},
  {&(_tg__ZTV7S2811C68S2811C10__7S2811C9[3]),  3,3},
  {&(_tg__ZTV7S2811C6__A1__7S2811C9[3]),  3,3},
  {&(_ZTV7S2811C9[9]),  9,14},
  {&(_ZTV7S2811C9[14]),  14,14},
};
extern VTBL_ENTRY _ZTI7S2811C9[];
extern  VTBL_ENTRY _ZTV7S2811C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C9[];
Class_Descriptor cd_S2811C9 = {  "S2811C9", // class name
  bases_S2811C9, 9,
  &(vtc_S2811C9[0]), // expected_vtbl_contents
  &(vtt_S2811C9[0]), // expected_vtt_contents
  ABISELECT(128,80), // object size
  NSPAIRA(_ZTI7S2811C9),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S2811C9),14, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2811C9),7, //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  S2811C7  : virtual S2811C2 , virtual S2811C8 , virtual S2811C9 , S2811C6 {
  ::S19572C19 s2811c7f0;
  virtual void  v1(); // _ZN7S2811C72v1Ev
  ~S2811C7(); // tgen
  S2811C7(); // tgen
};
//SIG(-1 S2811C7) C1{ VBC2{ BC3{ m Fs:13}} VBC4{ VBC2} VBC5{ VBC3 VBC2 BC4 BC6{ BC7{ VBC3} BC2 vd} BC7 vd FD[5]} BC7 v1 FC8{ VBC9{ VBC3} VBC10{ VBC3} BC3 VBC11{ BC3} vd Fi}}


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

static void Test_S2811C7()
{
  extern Class_Descriptor cd_S2811C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,30)];
    init_test(&cd_S2811C7, buf);
    S2811C7 *dp, &lv = *(dp=new (buf) S2811C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,116), "sizeof(S2811C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2811C7)");
    /*is_ambiguous_... S2811C7::S2811C2 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C2*), ABISELECT(48,28), "S2811C7");
    /*is_ambiguous_... S2811C7::S2811C2 */ AMB_check_base_class_offset(lv, (S2811C2*), ABISELECT(48,28), "S2811C7");
    /*is_ambiguous_... S2811C7::S2811C8 */ AMB_check_base_class_offset(lv, (S2811C2*)(S2811C8*), ABISELECT(48,28), "S2811C7");
    /*is_ambiguous_... S2811C9::S2811C2 */ AMB_check_base_class_offset(lv, (S2811C2*)(S2811C9*), ABISELECT(48,28), "S2811C7");
    check_base_class_offset(lv, (S2811C2*)(S2811C8*)(S2811C9*), ABISELECT(48,28), "S2811C7");
    /*is_ambiguous_... S2811C7::S2811C8 */ AMB_check_base_class_offset(lv, (S2811C8*), ABISELECT(56,32), "S2811C7");
    /*is_ambiguous_... S2811C9::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C9*), ABISELECT(176,112), "S2811C7");
    check_base_class_offset(lv, (S19572C5*)(S2811C6*)(S2811C10*)(S2811C9*), ABISELECT(176,112), "S2811C7");
    /*is_ambiguous_... S2811C9::S2811C6 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C6*)(S2811C9*), ABISELECT(176,112), "S2811C7");
    /*is_ambiguous_... S2811C7::S2811C6 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C6*), ABISELECT(176,112), "S2811C7");
    check_base_class_offset(lv, (S2811C8*)(S2811C9*), ABISELECT(64,36), "S2811C7");
    check_base_class_offset(lv, (S2811C6*)(S2811C10*)(S2811C9*), ABISELECT(72,40), "S2811C7");
    check_base_class_offset(lv, (S19572C5*)(S2811C2*)(S2811C10*)(S2811C9*), ABISELECT(80,44), "S2811C7");
    check_base_class_offset(lv, (S2811C2*)(S2811C10*)(S2811C9*), ABISELECT(80,44), "S2811C7");
    check_base_class_offset(lv, (S2811C10*)(S2811C9*), ABISELECT(72,40), "S2811C7");
    /*is_ambiguous_... S2811C9::S2811C6 */ AMB_check_base_class_offset(lv, (S2811C6*)(S2811C9*), ABISELECT(88,48), "S2811C7");
    check_base_class_offset(lv, (S2811C9*), ABISELECT(64,36), "S2811C7");
    /*is_ambiguous_... S2811C7::S2811C6 */ AMB_check_base_class_offset(lv, (S2811C6*), 0, "S2811C7");
    check_field_offset(lv, s2811c7f0, ABISELECT(8,4), "S2811C7.s2811c7f0");
    test_class_info(&lv, &cd_S2811C7);
    dp->~S2811C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2811C7(Test_S2811C7, "S2811C7", ABISELECT(192,116));

#else // __cplusplus

extern void _ZN7S2811C7C1Ev();
extern void _ZN7S2811C7D1Ev();
Name_Map name_map_S2811C7[] = {
  NSPAIR(_ZN7S2811C7C1Ev),
  NSPAIR(_ZN7S2811C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C2;
extern VTBL_ENTRY _ZTI7S2811C2[];
extern Class_Descriptor cd_S2811C8;
extern VTBL_ENTRY _ZTI7S2811C8[];
extern  VTBL_ENTRY _ZTV7S2811C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C8[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C8;
extern VTBL_ENTRY _ZTI7S2811C8[];
extern  VTBL_ENTRY _ZTV7S2811C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C8[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C2;
extern VTBL_ENTRY _ZTI7S2811C2[];
extern Class_Descriptor cd_S2811C10;
extern VTBL_ENTRY _ZTI8S2811C10[];
extern  VTBL_ENTRY _ZTV8S2811C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2811C10[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
extern Class_Descriptor cd_S2811C9;
extern VTBL_ENTRY _ZTI7S2811C9[];
extern  VTBL_ENTRY _ZTV7S2811C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C9[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
static Base_Class bases_S2811C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
    1, //immediately_derived
  0, 0},
  {&cd_S2811C2,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S2811C8,    ABISELECT(56,32), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    ABISELECT(176,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
    5, //immediately_derived
  0, 1},
  {&cd_S2811C8,    ABISELECT(64,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
    2, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2811C6,    ABISELECT(72,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
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(80,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
    7, //immediately_derived
  0, 0},
  {&cd_S2811C2,    ABISELECT(80,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
    8, //immediately_derived
  0, 0},
  {&cd_S2811C10,    ABISELECT(72,40), //bcp->offset
    19, //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
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2811C6,    ABISELECT(88,48), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2811C9,    ABISELECT(64,36), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2811C6,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2811C7[];
extern void _ZN7S2811C72v1Ev();
extern void _ZN7S2811C7D1Ev();
extern void _ZN7S2811C7D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S2811C7D1Ev,_ZTv0_n20_N7S2811C7D1Ev)();
extern void ABISELECT(_ZThn64_N7S2811C7D1Ev,_ZThn36_N7S2811C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2811C7D0Ev,_ZTv0_n20_N7S2811C7D0Ev)();
extern void ABISELECT(_ZThn64_N7S2811C7D0Ev,_ZThn36_N7S2811C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N7S2811C7D1Ev,_ZTvn4_n20_N7S2811C7D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S2811C7D0Ev,_ZTvn4_n20_N7S2811C7D0Ev)();
static  VTBL_ENTRY vtc_S2811C7[] = {
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(48,28),
  ABISELECT(176,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
  (VTBL_ENTRY)&_ZN7S2811C72v1Ev,
  (VTBL_ENTRY)&_ZN7S2811C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2811C7D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
  ABISELECT(-64,-36),
  ABISELECT(112,76),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2811C7D1Ev,_ZTv0_n20_N7S2811C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2811C7D0Ev,_ZTv0_n20_N7S2811C7D0Ev),
  ABISELECT(104,72),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S2811C7D1Ev,_ZTvn4_n20_N7S2811C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S2811C7D0Ev,_ZTvn4_n20_N7S2811C7D0Ev),
  ABISELECT(88,64),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
};
extern VTBL_ENTRY _ZTV7S2811C7[];
static  VTBL_ENTRY _tg__ZTV7S2811C6__A2__7S2811C7[] = {
  ABISELECT(176,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2811C8__7S2811C7[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C8[0]),
};
extern void _ZN7S2811C9D1Ev();
extern void _ZN7S2811C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2811C9__7S2811C7[] = {
  ABISELECT(112,76),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C9[0]),
  (VTBL_ENTRY)&_ZN7S2811C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2811C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2811C87S2811C9__A1__7S2811C7[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C8[0]),
};
extern void _ZN8S2811C10D1Ev();
extern void _ZN8S2811C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2811C107S2811C9__7S2811C7[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S2811C10[0]),
  (VTBL_ENTRY)&_ZN8S2811C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2811C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2811C68S2811C107S2811C9__7S2811C7[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2811C67S2811C9__A1__7S2811C7[] = {
  ABISELECT(88,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
extern void ABISELECT(_ZThn8_N7S2811C9D1Ev,_ZThn4_N7S2811C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S2811C9D0Ev,_ZThn4_N7S2811C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2811C10__7S2811C9__7S2811C7[] = {
  ABISELECT(104,72),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S2811C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2811C9D1Ev,_ZThn4_N7S2811C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2811C9D0Ev,_ZThn4_N7S2811C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2811C6__A1__7S2811C9__7S2811C7[] = {
  ABISELECT(88,64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S2811C9[0]),
};
static  VTT_ENTRY vtt_S2811C7[] = {
  {&(_ZTV7S2811C7[6]),  6,27},
  {&(_tg__ZTV7S2811C6__A2__7S2811C7[3]),  3,3},
  {&(_ZTV7S2811C7[12]),  12,27},
  {&(_ZTV7S2811C7[17]),  17,27},
  {&(_ZTV7S2811C7[22]),  22,27},
  {&(_ZTV7S2811C7[27]),  27,27},
  {&(_tg__ZTV7S2811C8__7S2811C7[3]),  3,3},
  {&(_tg__ZTV7S2811C9__7S2811C7[4]),  4,6},
  {&(_tg__ZTV7S2811C87S2811C9__A1__7S2811C7[3]),  3,3},
  {&(_tg__ZTV8S2811C107S2811C9__7S2811C7[3]),  3,5},
  {&(_tg__ZTV7S2811C68S2811C107S2811C9__7S2811C7[3]),  3,3},
  {&(_tg__ZTV7S2811C67S2811C9__A1__7S2811C7[3]),  3,3},
  {&(_tg__ZTV8S2811C10__7S2811C9__7S2811C7[3]),  3,5},
  {&(_tg__ZTV7S2811C6__A1__7S2811C9__7S2811C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2811C7[];
extern  VTBL_ENTRY _ZTV7S2811C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C7[];
static VTBL_ENTRY alt_thunk_names51[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2811C7D0Ev,_ZTv0_n20_N7S2811C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S2811C7D0Ev,_ZThn36_N7S2811C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2811C7D1Ev,_ZTv0_n20_N7S2811C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S2811C7D1Ev,_ZThn36_N7S2811C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2811C7 = {  "S2811C7", // class name
  bases_S2811C7, 12,
  &(vtc_S2811C7[0]), // expected_vtbl_contents
  &(vtt_S2811C7[0]), // expected_vtt_contents
  ABISELECT(192,116), // object size
  NSPAIRA(_ZTI7S2811C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S2811C7),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2811C7),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names51,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2811C4  : virtual S19572C5 , virtual S2811C5 , virtual S2811C7 {
  int s2811c4f0;
  virtual  ~S2811C4(); // _ZN7S2811C4D2Ev
  S2811C4(); // tgen
};
//SIG(-1 S2811C4) C1{ VBC2{ m Fs:13} VBC3{ VBC4{ VBC2}} VBC5{ VBC6{ BC2} VBC7{ VBC6} VBC8{ VBC2 VBC6 BC7 BC9{ BC4 BC6 vd} BC4 vd FD[5]} BC4 v1 FC10{ VBC11{ VBC2} VBC12{ VBC2} BC2 VBC13{ BC2} vd Fi}} vd Fi}


 S2811C4 ::~S2811C4(){ note_dtor("S2811C4", this);}
S2811C4 ::S2811C4(){ note_ctor("S2811C4", this);} // tgen

static void Test_S2811C4()
{
  extern Class_Descriptor cd_S2811C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,32)];
    init_test(&cd_S2811C4, buf);
    S2811C4 *dp, &lv = *(dp=new (buf) S2811C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,124), "sizeof(S2811C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2811C4)");
    /*is_ambiguous_... S2811C4::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*), ABISELECT(12,8), "S2811C4");
    /*is_ambiguous_... S2811C4::S2811C6 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C6*), ABISELECT(12,8), "S2811C4");
    /*is_ambiguous_... S2811C9::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C9*), ABISELECT(12,8), "S2811C4");
    check_base_class_offset(lv, (S19572C5*)(S2811C6*)(S2811C10*)(S2811C9*), ABISELECT(12,8), "S2811C4");
    /*is_ambiguous_... S2811C9::S2811C6 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C6*)(S2811C9*), ABISELECT(12,8), "S2811C4");
    /*is_ambiguous_... S2811C7::S2811C6 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C6*)(S2811C7*), ABISELECT(12,8), "S2811C4");
    check_base_class_offset(lv, (S2811C6*)(S2811C5*), 0, "S2811C4");
    check_base_class_offset(lv, (S2811C5*), 0, "S2811C4");
    /*is_ambiguous_... S2811C4::S2811C2 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C2*), ABISELECT(64,40), "S2811C4");
    /*is_ambiguous_... S2811C7::S2811C2 */ AMB_check_base_class_offset(lv, (S2811C2*)(S2811C7*), ABISELECT(64,40), "S2811C4");
    /*is_ambiguous_... S2811C4::S2811C8 */ AMB_check_base_class_offset(lv, (S2811C2*)(S2811C8*), ABISELECT(64,40), "S2811C4");
    /*is_ambiguous_... S2811C9::S2811C2 */ AMB_check_base_class_offset(lv, (S2811C2*)(S2811C9*), ABISELECT(64,40), "S2811C4");
    check_base_class_offset(lv, (S2811C2*)(S2811C8*)(S2811C9*), ABISELECT(64,40), "S2811C4");
    /*is_ambiguous_... S2811C7::S2811C8 */ AMB_check_base_class_offset(lv, (S2811C8*)(S2811C7*), ABISELECT(72,44), "S2811C4");
    check_base_class_offset(lv, (S2811C8*)(S2811C9*), ABISELECT(80,48), "S2811C4");
    check_base_class_offset(lv, (S2811C6*)(S2811C10*)(S2811C9*), ABISELECT(88,52), "S2811C4");
    check_base_class_offset(lv, (S19572C5*)(S2811C2*)(S2811C10*)(S2811C9*), ABISELECT(96,56), "S2811C4");
    check_base_class_offset(lv, (S2811C2*)(S2811C10*)(S2811C9*), ABISELECT(96,56), "S2811C4");
    check_base_class_offset(lv, (S2811C10*)(S2811C9*), ABISELECT(88,52), "S2811C4");
    /*is_ambiguous_... S2811C9::S2811C6 */ AMB_check_base_class_offset(lv, (S2811C6*)(S2811C9*), ABISELECT(104,60), "S2811C4");
    check_base_class_offset(lv, (S2811C9*)(S2811C7*), ABISELECT(80,48), "S2811C4");
    /*is_ambiguous_... S2811C7::S2811C6 */ AMB_check_base_class_offset(lv, (S2811C6*)(S2811C7*), ABISELECT(16,12), "S2811C4");
    check_base_class_offset(lv, (S2811C7*), ABISELECT(16,12), "S2811C4");
    check_field_offset(lv, s2811c4f0, ABISELECT(8,4), "S2811C4.s2811c4f0");
    test_class_info(&lv, &cd_S2811C4);
    dp->~S2811C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2811C4(Test_S2811C4, "S2811C4", ABISELECT(192,124));

#else // __cplusplus

extern void _ZN7S2811C4C1Ev();
extern void _ZN7S2811C4D2Ev();
Name_Map name_map_S2811C4[] = {
  NSPAIR(_ZN7S2811C4C1Ev),
  NSPAIR(_ZN7S2811C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
extern Class_Descriptor cd_S2811C5;
extern VTBL_ENTRY _ZTI7S2811C5[];
extern  VTBL_ENTRY _ZTV7S2811C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C5[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C2;
extern VTBL_ENTRY _ZTI7S2811C2[];
extern Class_Descriptor cd_S2811C8;
extern VTBL_ENTRY _ZTI7S2811C8[];
extern  VTBL_ENTRY _ZTV7S2811C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C8[];
extern Class_Descriptor cd_S2811C8;
extern VTBL_ENTRY _ZTI7S2811C8[];
extern  VTBL_ENTRY _ZTV7S2811C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C8[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C2;
extern VTBL_ENTRY _ZTI7S2811C2[];
extern Class_Descriptor cd_S2811C10;
extern VTBL_ENTRY _ZTI8S2811C10[];
extern  VTBL_ENTRY _ZTV8S2811C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2811C10[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
extern Class_Descriptor cd_S2811C9;
extern VTBL_ENTRY _ZTI7S2811C9[];
extern  VTBL_ENTRY _ZTV7S2811C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C9[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
extern Class_Descriptor cd_S2811C7;
extern VTBL_ENTRY _ZTI7S2811C7[];
extern  VTBL_ENTRY _ZTV7S2811C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C7[];
static Base_Class bases_S2811C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(12,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_S2811C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2811C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    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
    4, //immediately_derived
  0, 0},
  {&cd_S2811C2,    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
    5, //immediately_derived
  0, 1},
  {&cd_S2811C8,    ABISELECT(72,44), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2811C8,    ABISELECT(80,48), //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
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2811C6,    ABISELECT(88,52), //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
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(96,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_S2811C2,    ABISELECT(96,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
    10, //immediately_derived
  0, 0},
  {&cd_S2811C10,    ABISELECT(88,52), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2811C6,    ABISELECT(104,60), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2811C9,    ABISELECT(80,48), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2811C6,    ABISELECT(16,12), //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
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2811C7,    ABISELECT(16,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2811C4[];
extern void _ZN7S2811C4D1Ev();
extern void _ZN7S2811C4D0Ev();
extern void _ZN7S2811C72v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S2811C4D1Ev,_ZTv0_n32_N7S2811C4D1Ev)();
extern void ABISELECT(_ZThn16_N7S2811C4D1Ev,_ZThn12_N7S2811C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S2811C4D0Ev,_ZTv0_n32_N7S2811C4D0Ev)();
extern void ABISELECT(_ZThn16_N7S2811C4D0Ev,_ZThn12_N7S2811C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2811C4D1Ev,_ZTv0_n20_N7S2811C4D1Ev)();
extern void ABISELECT(_ZThn80_N7S2811C4D1Ev,_ZThn48_N7S2811C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2811C4D0Ev,_ZTv0_n20_N7S2811C4D0Ev)();
extern void ABISELECT(_ZThn80_N7S2811C4D0Ev,_ZThn48_N7S2811C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N7S2811C4D1Ev,_ZTvn4_n20_N7S2811C4D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S2811C4D0Ev,_ZTvn4_n20_N7S2811C4D0Ev)();
static  VTBL_ENTRY vtc_S2811C4[] = {
  ABISELECT(80,48),
  ABISELECT(72,44),
  ABISELECT(64,40),
  ABISELECT(16,12),
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C4[0]),
  (VTBL_ENTRY)&_ZN7S2811C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2811C4D0Ev,
  ABISELECT(-16,-12),
  0,
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(48,28),
  -4,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S2811C4[0]),
  (VTBL_ENTRY)&_ZN7S2811C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S2811C4D1Ev,_ZTv0_n32_N7S2811C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S2811C4D0Ev,_ZTv0_n32_N7S2811C4D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI7S2811C4[0]),
  ABISELECT(-80,-48),
  ABISELECT(-68,-40),
  ABISELECT(-16,-8),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI7S2811C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2811C4D1Ev,_ZTv0_n20_N7S2811C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2811C4D0Ev,_ZTv0_n20_N7S2811C4D0Ev),
  ABISELECT(-76,-44),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI7S2811C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S2811C4D1Ev,_ZTvn4_n20_N7S2811C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S2811C4D0Ev,_ZTvn4_n20_N7S2811C4D0Ev),
  ABISELECT(-92,-52),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S2811C4[0]),
};
extern VTBL_ENTRY _ZTV7S2811C4[];
static  VTBL_ENTRY _tg__ZTV7S2811C5__7S2811C4[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2811C6__7S2811C4[] = {
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
extern void _ZN7S2811C72v1Ev();
extern void _ZN7S2811C7D1Ev();
extern void _ZN7S2811C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2811C7__7S2811C4[] = {
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(48,28),
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
  (VTBL_ENTRY)&_ZN7S2811C72v1Ev,
  (VTBL_ENTRY)&_ZN7S2811C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2811C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2811C67S2811C7__A3__7S2811C4[] = {
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2811C8__7S2811C7__7S2811C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S2811C7D1Ev,_ZTv0_n20_N7S2811C7D1Ev)();
extern void ABISELECT(_ZThn64_N7S2811C7D1Ev,_ZThn36_N7S2811C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2811C7D0Ev,_ZTv0_n20_N7S2811C7D0Ev)();
extern void ABISELECT(_ZThn64_N7S2811C7D0Ev,_ZThn36_N7S2811C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2811C9__7S2811C7__7S2811C4[] = {
  ABISELECT(-64,-36),
  ABISELECT(-68,-40),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2811C7D1Ev,_ZTv0_n20_N7S2811C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2811C7D0Ev,_ZTv0_n20_N7S2811C7D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N7S2811C7D1Ev,_ZTvn4_n20_N7S2811C7D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S2811C7D0Ev,_ZTvn4_n20_N7S2811C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2811C107S2811C9__7S2811C7__7S2811C4[] = {
  ABISELECT(-76,-44),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S2811C7D1Ev,_ZTvn4_n20_N7S2811C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S2811C7D0Ev,_ZTvn4_n20_N7S2811C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2811C67S2811C9__A1__7S2811C7__7S2811C4[] = {
  ABISELECT(-92,-52),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2811C8__7S2811C4[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C8[0]),
};
extern void _ZN7S2811C9D1Ev();
extern void _ZN7S2811C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2811C9__7S2811C4[] = {
  ABISELECT(-68,-40),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C9[0]),
  (VTBL_ENTRY)&_ZN7S2811C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2811C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2811C87S2811C9__A1__7S2811C4[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C8[0]),
};
extern void _ZN8S2811C10D1Ev();
extern void _ZN8S2811C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2811C107S2811C9__7S2811C4[] = {
  ABISELECT(-76,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S2811C10[0]),
  (VTBL_ENTRY)&_ZN8S2811C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2811C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2811C68S2811C107S2811C9__A1__7S2811C4[] = {
  ABISELECT(-76,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2811C67S2811C9__A2__7S2811C4[] = {
  ABISELECT(-92,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
extern void ABISELECT(_ZThn8_N7S2811C9D1Ev,_ZThn4_N7S2811C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S2811C9D0Ev,_ZThn4_N7S2811C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2811C10__7S2811C9__7S2811C4[] = {
  ABISELECT(-76,-44),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S2811C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2811C9D1Ev,_ZThn4_N7S2811C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2811C9D0Ev,_ZThn4_N7S2811C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2811C6__A1__7S2811C9__7S2811C4[] = {
  ABISELECT(-92,-52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S2811C9[0]),
};
static  VTT_ENTRY vtt_S2811C4[] = {
  {&(_ZTV7S2811C4[9]),  9,40},
  {&(_ZTV7S2811C4[9]),  9,40},
  {&(_ZTV7S2811C4[9]),  9,40},
  {&(_ZTV7S2811C4[19]),  19,40},
  {&(_ZTV7S2811C4[25]),  25,40},
  {&(_ZTV7S2811C4[30]),  30,40},
  {&(_ZTV7S2811C4[35]),  35,40},
  {&(_ZTV7S2811C4[40]),  40,40},
  {&(_tg__ZTV7S2811C5__7S2811C4[4]),  4,4},
  {&(_tg__ZTV7S2811C5__7S2811C4[4]),  4,4},
  {&(_tg__ZTV7S2811C6__7S2811C4[3]),  3,3},
  {&(_tg__ZTV7S2811C7__7S2811C4[6]),  6,9},
  {&(_tg__ZTV7S2811C67S2811C7__A3__7S2811C4[3]),  3,3},
  {&(_tg__ZTV7S2811C8__7S2811C7__7S2811C4[3]),  3,3},
  {&(_tg__ZTV7S2811C9__7S2811C7__7S2811C4[5]),  5,7},
  {&(_tg__ZTV8S2811C107S2811C9__7S2811C7__7S2811C4[3]),  3,5},
  {&(_tg__ZTV7S2811C67S2811C9__A1__7S2811C7__7S2811C4[3]),  3,3},
  {&(_tg__ZTV7S2811C8__7S2811C4[3]),  3,3},
  {&(_tg__ZTV7S2811C9__7S2811C4[4]),  4,6},
  {&(_tg__ZTV7S2811C87S2811C9__A1__7S2811C4[3]),  3,3},
  {&(_tg__ZTV8S2811C107S2811C9__7S2811C4[3]),  3,5},
  {&(_tg__ZTV7S2811C68S2811C107S2811C9__A1__7S2811C4[3]),  3,3},
  {&(_tg__ZTV7S2811C67S2811C9__A2__7S2811C4[3]),  3,3},
  {&(_tg__ZTV8S2811C10__7S2811C9__7S2811C4[3]),  3,5},
  {&(_tg__ZTV7S2811C6__A1__7S2811C9__7S2811C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2811C4[];
extern  VTBL_ENTRY _ZTV7S2811C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C4[];
static VTBL_ENTRY alt_thunk_names52[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2811C7D0Ev,_ZTv0_n20_N7S2811C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S2811C7D0Ev,_ZThn36_N7S2811C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2811C7D1Ev,_ZTv0_n20_N7S2811C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S2811C7D1Ev,_ZThn36_N7S2811C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2811C4D0Ev,_ZTv0_n20_N7S2811C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S2811C4D0Ev,_ZThn48_N7S2811C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2811C4D1Ev,_ZTv0_n20_N7S2811C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S2811C4D1Ev,_ZThn48_N7S2811C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S2811C4D0Ev,_ZTv0_n32_N7S2811C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S2811C4D0Ev,_ZThn12_N7S2811C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S2811C4D1Ev,_ZTv0_n32_N7S2811C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S2811C4D1Ev,_ZThn12_N7S2811C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2811C4 = {  "S2811C4", // class name
  bases_S2811C4, 15,
  &(vtc_S2811C4[0]), // expected_vtbl_contents
  &(vtt_S2811C4[0]), // expected_vtt_contents
  ABISELECT(192,124), // object size
  NSPAIRA(_ZTI7S2811C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2811C4),40, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2811C4),25, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names52,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2811C15_nt  {
  void  mf2811c15(); // _ZN11S2811C15_nt9mf2811c15Ev
};
//SIG(-1 S2811C15_nt) C1{ m}


void  S2811C15_nt ::mf2811c15(){}

//skip512 S2811C15_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S2811C15_nt[];
VTBL_ENTRY *P__ZTI11S2811C15_nt = _ZTI11S2811C15_nt; 
Class_Descriptor cd_S2811C15_nt = {  "S2811C15_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI11S2811C15_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  S2811C1  : S2811C2 , virtual S2811C4 , S629C14 , S629C8_nt , S2811C15_nt {
  ~S2811C1(); // tgen
  S2811C1(); // tgen
};
//SIG(1 S2811C1) C1{ BC2{ BC3{ m Fs:13}} VBC4{ VBC3 VBC5{ VBC6{ VBC3}} VBC7{ VBC2 VBC8{ VBC2} VBC9{ VBC3 VBC2 BC8 BC10{ BC6 BC2 vd} BC6 vd FD[5]} BC6 v1 FC11{ VBC12{ VBC3} VBC13{ VBC3} BC3 VBC14{ BC3} vd Fi}} vd Fi} BC15{ m} BC16{ m} BC17{ m}}


S2811C1 ::~S2811C1(){ note_dtor("S2811C1", this);} // tgen
S2811C1 ::S2811C1(){ note_ctor("S2811C1", this);} // tgen

static void Test_S2811C1()
{
  extern Class_Descriptor cd_S2811C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,33)];
    init_test(&cd_S2811C1, buf);
    S2811C1 *dp, &lv = *(dp=new (buf) S2811C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,128), "sizeof(S2811C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2811C1)");
    /*is_ambiguous_... S2811C1::S2811C2 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C2*), ABISELECT(8,4), "S2811C1");
    /*is_ambiguous_... S2811C1::S2811C2 */ AMB_check_base_class_offset(lv, (S2811C2*), ABISELECT(8,4), "S2811C1");
    /*is_ambiguous_... S2811C4::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C4*), ABISELECT(28,16), "S2811C1");
    /*is_ambiguous_... S2811C1::S2811C6 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C6*), ABISELECT(28,16), "S2811C1");
    /*is_ambiguous_... S2811C9::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C9*), ABISELECT(28,16), "S2811C1");
    check_base_class_offset(lv, (S19572C5*)(S2811C6*)(S2811C10*)(S2811C9*), ABISELECT(28,16), "S2811C1");
    /*is_ambiguous_... S2811C9::S2811C6 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C6*)(S2811C9*), ABISELECT(28,16), "S2811C1");
    /*is_ambiguous_... S2811C7::S2811C6 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C6*)(S2811C7*), ABISELECT(28,16), "S2811C1");
    check_base_class_offset(lv, (S2811C6*)(S2811C5*), ABISELECT(16,8), "S2811C1");
    check_base_class_offset(lv, (S2811C5*)(S2811C4*), ABISELECT(16,8), "S2811C1");
    /*is_ambiguous_... S2811C1::S2811C2 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C2*), ABISELECT(80,48), "S2811C1");
    /*is_ambiguous_... S2811C7::S2811C2 */ AMB_check_base_class_offset(lv, (S2811C2*)(S2811C7*), ABISELECT(80,48), "S2811C1");
    /*is_ambiguous_... S2811C1::S2811C8 */ AMB_check_base_class_offset(lv, (S2811C2*)(S2811C8*), ABISELECT(80,48), "S2811C1");
    /*is_ambiguous_... S2811C9::S2811C2 */ AMB_check_base_class_offset(lv, (S2811C2*)(S2811C9*), ABISELECT(80,48), "S2811C1");
    check_base_class_offset(lv, (S2811C2*)(S2811C8*)(S2811C9*), ABISELECT(80,48), "S2811C1");
    /*is_ambiguous_... S2811C7::S2811C8 */ AMB_check_base_class_offset(lv, (S2811C8*)(S2811C7*), 0, "S2811C1");
    check_base_class_offset(lv, (S2811C8*)(S2811C9*), ABISELECT(96,52), "S2811C1");
    check_base_class_offset(lv, (S2811C6*)(S2811C10*)(S2811C9*), ABISELECT(104,56), "S2811C1");
    check_base_class_offset(lv, (S19572C5*)(S2811C2*)(S2811C10*)(S2811C9*), ABISELECT(112,60), "S2811C1");
    check_base_class_offset(lv, (S2811C2*)(S2811C10*)(S2811C9*), ABISELECT(112,60), "S2811C1");
    check_base_class_offset(lv, (S2811C10*)(S2811C9*), ABISELECT(104,56), "S2811C1");
    /*is_ambiguous_... S2811C9::S2811C6 */ AMB_check_base_class_offset(lv, (S2811C6*)(S2811C9*), ABISELECT(120,64), "S2811C1");
    check_base_class_offset(lv, (S2811C9*)(S2811C7*), ABISELECT(96,52), "S2811C1");
    /*is_ambiguous_... S2811C7::S2811C6 */ AMB_check_base_class_offset(lv, (S2811C6*)(S2811C7*), ABISELECT(32,20), "S2811C1");
    check_base_class_offset(lv, (S2811C7*)(S2811C4*), ABISELECT(32,20), "S2811C1");
    check_base_class_offset(lv, (S2811C4*), ABISELECT(16,8), "S2811C1");
    check_base_class_offset(lv, (S629C14*), 0, "S2811C1");
    check_base_class_offset(lv, (S629C8_nt*), 0, "S2811C1");
    check_base_class_offset(lv, (S2811C15_nt*), 0, "S2811C1");
    test_class_info(&lv, &cd_S2811C1);
    dp->~S2811C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2811C1(Test_S2811C1, "S2811C1", ABISELECT(208,128));

#else // __cplusplus

extern void _ZN7S2811C1C1Ev();
extern void _ZN7S2811C1D1Ev();
Name_Map name_map_S2811C1[] = {
  NSPAIR(_ZN7S2811C1C1Ev),
  NSPAIR(_ZN7S2811C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C2;
extern VTBL_ENTRY _ZTI7S2811C2[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
extern Class_Descriptor cd_S2811C5;
extern VTBL_ENTRY _ZTI7S2811C5[];
extern  VTBL_ENTRY _ZTV7S2811C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C5[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C2;
extern VTBL_ENTRY _ZTI7S2811C2[];
extern Class_Descriptor cd_S2811C8;
extern VTBL_ENTRY _ZTI7S2811C8[];
extern  VTBL_ENTRY _ZTV7S2811C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C8[];
extern Class_Descriptor cd_S2811C8;
extern VTBL_ENTRY _ZTI7S2811C8[];
extern  VTBL_ENTRY _ZTV7S2811C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C8[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C2;
extern VTBL_ENTRY _ZTI7S2811C2[];
extern Class_Descriptor cd_S2811C10;
extern VTBL_ENTRY _ZTI8S2811C10[];
extern  VTBL_ENTRY _ZTV8S2811C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2811C10[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
extern Class_Descriptor cd_S2811C9;
extern VTBL_ENTRY _ZTI7S2811C9[];
extern  VTBL_ENTRY _ZTV7S2811C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C9[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
extern Class_Descriptor cd_S2811C7;
extern VTBL_ENTRY _ZTI7S2811C7[];
extern  VTBL_ENTRY _ZTV7S2811C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C7[];
extern Class_Descriptor cd_S2811C4;
extern VTBL_ENTRY _ZTI7S2811C4[];
extern  VTBL_ENTRY _ZTV7S2811C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C4[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S629C8_nt;
extern VTBL_ENTRY _ZTI9S629C8_nt[];
extern Class_Descriptor cd_S2811C15_nt;
extern VTBL_ENTRY _ZTI11S2811C15_nt[];
static Base_Class bases_S2811C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
  0, 0},
  {&cd_S2811C2,    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_S19572C5,    ABISELECT(28,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, 1},
  {&cd_S2811C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S2811C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19572C5,    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
    6, //immediately_derived
  0, 0},
  {&cd_S2811C2,    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
    7, //immediately_derived
  0, 1},
  {&cd_S2811C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S2811C8,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2811C6,    ABISELECT(104,56), //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
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(112,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
    11, //immediately_derived
  0, 0},
  {&cd_S2811C2,    ABISELECT(112,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
    12, //immediately_derived
  0, 0},
  {&cd_S2811C10,    ABISELECT(104,56), //bcp->offset
    42, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2811C6,    ABISELECT(120,64), //bcp->offset
    47, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2811C9,    ABISELECT(96,52), //bcp->offset
    35, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S2811C6,    ABISELECT(32,20), //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
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2811C7,    ABISELECT(32,20), //bcp->offset
    24, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S2811C4,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S629C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S629C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2811C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2811C1[];
extern void _ZN7S2811C1D1Ev();
extern void _ZN7S2811C1D0Ev();
extern void ABISELECT(_ZTv0_n80_N7S2811C1D1Ev,_ZTv0_n40_N7S2811C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S2811C1D1Ev,_ZThn8_N7S2811C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S2811C1D0Ev,_ZTv0_n40_N7S2811C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S2811C1D0Ev,_ZThn8_N7S2811C1D0Ev)() __attribute__((weak));
extern void _ZN7S2811C72v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S2811C1D1Ev,_ZTv0_n32_N7S2811C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S2811C1D1Ev,_ZThn20_N7S2811C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S2811C1D0Ev,_ZTv0_n32_N7S2811C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S2811C1D0Ev,_ZThn20_N7S2811C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2811C1D1Ev,_ZTv0_n20_N7S2811C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S2811C1D1Ev,_ZThn52_N7S2811C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2811C1D0Ev,_ZTv0_n20_N7S2811C1D0Ev)();
extern void ABISELECT(_ZThn96_N7S2811C1D0Ev,_ZThn52_N7S2811C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N7S2811C1D1Ev,_ZTvn4_n20_N7S2811C1D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S2811C1D0Ev,_ZTvn4_n20_N7S2811C1D0Ev)();
static  VTBL_ENTRY vtc_S2811C1[] = {
  ABISELECT(96,52),
  0,
  ABISELECT(32,20),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(28,16),
  ABISELECT(16,8),
  ABISELECT(80,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C1[0]),
  (VTBL_ENTRY)&_ZN7S2811C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2811C1D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(80,44),
  ABISELECT(-16,-8),
  ABISELECT(64,40),
  ABISELECT(16,12),
  0,
  0,
  ABISELECT(12,8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2811C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S2811C1D1Ev,_ZTv0_n40_N7S2811C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S2811C1D0Ev,_ZTv0_n40_N7S2811C1D0Ev),
  ABISELECT(-32,-20),
  0,
  ABISELECT(64,32),
  ABISELECT(-32,-20),
  ABISELECT(48,28),
  -4,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S2811C1[0]),
  (VTBL_ENTRY)&_ZN7S2811C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S2811C1D1Ev,_ZTv0_n32_N7S2811C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S2811C1D0Ev,_ZTv0_n32_N7S2811C1D0Ev),
  ABISELECT(-96,-52),
  ABISELECT(-68,-36),
  ABISELECT(-16,-4),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S2811C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2811C1D1Ev,_ZTv0_n20_N7S2811C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2811C1D0Ev,_ZTv0_n20_N7S2811C1D0Ev),
  ABISELECT(-76,-40),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S2811C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S2811C1D1Ev,_ZTvn4_n20_N7S2811C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S2811C1D0Ev,_ZTvn4_n20_N7S2811C1D0Ev),
  ABISELECT(-92,-48),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S2811C1[0]),
};
extern VTBL_ENTRY _ZTV7S2811C1[];
extern void _ZN7S2811C4D1Ev();
extern void _ZN7S2811C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2811C4__7S2811C1[] = {
  ABISELECT(80,44),
  ABISELECT(-16,-8),
  ABISELECT(64,40),
  ABISELECT(16,12),
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C4[0]),
  (VTBL_ENTRY)&_ZN7S2811C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2811C4D0Ev,
};
extern void _ZN7S2811C72v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S2811C4D1Ev,_ZTv0_n32_N7S2811C4D1Ev)();
extern void ABISELECT(_ZThn16_N7S2811C4D1Ev,_ZThn12_N7S2811C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S2811C4D0Ev,_ZTv0_n32_N7S2811C4D0Ev)();
extern void ABISELECT(_ZThn16_N7S2811C4D0Ev,_ZThn12_N7S2811C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2811C7__7S2811C4__7S2811C1[] = {
  ABISELECT(-16,-12),
  0,
  ABISELECT(64,32),
  ABISELECT(-32,-20),
  ABISELECT(48,28),
  -4,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S2811C4[0]),
  (VTBL_ENTRY)&_ZN7S2811C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S2811C4D1Ev,_ZTv0_n32_N7S2811C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S2811C4D0Ev,_ZTv0_n32_N7S2811C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2811C8__7S2811C4__7S2811C1[] = {
  ABISELECT(80,48),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S2811C4[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S2811C4D1Ev,_ZTv0_n20_N7S2811C4D1Ev)();
extern void ABISELECT(_ZThn80_N7S2811C4D1Ev,_ZThn44_N7S2811C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2811C4D0Ev,_ZTv0_n20_N7S2811C4D0Ev)();
extern void ABISELECT(_ZThn80_N7S2811C4D0Ev,_ZThn44_N7S2811C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2811C9__7S2811C4__7S2811C1[] = {
  ABISELECT(-80,-44),
  ABISELECT(-68,-36),
  ABISELECT(-16,-4),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S2811C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2811C4D1Ev,_ZTv0_n20_N7S2811C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2811C4D0Ev,_ZTv0_n20_N7S2811C4D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N7S2811C4D1Ev,_ZTvn4_n20_N7S2811C4D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S2811C4D0Ev,_ZTvn4_n20_N7S2811C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2811C107S2811C9__7S2811C4__7S2811C1[] = {
  ABISELECT(-76,-40),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S2811C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S2811C4D1Ev,_ZTvn4_n20_N7S2811C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S2811C4D0Ev,_ZTvn4_n20_N7S2811C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2811C67S2811C9__A2__7S2811C4__7S2811C1[] = {
  ABISELECT(-92,-48),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S2811C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2811C5__7S2811C1[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2811C6__7S2811C1[] = {
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
extern void _ZN7S2811C72v1Ev();
extern void _ZN7S2811C7D1Ev();
extern void _ZN7S2811C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2811C7__7S2811C1[] = {
  ABISELECT(64,32),
  ABISELECT(-32,-20),
  ABISELECT(48,28),
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
  (VTBL_ENTRY)&_ZN7S2811C72v1Ev,
  (VTBL_ENTRY)&_ZN7S2811C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2811C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2811C67S2811C7__A3__7S2811C1[] = {
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2811C8__7S2811C7__7S2811C1[] = {
  ABISELECT(80,48),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S2811C7D1Ev,_ZTv0_n20_N7S2811C7D1Ev)();
extern void ABISELECT(_ZThn64_N7S2811C7D1Ev,_ZThn32_N7S2811C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2811C7D0Ev,_ZTv0_n20_N7S2811C7D0Ev)();
extern void ABISELECT(_ZThn64_N7S2811C7D0Ev,_ZThn32_N7S2811C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2811C9__7S2811C7__7S2811C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(-68,-36),
  ABISELECT(-16,-4),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2811C7D1Ev,_ZTv0_n20_N7S2811C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2811C7D0Ev,_ZTv0_n20_N7S2811C7D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N7S2811C7D1Ev,_ZTvn4_n20_N7S2811C7D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S2811C7D0Ev,_ZTvn4_n20_N7S2811C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2811C107S2811C9__7S2811C7__7S2811C1[] = {
  ABISELECT(-76,-40),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S2811C7D1Ev,_ZTvn4_n20_N7S2811C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S2811C7D0Ev,_ZTvn4_n20_N7S2811C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2811C67S2811C9__A1__7S2811C7__7S2811C1[] = {
  ABISELECT(-92,-48),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2811C8__7S2811C1[] = {
  ABISELECT(80,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C8[0]),
};
extern void _ZN7S2811C9D1Ev();
extern void _ZN7S2811C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2811C9__7S2811C1[] = {
  ABISELECT(-68,-36),
  ABISELECT(-16,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C9[0]),
  (VTBL_ENTRY)&_ZN7S2811C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2811C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2811C87S2811C9__A1__7S2811C1[] = {
  ABISELECT(-16,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C8[0]),
};
extern void _ZN8S2811C10D1Ev();
extern void _ZN8S2811C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2811C107S2811C9__7S2811C1[] = {
  ABISELECT(-76,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S2811C10[0]),
  (VTBL_ENTRY)&_ZN8S2811C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2811C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2811C68S2811C107S2811C9__A1__7S2811C1[] = {
  ABISELECT(-76,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2811C67S2811C9__A2__7S2811C1[] = {
  ABISELECT(-92,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
extern void ABISELECT(_ZThn8_N7S2811C9D1Ev,_ZThn4_N7S2811C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S2811C9D0Ev,_ZThn4_N7S2811C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2811C10__7S2811C9__7S2811C1[] = {
  ABISELECT(-76,-40),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S2811C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2811C9D1Ev,_ZThn4_N7S2811C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2811C9D0Ev,_ZThn4_N7S2811C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2811C6__A1__7S2811C9__7S2811C1[] = {
  ABISELECT(-92,-48),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S2811C9[0]),
};
static  VTT_ENTRY vtt_S2811C1[] = {
  {&(_ZTV7S2811C1[10]),  10,50},
  {&(_ZTV7S2811C1[22]),  22,50},
  {&(_ZTV7S2811C1[22]),  22,50},
  {&(_ZTV7S2811C1[22]),  22,50},
  {&(_ZTV7S2811C1[32]),  32,50},
  {&(_ZTV7S2811C1[10]),  10,50},
  {&(_ZTV7S2811C1[40]),  40,50},
  {&(_ZTV7S2811C1[45]),  45,50},
  {&(_ZTV7S2811C1[50]),  50,50},
  {&(_tg__ZTV7S2811C4__7S2811C1[9]),  9,11},
  {&(_tg__ZTV7S2811C4__7S2811C1[9]),  9,11},
  {&(_tg__ZTV7S2811C4__7S2811C1[9]),  9,11},
  {&(_tg__ZTV7S2811C7__7S2811C4__7S2811C1[8]),  8,11},
  {&(_tg__ZTV7S2811C8__7S2811C4__7S2811C1[3]),  3,3},
  {&(_tg__ZTV7S2811C9__7S2811C4__7S2811C1[5]),  5,7},
  {&(_tg__ZTV8S2811C107S2811C9__7S2811C4__7S2811C1[3]),  3,5},
  {&(_tg__ZTV7S2811C67S2811C9__A2__7S2811C4__7S2811C1[3]),  3,3},
  {&(_tg__ZTV7S2811C5__7S2811C1[4]),  4,4},
  {&(_tg__ZTV7S2811C5__7S2811C1[4]),  4,4},
  {&(_tg__ZTV7S2811C6__7S2811C1[3]),  3,3},
  {&(_tg__ZTV7S2811C7__7S2811C1[6]),  6,9},
  {&(_tg__ZTV7S2811C67S2811C7__A3__7S2811C1[3]),  3,3},
  {&(_tg__ZTV7S2811C8__7S2811C7__7S2811C1[3]),  3,3},
  {&(_tg__ZTV7S2811C9__7S2811C7__7S2811C1[5]),  5,7},
  {&(_tg__ZTV8S2811C107S2811C9__7S2811C7__7S2811C1[3]),  3,5},
  {&(_tg__ZTV7S2811C67S2811C9__A1__7S2811C7__7S2811C1[3]),  3,3},
  {&(_tg__ZTV7S2811C8__7S2811C1[3]),  3,3},
  {&(_tg__ZTV7S2811C9__7S2811C1[4]),  4,6},
  {&(_tg__ZTV7S2811C87S2811C9__A1__7S2811C1[3]),  3,3},
  {&(_tg__ZTV8S2811C107S2811C9__7S2811C1[3]),  3,5},
  {&(_tg__ZTV7S2811C68S2811C107S2811C9__A1__7S2811C1[3]),  3,3},
  {&(_tg__ZTV7S2811C67S2811C9__A2__7S2811C1[3]),  3,3},
  {&(_tg__ZTV8S2811C10__7S2811C9__7S2811C1[3]),  3,5},
  {&(_tg__ZTV7S2811C6__A1__7S2811C9__7S2811C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2811C1[];
extern  VTBL_ENTRY _ZTV7S2811C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C1[];
static VTBL_ENTRY alt_thunk_names53[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2811C7D0Ev,_ZTv0_n20_N7S2811C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S2811C7D0Ev,_ZThn32_N7S2811C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2811C7D1Ev,_ZTv0_n20_N7S2811C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S2811C7D1Ev,_ZThn32_N7S2811C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2811C4D0Ev,_ZTv0_n20_N7S2811C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S2811C4D0Ev,_ZThn44_N7S2811C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2811C4D1Ev,_ZTv0_n20_N7S2811C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S2811C4D1Ev,_ZThn44_N7S2811C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S2811C4D0Ev,_ZTv0_n32_N7S2811C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S2811C4D0Ev,_ZThn12_N7S2811C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S2811C4D1Ev,_ZTv0_n32_N7S2811C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S2811C4D1Ev,_ZThn12_N7S2811C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2811C1D0Ev,_ZTv0_n20_N7S2811C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S2811C1D0Ev,_ZThn52_N7S2811C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2811C1D1Ev,_ZTv0_n20_N7S2811C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S2811C1D1Ev,_ZThn52_N7S2811C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S2811C1D0Ev,_ZTv0_n32_N7S2811C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S2811C1D0Ev,_ZThn20_N7S2811C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S2811C1D1Ev,_ZTv0_n32_N7S2811C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S2811C1D1Ev,_ZThn20_N7S2811C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S2811C1D0Ev,_ZTv0_n40_N7S2811C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S2811C1D0Ev,_ZThn8_N7S2811C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S2811C1D1Ev,_ZTv0_n40_N7S2811C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S2811C1D1Ev,_ZThn8_N7S2811C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2811C1 = {  "S2811C1", // class name
  bases_S2811C1, 21,
  &(vtc_S2811C1[0]), // expected_vtbl_contents
  &(vtt_S2811C1[0]), // expected_vtt_contents
  ABISELECT(208,128), // object size
  NSPAIRA(_ZTI7S2811C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S2811C1),50, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2811C1),34, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names53,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S345C6  {
  ::S4473C12_nt s345c6f0;
  int s345c6f1[2];
  char s345c6f2;
  virtual  ~S345C6(); // _ZN6S345C6D1Ev
  virtual void  v1(); // _ZN6S345C62v1Ev
  virtual void  v2(); // _ZN6S345C62v2Ev
  virtual void  v3(); // _ZN6S345C62v3Ev
  S345C6(); // tgen
};
//SIG(-1 S345C6) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S345C6 ::~S345C6(){ note_dtor("S345C6", this);}
void  S345C6 ::v1(){vfunc_called(this, "_ZN6S345C62v1Ev");}
void  S345C6 ::v2(){vfunc_called(this, "_ZN6S345C62v2Ev");}
void  S345C6 ::v3(){vfunc_called(this, "_ZN6S345C62v3Ev");}
S345C6 ::S345C6(){ note_ctor("S345C6", this);} // tgen

static void Test_S345C6()
{
  extern Class_Descriptor cd_S345C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S345C6, buf);
    S345C6 *dp, &lv = *(dp=new (buf) S345C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S345C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S345C6)");
    check_field_offset(lv, s345c6f0, ABISELECT(8,4), "S345C6.s345c6f0");
    check_field_offset(lv, s345c6f1, ABISELECT(24,16), "S345C6.s345c6f1");
    check_field_offset(lv, s345c6f2, ABISELECT(32,24), "S345C6.s345c6f2");
    test_class_info(&lv, &cd_S345C6);
    dp->~S345C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS345C6(Test_S345C6, "S345C6", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN6S345C6C1Ev();
extern void _ZN6S345C6D1Ev();
Name_Map name_map_S345C6[] = {
  NSPAIR(_ZN6S345C6C1Ev),
  NSPAIR(_ZN6S345C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S345C6[];
extern void _ZN6S345C6D1Ev();
extern void _ZN6S345C6D0Ev();
extern void _ZN6S345C62v1Ev();
extern void _ZN6S345C62v2Ev();
extern void _ZN6S345C62v3Ev();
static  VTBL_ENTRY vtc_S345C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S345C6[0]),
  (VTBL_ENTRY)&_ZN6S345C6D1Ev,
  (VTBL_ENTRY)&_ZN6S345C6D0Ev,
  (VTBL_ENTRY)&_ZN6S345C62v1Ev,
  (VTBL_ENTRY)&_ZN6S345C62v2Ev,
  (VTBL_ENTRY)&_ZN6S345C62v3Ev,
};
extern VTBL_ENTRY _ZTI6S345C6[];
extern  VTBL_ENTRY _ZTV6S345C6[];
Class_Descriptor cd_S345C6 = {  "S345C6", // class name
  0,0,//no base classes
  &(vtc_S345C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI6S345C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S345C6),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  S345C5  : S345C6 {
  void *s345c5f0;
  virtual void  v4(); // _ZN6S345C52v4Ev
  virtual void  v5(); // _ZN6S345C52v5Ev
  ~S345C5(); // tgen
  S345C5(); // tgen
};
//SIG(-1 S345C5) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S345C5 ::v4(){vfunc_called(this, "_ZN6S345C52v4Ev");}
void  S345C5 ::v5(){vfunc_called(this, "_ZN6S345C52v5Ev");}
S345C5 ::~S345C5(){ note_dtor("S345C5", this);} // tgen
S345C5 ::S345C5(){ note_ctor("S345C5", this);} // tgen

static void Test_S345C5()
{
  extern Class_Descriptor cd_S345C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S345C5, buf);
    S345C5 *dp, &lv = *(dp=new (buf) S345C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S345C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S345C5)");
    check_base_class_offset(lv, (S345C6*), 0, "S345C5");
    check_field_offset(lv, s345c5f0, ABISELECT(40,28), "S345C5.s345c5f0");
    test_class_info(&lv, &cd_S345C5);
    dp->~S345C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS345C5(Test_S345C5, "S345C5", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN6S345C5C1Ev();
extern void _ZN6S345C5D1Ev();
Name_Map name_map_S345C5[] = {
  NSPAIR(_ZN6S345C5C1Ev),
  NSPAIR(_ZN6S345C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S345C6;
extern VTBL_ENTRY _ZTI6S345C6[];
extern  VTBL_ENTRY _ZTV6S345C6[];
static Base_Class bases_S345C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S345C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S345C5[];
extern void _ZN6S345C5D1Ev();
extern void _ZN6S345C5D0Ev();
extern void _ZN6S345C62v1Ev();
extern void _ZN6S345C62v2Ev();
extern void _ZN6S345C62v3Ev();
extern void _ZN6S345C52v4Ev();
extern void _ZN6S345C52v5Ev();
static  VTBL_ENTRY vtc_S345C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S345C5[0]),
  (VTBL_ENTRY)&_ZN6S345C5D1Ev,
  (VTBL_ENTRY)&_ZN6S345C5D0Ev,
  (VTBL_ENTRY)&_ZN6S345C62v1Ev,
  (VTBL_ENTRY)&_ZN6S345C62v2Ev,
  (VTBL_ENTRY)&_ZN6S345C62v3Ev,
  (VTBL_ENTRY)&_ZN6S345C52v4Ev,
  (VTBL_ENTRY)&_ZN6S345C52v5Ev,
};
extern VTBL_ENTRY _ZTI6S345C5[];
extern  VTBL_ENTRY _ZTV6S345C5[];
Class_Descriptor cd_S345C5 = {  "S345C5", // class name
  bases_S345C5, 1,
  &(vtc_S345C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI6S345C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S345C5),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  S345C4  : S345C5 {
  void *s345c4f0;
  char s345c4f1;
  ::S2366C14_nt s345c4f2;
  virtual  ~S345C4(); // _ZN6S345C4D1Ev
  virtual void  v6(); // _ZN6S345C42v6Ev
  S345C4(); // tgen
};
//SIG(-1 S345C4) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1 Fp Fc FC6{ m Fi[2]}}


 S345C4 ::~S345C4(){ note_dtor("S345C4", this);}
void  S345C4 ::v6(){vfunc_called(this, "_ZN6S345C42v6Ev");}
S345C4 ::S345C4(){ note_ctor("S345C4", this);} // tgen

static void Test_S345C4()
{
  extern Class_Descriptor cd_S345C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S345C4, buf);
    S345C4 *dp, &lv = *(dp=new (buf) S345C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S345C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S345C4)");
    check_base_class_offset(lv, (S345C6*)(S345C5*), 0, "S345C4");
    check_base_class_offset(lv, (S345C5*), 0, "S345C4");
    check_field_offset(lv, s345c4f0, ABISELECT(48,32), "S345C4.s345c4f0");
    check_field_offset(lv, s345c4f1, ABISELECT(56,36), "S345C4.s345c4f1");
    check_field_offset(lv, s345c4f2, ABISELECT(60,40), "S345C4.s345c4f2");
    test_class_info(&lv, &cd_S345C4);
    dp->~S345C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS345C4(Test_S345C4, "S345C4", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN6S345C4C1Ev();
extern void _ZN6S345C4D1Ev();
Name_Map name_map_S345C4[] = {
  NSPAIR(_ZN6S345C4C1Ev),
  NSPAIR(_ZN6S345C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S345C6;
extern VTBL_ENTRY _ZTI6S345C6[];
extern  VTBL_ENTRY _ZTV6S345C6[];
extern Class_Descriptor cd_S345C5;
extern VTBL_ENTRY _ZTI6S345C5[];
extern  VTBL_ENTRY _ZTV6S345C5[];
static Base_Class bases_S345C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S345C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S345C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S345C4[];
extern void _ZN6S345C4D1Ev();
extern void _ZN6S345C4D0Ev();
extern void _ZN6S345C62v1Ev();
extern void _ZN6S345C62v2Ev();
extern void _ZN6S345C62v3Ev();
extern void _ZN6S345C52v4Ev();
extern void _ZN6S345C52v5Ev();
extern void _ZN6S345C42v6Ev();
static  VTBL_ENTRY vtc_S345C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S345C4[0]),
  (VTBL_ENTRY)&_ZN6S345C4D1Ev,
  (VTBL_ENTRY)&_ZN6S345C4D0Ev,
  (VTBL_ENTRY)&_ZN6S345C62v1Ev,
  (VTBL_ENTRY)&_ZN6S345C62v2Ev,
  (VTBL_ENTRY)&_ZN6S345C62v3Ev,
  (VTBL_ENTRY)&_ZN6S345C52v4Ev,
  (VTBL_ENTRY)&_ZN6S345C52v5Ev,
  (VTBL_ENTRY)&_ZN6S345C42v6Ev,
};
extern VTBL_ENTRY _ZTI6S345C4[];
extern  VTBL_ENTRY _ZTV6S345C4[];
Class_Descriptor cd_S345C4 = {  "S345C4", // class name
  bases_S345C4, 2,
  &(vtc_S345C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI6S345C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S345C4),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  S345C3  : S345C4 {
  void *s345c3f0[3];
  int s345c3f1;
  ::S130C11_nt s345c3f2;
  virtual  ~S345C3(); // _ZN6S345C3D1Ev
  virtual void  v7(); // _ZN6S345C32v7Ev
  virtual void  v8(); // _ZN6S345C32v8Ev
  virtual void  v9(); // _ZN6S345C32v9Ev
  virtual void  v10(); // _ZN6S345C33v10Ev
  virtual void  v11(); // _ZN6S345C33v11Ev
  virtual void  v12(); // _ZN6S345C33v12Ev
  virtual void  v13(); // _ZN6S345C33v13Ev
  S345C3(); // tgen
};
//SIG(-1 S345C3) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v11 v12 Fp} vd v13 Fp Fc FC7{ m Fi[2]}} vd v1 v2 v3 v4 v5 v6 v7 Fp[3] Fi FC8{ m Fp[2]}}


 S345C3 ::~S345C3(){ note_dtor("S345C3", this);}
void  S345C3 ::v7(){vfunc_called(this, "_ZN6S345C32v7Ev");}
void  S345C3 ::v8(){vfunc_called(this, "_ZN6S345C32v8Ev");}
void  S345C3 ::v9(){vfunc_called(this, "_ZN6S345C32v9Ev");}
void  S345C3 ::v10(){vfunc_called(this, "_ZN6S345C33v10Ev");}
void  S345C3 ::v11(){vfunc_called(this, "_ZN6S345C33v11Ev");}
void  S345C3 ::v12(){vfunc_called(this, "_ZN6S345C33v12Ev");}
void  S345C3 ::v13(){vfunc_called(this, "_ZN6S345C33v13Ev");}
S345C3 ::S345C3(){ note_ctor("S345C3", this);} // tgen

static void Test_S345C3()
{
  extern Class_Descriptor cd_S345C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S345C3, buf);
    S345C3 *dp, &lv = *(dp=new (buf) S345C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S345C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S345C3)");
    check_base_class_offset(lv, (S345C6*)(S345C5*)(S345C4*), 0, "S345C3");
    check_base_class_offset(lv, (S345C5*)(S345C4*), 0, "S345C3");
    check_base_class_offset(lv, (S345C4*), 0, "S345C3");
    check_field_offset(lv, s345c3f0, ABISELECT(72,48), "S345C3.s345c3f0");
    check_field_offset(lv, s345c3f1, ABISELECT(96,60), "S345C3.s345c3f1");
    check_field_offset(lv, s345c3f2, ABISELECT(104,64), "S345C3.s345c3f2");
    test_class_info(&lv, &cd_S345C3);
    dp->~S345C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS345C3(Test_S345C3, "S345C3", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN6S345C3C1Ev();
extern void _ZN6S345C3D1Ev();
Name_Map name_map_S345C3[] = {
  NSPAIR(_ZN6S345C3C1Ev),
  NSPAIR(_ZN6S345C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S345C6;
extern VTBL_ENTRY _ZTI6S345C6[];
extern  VTBL_ENTRY _ZTV6S345C6[];
extern Class_Descriptor cd_S345C5;
extern VTBL_ENTRY _ZTI6S345C5[];
extern  VTBL_ENTRY _ZTV6S345C5[];
extern Class_Descriptor cd_S345C4;
extern VTBL_ENTRY _ZTI6S345C4[];
extern  VTBL_ENTRY _ZTV6S345C4[];
static Base_Class bases_S345C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S345C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S345C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S345C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S345C3[];
extern void _ZN6S345C3D1Ev();
extern void _ZN6S345C3D0Ev();
extern void _ZN6S345C62v1Ev();
extern void _ZN6S345C62v2Ev();
extern void _ZN6S345C62v3Ev();
extern void _ZN6S345C52v4Ev();
extern void _ZN6S345C52v5Ev();
extern void _ZN6S345C42v6Ev();
extern void _ZN6S345C32v7Ev();
extern void _ZN6S345C32v8Ev();
extern void _ZN6S345C32v9Ev();
extern void _ZN6S345C33v10Ev();
extern void _ZN6S345C33v11Ev();
extern void _ZN6S345C33v12Ev();
extern void _ZN6S345C33v13Ev();
static  VTBL_ENTRY vtc_S345C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S345C3[0]),
  (VTBL_ENTRY)&_ZN6S345C3D1Ev,
  (VTBL_ENTRY)&_ZN6S345C3D0Ev,
  (VTBL_ENTRY)&_ZN6S345C62v1Ev,
  (VTBL_ENTRY)&_ZN6S345C62v2Ev,
  (VTBL_ENTRY)&_ZN6S345C62v3Ev,
  (VTBL_ENTRY)&_ZN6S345C52v4Ev,
  (VTBL_ENTRY)&_ZN6S345C52v5Ev,
  (VTBL_ENTRY)&_ZN6S345C42v6Ev,
  (VTBL_ENTRY)&_ZN6S345C32v7Ev,
  (VTBL_ENTRY)&_ZN6S345C32v8Ev,
  (VTBL_ENTRY)&_ZN6S345C32v9Ev,
  (VTBL_ENTRY)&_ZN6S345C33v10Ev,
  (VTBL_ENTRY)&_ZN6S345C33v11Ev,
  (VTBL_ENTRY)&_ZN6S345C33v12Ev,
  (VTBL_ENTRY)&_ZN6S345C33v13Ev,
};
extern VTBL_ENTRY _ZTI6S345C3[];
extern  VTBL_ENTRY _ZTV6S345C3[];
Class_Descriptor cd_S345C3 = {  "S345C3", // class name
  bases_S345C3, 3,
  &(vtc_S345C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI6S345C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S345C3),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S345C2  : S345C3 {
  void *s345c2f0[2];
  virtual  ~S345C2(); // _ZN6S345C2D1Ev
  virtual void  v14(); // _ZN6S345C23v14Ev
  virtual void  v15(); // _ZN6S345C23v15Ev
  virtual void  v16(); // _ZN6S345C23v16Ev
  S345C2(); // tgen
};
//SIG(-1 S345C2) C1{ BC2{ BC3{ BC4{ BC5{ vd v4 v5 v6 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} v7 v8 Fp} vd v9 Fp Fc FC8{ m Fi[2]}} vd v10 v11 v12 v13 v14 v15 v16 Fp[3] Fi FC9{ m Fp[2]}} vd v1 v2 v3 Fp[2]}


 S345C2 ::~S345C2(){ note_dtor("S345C2", this);}
void  S345C2 ::v14(){vfunc_called(this, "_ZN6S345C23v14Ev");}
void  S345C2 ::v15(){vfunc_called(this, "_ZN6S345C23v15Ev");}
void  S345C2 ::v16(){vfunc_called(this, "_ZN6S345C23v16Ev");}
S345C2 ::S345C2(){ note_ctor("S345C2", this);} // tgen

static void Test_S345C2()
{
  extern Class_Descriptor cd_S345C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S345C2, buf);
    S345C2 *dp, &lv = *(dp=new (buf) S345C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S345C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S345C2)");
    check_base_class_offset(lv, (S345C6*)(S345C5*)(S345C4*)(S345C3*), 0, "S345C2");
    check_base_class_offset(lv, (S345C5*)(S345C4*)(S345C3*), 0, "S345C2");
    check_base_class_offset(lv, (S345C4*)(S345C3*), 0, "S345C2");
    check_base_class_offset(lv, (S345C3*), 0, "S345C2");
    check_field_offset(lv, s345c2f0, ABISELECT(120,72), "S345C2.s345c2f0");
    test_class_info(&lv, &cd_S345C2);
    dp->~S345C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS345C2(Test_S345C2, "S345C2", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN6S345C2C1Ev();
extern void _ZN6S345C2D1Ev();
Name_Map name_map_S345C2[] = {
  NSPAIR(_ZN6S345C2C1Ev),
  NSPAIR(_ZN6S345C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S345C6;
extern VTBL_ENTRY _ZTI6S345C6[];
extern  VTBL_ENTRY _ZTV6S345C6[];
extern Class_Descriptor cd_S345C5;
extern VTBL_ENTRY _ZTI6S345C5[];
extern  VTBL_ENTRY _ZTV6S345C5[];
extern Class_Descriptor cd_S345C4;
extern VTBL_ENTRY _ZTI6S345C4[];
extern  VTBL_ENTRY _ZTV6S345C4[];
extern Class_Descriptor cd_S345C3;
extern VTBL_ENTRY _ZTI6S345C3[];
extern  VTBL_ENTRY _ZTV6S345C3[];
static Base_Class bases_S345C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S345C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S345C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S345C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S345C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S345C2[];
extern void _ZN6S345C2D1Ev();
extern void _ZN6S345C2D0Ev();
extern void _ZN6S345C62v1Ev();
extern void _ZN6S345C62v2Ev();
extern void _ZN6S345C62v3Ev();
extern void _ZN6S345C52v4Ev();
extern void _ZN6S345C52v5Ev();
extern void _ZN6S345C42v6Ev();
extern void _ZN6S345C32v7Ev();
extern void _ZN6S345C32v8Ev();
extern void _ZN6S345C32v9Ev();
extern void _ZN6S345C33v10Ev();
extern void _ZN6S345C33v11Ev();
extern void _ZN6S345C33v12Ev();
extern void _ZN6S345C33v13Ev();
extern void _ZN6S345C23v14Ev();
extern void _ZN6S345C23v15Ev();
extern void _ZN6S345C23v16Ev();
static  VTBL_ENTRY vtc_S345C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S345C2[0]),
  (VTBL_ENTRY)&_ZN6S345C2D1Ev,
  (VTBL_ENTRY)&_ZN6S345C2D0Ev,
  (VTBL_ENTRY)&_ZN6S345C62v1Ev,
  (VTBL_ENTRY)&_ZN6S345C62v2Ev,
  (VTBL_ENTRY)&_ZN6S345C62v3Ev,
  (VTBL_ENTRY)&_ZN6S345C52v4Ev,
  (VTBL_ENTRY)&_ZN6S345C52v5Ev,
  (VTBL_ENTRY)&_ZN6S345C42v6Ev,
  (VTBL_ENTRY)&_ZN6S345C32v7Ev,
  (VTBL_ENTRY)&_ZN6S345C32v8Ev,
  (VTBL_ENTRY)&_ZN6S345C32v9Ev,
  (VTBL_ENTRY)&_ZN6S345C33v10Ev,
  (VTBL_ENTRY)&_ZN6S345C33v11Ev,
  (VTBL_ENTRY)&_ZN6S345C33v12Ev,
  (VTBL_ENTRY)&_ZN6S345C33v13Ev,
  (VTBL_ENTRY)&_ZN6S345C23v14Ev,
  (VTBL_ENTRY)&_ZN6S345C23v15Ev,
  (VTBL_ENTRY)&_ZN6S345C23v16Ev,
};
extern VTBL_ENTRY _ZTI6S345C2[];
extern  VTBL_ENTRY _ZTV6S345C2[];
Class_Descriptor cd_S345C2 = {  "S345C2", // class name
  bases_S345C2, 4,
  &(vtc_S345C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI6S345C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S345C2),20, //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  S345C1  : S345C2 {
  virtual  ~S345C1(); // _ZN6S345C1D1Ev
  S345C1(); // tgen
};
//SIG(1 S345C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v1 v2 v3 FC7{ m Fp Fi FC8{ m}} Fi[2] Fc} v4 v5 Fp} vd v6 Fp Fc FC9{ m Fi[2]}} vd v7 v8 v9 v10 v11 v12 v13 Fp[3] Fi FC10{ m Fp[2]}} vd v14 v15 v16 Fp[2]} vd}


 S345C1 ::~S345C1(){ note_dtor("S345C1", this);}
S345C1 ::S345C1(){ note_ctor("S345C1", this);} // tgen

static void Test_S345C1()
{
  extern Class_Descriptor cd_S345C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S345C1, buf);
    S345C1 *dp, &lv = *(dp=new (buf) S345C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S345C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S345C1)");
    check_base_class_offset(lv, (S345C6*)(S345C5*)(S345C4*)(S345C3*)(S345C2*), 0, "S345C1");
    check_base_class_offset(lv, (S345C5*)(S345C4*)(S345C3*)(S345C2*), 0, "S345C1");
    check_base_class_offset(lv, (S345C4*)(S345C3*)(S345C2*), 0, "S345C1");
    check_base_class_offset(lv, (S345C3*)(S345C2*), 0, "S345C1");
    check_base_class_offset(lv, (S345C2*), 0, "S345C1");
    test_class_info(&lv, &cd_S345C1);
    dp->~S345C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS345C1(Test_S345C1, "S345C1", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN6S345C1C1Ev();
extern void _ZN6S345C1D1Ev();
Name_Map name_map_S345C1[] = {
  NSPAIR(_ZN6S345C1C1Ev),
  NSPAIR(_ZN6S345C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S345C6;
extern VTBL_ENTRY _ZTI6S345C6[];
extern  VTBL_ENTRY _ZTV6S345C6[];
extern Class_Descriptor cd_S345C5;
extern VTBL_ENTRY _ZTI6S345C5[];
extern  VTBL_ENTRY _ZTV6S345C5[];
extern Class_Descriptor cd_S345C4;
extern VTBL_ENTRY _ZTI6S345C4[];
extern  VTBL_ENTRY _ZTV6S345C4[];
extern Class_Descriptor cd_S345C3;
extern VTBL_ENTRY _ZTI6S345C3[];
extern  VTBL_ENTRY _ZTV6S345C3[];
extern Class_Descriptor cd_S345C2;
extern VTBL_ENTRY _ZTI6S345C2[];
extern  VTBL_ENTRY _ZTV6S345C2[];
static Base_Class bases_S345C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S345C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S345C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S345C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S345C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S345C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S345C1[];
extern void _ZN6S345C1D1Ev();
extern void _ZN6S345C1D0Ev();
extern void _ZN6S345C62v1Ev();
extern void _ZN6S345C62v2Ev();
extern void _ZN6S345C62v3Ev();
extern void _ZN6S345C52v4Ev();
extern void _ZN6S345C52v5Ev();
extern void _ZN6S345C42v6Ev();
extern void _ZN6S345C32v7Ev();
extern void _ZN6S345C32v8Ev();
extern void _ZN6S345C32v9Ev();
extern void _ZN6S345C33v10Ev();
extern void _ZN6S345C33v11Ev();
extern void _ZN6S345C33v12Ev();
extern void _ZN6S345C33v13Ev();
extern void _ZN6S345C23v14Ev();
extern void _ZN6S345C23v15Ev();
extern void _ZN6S345C23v16Ev();
static  VTBL_ENTRY vtc_S345C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S345C1[0]),
  (VTBL_ENTRY)&_ZN6S345C1D1Ev,
  (VTBL_ENTRY)&_ZN6S345C1D0Ev,
  (VTBL_ENTRY)&_ZN6S345C62v1Ev,
  (VTBL_ENTRY)&_ZN6S345C62v2Ev,
  (VTBL_ENTRY)&_ZN6S345C62v3Ev,
  (VTBL_ENTRY)&_ZN6S345C52v4Ev,
  (VTBL_ENTRY)&_ZN6S345C52v5Ev,
  (VTBL_ENTRY)&_ZN6S345C42v6Ev,
  (VTBL_ENTRY)&_ZN6S345C32v7Ev,
  (VTBL_ENTRY)&_ZN6S345C32v8Ev,
  (VTBL_ENTRY)&_ZN6S345C32v9Ev,
  (VTBL_ENTRY)&_ZN6S345C33v10Ev,
  (VTBL_ENTRY)&_ZN6S345C33v11Ev,
  (VTBL_ENTRY)&_ZN6S345C33v12Ev,
  (VTBL_ENTRY)&_ZN6S345C33v13Ev,
  (VTBL_ENTRY)&_ZN6S345C23v14Ev,
  (VTBL_ENTRY)&_ZN6S345C23v15Ev,
  (VTBL_ENTRY)&_ZN6S345C23v16Ev,
};
extern VTBL_ENTRY _ZTI6S345C1[];
extern  VTBL_ENTRY _ZTV6S345C1[];
Class_Descriptor cd_S345C1 = {  "S345C1", // class name
  bases_S345C1, 5,
  &(vtc_S345C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI6S345C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S345C1),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4793C3  {
  ::S4473C12_nt s4793c3f0;
  int s4793c3f1[2];
  char s4793c3f2;
  virtual  ~S4793C3(); // _ZN7S4793C3D1Ev
  virtual void  v3(); // _ZN7S4793C32v3Ev
  virtual void  v4(); // _ZN7S4793C32v4Ev
  virtual void  v5(); // _ZN7S4793C32v5Ev
  S4793C3(); // tgen
};
//SIG(-1 S4793C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4793C3 ::~S4793C3(){ note_dtor("S4793C3", this);}
void  S4793C3 ::v3(){vfunc_called(this, "_ZN7S4793C32v3Ev");}
void  S4793C3 ::v4(){vfunc_called(this, "_ZN7S4793C32v4Ev");}
void  S4793C3 ::v5(){vfunc_called(this, "_ZN7S4793C32v5Ev");}
S4793C3 ::S4793C3(){ note_ctor("S4793C3", this);} // tgen

static void Test_S4793C3()
{
  extern Class_Descriptor cd_S4793C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4793C3, buf);
    S4793C3 *dp, &lv = *(dp=new (buf) S4793C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4793C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4793C3)");
    check_field_offset(lv, s4793c3f0, ABISELECT(8,4), "S4793C3.s4793c3f0");
    check_field_offset(lv, s4793c3f1, ABISELECT(24,16), "S4793C3.s4793c3f1");
    check_field_offset(lv, s4793c3f2, ABISELECT(32,24), "S4793C3.s4793c3f2");
    test_class_info(&lv, &cd_S4793C3);
    dp->~S4793C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4793C3(Test_S4793C3, "S4793C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4793C3C1Ev();
extern void _ZN7S4793C3D1Ev();
Name_Map name_map_S4793C3[] = {
  NSPAIR(_ZN7S4793C3C1Ev),
  NSPAIR(_ZN7S4793C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4793C3[];
extern void _ZN7S4793C3D1Ev();
extern void _ZN7S4793C3D0Ev();
extern void _ZN7S4793C32v3Ev();
extern void _ZN7S4793C32v4Ev();
extern void _ZN7S4793C32v5Ev();
static  VTBL_ENTRY vtc_S4793C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4793C3[0]),
  (VTBL_ENTRY)&_ZN7S4793C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4793C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4793C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4793C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4793C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4793C3[];
extern  VTBL_ENTRY _ZTV7S4793C3[];
Class_Descriptor cd_S4793C3 = {  "S4793C3", // class name
  0,0,//no base classes
  &(vtc_S4793C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4793C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4793C3),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  S4793C2  : S4793C3 {
  void *s4793c2f0;
  virtual void  v6(); // _ZN7S4793C22v6Ev
  virtual void  v7(); // _ZN7S4793C22v7Ev
  ~S4793C2(); // tgen
  S4793C2(); // tgen
};
//SIG(-1 S4793C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4793C2 ::v6(){vfunc_called(this, "_ZN7S4793C22v6Ev");}
void  S4793C2 ::v7(){vfunc_called(this, "_ZN7S4793C22v7Ev");}
S4793C2 ::~S4793C2(){ note_dtor("S4793C2", this);} // tgen
S4793C2 ::S4793C2(){ note_ctor("S4793C2", this);} // tgen

static void Test_S4793C2()
{
  extern Class_Descriptor cd_S4793C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4793C2, buf);
    S4793C2 *dp, &lv = *(dp=new (buf) S4793C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4793C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4793C2)");
    check_base_class_offset(lv, (S4793C3*), 0, "S4793C2");
    check_field_offset(lv, s4793c2f0, ABISELECT(40,28), "S4793C2.s4793c2f0");
    test_class_info(&lv, &cd_S4793C2);
    dp->~S4793C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4793C2(Test_S4793C2, "S4793C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4793C2C1Ev();
extern void _ZN7S4793C2D1Ev();
Name_Map name_map_S4793C2[] = {
  NSPAIR(_ZN7S4793C2C1Ev),
  NSPAIR(_ZN7S4793C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4793C3;
extern VTBL_ENTRY _ZTI7S4793C3[];
extern  VTBL_ENTRY _ZTV7S4793C3[];
static Base_Class bases_S4793C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4793C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4793C2[];
extern void _ZN7S4793C2D1Ev();
extern void _ZN7S4793C2D0Ev();
extern void _ZN7S4793C32v3Ev();
extern void _ZN7S4793C32v4Ev();
extern void _ZN7S4793C32v5Ev();
extern void _ZN7S4793C22v6Ev();
extern void _ZN7S4793C22v7Ev();
static  VTBL_ENTRY vtc_S4793C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4793C2[0]),
  (VTBL_ENTRY)&_ZN7S4793C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4793C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4793C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4793C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4793C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4793C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4793C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4793C2[];
extern  VTBL_ENTRY _ZTV7S4793C2[];
Class_Descriptor cd_S4793C2 = {  "S4793C2", // class name
  bases_S4793C2, 1,
  &(vtc_S4793C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4793C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4793C2),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  S4793C7  {
  __tsi64 s4793c7f0[3];
  void *s4793c7f1[2];
  __tsi64 s4793c7f2[2];
  void  mf4793c7(); // _ZN7S4793C78mf4793c7Ev
};
//SIG(-1 S4793C7) C1{ m FL[3] Fp[2] FL[2]}


void  S4793C7 ::mf4793c7(){}

static void Test_S4793C7()
{
  {
    init_simple_test("S4793C7");
    S4793C7 lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S4793C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4793C7)");
    check_field_offset(lv, s4793c7f0, 0, "S4793C7.s4793c7f0");
    check_field_offset(lv, s4793c7f1, 24, "S4793C7.s4793c7f1");
    check_field_offset(lv, s4793c7f2, ABISELECT(40,32), "S4793C7.s4793c7f2");
  }
}
static Arrange_To_Call_Me vS4793C7(Test_S4793C7, "S4793C7", ABISELECT(56,48));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4793C6  {
  __tsi64 s4793c6f0;
  ::S4793C7 s4793c6f1;
  void *s4793c6f2;
  int s4793c6f3;
  __tsi64 s4793c6f4;
  int s4793c6f5;
  void  mf4793c6(); // _ZN7S4793C68mf4793c6Ev
};
//SIG(-1 S4793C6) C1{ m FL FC2{ m FL[3] Fp[2] FL[2]} Fp Fi FL Fi}


void  S4793C6 ::mf4793c6(){}

static void Test_S4793C6()
{
  {
    init_simple_test("S4793C6");
    S4793C6 lv;
    check2(sizeof(lv), ABISELECT(96,76), "sizeof(S4793C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4793C6)");
    check_field_offset(lv, s4793c6f0, 0, "S4793C6.s4793c6f0");
    check_field_offset(lv, s4793c6f1, 8, "S4793C6.s4793c6f1");
    check_field_offset(lv, s4793c6f2, ABISELECT(64,56), "S4793C6.s4793c6f2");
    check_field_offset(lv, s4793c6f3, ABISELECT(72,60), "S4793C6.s4793c6f3");
    check_field_offset(lv, s4793c6f4, ABISELECT(80,64), "S4793C6.s4793c6f4");
    check_field_offset(lv, s4793c6f5, ABISELECT(88,72), "S4793C6.s4793c6f5");
  }
}
static Arrange_To_Call_Me vS4793C6(Test_S4793C6, "S4793C6", ABISELECT(96,76));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4793C1  : S4793C2 {
  void *s4793c1f0;
  ::S4793C6 s4793c1f1;
  void *s4793c1f2[2];
  int s4793c1f3;
  void *s4793c1f4;
  char s4793c1f5;
  int s4793c1f6;
  ::S2173C10_nt s4793c1f7;
  char s4793c1f8;
  ::S2366C19 s4793c1f9;
  virtual  ~S4793C1(); // _ZN7S4793C1D1Ev
  virtual void  v1(); // _ZN7S4793C12v1Ev
  virtual void  v2(); // _ZN7S4793C12v2Ev
  S4793C1(); // tgen
};
//SIG(1 S4793C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 Fp FC6{ m FL FC7{ m FL[3] Fp[2] FL[2]} Fp Fi FL Fi} Fp[2] Fi Fp Fc Fi FC8{ m FC9{ FL[4]}} Fc FC10{ m Fp}}


 S4793C1 ::~S4793C1(){ note_dtor("S4793C1", this);}
void  S4793C1 ::v1(){vfunc_called(this, "_ZN7S4793C12v1Ev");}
void  S4793C1 ::v2(){vfunc_called(this, "_ZN7S4793C12v2Ev");}
S4793C1 ::S4793C1(){ note_ctor("S4793C1", this);} // tgen

static void Test_S4793C1()
{
  extern Class_Descriptor cd_S4793C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,45)];
    init_test(&cd_S4793C1, buf);
    S4793C1 *dp, &lv = *(dp=new (buf) S4793C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,176), "sizeof(S4793C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4793C1)");
    check_base_class_offset(lv, (S4793C3*)(S4793C2*), 0, "S4793C1");
    check_base_class_offset(lv, (S4793C2*), 0, "S4793C1");
    check_field_offset(lv, s4793c1f0, ABISELECT(48,32), "S4793C1.s4793c1f0");
    check_field_offset(lv, s4793c1f1, ABISELECT(56,36), "S4793C1.s4793c1f1");
    check_field_offset(lv, s4793c1f2, ABISELECT(152,112), "S4793C1.s4793c1f2");
    check_field_offset(lv, s4793c1f3, ABISELECT(168,120), "S4793C1.s4793c1f3");
    check_field_offset(lv, s4793c1f4, ABISELECT(176,124), "S4793C1.s4793c1f4");
    check_field_offset(lv, s4793c1f5, ABISELECT(184,128), "S4793C1.s4793c1f5");
    check_field_offset(lv, s4793c1f6, ABISELECT(188,132), "S4793C1.s4793c1f6");
    check_field_offset(lv, s4793c1f7, ABISELECT(192,136), "S4793C1.s4793c1f7");
    check_field_offset(lv, s4793c1f8, ABISELECT(224,168), "S4793C1.s4793c1f8");
    check_field_offset(lv, s4793c1f9, ABISELECT(232,172), "S4793C1.s4793c1f9");
    test_class_info(&lv, &cd_S4793C1);
    dp->~S4793C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4793C1(Test_S4793C1, "S4793C1", ABISELECT(240,176));

#else // __cplusplus

extern void _ZN7S4793C1C1Ev();
extern void _ZN7S4793C1D1Ev();
Name_Map name_map_S4793C1[] = {
  NSPAIR(_ZN7S4793C1C1Ev),
  NSPAIR(_ZN7S4793C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4793C3;
extern VTBL_ENTRY _ZTI7S4793C3[];
extern  VTBL_ENTRY _ZTV7S4793C3[];
extern Class_Descriptor cd_S4793C2;
extern VTBL_ENTRY _ZTI7S4793C2[];
extern  VTBL_ENTRY _ZTV7S4793C2[];
static Base_Class bases_S4793C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4793C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4793C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4793C1[];
extern void _ZN7S4793C1D1Ev();
extern void _ZN7S4793C1D0Ev();
extern void _ZN7S4793C32v3Ev();
extern void _ZN7S4793C32v4Ev();
extern void _ZN7S4793C32v5Ev();
extern void _ZN7S4793C22v6Ev();
extern void _ZN7S4793C22v7Ev();
extern void _ZN7S4793C12v1Ev();
extern void _ZN7S4793C12v2Ev();
static  VTBL_ENTRY vtc_S4793C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4793C1[0]),
  (VTBL_ENTRY)&_ZN7S4793C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4793C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4793C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4793C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4793C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4793C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4793C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4793C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4793C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4793C1[];
extern  VTBL_ENTRY _ZTV7S4793C1[];
Class_Descriptor cd_S4793C1 = {  "S4793C1", // class name
  bases_S4793C1, 2,
  &(vtc_S4793C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,176), // object size
  NSPAIRA(_ZTI7S4793C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4793C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5305C3  {
  ::S4473C12_nt s5305c3f0;
  int s5305c3f1[2];
  char s5305c3f2;
  virtual  ~S5305C3(); // _ZN7S5305C3D1Ev
  virtual void  v6(); // _ZN7S5305C32v6Ev
  virtual void  v7(); // _ZN7S5305C32v7Ev
  virtual void  v8(); // _ZN7S5305C32v8Ev
  S5305C3(); // tgen
};
//SIG(-1 S5305C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5305C3 ::~S5305C3(){ note_dtor("S5305C3", this);}
void  S5305C3 ::v6(){vfunc_called(this, "_ZN7S5305C32v6Ev");}
void  S5305C3 ::v7(){vfunc_called(this, "_ZN7S5305C32v7Ev");}
void  S5305C3 ::v8(){vfunc_called(this, "_ZN7S5305C32v8Ev");}
S5305C3 ::S5305C3(){ note_ctor("S5305C3", this);} // tgen

static void Test_S5305C3()
{
  extern Class_Descriptor cd_S5305C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5305C3, buf);
    S5305C3 *dp, &lv = *(dp=new (buf) S5305C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5305C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5305C3)");
    check_field_offset(lv, s5305c3f0, ABISELECT(8,4), "S5305C3.s5305c3f0");
    check_field_offset(lv, s5305c3f1, ABISELECT(24,16), "S5305C3.s5305c3f1");
    check_field_offset(lv, s5305c3f2, ABISELECT(32,24), "S5305C3.s5305c3f2");
    test_class_info(&lv, &cd_S5305C3);
    dp->~S5305C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5305C3(Test_S5305C3, "S5305C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5305C3C1Ev();
extern void _ZN7S5305C3D1Ev();
Name_Map name_map_S5305C3[] = {
  NSPAIR(_ZN7S5305C3C1Ev),
  NSPAIR(_ZN7S5305C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5305C3[];
extern void _ZN7S5305C3D1Ev();
extern void _ZN7S5305C3D0Ev();
extern void _ZN7S5305C32v6Ev();
extern void _ZN7S5305C32v7Ev();
extern void _ZN7S5305C32v8Ev();
static  VTBL_ENTRY vtc_S5305C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5305C3[0]),
  (VTBL_ENTRY)&_ZN7S5305C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5305C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5305C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5305C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5305C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S5305C3[];
extern  VTBL_ENTRY _ZTV7S5305C3[];
Class_Descriptor cd_S5305C3 = {  "S5305C3", // class name
  0,0,//no base classes
  &(vtc_S5305C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5305C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5305C3),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  S5305C2  : S5305C3 {
  void *s5305c2f0;
  virtual void  v9(); // _ZN7S5305C22v9Ev
  virtual void  v10(); // _ZN7S5305C23v10Ev
  ~S5305C2(); // tgen
  S5305C2(); // tgen
};
//SIG(-1 S5305C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5305C2 ::v9(){vfunc_called(this, "_ZN7S5305C22v9Ev");}
void  S5305C2 ::v10(){vfunc_called(this, "_ZN7S5305C23v10Ev");}
S5305C2 ::~S5305C2(){ note_dtor("S5305C2", this);} // tgen
S5305C2 ::S5305C2(){ note_ctor("S5305C2", this);} // tgen

static void Test_S5305C2()
{
  extern Class_Descriptor cd_S5305C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5305C2, buf);
    S5305C2 *dp, &lv = *(dp=new (buf) S5305C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5305C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5305C2)");
    check_base_class_offset(lv, (S5305C3*), 0, "S5305C2");
    check_field_offset(lv, s5305c2f0, ABISELECT(40,28), "S5305C2.s5305c2f0");
    test_class_info(&lv, &cd_S5305C2);
    dp->~S5305C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5305C2(Test_S5305C2, "S5305C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5305C2C1Ev();
extern void _ZN7S5305C2D1Ev();
Name_Map name_map_S5305C2[] = {
  NSPAIR(_ZN7S5305C2C1Ev),
  NSPAIR(_ZN7S5305C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5305C3;
extern VTBL_ENTRY _ZTI7S5305C3[];
extern  VTBL_ENTRY _ZTV7S5305C3[];
static Base_Class bases_S5305C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5305C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5305C2[];
extern void _ZN7S5305C2D1Ev();
extern void _ZN7S5305C2D0Ev();
extern void _ZN7S5305C32v6Ev();
extern void _ZN7S5305C32v7Ev();
extern void _ZN7S5305C32v8Ev();
extern void _ZN7S5305C22v9Ev();
extern void _ZN7S5305C23v10Ev();
static  VTBL_ENTRY vtc_S5305C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5305C2[0]),
  (VTBL_ENTRY)&_ZN7S5305C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5305C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5305C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5305C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5305C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5305C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5305C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S5305C2[];
extern  VTBL_ENTRY _ZTV7S5305C2[];
Class_Descriptor cd_S5305C2 = {  "S5305C2", // class name
  bases_S5305C2, 1,
  &(vtc_S5305C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5305C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5305C2),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  S5305C6_nt  {
  virtual  ~S5305C6_nt(); // _ZN10S5305C6_ntD1Ev
  virtual void  v11(); // _ZN10S5305C6_nt3v11Ev
  virtual void  v12(); // _ZN10S5305C6_nt3v12Ev
  virtual void  v13(); // _ZN10S5305C6_nt3v13Ev
  S5305C6_nt(); // tgen
};
//SIG(-1 S5305C6_nt) C1{ vd v1 v2 v3}


 S5305C6_nt ::~S5305C6_nt(){ note_dtor("S5305C6_nt", this);}
void  S5305C6_nt ::v11(){vfunc_called(this, "_ZN10S5305C6_nt3v11Ev");}
void  S5305C6_nt ::v12(){vfunc_called(this, "_ZN10S5305C6_nt3v12Ev");}
void  S5305C6_nt ::v13(){vfunc_called(this, "_ZN10S5305C6_nt3v13Ev");}
S5305C6_nt ::S5305C6_nt(){ note_ctor("S5305C6_nt", this);} // tgen

//skip512 S5305C6_nt

#else // __cplusplus

extern void _ZN10S5305C6_ntC1Ev();
extern void _ZN10S5305C6_ntD1Ev();
Name_Map name_map_S5305C6_nt[] = {
  NSPAIR(_ZN10S5305C6_ntC1Ev),
  NSPAIR(_ZN10S5305C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S5305C6_nt[];
extern void _ZN10S5305C6_ntD1Ev();
extern void _ZN10S5305C6_ntD0Ev();
extern void _ZN10S5305C6_nt3v11Ev();
extern void _ZN10S5305C6_nt3v12Ev();
extern void _ZN10S5305C6_nt3v13Ev();
static  VTBL_ENTRY vtc_S5305C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5305C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S5305C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5305C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5305C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5305C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5305C6_nt3v13Ev,
};
extern VTBL_ENTRY _ZTI10S5305C6_nt[];
VTBL_ENTRY *P__ZTI10S5305C6_nt = _ZTI10S5305C6_nt; 
extern  VTBL_ENTRY _ZTV10S5305C6_nt[];
Class_Descriptor cd_S5305C6_nt = {  "S5305C6_nt", // class name
  0,0,//no base classes
  &(vtc_S5305C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S5305C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S5305C6_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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5305C10_nt  {
  int s5305c10f0[4];
};
//SIG(-1 S5305C10_nt) C1{ Fi[4]}



//skip512 S5305C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5305C9_nt  {
  void *s5305c9f0;
  ::S5305C10_nt s5305c9f1;
  void  mf5305c9(); // _ZN10S5305C9_nt8mf5305c9Ev
};
//SIG(-1 S5305C9_nt) C1{ m Fp FC2{ Fi[4]}}


void  S5305C9_nt ::mf5305c9(){}

//skip512 S5305C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5305C1  : S5305C2 , S5305C6_nt {
  ::S2173C10_nt s5305c1f0;
  ::S5305C9_nt s5305c1f1;
  void *s5305c1f2[2];
  ::S2366C19 s5305c1f3;
  ::S2366C10_nt s5305c1f4;
  int s5305c1f5;
  virtual void  v1(); // _ZN7S5305C12v1Ev
  virtual void  v2(); // _ZN7S5305C12v2Ev
  virtual void  v3(); // _ZN7S5305C12v3Ev
  virtual void  v4(); // _ZN7S5305C12v4Ev
  virtual void  v5(); // _ZN7S5305C12v5Ev
  ~S5305C1(); // tgen
  S5305C1(); // tgen
};
//SIG(1 S5305C1) C1{ BC2{ BC3{ vd v6 v7 v8 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v9 v10 Fp} BC6{ vd v11 v12 v13} v1 v2 v3 v4 v5 FC7{ m FC8{ FL[4]}} FC9{ m Fp FC10{ Fi[4]}} Fp[2] FC11{ m Fp} FC12{ m Fp} Fi}


void  S5305C1 ::v1(){vfunc_called(this, "_ZN7S5305C12v1Ev");}
void  S5305C1 ::v2(){vfunc_called(this, "_ZN7S5305C12v2Ev");}
void  S5305C1 ::v3(){vfunc_called(this, "_ZN7S5305C12v3Ev");}
void  S5305C1 ::v4(){vfunc_called(this, "_ZN7S5305C12v4Ev");}
void  S5305C1 ::v5(){vfunc_called(this, "_ZN7S5305C12v5Ev");}
S5305C1 ::~S5305C1(){ note_dtor("S5305C1", this);} // tgen
S5305C1 ::S5305C1(){ note_ctor("S5305C1", this);} // tgen

static void Test_S5305C1()
{
  extern Class_Descriptor cd_S5305C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,28)];
    init_test(&cd_S5305C1, buf);
    S5305C1 *dp, &lv = *(dp=new (buf) S5305C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,108), "sizeof(S5305C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5305C1)");
    check_base_class_offset(lv, (S5305C3*)(S5305C2*), 0, "S5305C1");
    check_base_class_offset(lv, (S5305C2*), 0, "S5305C1");
    check_base_class_offset(lv, (S5305C6_nt*), ABISELECT(48,32), "S5305C1");
    check_field_offset(lv, s5305c1f0, ABISELECT(56,36), "S5305C1.s5305c1f0");
    check_field_offset(lv, s5305c1f1, ABISELECT(88,68), "S5305C1.s5305c1f1");
    check_field_offset(lv, s5305c1f2, ABISELECT(112,88), "S5305C1.s5305c1f2");
    check_field_offset(lv, s5305c1f3, ABISELECT(128,96), "S5305C1.s5305c1f3");
    check_field_offset(lv, s5305c1f4, ABISELECT(136,100), "S5305C1.s5305c1f4");
    check_field_offset(lv, s5305c1f5, ABISELECT(144,104), "S5305C1.s5305c1f5");
    test_class_info(&lv, &cd_S5305C1);
    dp->~S5305C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5305C1(Test_S5305C1, "S5305C1", ABISELECT(152,108));

#else // __cplusplus

extern void _ZN7S5305C1C1Ev();
extern void _ZN7S5305C1D1Ev();
Name_Map name_map_S5305C1[] = {
  NSPAIR(_ZN7S5305C1C1Ev),
  NSPAIR(_ZN7S5305C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5305C3;
extern VTBL_ENTRY _ZTI7S5305C3[];
extern  VTBL_ENTRY _ZTV7S5305C3[];
extern Class_Descriptor cd_S5305C2;
extern VTBL_ENTRY _ZTI7S5305C2[];
extern  VTBL_ENTRY _ZTV7S5305C2[];
extern Class_Descriptor cd_S5305C6_nt;
extern VTBL_ENTRY _ZTI10S5305C6_nt[];
extern  VTBL_ENTRY _ZTV10S5305C6_nt[];
static Base_Class bases_S5305C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5305C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5305C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5305C6_nt,    ABISELECT(48,32), //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5305C1[];
extern void _ZN7S5305C1D1Ev();
extern void _ZN7S5305C1D0Ev();
extern void _ZN7S5305C32v6Ev();
extern void _ZN7S5305C32v7Ev();
extern void _ZN7S5305C32v8Ev();
extern void _ZN7S5305C22v9Ev();
extern void _ZN7S5305C23v10Ev();
extern void _ZN7S5305C12v1Ev();
extern void _ZN7S5305C12v2Ev();
extern void _ZN7S5305C12v3Ev();
extern void _ZN7S5305C12v4Ev();
extern void _ZN7S5305C12v5Ev();
extern void ABISELECT(_ZThn48_N7S5305C1D1Ev,_ZThn32_N7S5305C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S5305C1D0Ev,_ZThn32_N7S5305C1D0Ev)();
extern void _ZN10S5305C6_nt3v11Ev();
extern void _ZN10S5305C6_nt3v12Ev();
extern void _ZN10S5305C6_nt3v13Ev();
static  VTBL_ENTRY vtc_S5305C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5305C1[0]),
  (VTBL_ENTRY)&_ZN7S5305C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5305C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5305C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5305C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5305C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5305C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5305C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5305C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5305C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5305C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5305C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5305C12v5Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S5305C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S5305C1D1Ev,_ZThn32_N7S5305C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S5305C1D0Ev,_ZThn32_N7S5305C1D0Ev),
  (VTBL_ENTRY)&_ZN10S5305C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5305C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5305C6_nt3v13Ev,
};
extern VTBL_ENTRY _ZTI7S5305C1[];
extern  VTBL_ENTRY _ZTV7S5305C1[];
Class_Descriptor cd_S5305C1 = {  "S5305C1", // class name
  bases_S5305C1, 3,
  &(vtc_S5305C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,108), // object size
  NSPAIRA(_ZTI7S5305C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5305C1),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  S4799C3  {
  ::S4473C12_nt s4799c3f0;
  int s4799c3f1[2];
  char s4799c3f2;
  virtual  ~S4799C3(); // _ZN7S4799C3D1Ev
  virtual void  v3(); // _ZN7S4799C32v3Ev
  virtual void  v4(); // _ZN7S4799C32v4Ev
  virtual void  v5(); // _ZN7S4799C32v5Ev
  S4799C3(); // tgen
};
//SIG(-1 S4799C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4799C3 ::~S4799C3(){ note_dtor("S4799C3", this);}
void  S4799C3 ::v3(){vfunc_called(this, "_ZN7S4799C32v3Ev");}
void  S4799C3 ::v4(){vfunc_called(this, "_ZN7S4799C32v4Ev");}
void  S4799C3 ::v5(){vfunc_called(this, "_ZN7S4799C32v5Ev");}
S4799C3 ::S4799C3(){ note_ctor("S4799C3", this);} // tgen

static void Test_S4799C3()
{
  extern Class_Descriptor cd_S4799C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4799C3, buf);
    S4799C3 *dp, &lv = *(dp=new (buf) S4799C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4799C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4799C3)");
    check_field_offset(lv, s4799c3f0, ABISELECT(8,4), "S4799C3.s4799c3f0");
    check_field_offset(lv, s4799c3f1, ABISELECT(24,16), "S4799C3.s4799c3f1");
    check_field_offset(lv, s4799c3f2, ABISELECT(32,24), "S4799C3.s4799c3f2");
    test_class_info(&lv, &cd_S4799C3);
    dp->~S4799C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4799C3(Test_S4799C3, "S4799C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4799C3C1Ev();
extern void _ZN7S4799C3D1Ev();
Name_Map name_map_S4799C3[] = {
  NSPAIR(_ZN7S4799C3C1Ev),
  NSPAIR(_ZN7S4799C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4799C3[];
extern void _ZN7S4799C3D1Ev();
extern void _ZN7S4799C3D0Ev();
extern void _ZN7S4799C32v3Ev();
extern void _ZN7S4799C32v4Ev();
extern void _ZN7S4799C32v5Ev();
static  VTBL_ENTRY vtc_S4799C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4799C3[0]),
  (VTBL_ENTRY)&_ZN7S4799C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4799C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4799C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4799C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4799C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4799C3[];
extern  VTBL_ENTRY _ZTV7S4799C3[];
Class_Descriptor cd_S4799C3 = {  "S4799C3", // class name
  0,0,//no base classes
  &(vtc_S4799C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4799C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4799C3),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  S4799C2  : S4799C3 {
  void *s4799c2f0;
  virtual void  v6(); // _ZN7S4799C22v6Ev
  virtual void  v7(); // _ZN7S4799C22v7Ev
  ~S4799C2(); // tgen
  S4799C2(); // tgen
};
//SIG(-1 S4799C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4799C2 ::v6(){vfunc_called(this, "_ZN7S4799C22v6Ev");}
void  S4799C2 ::v7(){vfunc_called(this, "_ZN7S4799C22v7Ev");}
S4799C2 ::~S4799C2(){ note_dtor("S4799C2", this);} // tgen
S4799C2 ::S4799C2(){ note_ctor("S4799C2", this);} // tgen

static void Test_S4799C2()
{
  extern Class_Descriptor cd_S4799C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4799C2, buf);
    S4799C2 *dp, &lv = *(dp=new (buf) S4799C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4799C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4799C2)");
    check_base_class_offset(lv, (S4799C3*), 0, "S4799C2");
    check_field_offset(lv, s4799c2f0, ABISELECT(40,28), "S4799C2.s4799c2f0");
    test_class_info(&lv, &cd_S4799C2);
    dp->~S4799C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4799C2(Test_S4799C2, "S4799C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4799C2C1Ev();
extern void _ZN7S4799C2D1Ev();
Name_Map name_map_S4799C2[] = {
  NSPAIR(_ZN7S4799C2C1Ev),
  NSPAIR(_ZN7S4799C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4799C3;
extern VTBL_ENTRY _ZTI7S4799C3[];
extern  VTBL_ENTRY _ZTV7S4799C3[];
static Base_Class bases_S4799C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4799C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4799C2[];
extern void _ZN7S4799C2D1Ev();
extern void _ZN7S4799C2D0Ev();
extern void _ZN7S4799C32v3Ev();
extern void _ZN7S4799C32v4Ev();
extern void _ZN7S4799C32v5Ev();
extern void _ZN7S4799C22v6Ev();
extern void _ZN7S4799C22v7Ev();
static  VTBL_ENTRY vtc_S4799C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4799C2[0]),
  (VTBL_ENTRY)&_ZN7S4799C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4799C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4799C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4799C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4799C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4799C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4799C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4799C2[];
extern  VTBL_ENTRY _ZTV7S4799C2[];
Class_Descriptor cd_S4799C2 = {  "S4799C2", // class name
  bases_S4799C2, 1,
  &(vtc_S4799C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4799C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4799C2),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  S4799C6  {
  ::S2173C14 s4799c6f0;
  ::S2173C7_nt s4799c6f1;
  char s4799c6f2;
  void  mf4799c6(); // _ZN7S4799C68mf4799c6Ev
  virtual  ~S4799C6(); // _ZN7S4799C6D1Ev
  S4799C6(); // tgen
};
//SIG(-1 S4799C6) C1{ vd m FC2{ m Fp Fi[2] FC3{ m}} FC4{ m Fp Fi[2] FC5{ m}} Fc}


void  S4799C6 ::mf4799c6(){}
 S4799C6 ::~S4799C6(){ note_dtor("S4799C6", this);}
S4799C6 ::S4799C6(){ note_ctor("S4799C6", this);} // tgen

static void Test_S4799C6()
{
  extern Class_Descriptor cd_S4799C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S4799C6, buf);
    S4799C6 *dp, &lv = *(dp=new (buf) S4799C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S4799C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4799C6)");
    check_field_offset(lv, s4799c6f0, ABISELECT(8,4), "S4799C6.s4799c6f0");
    check_field_offset(lv, s4799c6f1, ABISELECT(32,20), "S4799C6.s4799c6f1");
    check_field_offset(lv, s4799c6f2, ABISELECT(56,36), "S4799C6.s4799c6f2");
    test_class_info(&lv, &cd_S4799C6);
    dp->~S4799C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4799C6(Test_S4799C6, "S4799C6", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S4799C6C1Ev();
extern void _ZN7S4799C6D1Ev();
Name_Map name_map_S4799C6[] = {
  NSPAIR(_ZN7S4799C6C1Ev),
  NSPAIR(_ZN7S4799C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4799C6[];
extern void _ZN7S4799C6D1Ev();
extern void _ZN7S4799C6D0Ev();
static  VTBL_ENTRY vtc_S4799C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4799C6[0]),
  (VTBL_ENTRY)&_ZN7S4799C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4799C6D0Ev,
};
extern VTBL_ENTRY _ZTI7S4799C6[];
extern  VTBL_ENTRY _ZTV7S4799C6[];
Class_Descriptor cd_S4799C6 = {  "S4799C6", // class name
  0,0,//no base classes
  &(vtc_S4799C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S4799C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4799C6),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  S4799C1  : S4799C2 {
  void *s4799c1f0[2];
  ::S4799C6 s4799c1f1;
  ::S2171C14_nt s4799c1f2;
  virtual  ~S4799C1(); // _ZN7S4799C1D1Ev
  virtual void  v1(); // _ZN7S4799C12v1Ev
  virtual void  v2(); // _ZN7S4799C12v2Ev
  S4799C1(); // tgen
};
//SIG(1 S4799C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 Fp[2] FC6{ vd m FC7{ m Fp Fi[2] FC8{ m}} FC9{ m Fp Fi[2] FC5} Fc} FC10{ m Fp Fi[2] FC5}}


 S4799C1 ::~S4799C1(){ note_dtor("S4799C1", this);}
void  S4799C1 ::v1(){vfunc_called(this, "_ZN7S4799C12v1Ev");}
void  S4799C1 ::v2(){vfunc_called(this, "_ZN7S4799C12v2Ev");}
S4799C1 ::S4799C1(){ note_ctor("S4799C1", this);} // tgen

static void Test_S4799C1()
{
  extern Class_Descriptor cd_S4799C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,25)];
    init_test(&cd_S4799C1, buf);
    S4799C1 *dp, &lv = *(dp=new (buf) S4799C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,96), "sizeof(S4799C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4799C1)");
    check_base_class_offset(lv, (S4799C3*)(S4799C2*), 0, "S4799C1");
    check_base_class_offset(lv, (S4799C2*), 0, "S4799C1");
    check_field_offset(lv, s4799c1f0, ABISELECT(48,32), "S4799C1.s4799c1f0");
    check_field_offset(lv, s4799c1f1, ABISELECT(64,40), "S4799C1.s4799c1f1");
    check_field_offset(lv, s4799c1f2, ABISELECT(128,80), "S4799C1.s4799c1f2");
    test_class_info(&lv, &cd_S4799C1);
    dp->~S4799C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4799C1(Test_S4799C1, "S4799C1", ABISELECT(152,96));

#else // __cplusplus

extern void _ZN7S4799C1C1Ev();
extern void _ZN7S4799C1D1Ev();
Name_Map name_map_S4799C1[] = {
  NSPAIR(_ZN7S4799C1C1Ev),
  NSPAIR(_ZN7S4799C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4799C3;
extern VTBL_ENTRY _ZTI7S4799C3[];
extern  VTBL_ENTRY _ZTV7S4799C3[];
extern Class_Descriptor cd_S4799C2;
extern VTBL_ENTRY _ZTI7S4799C2[];
extern  VTBL_ENTRY _ZTV7S4799C2[];
static Base_Class bases_S4799C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4799C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4799C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4799C1[];
extern void _ZN7S4799C1D1Ev();
extern void _ZN7S4799C1D0Ev();
extern void _ZN7S4799C32v3Ev();
extern void _ZN7S4799C32v4Ev();
extern void _ZN7S4799C32v5Ev();
extern void _ZN7S4799C22v6Ev();
extern void _ZN7S4799C22v7Ev();
extern void _ZN7S4799C12v1Ev();
extern void _ZN7S4799C12v2Ev();
static  VTBL_ENTRY vtc_S4799C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4799C1[0]),
  (VTBL_ENTRY)&_ZN7S4799C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4799C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4799C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4799C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4799C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4799C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4799C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4799C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4799C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4799C1[];
extern  VTBL_ENTRY _ZTV7S4799C1[];
Class_Descriptor cd_S4799C1 = {  "S4799C1", // class name
  bases_S4799C1, 2,
  &(vtc_S4799C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,96), // object size
  NSPAIRA(_ZTI7S4799C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4799C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5306C3  {
  ::S4473C12_nt s5306c3f0;
  int s5306c3f1[2];
  char s5306c3f2;
  virtual  ~S5306C3(); // _ZN7S5306C3D1Ev
  virtual void  v6(); // _ZN7S5306C32v6Ev
  virtual void  v7(); // _ZN7S5306C32v7Ev
  virtual void  v8(); // _ZN7S5306C32v8Ev
  S5306C3(); // tgen
};
//SIG(-1 S5306C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5306C3 ::~S5306C3(){ note_dtor("S5306C3", this);}
void  S5306C3 ::v6(){vfunc_called(this, "_ZN7S5306C32v6Ev");}
void  S5306C3 ::v7(){vfunc_called(this, "_ZN7S5306C32v7Ev");}
void  S5306C3 ::v8(){vfunc_called(this, "_ZN7S5306C32v8Ev");}
S5306C3 ::S5306C3(){ note_ctor("S5306C3", this);} // tgen

static void Test_S5306C3()
{
  extern Class_Descriptor cd_S5306C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5306C3, buf);
    S5306C3 *dp, &lv = *(dp=new (buf) S5306C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5306C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5306C3)");
    check_field_offset(lv, s5306c3f0, ABISELECT(8,4), "S5306C3.s5306c3f0");
    check_field_offset(lv, s5306c3f1, ABISELECT(24,16), "S5306C3.s5306c3f1");
    check_field_offset(lv, s5306c3f2, ABISELECT(32,24), "S5306C3.s5306c3f2");
    test_class_info(&lv, &cd_S5306C3);
    dp->~S5306C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5306C3(Test_S5306C3, "S5306C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5306C3C1Ev();
extern void _ZN7S5306C3D1Ev();
Name_Map name_map_S5306C3[] = {
  NSPAIR(_ZN7S5306C3C1Ev),
  NSPAIR(_ZN7S5306C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5306C3[];
extern void _ZN7S5306C3D1Ev();
extern void _ZN7S5306C3D0Ev();
extern void _ZN7S5306C32v6Ev();
extern void _ZN7S5306C32v7Ev();
extern void _ZN7S5306C32v8Ev();
static  VTBL_ENTRY vtc_S5306C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5306C3[0]),
  (VTBL_ENTRY)&_ZN7S5306C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5306C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5306C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5306C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5306C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S5306C3[];
extern  VTBL_ENTRY _ZTV7S5306C3[];
Class_Descriptor cd_S5306C3 = {  "S5306C3", // class name
  0,0,//no base classes
  &(vtc_S5306C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5306C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5306C3),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  S5306C2  : S5306C3 {
  void *s5306c2f0;
  virtual void  v9(); // _ZN7S5306C22v9Ev
  virtual void  v10(); // _ZN7S5306C23v10Ev
  ~S5306C2(); // tgen
  S5306C2(); // tgen
};
//SIG(-1 S5306C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5306C2 ::v9(){vfunc_called(this, "_ZN7S5306C22v9Ev");}
void  S5306C2 ::v10(){vfunc_called(this, "_ZN7S5306C23v10Ev");}
S5306C2 ::~S5306C2(){ note_dtor("S5306C2", this);} // tgen
S5306C2 ::S5306C2(){ note_ctor("S5306C2", this);} // tgen

static void Test_S5306C2()
{
  extern Class_Descriptor cd_S5306C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5306C2, buf);
    S5306C2 *dp, &lv = *(dp=new (buf) S5306C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5306C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5306C2)");
    check_base_class_offset(lv, (S5306C3*), 0, "S5306C2");
    check_field_offset(lv, s5306c2f0, ABISELECT(40,28), "S5306C2.s5306c2f0");
    test_class_info(&lv, &cd_S5306C2);
    dp->~S5306C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5306C2(Test_S5306C2, "S5306C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5306C2C1Ev();
extern void _ZN7S5306C2D1Ev();
Name_Map name_map_S5306C2[] = {
  NSPAIR(_ZN7S5306C2C1Ev),
  NSPAIR(_ZN7S5306C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5306C3;
extern VTBL_ENTRY _ZTI7S5306C3[];
extern  VTBL_ENTRY _ZTV7S5306C3[];
static Base_Class bases_S5306C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5306C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5306C2[];
extern void _ZN7S5306C2D1Ev();
extern void _ZN7S5306C2D0Ev();
extern void _ZN7S5306C32v6Ev();
extern void _ZN7S5306C32v7Ev();
extern void _ZN7S5306C32v8Ev();
extern void _ZN7S5306C22v9Ev();
extern void _ZN7S5306C23v10Ev();
static  VTBL_ENTRY vtc_S5306C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5306C2[0]),
  (VTBL_ENTRY)&_ZN7S5306C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5306C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5306C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5306C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5306C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5306C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5306C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S5306C2[];
extern  VTBL_ENTRY _ZTV7S5306C2[];
Class_Descriptor cd_S5306C2 = {  "S5306C2", // class name
  bases_S5306C2, 1,
  &(vtc_S5306C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5306C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5306C2),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  S5306C6  {
  virtual  ~S5306C6(); // _ZN7S5306C6D1Ev
  virtual void  v11(); // _ZN7S5306C63v11Ev
  virtual void  v12(); // _ZN7S5306C63v12Ev
  virtual void  v13(); // _ZN7S5306C63v13Ev
  S5306C6(); // tgen
};
//SIG(-1 S5306C6) C1{ vd v1 v2 v3}


 S5306C6 ::~S5306C6(){ note_dtor("S5306C6", this);}
void  S5306C6 ::v11(){vfunc_called(this, "_ZN7S5306C63v11Ev");}
void  S5306C6 ::v12(){vfunc_called(this, "_ZN7S5306C63v12Ev");}
void  S5306C6 ::v13(){vfunc_called(this, "_ZN7S5306C63v13Ev");}
S5306C6 ::S5306C6(){ note_ctor("S5306C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5306C6C1Ev();
extern void _ZN7S5306C6D1Ev();
Name_Map name_map_S5306C6[] = {
  NSPAIR(_ZN7S5306C6C1Ev),
  NSPAIR(_ZN7S5306C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5306C6[];
extern void _ZN7S5306C6D1Ev();
extern void _ZN7S5306C6D0Ev();
extern void _ZN7S5306C63v11Ev();
extern void _ZN7S5306C63v12Ev();
extern void _ZN7S5306C63v13Ev();
static  VTBL_ENTRY vtc_S5306C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5306C6[0]),
  (VTBL_ENTRY)&_ZN7S5306C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5306C6D0Ev,
  (VTBL_ENTRY)&_ZN7S5306C63v11Ev,
  (VTBL_ENTRY)&_ZN7S5306C63v12Ev,
  (VTBL_ENTRY)&_ZN7S5306C63v13Ev,
};
extern VTBL_ENTRY _ZTI7S5306C6[];
extern  VTBL_ENTRY _ZTV7S5306C6[];
Class_Descriptor cd_S5306C6 = {  "S5306C6", // class name
  0,0,//no base classes
  &(vtc_S5306C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5306C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5306C6),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5306C7_nt  {
  __tsi64 s5306c7f0[4];
  void  mf5306c7(); // _ZN10S5306C7_nt8mf5306c7Ev
};
//SIG(-1 S5306C7_nt) C1{ m FL[4]}


void  S5306C7_nt ::mf5306c7(){}

//skip512 S5306C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5306C1  : S5306C2 , S5306C6 {
  ::S5306C7_nt s5306c1f0;
  ::S5305C9_nt s5306c1f1;
  void *s5306c1f2[2];
  ::S2366C19 s5306c1f3;
  ::S2366C10_nt s5306c1f4;
  int s5306c1f5;
  virtual void  v1(); // _ZN7S5306C12v1Ev
  virtual void  v2(); // _ZN7S5306C12v2Ev
  virtual void  v3(); // _ZN7S5306C12v3Ev
  virtual void  v4(); // _ZN7S5306C12v4Ev
  virtual void  v5(); // _ZN7S5306C12v5Ev
  ~S5306C1(); // tgen
  S5306C1(); // tgen
};
//SIG(1 S5306C1) C1{ BC2{ BC3{ vd v6 v7 v8 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v9 v10 Fp} BC6{ vd v11 v12 v13} v1 v2 v3 v4 v5 FC7{ m FL[4]} FC8{ m Fp FC9{ Fi[4]}} Fp[2] FC10{ m Fp} FC11{ m Fp} Fi}


void  S5306C1 ::v1(){vfunc_called(this, "_ZN7S5306C12v1Ev");}
void  S5306C1 ::v2(){vfunc_called(this, "_ZN7S5306C12v2Ev");}
void  S5306C1 ::v3(){vfunc_called(this, "_ZN7S5306C12v3Ev");}
void  S5306C1 ::v4(){vfunc_called(this, "_ZN7S5306C12v4Ev");}
void  S5306C1 ::v5(){vfunc_called(this, "_ZN7S5306C12v5Ev");}
S5306C1 ::~S5306C1(){ note_dtor("S5306C1", this);} // tgen
S5306C1 ::S5306C1(){ note_ctor("S5306C1", this);} // tgen

static void Test_S5306C1()
{
  extern Class_Descriptor cd_S5306C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,28)];
    init_test(&cd_S5306C1, buf);
    S5306C1 *dp, &lv = *(dp=new (buf) S5306C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,108), "sizeof(S5306C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5306C1)");
    check_base_class_offset(lv, (S5306C3*)(S5306C2*), 0, "S5306C1");
    check_base_class_offset(lv, (S5306C2*), 0, "S5306C1");
    check_base_class_offset(lv, (S5306C6*), ABISELECT(48,32), "S5306C1");
    check_field_offset(lv, s5306c1f0, ABISELECT(56,36), "S5306C1.s5306c1f0");
    check_field_offset(lv, s5306c1f1, ABISELECT(88,68), "S5306C1.s5306c1f1");
    check_field_offset(lv, s5306c1f2, ABISELECT(112,88), "S5306C1.s5306c1f2");
    check_field_offset(lv, s5306c1f3, ABISELECT(128,96), "S5306C1.s5306c1f3");
    check_field_offset(lv, s5306c1f4, ABISELECT(136,100), "S5306C1.s5306c1f4");
    check_field_offset(lv, s5306c1f5, ABISELECT(144,104), "S5306C1.s5306c1f5");
    test_class_info(&lv, &cd_S5306C1);
    dp->~S5306C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5306C1(Test_S5306C1, "S5306C1", ABISELECT(152,108));

#else // __cplusplus

extern void _ZN7S5306C1C1Ev();
extern void _ZN7S5306C1D1Ev();
Name_Map name_map_S5306C1[] = {
  NSPAIR(_ZN7S5306C1C1Ev),
  NSPAIR(_ZN7S5306C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5306C3;
extern VTBL_ENTRY _ZTI7S5306C3[];
extern  VTBL_ENTRY _ZTV7S5306C3[];
extern Class_Descriptor cd_S5306C2;
extern VTBL_ENTRY _ZTI7S5306C2[];
extern  VTBL_ENTRY _ZTV7S5306C2[];
extern Class_Descriptor cd_S5306C6;
extern VTBL_ENTRY _ZTI7S5306C6[];
extern  VTBL_ENTRY _ZTV7S5306C6[];
static Base_Class bases_S5306C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5306C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5306C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5306C6,    ABISELECT(48,32), //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5306C1[];
extern void _ZN7S5306C1D1Ev();
extern void _ZN7S5306C1D0Ev();
extern void _ZN7S5306C32v6Ev();
extern void _ZN7S5306C32v7Ev();
extern void _ZN7S5306C32v8Ev();
extern void _ZN7S5306C22v9Ev();
extern void _ZN7S5306C23v10Ev();
extern void _ZN7S5306C12v1Ev();
extern void _ZN7S5306C12v2Ev();
extern void _ZN7S5306C12v3Ev();
extern void _ZN7S5306C12v4Ev();
extern void _ZN7S5306C12v5Ev();
extern void ABISELECT(_ZThn48_N7S5306C1D1Ev,_ZThn32_N7S5306C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S5306C1D0Ev,_ZThn32_N7S5306C1D0Ev)();
extern void _ZN7S5306C63v11Ev();
extern void _ZN7S5306C63v12Ev();
extern void _ZN7S5306C63v13Ev();
static  VTBL_ENTRY vtc_S5306C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5306C1[0]),
  (VTBL_ENTRY)&_ZN7S5306C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5306C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5306C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5306C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5306C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5306C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5306C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5306C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5306C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5306C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5306C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5306C12v5Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S5306C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S5306C1D1Ev,_ZThn32_N7S5306C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S5306C1D0Ev,_ZThn32_N7S5306C1D0Ev),
  (VTBL_ENTRY)&_ZN7S5306C63v11Ev,
  (VTBL_ENTRY)&_ZN7S5306C63v12Ev,
  (VTBL_ENTRY)&_ZN7S5306C63v13Ev,
};
extern VTBL_ENTRY _ZTI7S5306C1[];
extern  VTBL_ENTRY _ZTV7S5306C1[];
Class_Descriptor cd_S5306C1 = {  "S5306C1", // class name
  bases_S5306C1, 3,
  &(vtc_S5306C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,108), // object size
  NSPAIRA(_ZTI7S5306C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5306C1),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  S4731C3  {
  ::S4473C12_nt s4731c3f0;
  int s4731c3f1[2];
  char s4731c3f2;
  virtual  ~S4731C3(); // _ZN7S4731C3D1Ev
  virtual void  v3(); // _ZN7S4731C32v3Ev
  virtual void  v4(); // _ZN7S4731C32v4Ev
  virtual void  v5(); // _ZN7S4731C32v5Ev
  S4731C3(); // tgen
};
//SIG(-1 S4731C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4731C3 ::~S4731C3(){ note_dtor("S4731C3", this);}
void  S4731C3 ::v3(){vfunc_called(this, "_ZN7S4731C32v3Ev");}
void  S4731C3 ::v4(){vfunc_called(this, "_ZN7S4731C32v4Ev");}
void  S4731C3 ::v5(){vfunc_called(this, "_ZN7S4731C32v5Ev");}
S4731C3 ::S4731C3(){ note_ctor("S4731C3", this);} // tgen

static void Test_S4731C3()
{
  extern Class_Descriptor cd_S4731C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4731C3, buf);
    S4731C3 *dp, &lv = *(dp=new (buf) S4731C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4731C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4731C3)");
    check_field_offset(lv, s4731c3f0, ABISELECT(8,4), "S4731C3.s4731c3f0");
    check_field_offset(lv, s4731c3f1, ABISELECT(24,16), "S4731C3.s4731c3f1");
    check_field_offset(lv, s4731c3f2, ABISELECT(32,24), "S4731C3.s4731c3f2");
    test_class_info(&lv, &cd_S4731C3);
    dp->~S4731C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4731C3(Test_S4731C3, "S4731C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4731C3C1Ev();
extern void _ZN7S4731C3D1Ev();
Name_Map name_map_S4731C3[] = {
  NSPAIR(_ZN7S4731C3C1Ev),
  NSPAIR(_ZN7S4731C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4731C3[];
extern void _ZN7S4731C3D1Ev();
extern void _ZN7S4731C3D0Ev();
extern void _ZN7S4731C32v3Ev();
extern void _ZN7S4731C32v4Ev();
extern void _ZN7S4731C32v5Ev();
static  VTBL_ENTRY vtc_S4731C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4731C3[0]),
  (VTBL_ENTRY)&_ZN7S4731C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4731C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4731C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4731C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4731C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4731C3[];
extern  VTBL_ENTRY _ZTV7S4731C3[];
Class_Descriptor cd_S4731C3 = {  "S4731C3", // class name
  0,0,//no base classes
  &(vtc_S4731C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4731C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4731C3),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  S4731C2  : S4731C3 {
  void *s4731c2f0;
  virtual void  v6(); // _ZN7S4731C22v6Ev
  virtual void  v7(); // _ZN7S4731C22v7Ev
  ~S4731C2(); // tgen
  S4731C2(); // tgen
};
//SIG(-1 S4731C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4731C2 ::v6(){vfunc_called(this, "_ZN7S4731C22v6Ev");}
void  S4731C2 ::v7(){vfunc_called(this, "_ZN7S4731C22v7Ev");}
S4731C2 ::~S4731C2(){ note_dtor("S4731C2", this);} // tgen
S4731C2 ::S4731C2(){ note_ctor("S4731C2", this);} // tgen

static void Test_S4731C2()
{
  extern Class_Descriptor cd_S4731C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4731C2, buf);
    S4731C2 *dp, &lv = *(dp=new (buf) S4731C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4731C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4731C2)");
    check_base_class_offset(lv, (S4731C3*), 0, "S4731C2");
    check_field_offset(lv, s4731c2f0, ABISELECT(40,28), "S4731C2.s4731c2f0");
    test_class_info(&lv, &cd_S4731C2);
    dp->~S4731C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4731C2(Test_S4731C2, "S4731C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4731C2C1Ev();
extern void _ZN7S4731C2D1Ev();
Name_Map name_map_S4731C2[] = {
  NSPAIR(_ZN7S4731C2C1Ev),
  NSPAIR(_ZN7S4731C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4731C3;
extern VTBL_ENTRY _ZTI7S4731C3[];
extern  VTBL_ENTRY _ZTV7S4731C3[];
static Base_Class bases_S4731C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4731C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4731C2[];
extern void _ZN7S4731C2D1Ev();
extern void _ZN7S4731C2D0Ev();
extern void _ZN7S4731C32v3Ev();
extern void _ZN7S4731C32v4Ev();
extern void _ZN7S4731C32v5Ev();
extern void _ZN7S4731C22v6Ev();
extern void _ZN7S4731C22v7Ev();
static  VTBL_ENTRY vtc_S4731C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4731C2[0]),
  (VTBL_ENTRY)&_ZN7S4731C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4731C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4731C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4731C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4731C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4731C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4731C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4731C2[];
extern  VTBL_ENTRY _ZTV7S4731C2[];
Class_Descriptor cd_S4731C2 = {  "S4731C2", // class name
  bases_S4731C2, 1,
  &(vtc_S4731C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4731C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4731C2),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  S4731C10  {
  int s4731c10f0[2];
  ::S4473C12_nt s4731c10f1;
  void  mf4731c10(); // _ZN8S4731C109mf4731c10Ev
};
//SIG(-1 S4731C10) C1{ m Fi[2] FC2{ m Fp Fi FC3{ m}}}


void  S4731C10 ::mf4731c10(){}

static void Test_S4731C10()
{
  {
    init_simple_test("S4731C10");
    S4731C10 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S4731C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4731C10)");
    check_field_offset(lv, s4731c10f0, 0, "S4731C10.s4731c10f0");
    check_field_offset(lv, s4731c10f1, 8, "S4731C10.s4731c10f1");
  }
}
static Arrange_To_Call_Me vS4731C10(Test_S4731C10, "S4731C10", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4731C1  : S4731C2 {
  ::S2173C10_nt s4731c1f0;
  ::S5305C9_nt s4731c1f1;
  ::S4731C10 s4731c1f2;
  int s4731c1f3;
  void *s4731c1f4[2];
  ::S2173C14 s4731c1f5;
  virtual void  v1(); // _ZN7S4731C12v1Ev
  virtual void  v2(); // _ZN7S4731C12v2Ev
  ~S4731C1(); // tgen
  S4731C1(); // tgen
};
//SIG(1 S4731C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} v1 v2 FC6{ m FC7{ FL[4]}} FC8{ m Fp FC9{ Fi[4]}} FC10{ m Fi[2] FC4} Fi Fp[2] FC11{ m Fp Fi[2] FC12{ m}}}


void  S4731C1 ::v1(){vfunc_called(this, "_ZN7S4731C12v1Ev");}
void  S4731C1 ::v2(){vfunc_called(this, "_ZN7S4731C12v2Ev");}
S4731C1 ::~S4731C1(){ note_dtor("S4731C1", this);} // tgen
S4731C1 ::S4731C1(){ note_ctor("S4731C1", this);} // tgen

static void Test_S4731C1()
{
  extern Class_Descriptor cd_S4731C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,34)];
    init_test(&cd_S4731C1, buf);
    S4731C1 *dp, &lv = *(dp=new (buf) S4731C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,132), "sizeof(S4731C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4731C1)");
    check_base_class_offset(lv, (S4731C3*)(S4731C2*), 0, "S4731C1");
    check_base_class_offset(lv, (S4731C2*), 0, "S4731C1");
    check_field_offset(lv, s4731c1f0, ABISELECT(48,32), "S4731C1.s4731c1f0");
    check_field_offset(lv, s4731c1f1, ABISELECT(80,64), "S4731C1.s4731c1f1");
    check_field_offset(lv, s4731c1f2, ABISELECT(104,84), "S4731C1.s4731c1f2");
    check_field_offset(lv, s4731c1f3, ABISELECT(128,104), "S4731C1.s4731c1f3");
    check_field_offset(lv, s4731c1f4, ABISELECT(136,108), "S4731C1.s4731c1f4");
    check_field_offset(lv, s4731c1f5, ABISELECT(152,116), "S4731C1.s4731c1f5");
    test_class_info(&lv, &cd_S4731C1);
    dp->~S4731C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4731C1(Test_S4731C1, "S4731C1", ABISELECT(176,132));

#else // __cplusplus

extern void _ZN7S4731C1C1Ev();
extern void _ZN7S4731C1D1Ev();
Name_Map name_map_S4731C1[] = {
  NSPAIR(_ZN7S4731C1C1Ev),
  NSPAIR(_ZN7S4731C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4731C3;
extern VTBL_ENTRY _ZTI7S4731C3[];
extern  VTBL_ENTRY _ZTV7S4731C3[];
extern Class_Descriptor cd_S4731C2;
extern VTBL_ENTRY _ZTI7S4731C2[];
extern  VTBL_ENTRY _ZTV7S4731C2[];
static Base_Class bases_S4731C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4731C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4731C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4731C1[];
extern void _ZN7S4731C1D1Ev();
extern void _ZN7S4731C1D0Ev();
extern void _ZN7S4731C32v3Ev();
extern void _ZN7S4731C32v4Ev();
extern void _ZN7S4731C32v5Ev();
extern void _ZN7S4731C22v6Ev();
extern void _ZN7S4731C22v7Ev();
extern void _ZN7S4731C12v1Ev();
extern void _ZN7S4731C12v2Ev();
static  VTBL_ENTRY vtc_S4731C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4731C1[0]),
  (VTBL_ENTRY)&_ZN7S4731C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4731C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4731C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4731C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4731C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4731C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4731C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4731C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4731C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4731C1[];
extern  VTBL_ENTRY _ZTV7S4731C1[];
Class_Descriptor cd_S4731C1 = {  "S4731C1", // class name
  bases_S4731C1, 2,
  &(vtc_S4731C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,132), // object size
  NSPAIRA(_ZTI7S4731C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4731C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1334C4  {
  int s1334c4f0;
  virtual void  v2(); // _ZN7S1334C42v2Ev
  ~S1334C4(); // tgen
  S1334C4(); // tgen
};
//SIG(-1 S1334C4) C1{ v1 Fi}


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

static void Test_S1334C4()
{
  extern Class_Descriptor cd_S1334C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1334C4, buf);
    S1334C4 *dp, &lv = *(dp=new (buf) S1334C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1334C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1334C4)");
    check_field_offset(lv, s1334c4f0, ABISELECT(8,4), "S1334C4.s1334c4f0");
    test_class_info(&lv, &cd_S1334C4);
    dp->~S1334C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1334C4(Test_S1334C4, "S1334C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1334C4C1Ev();
extern void _ZN7S1334C4D1Ev();
Name_Map name_map_S1334C4[] = {
  NSPAIR(_ZN7S1334C4C1Ev),
  NSPAIR(_ZN7S1334C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1334C4[];
extern void _ZN7S1334C42v2Ev();
static  VTBL_ENTRY vtc_S1334C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1334C4[0]),
  (VTBL_ENTRY)&_ZN7S1334C42v2Ev,
};
extern VTBL_ENTRY _ZTI7S1334C4[];
extern  VTBL_ENTRY _ZTV7S1334C4[];
Class_Descriptor cd_S1334C4 = {  "S1334C4", // class name
  0,0,//no base classes
  &(vtc_S1334C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1334C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1334C4),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1334C5  {
  short s1334c5f0:16;
  __tsi64 s1334c5f1;
  void *s1334c5f2[8];
  virtual void  v3(); // _ZN7S1334C52v3Ev
  virtual void  v4(); // _ZN7S1334C52v4Ev
  ~S1334C5(); // tgen
  S1334C5(); // tgen
};
//SIG(-1 S1334C5) C1{ v1 v2 Fs:16 FL Fp[8]}


void  S1334C5 ::v3(){vfunc_called(this, "_ZN7S1334C52v3Ev");}
void  S1334C5 ::v4(){vfunc_called(this, "_ZN7S1334C52v4Ev");}
S1334C5 ::~S1334C5(){ note_dtor("S1334C5", this);} // tgen
S1334C5 ::S1334C5(){ note_ctor("S1334C5", this);} // tgen

static void Test_S1334C5()
{
  extern Class_Descriptor cd_S1334C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S1334C5, buf);
    S1334C5 *dp, &lv = *(dp=new (buf) S1334C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S1334C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1334C5)");
    set_bf_and_test(lv, s1334c5f0, ABISELECT(8,4), 0, 16, 1, "S1334C5");
    set_bf_and_test(lv, s1334c5f0, ABISELECT(8,4), 0, 16, hide_sll(1LL<<15), "S1334C5");
    check_field_offset(lv, s1334c5f1, ABISELECT(16,8), "S1334C5.s1334c5f1");
    check_field_offset(lv, s1334c5f2, ABISELECT(24,16), "S1334C5.s1334c5f2");
    test_class_info(&lv, &cd_S1334C5);
    dp->~S1334C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1334C5(Test_S1334C5, "S1334C5", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN7S1334C5C1Ev();
extern void _ZN7S1334C5D1Ev();
Name_Map name_map_S1334C5[] = {
  NSPAIR(_ZN7S1334C5C1Ev),
  NSPAIR(_ZN7S1334C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1334C5[];
extern void _ZN7S1334C52v3Ev();
extern void _ZN7S1334C52v4Ev();
static  VTBL_ENTRY vtc_S1334C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1334C5[0]),
  (VTBL_ENTRY)&_ZN7S1334C52v3Ev,
  (VTBL_ENTRY)&_ZN7S1334C52v4Ev,
};
extern VTBL_ENTRY _ZTI7S1334C5[];
extern  VTBL_ENTRY _ZTV7S1334C5[];
Class_Descriptor cd_S1334C5 = {  "S1334C5", // class name
  0,0,//no base classes
  &(vtc_S1334C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI7S1334C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1334C5),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  S1334C6  {
  virtual void  v5(); // _ZN7S1334C62v5Ev
  ~S1334C6(); // tgen
  S1334C6(); // tgen
};
//SIG(-1 S1334C6) C1{ v1}


void  S1334C6 ::v5(){vfunc_called(this, "_ZN7S1334C62v5Ev");}
S1334C6 ::~S1334C6(){ note_dtor("S1334C6", this);} // tgen
S1334C6 ::S1334C6(){ note_ctor("S1334C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1334C6C1Ev();
extern void _ZN7S1334C6D1Ev();
Name_Map name_map_S1334C6[] = {
  NSPAIR(_ZN7S1334C6C1Ev),
  NSPAIR(_ZN7S1334C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1334C6[];
extern void _ZN7S1334C62v5Ev();
static  VTBL_ENTRY vtc_S1334C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1334C6[0]),
  (VTBL_ENTRY)&_ZN7S1334C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S1334C6[];
extern  VTBL_ENTRY _ZTV7S1334C6[];
Class_Descriptor cd_S1334C6 = {  "S1334C6", // class name
  0,0,//no base classes
  &(vtc_S1334C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1334C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1334C6),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1334C8  {
  void *s1334c8f0[4];
  virtual void  v6(); // _ZN7S1334C82v6Ev
  virtual void  v7(); // _ZN7S1334C82v7Ev
  virtual void  v8(); // _ZN7S1334C82v8Ev
  virtual void  v9(); // _ZN7S1334C82v9Ev
  virtual void  v10(); // _ZN7S1334C83v10Ev
  virtual void  v11(); // _ZN7S1334C83v11Ev
  ~S1334C8(); // tgen
  S1334C8(); // tgen
};
//SIG(-1 S1334C8) C1{ v1 v2 v3 v4 v5 v6 Fp[4]}


void  S1334C8 ::v6(){vfunc_called(this, "_ZN7S1334C82v6Ev");}
void  S1334C8 ::v7(){vfunc_called(this, "_ZN7S1334C82v7Ev");}
void  S1334C8 ::v8(){vfunc_called(this, "_ZN7S1334C82v8Ev");}
void  S1334C8 ::v9(){vfunc_called(this, "_ZN7S1334C82v9Ev");}
void  S1334C8 ::v10(){vfunc_called(this, "_ZN7S1334C83v10Ev");}
void  S1334C8 ::v11(){vfunc_called(this, "_ZN7S1334C83v11Ev");}
S1334C8 ::~S1334C8(){ note_dtor("S1334C8", this);} // tgen
S1334C8 ::S1334C8(){ note_ctor("S1334C8", this);} // tgen

static void Test_S1334C8()
{
  extern Class_Descriptor cd_S1334C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S1334C8, buf);
    S1334C8 *dp, &lv = *(dp=new (buf) S1334C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S1334C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1334C8)");
    check_field_offset(lv, s1334c8f0, ABISELECT(8,4), "S1334C8.s1334c8f0");
    test_class_info(&lv, &cd_S1334C8);
    dp->~S1334C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1334C8(Test_S1334C8, "S1334C8", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S1334C8C1Ev();
extern void _ZN7S1334C8D1Ev();
Name_Map name_map_S1334C8[] = {
  NSPAIR(_ZN7S1334C8C1Ev),
  NSPAIR(_ZN7S1334C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1334C8[];
extern void _ZN7S1334C82v6Ev();
extern void _ZN7S1334C82v7Ev();
extern void _ZN7S1334C82v8Ev();
extern void _ZN7S1334C82v9Ev();
extern void _ZN7S1334C83v10Ev();
extern void _ZN7S1334C83v11Ev();
static  VTBL_ENTRY vtc_S1334C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1334C8[0]),
  (VTBL_ENTRY)&_ZN7S1334C82v6Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v7Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v8Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v9Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v10Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v11Ev,
};
extern VTBL_ENTRY _ZTI7S1334C8[];
extern  VTBL_ENTRY _ZTV7S1334C8[];
Class_Descriptor cd_S1334C8 = {  "S1334C8", // class name
  0,0,//no base classes
  &(vtc_S1334C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S1334C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1334C8),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  S1334C7  : S1334C8 {
  __tsi64 s1334c7f0;
  virtual  ~S1334C7(); // _ZN7S1334C7D1Ev
  virtual void  v12(); // _ZN7S1334C73v12Ev
  virtual void  v13(); // _ZN7S1334C73v13Ev
  S1334C7(); // tgen
};
//SIG(-1 S1334C7) C1{ BC2{ v3 v4 v5 v6 v7 v8 Fp[4]} vd v1 v2 FL}


 S1334C7 ::~S1334C7(){ note_dtor("S1334C7", this);}
void  S1334C7 ::v12(){vfunc_called(this, "_ZN7S1334C73v12Ev");}
void  S1334C7 ::v13(){vfunc_called(this, "_ZN7S1334C73v13Ev");}
S1334C7 ::S1334C7(){ note_ctor("S1334C7", this);} // tgen

static void Test_S1334C7()
{
  extern Class_Descriptor cd_S1334C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S1334C7, buf);
    S1334C7 *dp, &lv = *(dp=new (buf) S1334C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S1334C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1334C7)");
    check_base_class_offset(lv, (S1334C8*), 0, "S1334C7");
    check_field_offset(lv, s1334c7f0, ABISELECT(40,20), "S1334C7.s1334c7f0");
    test_class_info(&lv, &cd_S1334C7);
    dp->~S1334C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1334C7(Test_S1334C7, "S1334C7", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S1334C7C1Ev();
extern void _ZN7S1334C7D1Ev();
Name_Map name_map_S1334C7[] = {
  NSPAIR(_ZN7S1334C7C1Ev),
  NSPAIR(_ZN7S1334C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1334C8;
extern VTBL_ENTRY _ZTI7S1334C8[];
extern  VTBL_ENTRY _ZTV7S1334C8[];
static Base_Class bases_S1334C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1334C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1334C7[];
extern void _ZN7S1334C82v6Ev();
extern void _ZN7S1334C82v7Ev();
extern void _ZN7S1334C82v8Ev();
extern void _ZN7S1334C82v9Ev();
extern void _ZN7S1334C83v10Ev();
extern void _ZN7S1334C83v11Ev();
extern void _ZN7S1334C7D1Ev();
extern void _ZN7S1334C7D0Ev();
extern void _ZN7S1334C73v12Ev();
extern void _ZN7S1334C73v13Ev();
static  VTBL_ENTRY vtc_S1334C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1334C7[0]),
  (VTBL_ENTRY)&_ZN7S1334C82v6Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v7Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v8Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v9Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v10Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v11Ev,
  (VTBL_ENTRY)&_ZN7S1334C7D1Ev,
  (VTBL_ENTRY)&_ZN7S1334C7D0Ev,
  (VTBL_ENTRY)&_ZN7S1334C73v12Ev,
  (VTBL_ENTRY)&_ZN7S1334C73v13Ev,
};
extern VTBL_ENTRY _ZTI7S1334C7[];
extern  VTBL_ENTRY _ZTV7S1334C7[];
Class_Descriptor cd_S1334C7 = {  "S1334C7", // class name
  bases_S1334C7, 1,
  &(vtc_S1334C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S1334C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1334C7),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1334C3  : S1334C4 , S1334C5 , S1334C6 , virtual S1334C7 , S1334C8 {
  int s1334c3f0;
  virtual  ~S1334C3(); // _ZN7S1334C3D2Ev
  virtual void  v14(); // _ZN7S1334C33v14Ev
  virtual void  v15(); // _ZN7S1334C33v15Ev
  virtual void  v16(); // _ZN7S1334C33v16Ev
  S1334C3(); // tgen
};
//SIG(-1 S1334C3) C1{ BC2{ v4 Fi} BC3{ v5 v6 Fs:16 FL Fp[8]} BC4{ v7} VBC5{ BC6{ v8 v9 v10 v11 v12 v13 Fp[4]} vd v14 v15 FL} BC6 vd v1 v2 v3 Fi}


 S1334C3 ::~S1334C3(){ note_dtor("S1334C3", this);}
void  S1334C3 ::v14(){vfunc_called(this, "_ZN7S1334C33v14Ev");}
void  S1334C3 ::v15(){vfunc_called(this, "_ZN7S1334C33v15Ev");}
void  S1334C3 ::v16(){vfunc_called(this, "_ZN7S1334C33v16Ev");}
S1334C3 ::S1334C3(){ note_ctor("S1334C3", this);} // tgen

static void Test_S1334C3()
{
  extern Class_Descriptor cd_S1334C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,29)];
    init_test(&cd_S1334C3, buf);
    S1334C3 *dp, &lv = *(dp=new (buf) S1334C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,112), "sizeof(S1334C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1334C3)");
    check_base_class_offset(lv, (S1334C4*), 0, "S1334C3");
    check_base_class_offset(lv, (S1334C5*), ABISELECT(16,8), "S1334C3");
    check_base_class_offset(lv, (S1334C6*), ABISELECT(104,56), "S1334C3");
    check_base_class_offset(lv, (S1334C8*)(S1334C7*), ABISELECT(160,84), "S1334C3");
    check_base_class_offset(lv, (S1334C7*), ABISELECT(160,84), "S1334C3");
    /*is_ambiguous_... S1334C3::S1334C8 */ AMB_check_base_class_offset(lv, (S1334C8*), ABISELECT(112,60), "S1334C3");
    check_field_offset(lv, s1334c3f0, ABISELECT(152,80), "S1334C3.s1334c3f0");
    test_class_info(&lv, &cd_S1334C3);
    dp->~S1334C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1334C3(Test_S1334C3, "S1334C3", ABISELECT(208,112));

#else // __cplusplus

extern void _ZN7S1334C3C1Ev();
extern void _ZN7S1334C3D2Ev();
Name_Map name_map_S1334C3[] = {
  NSPAIR(_ZN7S1334C3C1Ev),
  NSPAIR(_ZN7S1334C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1334C4;
extern VTBL_ENTRY _ZTI7S1334C4[];
extern  VTBL_ENTRY _ZTV7S1334C4[];
extern Class_Descriptor cd_S1334C5;
extern VTBL_ENTRY _ZTI7S1334C5[];
extern  VTBL_ENTRY _ZTV7S1334C5[];
extern Class_Descriptor cd_S1334C6;
extern VTBL_ENTRY _ZTI7S1334C6[];
extern  VTBL_ENTRY _ZTV7S1334C6[];
extern Class_Descriptor cd_S1334C8;
extern VTBL_ENTRY _ZTI7S1334C8[];
extern  VTBL_ENTRY _ZTV7S1334C8[];
extern Class_Descriptor cd_S1334C7;
extern VTBL_ENTRY _ZTI7S1334C7[];
extern  VTBL_ENTRY _ZTV7S1334C7[];
extern Class_Descriptor cd_S1334C8;
extern VTBL_ENTRY _ZTI7S1334C8[];
extern  VTBL_ENTRY _ZTV7S1334C8[];
static Base_Class bases_S1334C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1334C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1334C5,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1334C6,    ABISELECT(104,56), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1334C8,    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
    4, //immediately_derived
  0, 0},
  {&cd_S1334C7,    ABISELECT(160,84), //bcp->offset
    24, //bcp->virtual_function_table_offset
    11, //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_S1334C8,    ABISELECT(112,60), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1334C3[];
extern void _ZN7S1334C42v2Ev();
extern void _ZN7S1334C3D1Ev();
extern void _ZN7S1334C3D0Ev();
extern void _ZN7S1334C33v14Ev();
extern void _ZN7S1334C33v15Ev();
extern void _ZN7S1334C33v16Ev();
extern void _ZN7S1334C52v3Ev();
extern void _ZN7S1334C52v4Ev();
extern void _ZN7S1334C62v5Ev();
extern void _ZN7S1334C82v6Ev();
extern void _ZN7S1334C82v7Ev();
extern void _ZN7S1334C82v8Ev();
extern void _ZN7S1334C82v9Ev();
extern void _ZN7S1334C83v10Ev();
extern void _ZN7S1334C83v11Ev();
extern void _ZN7S1334C82v6Ev();
extern void _ZN7S1334C82v7Ev();
extern void _ZN7S1334C82v8Ev();
extern void _ZN7S1334C82v9Ev();
extern void _ZN7S1334C83v10Ev();
extern void _ZN7S1334C83v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S1334C3D1Ev,_ZTv0_n36_N7S1334C3D1Ev)();
extern void ABISELECT(_ZThn160_N7S1334C3D1Ev,_ZThn84_N7S1334C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1334C3D0Ev,_ZTv0_n36_N7S1334C3D0Ev)();
extern void ABISELECT(_ZThn160_N7S1334C3D0Ev,_ZThn84_N7S1334C3D0Ev)() __attribute__((weak));
extern void _ZN7S1334C73v12Ev();
extern void _ZN7S1334C73v13Ev();
static  VTBL_ENTRY vtc_S1334C3[] = {
  ABISELECT(160,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S1334C3[0]),
  (VTBL_ENTRY)&_ZN7S1334C42v2Ev,
  (VTBL_ENTRY)&_ZN7S1334C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1334C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v16Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1334C3[0]),
  (VTBL_ENTRY)&_ZN7S1334C52v3Ev,
  (VTBL_ENTRY)&_ZN7S1334C52v4Ev,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S1334C3[0]),
  (VTBL_ENTRY)&_ZN7S1334C62v5Ev,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S1334C3[0]),
  (VTBL_ENTRY)&_ZN7S1334C82v6Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v7Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v8Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v9Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v10Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v11Ev,
  0,
  0,
  ABISELECT(-160,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI7S1334C3[0]),
  (VTBL_ENTRY)&_ZN7S1334C82v6Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v7Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v8Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v9Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v10Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1334C3D1Ev,_ZTv0_n36_N7S1334C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1334C3D0Ev,_ZTv0_n36_N7S1334C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1334C73v12Ev,
  (VTBL_ENTRY)&_ZN7S1334C73v13Ev,
};
extern VTBL_ENTRY _ZTV7S1334C3[];
static  VTT_ENTRY vtt_S1334C3[] = {
  {&(_ZTV7S1334C3[3]),  3,45},
  {&(_ZTV7S1334C3[35]),  35,45},
};
extern VTBL_ENTRY _ZTI7S1334C3[];
extern  VTBL_ENTRY _ZTV7S1334C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1334C3[];
static VTBL_ENTRY alt_thunk_names54[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1334C3D0Ev,_ZTv0_n36_N7S1334C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S1334C3D0Ev,_ZThn84_N7S1334C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1334C3D1Ev,_ZTv0_n36_N7S1334C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S1334C3D1Ev,_ZThn84_N7S1334C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1334C3 = {  "S1334C3", // class name
  bases_S1334C3, 6,
  &(vtc_S1334C3[0]), // expected_vtbl_contents
  &(vtt_S1334C3[0]), // expected_vtt_contents
  ABISELECT(208,112), // object size
  NSPAIRA(_ZTI7S1334C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S1334C3),45, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1334C3),2, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names54,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1334C2  : S1334C3 {
  int s1334c2f0[7];
  virtual void  v17(); // _ZN7S1334C23v17Ev
  virtual void  v18(); // _ZN7S1334C23v18Ev
  virtual void  v19(); // _ZN7S1334C23v19Ev
  virtual void  v20(); // _ZN7S1334C23v20Ev
  ~S1334C2(); // tgen
  S1334C2(); // tgen
};
//SIG(-1 S1334C2) C1{ BC2{ BC3{ v5 Fi} BC4{ v6 v7 Fs:16 FL Fp[8]} BC5{ v8} VBC6{ BC7{ v9 v10 v11 v12 v13 v14 Fp[4]} vd v15 v16 FL} BC7 vd v17 v18 v19 Fi} v1 v2 v3 v4 Fi[7]}


void  S1334C2 ::v17(){vfunc_called(this, "_ZN7S1334C23v17Ev");}
void  S1334C2 ::v18(){vfunc_called(this, "_ZN7S1334C23v18Ev");}
void  S1334C2 ::v19(){vfunc_called(this, "_ZN7S1334C23v19Ev");}
void  S1334C2 ::v20(){vfunc_called(this, "_ZN7S1334C23v20Ev");}
S1334C2 ::~S1334C2(){ note_dtor("S1334C2", this);} // tgen
S1334C2 ::S1334C2(){ note_ctor("S1334C2", this);} // tgen

static void Test_S1334C2()
{
  extern Class_Descriptor cd_S1334C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,36)];
    init_test(&cd_S1334C2, buf);
    S1334C2 *dp, &lv = *(dp=new (buf) S1334C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,140), "sizeof(S1334C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1334C2)");
    check_base_class_offset(lv, (S1334C4*)(S1334C3*), 0, "S1334C2");
    check_base_class_offset(lv, (S1334C5*)(S1334C3*), ABISELECT(16,8), "S1334C2");
    check_base_class_offset(lv, (S1334C6*)(S1334C3*), ABISELECT(104,56), "S1334C2");
    check_base_class_offset(lv, (S1334C8*)(S1334C7*), ABISELECT(184,112), "S1334C2");
    check_base_class_offset(lv, (S1334C7*)(S1334C3*), ABISELECT(184,112), "S1334C2");
    /*is_ambiguous_... S1334C3::S1334C8 */ AMB_check_base_class_offset(lv, (S1334C8*)(S1334C3*), ABISELECT(112,60), "S1334C2");
    check_base_class_offset(lv, (S1334C3*), 0, "S1334C2");
    check_field_offset(lv, s1334c2f0, ABISELECT(156,84), "S1334C2.s1334c2f0");
    test_class_info(&lv, &cd_S1334C2);
    dp->~S1334C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1334C2(Test_S1334C2, "S1334C2", ABISELECT(232,140));

#else // __cplusplus

extern void _ZN7S1334C2C1Ev();
extern void _ZN7S1334C2D1Ev();
Name_Map name_map_S1334C2[] = {
  NSPAIR(_ZN7S1334C2C1Ev),
  NSPAIR(_ZN7S1334C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1334C4;
extern VTBL_ENTRY _ZTI7S1334C4[];
extern  VTBL_ENTRY _ZTV7S1334C4[];
extern Class_Descriptor cd_S1334C5;
extern VTBL_ENTRY _ZTI7S1334C5[];
extern  VTBL_ENTRY _ZTV7S1334C5[];
extern Class_Descriptor cd_S1334C6;
extern VTBL_ENTRY _ZTI7S1334C6[];
extern  VTBL_ENTRY _ZTV7S1334C6[];
extern Class_Descriptor cd_S1334C8;
extern VTBL_ENTRY _ZTI7S1334C8[];
extern  VTBL_ENTRY _ZTV7S1334C8[];
extern Class_Descriptor cd_S1334C7;
extern VTBL_ENTRY _ZTI7S1334C7[];
extern  VTBL_ENTRY _ZTV7S1334C7[];
extern Class_Descriptor cd_S1334C8;
extern VTBL_ENTRY _ZTI7S1334C8[];
extern  VTBL_ENTRY _ZTV7S1334C8[];
extern Class_Descriptor cd_S1334C3;
extern VTBL_ENTRY _ZTI7S1334C3[];
extern  VTBL_ENTRY _ZTV7S1334C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1334C3[];
static Base_Class bases_S1334C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1334C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1334C5,    ABISELECT(16,8), //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
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1334C6,    ABISELECT(104,56), //bcp->offset
    17, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S1334C8,    ABISELECT(184,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
    4, //immediately_derived
  0, 0},
  {&cd_S1334C7,    ABISELECT(184,112), //bcp->offset
    28, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1334C8,    ABISELECT(112,60), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1334C3,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1334C2[];
extern void _ZN7S1334C42v2Ev();
extern void _ZN7S1334C2D1Ev();
extern void _ZN7S1334C2D0Ev();
extern void _ZN7S1334C33v14Ev();
extern void _ZN7S1334C33v15Ev();
extern void _ZN7S1334C33v16Ev();
extern void _ZN7S1334C23v17Ev();
extern void _ZN7S1334C23v18Ev();
extern void _ZN7S1334C23v19Ev();
extern void _ZN7S1334C23v20Ev();
extern void _ZN7S1334C52v3Ev();
extern void _ZN7S1334C52v4Ev();
extern void _ZN7S1334C62v5Ev();
extern void _ZN7S1334C82v6Ev();
extern void _ZN7S1334C82v7Ev();
extern void _ZN7S1334C82v8Ev();
extern void _ZN7S1334C82v9Ev();
extern void _ZN7S1334C83v10Ev();
extern void _ZN7S1334C83v11Ev();
extern void _ZN7S1334C82v6Ev();
extern void _ZN7S1334C82v7Ev();
extern void _ZN7S1334C82v8Ev();
extern void _ZN7S1334C82v9Ev();
extern void _ZN7S1334C83v10Ev();
extern void _ZN7S1334C83v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S1334C2D1Ev,_ZTv0_n36_N7S1334C2D1Ev)();
extern void ABISELECT(_ZThn184_N7S1334C2D1Ev,_ZThn112_N7S1334C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1334C2D0Ev,_ZTv0_n36_N7S1334C2D0Ev)();
extern void ABISELECT(_ZThn184_N7S1334C2D0Ev,_ZThn112_N7S1334C2D0Ev)() __attribute__((weak));
extern void _ZN7S1334C73v12Ev();
extern void _ZN7S1334C73v13Ev();
static  VTBL_ENTRY vtc_S1334C2[] = {
  ABISELECT(184,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S1334C2[0]),
  (VTBL_ENTRY)&_ZN7S1334C42v2Ev,
  (VTBL_ENTRY)&_ZN7S1334C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1334C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1334C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1334C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1334C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1334C23v20Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1334C2[0]),
  (VTBL_ENTRY)&_ZN7S1334C52v3Ev,
  (VTBL_ENTRY)&_ZN7S1334C52v4Ev,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S1334C2[0]),
  (VTBL_ENTRY)&_ZN7S1334C62v5Ev,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S1334C2[0]),
  (VTBL_ENTRY)&_ZN7S1334C82v6Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v7Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v8Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v9Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v10Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v11Ev,
  0,
  0,
  ABISELECT(-184,-112),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-112),
  (VTBL_ENTRY)&(_ZTI7S1334C2[0]),
  (VTBL_ENTRY)&_ZN7S1334C82v6Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v7Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v8Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v9Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v10Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1334C2D1Ev,_ZTv0_n36_N7S1334C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1334C2D0Ev,_ZTv0_n36_N7S1334C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1334C73v12Ev,
  (VTBL_ENTRY)&_ZN7S1334C73v13Ev,
};
extern VTBL_ENTRY _ZTV7S1334C2[];
extern void _ZN7S1334C42v2Ev();
extern void _ZN7S1334C3D1Ev();
extern void _ZN7S1334C3D0Ev();
extern void _ZN7S1334C33v14Ev();
extern void _ZN7S1334C33v15Ev();
extern void _ZN7S1334C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1334C3__7S1334C2[] = {
  ABISELECT(184,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S1334C3[0]),
  (VTBL_ENTRY)&_ZN7S1334C42v2Ev,
  (VTBL_ENTRY)&_ZN7S1334C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1334C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v16Ev,
};
extern void _ZN7S1334C82v6Ev();
extern void _ZN7S1334C82v7Ev();
extern void _ZN7S1334C82v8Ev();
extern void _ZN7S1334C82v9Ev();
extern void _ZN7S1334C83v10Ev();
extern void _ZN7S1334C83v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S1334C3D1Ev,_ZTv0_n36_N7S1334C3D1Ev)();
extern void ABISELECT(_ZThn184_N7S1334C3D1Ev,_ZThn112_N7S1334C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1334C3D0Ev,_ZTv0_n36_N7S1334C3D0Ev)();
extern void ABISELECT(_ZThn184_N7S1334C3D0Ev,_ZThn112_N7S1334C3D0Ev)() __attribute__((weak));
extern void _ZN7S1334C73v12Ev();
extern void _ZN7S1334C73v13Ev();
static  VTBL_ENTRY _tg__ZTV7S1334C7__7S1334C3__7S1334C2[] = {
  0,
  0,
  ABISELECT(-184,-112),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-112),
  (VTBL_ENTRY)&(_ZTI7S1334C3[0]),
  (VTBL_ENTRY)&_ZN7S1334C82v6Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v7Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v8Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v9Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v10Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1334C3D1Ev,_ZTv0_n36_N7S1334C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1334C3D0Ev,_ZTv0_n36_N7S1334C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1334C73v12Ev,
  (VTBL_ENTRY)&_ZN7S1334C73v13Ev,
};
static  VTT_ENTRY vtt_S1334C2[] = {
  {&(_ZTV7S1334C2[3]),  3,49},
  {&(_tg__ZTV7S1334C3__7S1334C2[3]),  3,9},
  {&(_tg__ZTV7S1334C7__7S1334C3__7S1334C2[11]),  11,21},
  {&(_ZTV7S1334C2[39]),  39,49},
};
extern VTBL_ENTRY _ZTI7S1334C2[];
extern  VTBL_ENTRY _ZTV7S1334C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1334C2[];
static VTBL_ENTRY alt_thunk_names55[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1334C3D0Ev,_ZTv0_n36_N7S1334C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S1334C3D0Ev,_ZThn112_N7S1334C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1334C3D1Ev,_ZTv0_n36_N7S1334C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S1334C3D1Ev,_ZThn112_N7S1334C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1334C2D0Ev,_ZTv0_n36_N7S1334C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S1334C2D0Ev,_ZThn112_N7S1334C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1334C2D1Ev,_ZTv0_n36_N7S1334C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S1334C2D1Ev,_ZThn112_N7S1334C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1334C2 = {  "S1334C2", // class name
  bases_S1334C2, 7,
  &(vtc_S1334C2[0]), // expected_vtbl_contents
  &(vtt_S1334C2[0]), // expected_vtt_contents
  ABISELECT(232,140), // object size
  NSPAIRA(_ZTI7S1334C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1334C2),49, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1334C2),4, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names55,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1334C1  : S1334C2 , S1334C6 {
  virtual void  v1(); // _ZN7S1334C12v1Ev
  ~S1334C1(); // tgen
  S1334C1(); // tgen
};
//SIG(1 S1334C1) C1{ BC2{ BC3{ BC4{ v2 Fi} BC5{ v3 v4 Fs:16 FL Fp[8]} BC6{ v5} VBC7{ BC8{ v6 v7 v8 v9 v10 v11 Fp[4]} vd v12 v13 FL} BC8 vd v14 v15 v16 Fi} v17 v18 v19 v20 Fi[7]} BC6 v1}


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

static void Test_S1334C1()
{
  extern Class_Descriptor cd_S1334C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,37)];
    init_test(&cd_S1334C1, buf);
    S1334C1 *dp, &lv = *(dp=new (buf) S1334C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,144), "sizeof(S1334C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1334C1)");
    check_base_class_offset(lv, (S1334C4*)(S1334C3*)(S1334C2*), 0, "S1334C1");
    check_base_class_offset(lv, (S1334C5*)(S1334C3*)(S1334C2*), ABISELECT(16,8), "S1334C1");
    check_base_class_offset(lv, (S1334C6*)(S1334C3*)(S1334C2*), ABISELECT(104,56), "S1334C1");
    check_base_class_offset(lv, (S1334C8*)(S1334C7*), ABISELECT(192,116), "S1334C1");
    check_base_class_offset(lv, (S1334C7*)(S1334C3*)(S1334C2*), ABISELECT(192,116), "S1334C1");
    /*is_ambiguous_... S1334C3::S1334C8 */ AMB_check_base_class_offset(lv, (S1334C8*)(S1334C3*)(S1334C2*), ABISELECT(112,60), "S1334C1");
    check_base_class_offset(lv, (S1334C3*)(S1334C2*), 0, "S1334C1");
    check_base_class_offset(lv, (S1334C2*), 0, "S1334C1");
    /*is_ambiguous_... S1334C1::S1334C6 */ AMB_check_base_class_offset(lv, (S1334C6*), ABISELECT(184,112), "S1334C1");
    test_class_info(&lv, &cd_S1334C1);
    dp->~S1334C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1334C1(Test_S1334C1, "S1334C1", ABISELECT(240,144));

#else // __cplusplus

extern void _ZN7S1334C1C1Ev();
extern void _ZN7S1334C1D1Ev();
Name_Map name_map_S1334C1[] = {
  NSPAIR(_ZN7S1334C1C1Ev),
  NSPAIR(_ZN7S1334C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1334C4;
extern VTBL_ENTRY _ZTI7S1334C4[];
extern  VTBL_ENTRY _ZTV7S1334C4[];
extern Class_Descriptor cd_S1334C5;
extern VTBL_ENTRY _ZTI7S1334C5[];
extern  VTBL_ENTRY _ZTV7S1334C5[];
extern Class_Descriptor cd_S1334C6;
extern VTBL_ENTRY _ZTI7S1334C6[];
extern  VTBL_ENTRY _ZTV7S1334C6[];
extern Class_Descriptor cd_S1334C8;
extern VTBL_ENTRY _ZTI7S1334C8[];
extern  VTBL_ENTRY _ZTV7S1334C8[];
extern Class_Descriptor cd_S1334C7;
extern VTBL_ENTRY _ZTI7S1334C7[];
extern  VTBL_ENTRY _ZTV7S1334C7[];
extern Class_Descriptor cd_S1334C8;
extern VTBL_ENTRY _ZTI7S1334C8[];
extern  VTBL_ENTRY _ZTV7S1334C8[];
extern Class_Descriptor cd_S1334C3;
extern VTBL_ENTRY _ZTI7S1334C3[];
extern  VTBL_ENTRY _ZTV7S1334C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1334C3[];
extern Class_Descriptor cd_S1334C2;
extern VTBL_ENTRY _ZTI7S1334C2[];
extern  VTBL_ENTRY _ZTV7S1334C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1334C2[];
extern Class_Descriptor cd_S1334C6;
extern VTBL_ENTRY _ZTI7S1334C6[];
extern  VTBL_ENTRY _ZTV7S1334C6[];
static Base_Class bases_S1334C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1334C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1334C5,    ABISELECT(16,8), //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
    6, //immediately_derived
  0, 0},
  {&cd_S1334C6,    ABISELECT(104,56), //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
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1334C8,    ABISELECT(192,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
    4, //immediately_derived
  0, 0},
  {&cd_S1334C7,    ABISELECT(192,116), //bcp->offset
    32, //bcp->virtual_function_table_offset
    11, //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
    6, //immediately_derived
  0, 1},
  {&cd_S1334C8,    ABISELECT(112,60), //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1334C3,    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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1334C2,    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_S1334C6,    ABISELECT(184,112), //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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1334C1[];
extern void _ZN7S1334C42v2Ev();
extern void _ZN7S1334C1D1Ev();
extern void _ZN7S1334C1D0Ev();
extern void _ZN7S1334C33v14Ev();
extern void _ZN7S1334C33v15Ev();
extern void _ZN7S1334C33v16Ev();
extern void _ZN7S1334C23v17Ev();
extern void _ZN7S1334C23v18Ev();
extern void _ZN7S1334C23v19Ev();
extern void _ZN7S1334C23v20Ev();
extern void _ZN7S1334C12v1Ev();
extern void _ZN7S1334C52v3Ev();
extern void _ZN7S1334C52v4Ev();
extern void _ZN7S1334C62v5Ev();
extern void _ZN7S1334C82v6Ev();
extern void _ZN7S1334C82v7Ev();
extern void _ZN7S1334C82v8Ev();
extern void _ZN7S1334C82v9Ev();
extern void _ZN7S1334C83v10Ev();
extern void _ZN7S1334C83v11Ev();
extern void _ZN7S1334C62v5Ev();
extern void _ZN7S1334C82v6Ev();
extern void _ZN7S1334C82v7Ev();
extern void _ZN7S1334C82v8Ev();
extern void _ZN7S1334C82v9Ev();
extern void _ZN7S1334C83v10Ev();
extern void _ZN7S1334C83v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S1334C1D1Ev,_ZTv0_n36_N7S1334C1D1Ev)();
extern void ABISELECT(_ZThn192_N7S1334C1D1Ev,_ZThn116_N7S1334C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1334C1D0Ev,_ZTv0_n36_N7S1334C1D0Ev)();
extern void ABISELECT(_ZThn192_N7S1334C1D0Ev,_ZThn116_N7S1334C1D0Ev)() __attribute__((weak));
extern void _ZN7S1334C73v12Ev();
extern void _ZN7S1334C73v13Ev();
static  VTBL_ENTRY vtc_S1334C1[] = {
  ABISELECT(192,116),
  0,
  (VTBL_ENTRY)&(_ZTI7S1334C1[0]),
  (VTBL_ENTRY)&_ZN7S1334C42v2Ev,
  (VTBL_ENTRY)&_ZN7S1334C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1334C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1334C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1334C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1334C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1334C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1334C12v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1334C1[0]),
  (VTBL_ENTRY)&_ZN7S1334C52v3Ev,
  (VTBL_ENTRY)&_ZN7S1334C52v4Ev,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S1334C1[0]),
  (VTBL_ENTRY)&_ZN7S1334C62v5Ev,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S1334C1[0]),
  (VTBL_ENTRY)&_ZN7S1334C82v6Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v7Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v8Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v9Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v10Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v11Ev,
  ABISELECT(-184,-112),
  (VTBL_ENTRY)&(_ZTI7S1334C1[0]),
  (VTBL_ENTRY)&_ZN7S1334C62v5Ev,
  0,
  0,
  ABISELECT(-192,-116),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-116),
  (VTBL_ENTRY)&(_ZTI7S1334C1[0]),
  (VTBL_ENTRY)&_ZN7S1334C82v6Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v7Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v8Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v9Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v10Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1334C1D1Ev,_ZTv0_n36_N7S1334C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1334C1D0Ev,_ZTv0_n36_N7S1334C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1334C73v12Ev,
  (VTBL_ENTRY)&_ZN7S1334C73v13Ev,
};
extern VTBL_ENTRY _ZTV7S1334C1[];
extern void _ZN7S1334C42v2Ev();
extern void _ZN7S1334C2D1Ev();
extern void _ZN7S1334C2D0Ev();
extern void _ZN7S1334C33v14Ev();
extern void _ZN7S1334C33v15Ev();
extern void _ZN7S1334C33v16Ev();
extern void _ZN7S1334C23v17Ev();
extern void _ZN7S1334C23v18Ev();
extern void _ZN7S1334C23v19Ev();
extern void _ZN7S1334C23v20Ev();
static  VTBL_ENTRY _tg__ZTV7S1334C2__7S1334C1[] = {
  ABISELECT(192,116),
  0,
  (VTBL_ENTRY)&(_ZTI7S1334C2[0]),
  (VTBL_ENTRY)&_ZN7S1334C42v2Ev,
  (VTBL_ENTRY)&_ZN7S1334C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1334C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1334C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1334C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1334C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1334C23v20Ev,
};
extern void _ZN7S1334C42v2Ev();
extern void _ZN7S1334C3D1Ev();
extern void _ZN7S1334C3D0Ev();
extern void _ZN7S1334C33v14Ev();
extern void _ZN7S1334C33v15Ev();
extern void _ZN7S1334C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1334C37S1334C2__7S1334C1[] = {
  ABISELECT(192,116),
  0,
  (VTBL_ENTRY)&(_ZTI7S1334C3[0]),
  (VTBL_ENTRY)&_ZN7S1334C42v2Ev,
  (VTBL_ENTRY)&_ZN7S1334C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1334C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v16Ev,
};
extern void _ZN7S1334C82v6Ev();
extern void _ZN7S1334C82v7Ev();
extern void _ZN7S1334C82v8Ev();
extern void _ZN7S1334C82v9Ev();
extern void _ZN7S1334C83v10Ev();
extern void _ZN7S1334C83v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S1334C3D1Ev,_ZTv0_n36_N7S1334C3D1Ev)();
extern void ABISELECT(_ZThn192_N7S1334C3D1Ev,_ZThn116_N7S1334C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1334C3D0Ev,_ZTv0_n36_N7S1334C3D0Ev)();
extern void ABISELECT(_ZThn192_N7S1334C3D0Ev,_ZThn116_N7S1334C3D0Ev)() __attribute__((weak));
extern void _ZN7S1334C73v12Ev();
extern void _ZN7S1334C73v13Ev();
static  VTBL_ENTRY _tg__ZTV7S1334C7__7S1334C37S1334C2__7S1334C1[] = {
  0,
  0,
  ABISELECT(-192,-116),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-116),
  (VTBL_ENTRY)&(_ZTI7S1334C3[0]),
  (VTBL_ENTRY)&_ZN7S1334C82v6Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v7Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v8Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v9Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v10Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1334C3D1Ev,_ZTv0_n36_N7S1334C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1334C3D0Ev,_ZTv0_n36_N7S1334C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1334C73v12Ev,
  (VTBL_ENTRY)&_ZN7S1334C73v13Ev,
};
extern void _ZN7S1334C82v6Ev();
extern void _ZN7S1334C82v7Ev();
extern void _ZN7S1334C82v8Ev();
extern void _ZN7S1334C82v9Ev();
extern void _ZN7S1334C83v10Ev();
extern void _ZN7S1334C83v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S1334C2D1Ev,_ZTv0_n36_N7S1334C2D1Ev)();
extern void ABISELECT(_ZThn192_N7S1334C2D1Ev,_ZThn116_N7S1334C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1334C2D0Ev,_ZTv0_n36_N7S1334C2D0Ev)();
extern void ABISELECT(_ZThn192_N7S1334C2D0Ev,_ZThn116_N7S1334C2D0Ev)() __attribute__((weak));
extern void _ZN7S1334C73v12Ev();
extern void _ZN7S1334C73v13Ev();
static  VTBL_ENTRY _tg__ZTV7S1334C7__7S1334C2__7S1334C1[] = {
  0,
  0,
  ABISELECT(-192,-116),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-116),
  (VTBL_ENTRY)&(_ZTI7S1334C2[0]),
  (VTBL_ENTRY)&_ZN7S1334C82v6Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v7Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v8Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v9Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v10Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1334C2D1Ev,_ZTv0_n36_N7S1334C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1334C2D0Ev,_ZTv0_n36_N7S1334C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1334C73v12Ev,
  (VTBL_ENTRY)&_ZN7S1334C73v13Ev,
};
static  VTT_ENTRY vtt_S1334C1[] = {
  {&(_ZTV7S1334C1[3]),  3,53},
  {&(_tg__ZTV7S1334C2__7S1334C1[3]),  3,13},
  {&(_tg__ZTV7S1334C37S1334C2__7S1334C1[3]),  3,9},
  {&(_tg__ZTV7S1334C7__7S1334C37S1334C2__7S1334C1[11]),  11,21},
  {&(_tg__ZTV7S1334C7__7S1334C2__7S1334C1[11]),  11,21},
  {&(_ZTV7S1334C1[43]),  43,53},
};
extern VTBL_ENTRY _ZTI7S1334C1[];
extern  VTBL_ENTRY _ZTV7S1334C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1334C1[];
static VTBL_ENTRY alt_thunk_names56[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1334C2D0Ev,_ZTv0_n36_N7S1334C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S1334C2D0Ev,_ZThn116_N7S1334C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1334C2D1Ev,_ZTv0_n36_N7S1334C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S1334C2D1Ev,_ZThn116_N7S1334C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1334C3D0Ev,_ZTv0_n36_N7S1334C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S1334C3D0Ev,_ZThn116_N7S1334C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1334C3D1Ev,_ZTv0_n36_N7S1334C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S1334C3D1Ev,_ZThn116_N7S1334C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1334C1D0Ev,_ZTv0_n36_N7S1334C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S1334C1D0Ev,_ZThn116_N7S1334C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1334C1D1Ev,_ZTv0_n36_N7S1334C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S1334C1D1Ev,_ZThn116_N7S1334C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1334C1 = {  "S1334C1", // class name
  bases_S1334C1, 9,
  &(vtc_S1334C1[0]), // expected_vtbl_contents
  &(vtt_S1334C1[0]), // expected_vtt_contents
  ABISELECT(240,144), // object size
  NSPAIRA(_ZTI7S1334C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1334C1),53, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1334C1),6, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names56,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S867C5  {
  ::S4473C12_nt s867c5f0;
  int s867c5f1[2];
  char s867c5f2;
  virtual  ~S867C5(); // _ZN6S867C5D1Ev
  virtual void  v2(); // _ZN6S867C52v2Ev
  virtual void  v3(); // _ZN6S867C52v3Ev
  virtual void  v4(); // _ZN6S867C52v4Ev
  S867C5(); // tgen
};
//SIG(-1 S867C5) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S867C5 ::~S867C5(){ note_dtor("S867C5", this);}
void  S867C5 ::v2(){vfunc_called(this, "_ZN6S867C52v2Ev");}
void  S867C5 ::v3(){vfunc_called(this, "_ZN6S867C52v3Ev");}
void  S867C5 ::v4(){vfunc_called(this, "_ZN6S867C52v4Ev");}
S867C5 ::S867C5(){ note_ctor("S867C5", this);} // tgen

static void Test_S867C5()
{
  extern Class_Descriptor cd_S867C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S867C5, buf);
    S867C5 *dp, &lv = *(dp=new (buf) S867C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S867C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S867C5)");
    check_field_offset(lv, s867c5f0, ABISELECT(8,4), "S867C5.s867c5f0");
    check_field_offset(lv, s867c5f1, ABISELECT(24,16), "S867C5.s867c5f1");
    check_field_offset(lv, s867c5f2, ABISELECT(32,24), "S867C5.s867c5f2");
    test_class_info(&lv, &cd_S867C5);
    dp->~S867C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS867C5(Test_S867C5, "S867C5", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN6S867C5C1Ev();
extern void _ZN6S867C5D1Ev();
Name_Map name_map_S867C5[] = {
  NSPAIR(_ZN6S867C5C1Ev),
  NSPAIR(_ZN6S867C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S867C5[];
extern void _ZN6S867C5D1Ev();
extern void _ZN6S867C5D0Ev();
extern void _ZN6S867C52v2Ev();
extern void _ZN6S867C52v3Ev();
extern void _ZN6S867C52v4Ev();
static  VTBL_ENTRY vtc_S867C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S867C5[0]),
  (VTBL_ENTRY)&_ZN6S867C5D1Ev,
  (VTBL_ENTRY)&_ZN6S867C5D0Ev,
  (VTBL_ENTRY)&_ZN6S867C52v2Ev,
  (VTBL_ENTRY)&_ZN6S867C52v3Ev,
  (VTBL_ENTRY)&_ZN6S867C52v4Ev,
};
extern VTBL_ENTRY _ZTI6S867C5[];
extern  VTBL_ENTRY _ZTV6S867C5[];
Class_Descriptor cd_S867C5 = {  "S867C5", // class name
  0,0,//no base classes
  &(vtc_S867C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI6S867C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S867C5),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  S867C4  : S867C5 {
  void *s867c4f0;
  virtual void  v5(); // _ZN6S867C42v5Ev
  virtual void  v6(); // _ZN6S867C42v6Ev
  ~S867C4(); // tgen
  S867C4(); // tgen
};
//SIG(-1 S867C4) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S867C4 ::v5(){vfunc_called(this, "_ZN6S867C42v5Ev");}
void  S867C4 ::v6(){vfunc_called(this, "_ZN6S867C42v6Ev");}
S867C4 ::~S867C4(){ note_dtor("S867C4", this);} // tgen
S867C4 ::S867C4(){ note_ctor("S867C4", this);} // tgen

static void Test_S867C4()
{
  extern Class_Descriptor cd_S867C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S867C4, buf);
    S867C4 *dp, &lv = *(dp=new (buf) S867C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S867C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S867C4)");
    check_base_class_offset(lv, (S867C5*), 0, "S867C4");
    check_field_offset(lv, s867c4f0, ABISELECT(40,28), "S867C4.s867c4f0");
    test_class_info(&lv, &cd_S867C4);
    dp->~S867C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS867C4(Test_S867C4, "S867C4", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN6S867C4C1Ev();
extern void _ZN6S867C4D1Ev();
Name_Map name_map_S867C4[] = {
  NSPAIR(_ZN6S867C4C1Ev),
  NSPAIR(_ZN6S867C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S867C5;
extern VTBL_ENTRY _ZTI6S867C5[];
extern  VTBL_ENTRY _ZTV6S867C5[];
static Base_Class bases_S867C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S867C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S867C4[];
extern void _ZN6S867C4D1Ev();
extern void _ZN6S867C4D0Ev();
extern void _ZN6S867C52v2Ev();
extern void _ZN6S867C52v3Ev();
extern void _ZN6S867C52v4Ev();
extern void _ZN6S867C42v5Ev();
extern void _ZN6S867C42v6Ev();
static  VTBL_ENTRY vtc_S867C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S867C4[0]),
  (VTBL_ENTRY)&_ZN6S867C4D1Ev,
  (VTBL_ENTRY)&_ZN6S867C4D0Ev,
  (VTBL_ENTRY)&_ZN6S867C52v2Ev,
  (VTBL_ENTRY)&_ZN6S867C52v3Ev,
  (VTBL_ENTRY)&_ZN6S867C52v4Ev,
  (VTBL_ENTRY)&_ZN6S867C42v5Ev,
  (VTBL_ENTRY)&_ZN6S867C42v6Ev,
};
extern VTBL_ENTRY _ZTI6S867C4[];
extern  VTBL_ENTRY _ZTV6S867C4[];
Class_Descriptor cd_S867C4 = {  "S867C4", // class name
  bases_S867C4, 1,
  &(vtc_S867C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI6S867C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S867C4),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  S867C3  : S867C4 {
  void *s867c3f0;
  char s867c3f1;
  ::S2366C14_nt s867c3f2;
  virtual  ~S867C3(); // _ZN6S867C3D1Ev
  virtual void  v7(); // _ZN6S867C32v7Ev
  S867C3(); // tgen
};
//SIG(-1 S867C3) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1 Fp Fc FC6{ m Fi[2]}}


 S867C3 ::~S867C3(){ note_dtor("S867C3", this);}
void  S867C3 ::v7(){vfunc_called(this, "_ZN6S867C32v7Ev");}
S867C3 ::S867C3(){ note_ctor("S867C3", this);} // tgen

static void Test_S867C3()
{
  extern Class_Descriptor cd_S867C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S867C3, buf);
    S867C3 *dp, &lv = *(dp=new (buf) S867C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S867C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S867C3)");
    check_base_class_offset(lv, (S867C5*)(S867C4*), 0, "S867C3");
    check_base_class_offset(lv, (S867C4*), 0, "S867C3");
    check_field_offset(lv, s867c3f0, ABISELECT(48,32), "S867C3.s867c3f0");
    check_field_offset(lv, s867c3f1, ABISELECT(56,36), "S867C3.s867c3f1");
    check_field_offset(lv, s867c3f2, ABISELECT(60,40), "S867C3.s867c3f2");
    test_class_info(&lv, &cd_S867C3);
    dp->~S867C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS867C3(Test_S867C3, "S867C3", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN6S867C3C1Ev();
extern void _ZN6S867C3D1Ev();
Name_Map name_map_S867C3[] = {
  NSPAIR(_ZN6S867C3C1Ev),
  NSPAIR(_ZN6S867C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S867C5;
extern VTBL_ENTRY _ZTI6S867C5[];
extern  VTBL_ENTRY _ZTV6S867C5[];
extern Class_Descriptor cd_S867C4;
extern VTBL_ENTRY _ZTI6S867C4[];
extern  VTBL_ENTRY _ZTV6S867C4[];
static Base_Class bases_S867C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S867C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S867C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S867C3[];
extern void _ZN6S867C3D1Ev();
extern void _ZN6S867C3D0Ev();
extern void _ZN6S867C52v2Ev();
extern void _ZN6S867C52v3Ev();
extern void _ZN6S867C52v4Ev();
extern void _ZN6S867C42v5Ev();
extern void _ZN6S867C42v6Ev();
extern void _ZN6S867C32v7Ev();
static  VTBL_ENTRY vtc_S867C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S867C3[0]),
  (VTBL_ENTRY)&_ZN6S867C3D1Ev,
  (VTBL_ENTRY)&_ZN6S867C3D0Ev,
  (VTBL_ENTRY)&_ZN6S867C52v2Ev,
  (VTBL_ENTRY)&_ZN6S867C52v3Ev,
  (VTBL_ENTRY)&_ZN6S867C52v4Ev,
  (VTBL_ENTRY)&_ZN6S867C42v5Ev,
  (VTBL_ENTRY)&_ZN6S867C42v6Ev,
  (VTBL_ENTRY)&_ZN6S867C32v7Ev,
};
extern VTBL_ENTRY _ZTI6S867C3[];
extern  VTBL_ENTRY _ZTV6S867C3[];
Class_Descriptor cd_S867C3 = {  "S867C3", // class name
  bases_S867C3, 2,
  &(vtc_S867C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI6S867C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S867C3),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  S867C2  : S867C3 {
  void *s867c2f0[3];
  int s867c2f1;
  ::S130C11_nt s867c2f2;
  virtual  ~S867C2(); // _ZN6S867C2D1Ev
  virtual void  v8(); // _ZN6S867C22v8Ev
  virtual void  v9(); // _ZN6S867C22v9Ev
  virtual void  v10(); // _ZN6S867C23v10Ev
  virtual void  v11(); // _ZN6S867C23v11Ev
  virtual void  v12(); // _ZN6S867C23v12Ev
  virtual void  v13(); // _ZN6S867C23v13Ev
  virtual void  v14(); // _ZN6S867C23v14Ev
  S867C2(); // tgen
};
//SIG(-1 S867C2) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v11 v12 Fp} vd v13 Fp Fc FC7{ m Fi[2]}} vd v1 v2 v3 v4 v5 v6 v7 Fp[3] Fi FC8{ m Fp[2]}}


 S867C2 ::~S867C2(){ note_dtor("S867C2", this);}
void  S867C2 ::v8(){vfunc_called(this, "_ZN6S867C22v8Ev");}
void  S867C2 ::v9(){vfunc_called(this, "_ZN6S867C22v9Ev");}
void  S867C2 ::v10(){vfunc_called(this, "_ZN6S867C23v10Ev");}
void  S867C2 ::v11(){vfunc_called(this, "_ZN6S867C23v11Ev");}
void  S867C2 ::v12(){vfunc_called(this, "_ZN6S867C23v12Ev");}
void  S867C2 ::v13(){vfunc_called(this, "_ZN6S867C23v13Ev");}
void  S867C2 ::v14(){vfunc_called(this, "_ZN6S867C23v14Ev");}
S867C2 ::S867C2(){ note_ctor("S867C2", this);} // tgen

static void Test_S867C2()
{
  extern Class_Descriptor cd_S867C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S867C2, buf);
    S867C2 *dp, &lv = *(dp=new (buf) S867C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S867C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S867C2)");
    check_base_class_offset(lv, (S867C5*)(S867C4*)(S867C3*), 0, "S867C2");
    check_base_class_offset(lv, (S867C4*)(S867C3*), 0, "S867C2");
    check_base_class_offset(lv, (S867C3*), 0, "S867C2");
    check_field_offset(lv, s867c2f0, ABISELECT(72,48), "S867C2.s867c2f0");
    check_field_offset(lv, s867c2f1, ABISELECT(96,60), "S867C2.s867c2f1");
    check_field_offset(lv, s867c2f2, ABISELECT(104,64), "S867C2.s867c2f2");
    test_class_info(&lv, &cd_S867C2);
    dp->~S867C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS867C2(Test_S867C2, "S867C2", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN6S867C2C1Ev();
extern void _ZN6S867C2D1Ev();
Name_Map name_map_S867C2[] = {
  NSPAIR(_ZN6S867C2C1Ev),
  NSPAIR(_ZN6S867C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S867C5;
extern VTBL_ENTRY _ZTI6S867C5[];
extern  VTBL_ENTRY _ZTV6S867C5[];
extern Class_Descriptor cd_S867C4;
extern VTBL_ENTRY _ZTI6S867C4[];
extern  VTBL_ENTRY _ZTV6S867C4[];
extern Class_Descriptor cd_S867C3;
extern VTBL_ENTRY _ZTI6S867C3[];
extern  VTBL_ENTRY _ZTV6S867C3[];
static Base_Class bases_S867C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S867C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S867C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S867C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S867C2[];
extern void _ZN6S867C2D1Ev();
extern void _ZN6S867C2D0Ev();
extern void _ZN6S867C52v2Ev();
extern void _ZN6S867C52v3Ev();
extern void _ZN6S867C52v4Ev();
extern void _ZN6S867C42v5Ev();
extern void _ZN6S867C42v6Ev();
extern void _ZN6S867C32v7Ev();
extern void _ZN6S867C22v8Ev();
extern void _ZN6S867C22v9Ev();
extern void _ZN6S867C23v10Ev();
extern void _ZN6S867C23v11Ev();
extern void _ZN6S867C23v12Ev();
extern void _ZN6S867C23v13Ev();
extern void _ZN6S867C23v14Ev();
static  VTBL_ENTRY vtc_S867C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S867C2[0]),
  (VTBL_ENTRY)&_ZN6S867C2D1Ev,
  (VTBL_ENTRY)&_ZN6S867C2D0Ev,
  (VTBL_ENTRY)&_ZN6S867C52v2Ev,
  (VTBL_ENTRY)&_ZN6S867C52v3Ev,
  (VTBL_ENTRY)&_ZN6S867C52v4Ev,
  (VTBL_ENTRY)&_ZN6S867C42v5Ev,
  (VTBL_ENTRY)&_ZN6S867C42v6Ev,
  (VTBL_ENTRY)&_ZN6S867C32v7Ev,
  (VTBL_ENTRY)&_ZN6S867C22v8Ev,
  (VTBL_ENTRY)&_ZN6S867C22v9Ev,
  (VTBL_ENTRY)&_ZN6S867C23v10Ev,
  (VTBL_ENTRY)&_ZN6S867C23v11Ev,
  (VTBL_ENTRY)&_ZN6S867C23v12Ev,
  (VTBL_ENTRY)&_ZN6S867C23v13Ev,
  (VTBL_ENTRY)&_ZN6S867C23v14Ev,
};
extern VTBL_ENTRY _ZTI6S867C2[];
extern  VTBL_ENTRY _ZTV6S867C2[];
Class_Descriptor cd_S867C2 = {  "S867C2", // class name
  bases_S867C2, 3,
  &(vtc_S867C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI6S867C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S867C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S867C1  : S867C2 {
  void *s867c1f0;
  virtual  ~S867C1(); // _ZN6S867C1D1Ev
  virtual void  v1(); // _ZN6S867C12v1Ev
  S867C1(); // tgen
};
//SIG(1 S867C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v2 v3 v4 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} v5 v6 Fp} vd v7 Fp Fc FC8{ m Fi[2]}} vd v8 v9 v10 v11 v12 v13 v14 Fp[3] Fi FC9{ m Fp[2]}} vd v1 Fp}


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

static void Test_S867C1()
{
  extern Class_Descriptor cd_S867C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,20)];
    init_test(&cd_S867C1, buf);
    S867C1 *dp, &lv = *(dp=new (buf) S867C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,76), "sizeof(S867C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S867C1)");
    check_base_class_offset(lv, (S867C5*)(S867C4*)(S867C3*)(S867C2*), 0, "S867C1");
    check_base_class_offset(lv, (S867C4*)(S867C3*)(S867C2*), 0, "S867C1");
    check_base_class_offset(lv, (S867C3*)(S867C2*), 0, "S867C1");
    check_base_class_offset(lv, (S867C2*), 0, "S867C1");
    check_field_offset(lv, s867c1f0, ABISELECT(120,72), "S867C1.s867c1f0");
    test_class_info(&lv, &cd_S867C1);
    dp->~S867C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS867C1(Test_S867C1, "S867C1", ABISELECT(128,76));

#else // __cplusplus

extern void _ZN6S867C1C1Ev();
extern void _ZN6S867C1D1Ev();
Name_Map name_map_S867C1[] = {
  NSPAIR(_ZN6S867C1C1Ev),
  NSPAIR(_ZN6S867C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S867C5;
extern VTBL_ENTRY _ZTI6S867C5[];
extern  VTBL_ENTRY _ZTV6S867C5[];
extern Class_Descriptor cd_S867C4;
extern VTBL_ENTRY _ZTI6S867C4[];
extern  VTBL_ENTRY _ZTV6S867C4[];
extern Class_Descriptor cd_S867C3;
extern VTBL_ENTRY _ZTI6S867C3[];
extern  VTBL_ENTRY _ZTV6S867C3[];
extern Class_Descriptor cd_S867C2;
extern VTBL_ENTRY _ZTI6S867C2[];
extern  VTBL_ENTRY _ZTV6S867C2[];
static Base_Class bases_S867C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S867C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S867C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S867C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S867C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S867C1[];
extern void _ZN6S867C1D1Ev();
extern void _ZN6S867C1D0Ev();
extern void _ZN6S867C52v2Ev();
extern void _ZN6S867C52v3Ev();
extern void _ZN6S867C52v4Ev();
extern void _ZN6S867C42v5Ev();
extern void _ZN6S867C42v6Ev();
extern void _ZN6S867C32v7Ev();
extern void _ZN6S867C22v8Ev();
extern void _ZN6S867C22v9Ev();
extern void _ZN6S867C23v10Ev();
extern void _ZN6S867C23v11Ev();
extern void _ZN6S867C23v12Ev();
extern void _ZN6S867C23v13Ev();
extern void _ZN6S867C23v14Ev();
extern void _ZN6S867C12v1Ev();
static  VTBL_ENTRY vtc_S867C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S867C1[0]),
  (VTBL_ENTRY)&_ZN6S867C1D1Ev,
  (VTBL_ENTRY)&_ZN6S867C1D0Ev,
  (VTBL_ENTRY)&_ZN6S867C52v2Ev,
  (VTBL_ENTRY)&_ZN6S867C52v3Ev,
  (VTBL_ENTRY)&_ZN6S867C52v4Ev,
  (VTBL_ENTRY)&_ZN6S867C42v5Ev,
  (VTBL_ENTRY)&_ZN6S867C42v6Ev,
  (VTBL_ENTRY)&_ZN6S867C32v7Ev,
  (VTBL_ENTRY)&_ZN6S867C22v8Ev,
  (VTBL_ENTRY)&_ZN6S867C22v9Ev,
  (VTBL_ENTRY)&_ZN6S867C23v10Ev,
  (VTBL_ENTRY)&_ZN6S867C23v11Ev,
  (VTBL_ENTRY)&_ZN6S867C23v12Ev,
  (VTBL_ENTRY)&_ZN6S867C23v13Ev,
  (VTBL_ENTRY)&_ZN6S867C23v14Ev,
  (VTBL_ENTRY)&_ZN6S867C12v1Ev,
};
extern VTBL_ENTRY _ZTI6S867C1[];
extern  VTBL_ENTRY _ZTV6S867C1[];
Class_Descriptor cd_S867C1 = {  "S867C1", // class name
  bases_S867C1, 4,
  &(vtc_S867C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,76), // object size
  NSPAIRA(_ZTI6S867C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S867C1),18, //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  S4729C3  {
  ::S4473C12_nt s4729c3f0;
  int s4729c3f1[2];
  char s4729c3f2;
  virtual  ~S4729C3(); // _ZN7S4729C3D1Ev
  virtual void  v3(); // _ZN7S4729C32v3Ev
  virtual void  v4(); // _ZN7S4729C32v4Ev
  virtual void  v5(); // _ZN7S4729C32v5Ev
  S4729C3(); // tgen
};
//SIG(-1 S4729C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4729C3 ::~S4729C3(){ note_dtor("S4729C3", this);}
void  S4729C3 ::v3(){vfunc_called(this, "_ZN7S4729C32v3Ev");}
void  S4729C3 ::v4(){vfunc_called(this, "_ZN7S4729C32v4Ev");}
void  S4729C3 ::v5(){vfunc_called(this, "_ZN7S4729C32v5Ev");}
S4729C3 ::S4729C3(){ note_ctor("S4729C3", this);} // tgen

static void Test_S4729C3()
{
  extern Class_Descriptor cd_S4729C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4729C3, buf);
    S4729C3 *dp, &lv = *(dp=new (buf) S4729C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4729C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4729C3)");
    check_field_offset(lv, s4729c3f0, ABISELECT(8,4), "S4729C3.s4729c3f0");
    check_field_offset(lv, s4729c3f1, ABISELECT(24,16), "S4729C3.s4729c3f1");
    check_field_offset(lv, s4729c3f2, ABISELECT(32,24), "S4729C3.s4729c3f2");
    test_class_info(&lv, &cd_S4729C3);
    dp->~S4729C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4729C3(Test_S4729C3, "S4729C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4729C3C1Ev();
extern void _ZN7S4729C3D1Ev();
Name_Map name_map_S4729C3[] = {
  NSPAIR(_ZN7S4729C3C1Ev),
  NSPAIR(_ZN7S4729C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4729C3[];
extern void _ZN7S4729C3D1Ev();
extern void _ZN7S4729C3D0Ev();
extern void _ZN7S4729C32v3Ev();
extern void _ZN7S4729C32v4Ev();
extern void _ZN7S4729C32v5Ev();
static  VTBL_ENTRY vtc_S4729C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4729C3[0]),
  (VTBL_ENTRY)&_ZN7S4729C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4729C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4729C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4729C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4729C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4729C3[];
extern  VTBL_ENTRY _ZTV7S4729C3[];
Class_Descriptor cd_S4729C3 = {  "S4729C3", // class name
  0,0,//no base classes
  &(vtc_S4729C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4729C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4729C3),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  S4729C2  : S4729C3 {
  void *s4729c2f0;
  virtual void  v6(); // _ZN7S4729C22v6Ev
  virtual void  v7(); // _ZN7S4729C22v7Ev
  ~S4729C2(); // tgen
  S4729C2(); // tgen
};
//SIG(-1 S4729C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4729C2 ::v6(){vfunc_called(this, "_ZN7S4729C22v6Ev");}
void  S4729C2 ::v7(){vfunc_called(this, "_ZN7S4729C22v7Ev");}
S4729C2 ::~S4729C2(){ note_dtor("S4729C2", this);} // tgen
S4729C2 ::S4729C2(){ note_ctor("S4729C2", this);} // tgen

static void Test_S4729C2()
{
  extern Class_Descriptor cd_S4729C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4729C2, buf);
    S4729C2 *dp, &lv = *(dp=new (buf) S4729C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4729C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4729C2)");
    check_base_class_offset(lv, (S4729C3*), 0, "S4729C2");
    check_field_offset(lv, s4729c2f0, ABISELECT(40,28), "S4729C2.s4729c2f0");
    test_class_info(&lv, &cd_S4729C2);
    dp->~S4729C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4729C2(Test_S4729C2, "S4729C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4729C2C1Ev();
extern void _ZN7S4729C2D1Ev();
Name_Map name_map_S4729C2[] = {
  NSPAIR(_ZN7S4729C2C1Ev),
  NSPAIR(_ZN7S4729C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4729C3;
extern VTBL_ENTRY _ZTI7S4729C3[];
extern  VTBL_ENTRY _ZTV7S4729C3[];
static Base_Class bases_S4729C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4729C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4729C2[];
extern void _ZN7S4729C2D1Ev();
extern void _ZN7S4729C2D0Ev();
extern void _ZN7S4729C32v3Ev();
extern void _ZN7S4729C32v4Ev();
extern void _ZN7S4729C32v5Ev();
extern void _ZN7S4729C22v6Ev();
extern void _ZN7S4729C22v7Ev();
static  VTBL_ENTRY vtc_S4729C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4729C2[0]),
  (VTBL_ENTRY)&_ZN7S4729C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4729C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4729C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4729C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4729C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4729C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4729C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4729C2[];
extern  VTBL_ENTRY _ZTV7S4729C2[];
Class_Descriptor cd_S4729C2 = {  "S4729C2", // class name
  bases_S4729C2, 1,
  &(vtc_S4729C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4729C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4729C2),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  S4729C11_nt  {
  __tsi64 s4729c11f0;
  void  mf4729c11(); // _ZN11S4729C11_nt9mf4729c11Ev
};
//SIG(-1 S4729C11_nt) C1{ m FL}


void  S4729C11_nt ::mf4729c11(){}

//skip512 S4729C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4729C10_nt  {
  ::S4729C11_nt s4729c10f0;
  void  mf4729c10(); // _ZN11S4729C10_nt9mf4729c10Ev
};
//SIG(-1 S4729C10_nt) C1{ m FC2{ m FL}}


void  S4729C10_nt ::mf4729c10(){}

//skip512 S4729C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4729C6  {
  ::S2366C5_nt s4729c6f0;
  void *s4729c6f1[2];
  ::S2366C19 s4729c6f2;
  ::S4729C10_nt s4729c6f3;
  ::S2366C14_nt s4729c6f4;
};
//SIG(-1 S4729C6) C1{ FC2{ m Fp Fi FC3{ m}} Fp[2] FC4{ m Fp} FC5{ m FC6{ m FL}} FC7{ m Fi[2]}}



static void Test_S4729C6()
{
  {
    init_simple_test("S4729C6");
    S4729C6 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S4729C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4729C6)");
    check_field_offset(lv, s4729c6f0, 0, "S4729C6.s4729c6f0");
    check_field_offset(lv, s4729c6f1, ABISELECT(16,12), "S4729C6.s4729c6f1");
    check_field_offset(lv, s4729c6f2, ABISELECT(32,20), "S4729C6.s4729c6f2");
    check_field_offset(lv, s4729c6f3, ABISELECT(40,24), "S4729C6.s4729c6f3");
    check_field_offset(lv, s4729c6f4, ABISELECT(48,32), "S4729C6.s4729c6f4");
  }
}
static Arrange_To_Call_Me vS4729C6(Test_S4729C6, "S4729C6", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4729C1  : S4729C2 {
  ::S4729C6 s4729c1f0;
  void *s4729c1f1[2];
  ::S2366C19 s4729c1f2;
  virtual void  v1(); // _ZN7S4729C12v1Ev
  virtual void  v2(); // _ZN7S4729C12v2Ev
  ~S4729C1(); // tgen
  S4729C1(); // tgen
};
//SIG(1 S4729C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} v1 v2 FC6{ FC7{ m Fp Fi FC5} Fp[2] FC8{ m Fp} FC9{ m FC10{ m FL}} FC11{ m Fi[2]}} Fp[2] FC8}


void  S4729C1 ::v1(){vfunc_called(this, "_ZN7S4729C12v1Ev");}
void  S4729C1 ::v2(){vfunc_called(this, "_ZN7S4729C12v2Ev");}
S4729C1 ::~S4729C1(){ note_dtor("S4729C1", this);} // tgen
S4729C1 ::S4729C1(){ note_ctor("S4729C1", this);} // tgen

static void Test_S4729C1()
{
  extern Class_Descriptor cd_S4729C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S4729C1, buf);
    S4729C1 *dp, &lv = *(dp=new (buf) S4729C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S4729C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4729C1)");
    check_base_class_offset(lv, (S4729C3*)(S4729C2*), 0, "S4729C1");
    check_base_class_offset(lv, (S4729C2*), 0, "S4729C1");
    check_field_offset(lv, s4729c1f0, ABISELECT(48,32), "S4729C1.s4729c1f0");
    check_field_offset(lv, s4729c1f1, ABISELECT(104,72), "S4729C1.s4729c1f1");
    check_field_offset(lv, s4729c1f2, ABISELECT(120,80), "S4729C1.s4729c1f2");
    test_class_info(&lv, &cd_S4729C1);
    dp->~S4729C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4729C1(Test_S4729C1, "S4729C1", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN7S4729C1C1Ev();
extern void _ZN7S4729C1D1Ev();
Name_Map name_map_S4729C1[] = {
  NSPAIR(_ZN7S4729C1C1Ev),
  NSPAIR(_ZN7S4729C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4729C3;
extern VTBL_ENTRY _ZTI7S4729C3[];
extern  VTBL_ENTRY _ZTV7S4729C3[];
extern Class_Descriptor cd_S4729C2;
extern VTBL_ENTRY _ZTI7S4729C2[];
extern  VTBL_ENTRY _ZTV7S4729C2[];
static Base_Class bases_S4729C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4729C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4729C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4729C1[];
extern void _ZN7S4729C1D1Ev();
extern void _ZN7S4729C1D0Ev();
extern void _ZN7S4729C32v3Ev();
extern void _ZN7S4729C32v4Ev();
extern void _ZN7S4729C32v5Ev();
extern void _ZN7S4729C22v6Ev();
extern void _ZN7S4729C22v7Ev();
extern void _ZN7S4729C12v1Ev();
extern void _ZN7S4729C12v2Ev();
static  VTBL_ENTRY vtc_S4729C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4729C1[0]),
  (VTBL_ENTRY)&_ZN7S4729C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4729C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4729C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4729C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4729C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4729C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4729C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4729C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4729C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4729C1[];
extern  VTBL_ENTRY _ZTV7S4729C1[];
Class_Descriptor cd_S4729C1 = {  "S4729C1", // class name
  bases_S4729C1, 2,
  &(vtc_S4729C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI7S4729C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4729C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4360C3  {
  ::S4473C12_nt s4360c3f0;
  int s4360c3f1[2];
  char s4360c3f2;
  virtual  ~S4360C3(); // _ZN7S4360C3D1Ev
  virtual void  v2(); // _ZN7S4360C32v2Ev
  virtual void  v3(); // _ZN7S4360C32v3Ev
  virtual void  v4(); // _ZN7S4360C32v4Ev
  S4360C3(); // tgen
};
//SIG(-1 S4360C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4360C3 ::~S4360C3(){ note_dtor("S4360C3", this);}
void  S4360C3 ::v2(){vfunc_called(this, "_ZN7S4360C32v2Ev");}
void  S4360C3 ::v3(){vfunc_called(this, "_ZN7S4360C32v3Ev");}
void  S4360C3 ::v4(){vfunc_called(this, "_ZN7S4360C32v4Ev");}
S4360C3 ::S4360C3(){ note_ctor("S4360C3", this);} // tgen

static void Test_S4360C3()
{
  extern Class_Descriptor cd_S4360C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4360C3, buf);
    S4360C3 *dp, &lv = *(dp=new (buf) S4360C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4360C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4360C3)");
    check_field_offset(lv, s4360c3f0, ABISELECT(8,4), "S4360C3.s4360c3f0");
    check_field_offset(lv, s4360c3f1, ABISELECT(24,16), "S4360C3.s4360c3f1");
    check_field_offset(lv, s4360c3f2, ABISELECT(32,24), "S4360C3.s4360c3f2");
    test_class_info(&lv, &cd_S4360C3);
    dp->~S4360C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4360C3(Test_S4360C3, "S4360C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4360C3C1Ev();
extern void _ZN7S4360C3D1Ev();
Name_Map name_map_S4360C3[] = {
  NSPAIR(_ZN7S4360C3C1Ev),
  NSPAIR(_ZN7S4360C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4360C3[];
extern void _ZN7S4360C3D1Ev();
extern void _ZN7S4360C3D0Ev();
extern void _ZN7S4360C32v2Ev();
extern void _ZN7S4360C32v3Ev();
extern void _ZN7S4360C32v4Ev();
static  VTBL_ENTRY vtc_S4360C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4360C3[0]),
  (VTBL_ENTRY)&_ZN7S4360C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4360C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4360C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4360C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4360C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4360C3[];
extern  VTBL_ENTRY _ZTV7S4360C3[];
Class_Descriptor cd_S4360C3 = {  "S4360C3", // class name
  0,0,//no base classes
  &(vtc_S4360C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4360C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4360C3),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  S4360C2  : S4360C3 {
  void *s4360c2f0;
  virtual void  v5(); // _ZN7S4360C22v5Ev
  virtual void  v6(); // _ZN7S4360C22v6Ev
  ~S4360C2(); // tgen
  S4360C2(); // tgen
};
//SIG(-1 S4360C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4360C2 ::v5(){vfunc_called(this, "_ZN7S4360C22v5Ev");}
void  S4360C2 ::v6(){vfunc_called(this, "_ZN7S4360C22v6Ev");}
S4360C2 ::~S4360C2(){ note_dtor("S4360C2", this);} // tgen
S4360C2 ::S4360C2(){ note_ctor("S4360C2", this);} // tgen

static void Test_S4360C2()
{
  extern Class_Descriptor cd_S4360C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4360C2, buf);
    S4360C2 *dp, &lv = *(dp=new (buf) S4360C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4360C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4360C2)");
    check_base_class_offset(lv, (S4360C3*), 0, "S4360C2");
    check_field_offset(lv, s4360c2f0, ABISELECT(40,28), "S4360C2.s4360c2f0");
    test_class_info(&lv, &cd_S4360C2);
    dp->~S4360C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4360C2(Test_S4360C2, "S4360C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4360C2C1Ev();
extern void _ZN7S4360C2D1Ev();
Name_Map name_map_S4360C2[] = {
  NSPAIR(_ZN7S4360C2C1Ev),
  NSPAIR(_ZN7S4360C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4360C3;
extern VTBL_ENTRY _ZTI7S4360C3[];
extern  VTBL_ENTRY _ZTV7S4360C3[];
static Base_Class bases_S4360C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4360C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4360C2[];
extern void _ZN7S4360C2D1Ev();
extern void _ZN7S4360C2D0Ev();
extern void _ZN7S4360C32v2Ev();
extern void _ZN7S4360C32v3Ev();
extern void _ZN7S4360C32v4Ev();
extern void _ZN7S4360C22v5Ev();
extern void _ZN7S4360C22v6Ev();
static  VTBL_ENTRY vtc_S4360C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4360C2[0]),
  (VTBL_ENTRY)&_ZN7S4360C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4360C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4360C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4360C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4360C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4360C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4360C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4360C2[];
extern  VTBL_ENTRY _ZTV7S4360C2[];
Class_Descriptor cd_S4360C2 = {  "S4360C2", // class name
  bases_S4360C2, 1,
  &(vtc_S4360C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4360C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4360C2),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  S4360C6_nt  {
  char s4360c6f0[1280];
  ::S4473C12_nt s4360c6f1;
  __tsi64 s4360c6f2;
  char s4360c6f3[2];
};
//SIG(-1 S4360C6_nt) C1{ Fc[1280] FC2{ m Fp Fi FC3{ m}} FL Fc[2]}



//skip512 S4360C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4360C1  : S4360C2 {
  ::S4473C12_nt s4360c1f0;
  ::S4473C12_nt s4360c1f1;
  ::S4473C12_nt s4360c1f2;
  ::S4473C12_nt s4360c1f3;
  int s4360c1f4[2];
  char s4360c1f5;
  ::S4473C12_nt s4360c1f6;
  ::S4360C6_nt s4360c1f7;
  ::S2173C14 s4360c1f8;
  void *s4360c1f9;
  virtual void  v1(); // _ZN7S4360C12v1Ev
  ~S4360C1(); // tgen
  S4360C1(); // tgen
};
//SIG(1 S4360C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 FC4 FC4 FC4 FC4 Fi[2] Fc FC4 FC6{ Fc[1280] FC4 FL Fc[2]} FC7{ m Fp Fi[2] FC8{ m}} Fp}


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

static void Test_S4360C1()
{
  extern Class_Descriptor cd_S4360C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(187,358)];
    init_test(&cd_S4360C1, buf);
    S4360C1 *dp, &lv = *(dp=new (buf) S4360C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1488,1428), "sizeof(S4360C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4360C1)");
    check_base_class_offset(lv, (S4360C3*)(S4360C2*), 0, "S4360C1");
    check_base_class_offset(lv, (S4360C2*), 0, "S4360C1");
    check_field_offset(lv, s4360c1f0, ABISELECT(48,32), "S4360C1.s4360c1f0");
    check_field_offset(lv, s4360c1f1, ABISELECT(64,44), "S4360C1.s4360c1f1");
    check_field_offset(lv, s4360c1f2, ABISELECT(80,56), "S4360C1.s4360c1f2");
    check_field_offset(lv, s4360c1f3, ABISELECT(96,68), "S4360C1.s4360c1f3");
    check_field_offset(lv, s4360c1f4, ABISELECT(112,80), "S4360C1.s4360c1f4");
    check_field_offset(lv, s4360c1f5, ABISELECT(120,88), "S4360C1.s4360c1f5");
    check_field_offset(lv, s4360c1f6, ABISELECT(128,92), "S4360C1.s4360c1f6");
    check_field_offset(lv, s4360c1f7, ABISELECT(144,104), "S4360C1.s4360c1f7");
    check_field_offset(lv, s4360c1f8, ABISELECT(1456,1408), "S4360C1.s4360c1f8");
    check_field_offset(lv, s4360c1f9, ABISELECT(1480,1424), "S4360C1.s4360c1f9");
    test_class_info(&lv, &cd_S4360C1);
    dp->~S4360C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4360C1(Test_S4360C1, "S4360C1", ABISELECT(1488,1428));

#else // __cplusplus

extern void _ZN7S4360C1C1Ev();
extern void _ZN7S4360C1D1Ev();
Name_Map name_map_S4360C1[] = {
  NSPAIR(_ZN7S4360C1C1Ev),
  NSPAIR(_ZN7S4360C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4360C3;
extern VTBL_ENTRY _ZTI7S4360C3[];
extern  VTBL_ENTRY _ZTV7S4360C3[];
extern Class_Descriptor cd_S4360C2;
extern VTBL_ENTRY _ZTI7S4360C2[];
extern  VTBL_ENTRY _ZTV7S4360C2[];
static Base_Class bases_S4360C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4360C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4360C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4360C1[];
extern void _ZN7S4360C1D1Ev();
extern void _ZN7S4360C1D0Ev();
extern void _ZN7S4360C32v2Ev();
extern void _ZN7S4360C32v3Ev();
extern void _ZN7S4360C32v4Ev();
extern void _ZN7S4360C22v5Ev();
extern void _ZN7S4360C22v6Ev();
extern void _ZN7S4360C12v1Ev();
static  VTBL_ENTRY vtc_S4360C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4360C1[0]),
  (VTBL_ENTRY)&_ZN7S4360C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4360C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4360C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4360C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4360C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4360C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4360C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4360C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4360C1[];
extern  VTBL_ENTRY _ZTV7S4360C1[];
Class_Descriptor cd_S4360C1 = {  "S4360C1", // class name
  bases_S4360C1, 2,
  &(vtc_S4360C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1488,1428), // object size
  NSPAIRA(_ZTI7S4360C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4360C1),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  S4733C3  {
  ::S4473C12_nt s4733c3f0;
  int s4733c3f1[2];
  char s4733c3f2;
  virtual  ~S4733C3(); // _ZN7S4733C3D1Ev
  virtual void  v3(); // _ZN7S4733C32v3Ev
  virtual void  v4(); // _ZN7S4733C32v4Ev
  virtual void  v5(); // _ZN7S4733C32v5Ev
  S4733C3(); // tgen
};
//SIG(-1 S4733C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4733C3 ::~S4733C3(){ note_dtor("S4733C3", this);}
void  S4733C3 ::v3(){vfunc_called(this, "_ZN7S4733C32v3Ev");}
void  S4733C3 ::v4(){vfunc_called(this, "_ZN7S4733C32v4Ev");}
void  S4733C3 ::v5(){vfunc_called(this, "_ZN7S4733C32v5Ev");}
S4733C3 ::S4733C3(){ note_ctor("S4733C3", this);} // tgen

static void Test_S4733C3()
{
  extern Class_Descriptor cd_S4733C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4733C3, buf);
    S4733C3 *dp, &lv = *(dp=new (buf) S4733C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4733C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4733C3)");
    check_field_offset(lv, s4733c3f0, ABISELECT(8,4), "S4733C3.s4733c3f0");
    check_field_offset(lv, s4733c3f1, ABISELECT(24,16), "S4733C3.s4733c3f1");
    check_field_offset(lv, s4733c3f2, ABISELECT(32,24), "S4733C3.s4733c3f2");
    test_class_info(&lv, &cd_S4733C3);
    dp->~S4733C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4733C3(Test_S4733C3, "S4733C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4733C3C1Ev();
extern void _ZN7S4733C3D1Ev();
Name_Map name_map_S4733C3[] = {
  NSPAIR(_ZN7S4733C3C1Ev),
  NSPAIR(_ZN7S4733C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4733C3[];
extern void _ZN7S4733C3D1Ev();
extern void _ZN7S4733C3D0Ev();
extern void _ZN7S4733C32v3Ev();
extern void _ZN7S4733C32v4Ev();
extern void _ZN7S4733C32v5Ev();
static  VTBL_ENTRY vtc_S4733C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4733C3[0]),
  (VTBL_ENTRY)&_ZN7S4733C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4733C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4733C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4733C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4733C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4733C3[];
extern  VTBL_ENTRY _ZTV7S4733C3[];
Class_Descriptor cd_S4733C3 = {  "S4733C3", // class name
  0,0,//no base classes
  &(vtc_S4733C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4733C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4733C3),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  S4733C2  : S4733C3 {
  void *s4733c2f0;
  virtual void  v6(); // _ZN7S4733C22v6Ev
  virtual void  v7(); // _ZN7S4733C22v7Ev
  ~S4733C2(); // tgen
  S4733C2(); // tgen
};
//SIG(-1 S4733C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4733C2 ::v6(){vfunc_called(this, "_ZN7S4733C22v6Ev");}
void  S4733C2 ::v7(){vfunc_called(this, "_ZN7S4733C22v7Ev");}
S4733C2 ::~S4733C2(){ note_dtor("S4733C2", this);} // tgen
S4733C2 ::S4733C2(){ note_ctor("S4733C2", this);} // tgen

static void Test_S4733C2()
{
  extern Class_Descriptor cd_S4733C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4733C2, buf);
    S4733C2 *dp, &lv = *(dp=new (buf) S4733C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4733C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4733C2)");
    check_base_class_offset(lv, (S4733C3*), 0, "S4733C2");
    check_field_offset(lv, s4733c2f0, ABISELECT(40,28), "S4733C2.s4733c2f0");
    test_class_info(&lv, &cd_S4733C2);
    dp->~S4733C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4733C2(Test_S4733C2, "S4733C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4733C2C1Ev();
extern void _ZN7S4733C2D1Ev();
Name_Map name_map_S4733C2[] = {
  NSPAIR(_ZN7S4733C2C1Ev),
  NSPAIR(_ZN7S4733C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4733C3;
extern VTBL_ENTRY _ZTI7S4733C3[];
extern  VTBL_ENTRY _ZTV7S4733C3[];
static Base_Class bases_S4733C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4733C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4733C2[];
extern void _ZN7S4733C2D1Ev();
extern void _ZN7S4733C2D0Ev();
extern void _ZN7S4733C32v3Ev();
extern void _ZN7S4733C32v4Ev();
extern void _ZN7S4733C32v5Ev();
extern void _ZN7S4733C22v6Ev();
extern void _ZN7S4733C22v7Ev();
static  VTBL_ENTRY vtc_S4733C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4733C2[0]),
  (VTBL_ENTRY)&_ZN7S4733C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4733C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4733C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4733C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4733C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4733C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4733C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4733C2[];
extern  VTBL_ENTRY _ZTV7S4733C2[];
Class_Descriptor cd_S4733C2 = {  "S4733C2", // class name
  bases_S4733C2, 1,
  &(vtc_S4733C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4733C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4733C2),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  S4733C1  : S4733C2 {
  ::S2173C10_nt s4733c1f0;
  ::S5305C9_nt s4733c1f1;
  int s4733c1f2[2];
  void *s4733c1f3[2];
  ::S2173C14 s4733c1f4;
  char s4733c1f5;
  virtual void  v1(); // _ZN7S4733C12v1Ev
  virtual void  v2(); // _ZN7S4733C12v2Ev
  ~S4733C1(); // tgen
  S4733C1(); // tgen
};
//SIG(1 S4733C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} v1 v2 FC6{ m FC7{ FL[4]}} FC8{ m Fp FC9{ Fi[4]}} Fi[2] Fp[2] FC10{ m Fp Fi[2] FC11{ m}} Fc}


void  S4733C1 ::v1(){vfunc_called(this, "_ZN7S4733C12v1Ev");}
void  S4733C1 ::v2(){vfunc_called(this, "_ZN7S4733C12v2Ev");}
S4733C1 ::~S4733C1(){ note_dtor("S4733C1", this);} // tgen
S4733C1 ::S4733C1(){ note_ctor("S4733C1", this);} // tgen

static void Test_S4733C1()
{
  extern Class_Descriptor cd_S4733C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,31)];
    init_test(&cd_S4733C1, buf);
    S4733C1 *dp, &lv = *(dp=new (buf) S4733C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,120), "sizeof(S4733C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4733C1)");
    check_base_class_offset(lv, (S4733C3*)(S4733C2*), 0, "S4733C1");
    check_base_class_offset(lv, (S4733C2*), 0, "S4733C1");
    check_field_offset(lv, s4733c1f0, ABISELECT(48,32), "S4733C1.s4733c1f0");
    check_field_offset(lv, s4733c1f1, ABISELECT(80,64), "S4733C1.s4733c1f1");
    check_field_offset(lv, s4733c1f2, ABISELECT(104,84), "S4733C1.s4733c1f2");
    check_field_offset(lv, s4733c1f3, ABISELECT(112,92), "S4733C1.s4733c1f3");
    check_field_offset(lv, s4733c1f4, ABISELECT(128,100), "S4733C1.s4733c1f4");
    check_field_offset(lv, s4733c1f5, ABISELECT(152,116), "S4733C1.s4733c1f5");
    test_class_info(&lv, &cd_S4733C1);
    dp->~S4733C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4733C1(Test_S4733C1, "S4733C1", ABISELECT(160,120));

#else // __cplusplus

extern void _ZN7S4733C1C1Ev();
extern void _ZN7S4733C1D1Ev();
Name_Map name_map_S4733C1[] = {
  NSPAIR(_ZN7S4733C1C1Ev),
  NSPAIR(_ZN7S4733C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4733C3;
extern VTBL_ENTRY _ZTI7S4733C3[];
extern  VTBL_ENTRY _ZTV7S4733C3[];
extern Class_Descriptor cd_S4733C2;
extern VTBL_ENTRY _ZTI7S4733C2[];
extern  VTBL_ENTRY _ZTV7S4733C2[];
static Base_Class bases_S4733C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4733C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4733C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4733C1[];
extern void _ZN7S4733C1D1Ev();
extern void _ZN7S4733C1D0Ev();
extern void _ZN7S4733C32v3Ev();
extern void _ZN7S4733C32v4Ev();
extern void _ZN7S4733C32v5Ev();
extern void _ZN7S4733C22v6Ev();
extern void _ZN7S4733C22v7Ev();
extern void _ZN7S4733C12v1Ev();
extern void _ZN7S4733C12v2Ev();
static  VTBL_ENTRY vtc_S4733C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4733C1[0]),
  (VTBL_ENTRY)&_ZN7S4733C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4733C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4733C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4733C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4733C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4733C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4733C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4733C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4733C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4733C1[];
extern  VTBL_ENTRY _ZTV7S4733C1[];
Class_Descriptor cd_S4733C1 = {  "S4733C1", // class name
  bases_S4733C1, 2,
  &(vtc_S4733C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,120), // object size
  NSPAIRA(_ZTI7S4733C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4733C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4384C3  {
  ::S4473C12_nt s4384c3f0;
  int s4384c3f1[2];
  char s4384c3f2;
  virtual  ~S4384C3(); // _ZN7S4384C3D1Ev
  virtual void  v2(); // _ZN7S4384C32v2Ev
  virtual void  v3(); // _ZN7S4384C32v3Ev
  virtual void  v4(); // _ZN7S4384C32v4Ev
  S4384C3(); // tgen
};
//SIG(-1 S4384C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4384C3 ::~S4384C3(){ note_dtor("S4384C3", this);}
void  S4384C3 ::v2(){vfunc_called(this, "_ZN7S4384C32v2Ev");}
void  S4384C3 ::v3(){vfunc_called(this, "_ZN7S4384C32v3Ev");}
void  S4384C3 ::v4(){vfunc_called(this, "_ZN7S4384C32v4Ev");}
S4384C3 ::S4384C3(){ note_ctor("S4384C3", this);} // tgen

static void Test_S4384C3()
{
  extern Class_Descriptor cd_S4384C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4384C3, buf);
    S4384C3 *dp, &lv = *(dp=new (buf) S4384C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4384C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4384C3)");
    check_field_offset(lv, s4384c3f0, ABISELECT(8,4), "S4384C3.s4384c3f0");
    check_field_offset(lv, s4384c3f1, ABISELECT(24,16), "S4384C3.s4384c3f1");
    check_field_offset(lv, s4384c3f2, ABISELECT(32,24), "S4384C3.s4384c3f2");
    test_class_info(&lv, &cd_S4384C3);
    dp->~S4384C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4384C3(Test_S4384C3, "S4384C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4384C3C1Ev();
extern void _ZN7S4384C3D1Ev();
Name_Map name_map_S4384C3[] = {
  NSPAIR(_ZN7S4384C3C1Ev),
  NSPAIR(_ZN7S4384C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4384C3[];
extern void _ZN7S4384C3D1Ev();
extern void _ZN7S4384C3D0Ev();
extern void _ZN7S4384C32v2Ev();
extern void _ZN7S4384C32v3Ev();
extern void _ZN7S4384C32v4Ev();
static  VTBL_ENTRY vtc_S4384C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4384C3[0]),
  (VTBL_ENTRY)&_ZN7S4384C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4384C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4384C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4384C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4384C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4384C3[];
extern  VTBL_ENTRY _ZTV7S4384C3[];
Class_Descriptor cd_S4384C3 = {  "S4384C3", // class name
  0,0,//no base classes
  &(vtc_S4384C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4384C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4384C3),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  S4384C2  : S4384C3 {
  void *s4384c2f0;
  virtual void  v5(); // _ZN7S4384C22v5Ev
  virtual void  v6(); // _ZN7S4384C22v6Ev
  ~S4384C2(); // tgen
  S4384C2(); // tgen
};
//SIG(-1 S4384C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4384C2 ::v5(){vfunc_called(this, "_ZN7S4384C22v5Ev");}
void  S4384C2 ::v6(){vfunc_called(this, "_ZN7S4384C22v6Ev");}
S4384C2 ::~S4384C2(){ note_dtor("S4384C2", this);} // tgen
S4384C2 ::S4384C2(){ note_ctor("S4384C2", this);} // tgen

static void Test_S4384C2()
{
  extern Class_Descriptor cd_S4384C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4384C2, buf);
    S4384C2 *dp, &lv = *(dp=new (buf) S4384C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4384C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4384C2)");
    check_base_class_offset(lv, (S4384C3*), 0, "S4384C2");
    check_field_offset(lv, s4384c2f0, ABISELECT(40,28), "S4384C2.s4384c2f0");
    test_class_info(&lv, &cd_S4384C2);
    dp->~S4384C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4384C2(Test_S4384C2, "S4384C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4384C2C1Ev();
extern void _ZN7S4384C2D1Ev();
Name_Map name_map_S4384C2[] = {
  NSPAIR(_ZN7S4384C2C1Ev),
  NSPAIR(_ZN7S4384C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4384C3;
extern VTBL_ENTRY _ZTI7S4384C3[];
extern  VTBL_ENTRY _ZTV7S4384C3[];
static Base_Class bases_S4384C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4384C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4384C2[];
extern void _ZN7S4384C2D1Ev();
extern void _ZN7S4384C2D0Ev();
extern void _ZN7S4384C32v2Ev();
extern void _ZN7S4384C32v3Ev();
extern void _ZN7S4384C32v4Ev();
extern void _ZN7S4384C22v5Ev();
extern void _ZN7S4384C22v6Ev();
static  VTBL_ENTRY vtc_S4384C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4384C2[0]),
  (VTBL_ENTRY)&_ZN7S4384C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4384C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4384C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4384C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4384C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4384C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4384C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4384C2[];
extern  VTBL_ENTRY _ZTV7S4384C2[];
Class_Descriptor cd_S4384C2 = {  "S4384C2", // class name
  bases_S4384C2, 1,
  &(vtc_S4384C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4384C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4384C2),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  S4384C8_nt  : S4465C14_nt {
};
//SIG(-1 S4384C8_nt) C1{ BC2{ m Fp Fi FC3{ m} FC4{ m}}}



//skip512 S4384C8_nt

#else // __cplusplus

extern Class_Descriptor cd_S4465C14_nt;
static Base_Class bases_S4384C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4465C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S4384C1  : S4384C2 {
  ::S2173C14 s4384c1f0;
  ::S2173C14 s4384c1f1;
  ::S4384C8_nt s4384c1f2;
  ::S4473C12_nt s4384c1f3;
  ::S4473C12_nt s4384c1f4;
  int s4384c1f5[2];
  char s4384c1f6;
  virtual void  v1(); // _ZN7S4384C12v1Ev
  ~S4384C1(); // tgen
  S4384C1(); // tgen
};
//SIG(1 S4384C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 FC6{ m Fp Fi[2] FC7{ m}} FC6 FC8{ BC9{ m Fp Fi FC5 FC7}} FC4 FC4 Fi[2] Fc}


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

static void Test_S4384C1()
{
  extern Class_Descriptor cd_S4384C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,29)];
    init_test(&cd_S4384C1, buf);
    S4384C1 *dp, &lv = *(dp=new (buf) S4384C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S4384C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4384C1)");
    check_base_class_offset(lv, (S4384C3*)(S4384C2*), 0, "S4384C1");
    check_base_class_offset(lv, (S4384C2*), 0, "S4384C1");
    check_field_offset(lv, s4384c1f0, ABISELECT(48,32), "S4384C1.s4384c1f0");
    check_field_offset(lv, s4384c1f1, ABISELECT(72,48), "S4384C1.s4384c1f1");
    check_field_offset(lv, s4384c1f2, ABISELECT(96,64), "S4384C1.s4384c1f2");
    check_field_offset(lv, s4384c1f3, ABISELECT(112,76), "S4384C1.s4384c1f3");
    check_field_offset(lv, s4384c1f4, ABISELECT(128,88), "S4384C1.s4384c1f4");
    check_field_offset(lv, s4384c1f5, ABISELECT(144,100), "S4384C1.s4384c1f5");
    check_field_offset(lv, s4384c1f6, ABISELECT(152,108), "S4384C1.s4384c1f6");
    test_class_info(&lv, &cd_S4384C1);
    dp->~S4384C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4384C1(Test_S4384C1, "S4384C1", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN7S4384C1C1Ev();
extern void _ZN7S4384C1D1Ev();
Name_Map name_map_S4384C1[] = {
  NSPAIR(_ZN7S4384C1C1Ev),
  NSPAIR(_ZN7S4384C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4384C3;
extern VTBL_ENTRY _ZTI7S4384C3[];
extern  VTBL_ENTRY _ZTV7S4384C3[];
extern Class_Descriptor cd_S4384C2;
extern VTBL_ENTRY _ZTI7S4384C2[];
extern  VTBL_ENTRY _ZTV7S4384C2[];
static Base_Class bases_S4384C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4384C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4384C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4384C1[];
extern void _ZN7S4384C1D1Ev();
extern void _ZN7S4384C1D0Ev();
extern void _ZN7S4384C32v2Ev();
extern void _ZN7S4384C32v3Ev();
extern void _ZN7S4384C32v4Ev();
extern void _ZN7S4384C22v5Ev();
extern void _ZN7S4384C22v6Ev();
extern void _ZN7S4384C12v1Ev();
static  VTBL_ENTRY vtc_S4384C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4384C1[0]),
  (VTBL_ENTRY)&_ZN7S4384C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4384C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4384C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4384C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4384C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4384C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4384C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4384C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4384C1[];
extern  VTBL_ENTRY _ZTV7S4384C1[];
Class_Descriptor cd_S4384C1 = {  "S4384C1", // class name
  bases_S4384C1, 2,
  &(vtc_S4384C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI7S4384C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4384C1),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  S4735C3  {
  ::S4473C12_nt s4735c3f0;
  int s4735c3f1[2];
  char s4735c3f2;
  virtual  ~S4735C3(); // _ZN7S4735C3D1Ev
  virtual void  v3(); // _ZN7S4735C32v3Ev
  virtual void  v4(); // _ZN7S4735C32v4Ev
  virtual void  v5(); // _ZN7S4735C32v5Ev
  S4735C3(); // tgen
};
//SIG(-1 S4735C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4735C3 ::~S4735C3(){ note_dtor("S4735C3", this);}
void  S4735C3 ::v3(){vfunc_called(this, "_ZN7S4735C32v3Ev");}
void  S4735C3 ::v4(){vfunc_called(this, "_ZN7S4735C32v4Ev");}
void  S4735C3 ::v5(){vfunc_called(this, "_ZN7S4735C32v5Ev");}
S4735C3 ::S4735C3(){ note_ctor("S4735C3", this);} // tgen

static void Test_S4735C3()
{
  extern Class_Descriptor cd_S4735C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4735C3, buf);
    S4735C3 *dp, &lv = *(dp=new (buf) S4735C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4735C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4735C3)");
    check_field_offset(lv, s4735c3f0, ABISELECT(8,4), "S4735C3.s4735c3f0");
    check_field_offset(lv, s4735c3f1, ABISELECT(24,16), "S4735C3.s4735c3f1");
    check_field_offset(lv, s4735c3f2, ABISELECT(32,24), "S4735C3.s4735c3f2");
    test_class_info(&lv, &cd_S4735C3);
    dp->~S4735C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4735C3(Test_S4735C3, "S4735C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4735C3C1Ev();
extern void _ZN7S4735C3D1Ev();
Name_Map name_map_S4735C3[] = {
  NSPAIR(_ZN7S4735C3C1Ev),
  NSPAIR(_ZN7S4735C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4735C3[];
extern void _ZN7S4735C3D1Ev();
extern void _ZN7S4735C3D0Ev();
extern void _ZN7S4735C32v3Ev();
extern void _ZN7S4735C32v4Ev();
extern void _ZN7S4735C32v5Ev();
static  VTBL_ENTRY vtc_S4735C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4735C3[0]),
  (VTBL_ENTRY)&_ZN7S4735C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4735C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4735C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4735C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4735C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4735C3[];
extern  VTBL_ENTRY _ZTV7S4735C3[];
Class_Descriptor cd_S4735C3 = {  "S4735C3", // class name
  0,0,//no base classes
  &(vtc_S4735C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4735C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4735C3),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  S4735C2  : S4735C3 {
  void *s4735c2f0;
  virtual void  v6(); // _ZN7S4735C22v6Ev
  virtual void  v7(); // _ZN7S4735C22v7Ev
  ~S4735C2(); // tgen
  S4735C2(); // tgen
};
//SIG(-1 S4735C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4735C2 ::v6(){vfunc_called(this, "_ZN7S4735C22v6Ev");}
void  S4735C2 ::v7(){vfunc_called(this, "_ZN7S4735C22v7Ev");}
S4735C2 ::~S4735C2(){ note_dtor("S4735C2", this);} // tgen
S4735C2 ::S4735C2(){ note_ctor("S4735C2", this);} // tgen

static void Test_S4735C2()
{
  extern Class_Descriptor cd_S4735C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4735C2, buf);
    S4735C2 *dp, &lv = *(dp=new (buf) S4735C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4735C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4735C2)");
    check_base_class_offset(lv, (S4735C3*), 0, "S4735C2");
    check_field_offset(lv, s4735c2f0, ABISELECT(40,28), "S4735C2.s4735c2f0");
    test_class_info(&lv, &cd_S4735C2);
    dp->~S4735C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4735C2(Test_S4735C2, "S4735C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4735C2C1Ev();
extern void _ZN7S4735C2D1Ev();
Name_Map name_map_S4735C2[] = {
  NSPAIR(_ZN7S4735C2C1Ev),
  NSPAIR(_ZN7S4735C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4735C3;
extern VTBL_ENTRY _ZTI7S4735C3[];
extern  VTBL_ENTRY _ZTV7S4735C3[];
static Base_Class bases_S4735C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4735C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4735C2[];
extern void _ZN7S4735C2D1Ev();
extern void _ZN7S4735C2D0Ev();
extern void _ZN7S4735C32v3Ev();
extern void _ZN7S4735C32v4Ev();
extern void _ZN7S4735C32v5Ev();
extern void _ZN7S4735C22v6Ev();
extern void _ZN7S4735C22v7Ev();
static  VTBL_ENTRY vtc_S4735C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4735C2[0]),
  (VTBL_ENTRY)&_ZN7S4735C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4735C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4735C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4735C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4735C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4735C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4735C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4735C2[];
extern  VTBL_ENTRY _ZTV7S4735C2[];
Class_Descriptor cd_S4735C2 = {  "S4735C2", // class name
  bases_S4735C2, 1,
  &(vtc_S4735C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4735C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4735C2),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  S4735C1  : S4735C2 {
  ::S5306C7_nt s4735c1f0;
  ::S5305C9_nt s4735c1f1;
  int s4735c1f2[2];
  void *s4735c1f3[2];
  ::S2173C14 s4735c1f4;
  char s4735c1f5;
  virtual void  v1(); // _ZN7S4735C12v1Ev
  virtual void  v2(); // _ZN7S4735C12v2Ev
  ~S4735C1(); // tgen
  S4735C1(); // tgen
};
//SIG(1 S4735C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} v1 v2 FC6{ m FL[4]} FC7{ m Fp FC8{ Fi[4]}} Fi[2] Fp[2] FC9{ m Fp Fi[2] FC10{ m}} Fc}


void  S4735C1 ::v1(){vfunc_called(this, "_ZN7S4735C12v1Ev");}
void  S4735C1 ::v2(){vfunc_called(this, "_ZN7S4735C12v2Ev");}
S4735C1 ::~S4735C1(){ note_dtor("S4735C1", this);} // tgen
S4735C1 ::S4735C1(){ note_ctor("S4735C1", this);} // tgen

static void Test_S4735C1()
{
  extern Class_Descriptor cd_S4735C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,31)];
    init_test(&cd_S4735C1, buf);
    S4735C1 *dp, &lv = *(dp=new (buf) S4735C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,120), "sizeof(S4735C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4735C1)");
    check_base_class_offset(lv, (S4735C3*)(S4735C2*), 0, "S4735C1");
    check_base_class_offset(lv, (S4735C2*), 0, "S4735C1");
    check_field_offset(lv, s4735c1f0, ABISELECT(48,32), "S4735C1.s4735c1f0");
    check_field_offset(lv, s4735c1f1, ABISELECT(80,64), "S4735C1.s4735c1f1");
    check_field_offset(lv, s4735c1f2, ABISELECT(104,84), "S4735C1.s4735c1f2");
    check_field_offset(lv, s4735c1f3, ABISELECT(112,92), "S4735C1.s4735c1f3");
    check_field_offset(lv, s4735c1f4, ABISELECT(128,100), "S4735C1.s4735c1f4");
    check_field_offset(lv, s4735c1f5, ABISELECT(152,116), "S4735C1.s4735c1f5");
    test_class_info(&lv, &cd_S4735C1);
    dp->~S4735C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4735C1(Test_S4735C1, "S4735C1", ABISELECT(160,120));

#else // __cplusplus

extern void _ZN7S4735C1C1Ev();
extern void _ZN7S4735C1D1Ev();
Name_Map name_map_S4735C1[] = {
  NSPAIR(_ZN7S4735C1C1Ev),
  NSPAIR(_ZN7S4735C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4735C3;
extern VTBL_ENTRY _ZTI7S4735C3[];
extern  VTBL_ENTRY _ZTV7S4735C3[];
extern Class_Descriptor cd_S4735C2;
extern VTBL_ENTRY _ZTI7S4735C2[];
extern  VTBL_ENTRY _ZTV7S4735C2[];
static Base_Class bases_S4735C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4735C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4735C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4735C1[];
extern void _ZN7S4735C1D1Ev();
extern void _ZN7S4735C1D0Ev();
extern void _ZN7S4735C32v3Ev();
extern void _ZN7S4735C32v4Ev();
extern void _ZN7S4735C32v5Ev();
extern void _ZN7S4735C22v6Ev();
extern void _ZN7S4735C22v7Ev();
extern void _ZN7S4735C12v1Ev();
extern void _ZN7S4735C12v2Ev();
static  VTBL_ENTRY vtc_S4735C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4735C1[0]),
  (VTBL_ENTRY)&_ZN7S4735C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4735C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4735C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4735C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4735C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4735C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4735C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4735C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4735C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4735C1[];
extern  VTBL_ENTRY _ZTV7S4735C1[];
Class_Descriptor cd_S4735C1 = {  "S4735C1", // class name
  bases_S4735C1, 2,
  &(vtc_S4735C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,120), // object size
  NSPAIRA(_ZTI7S4735C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4735C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5082C3  {
  ::S4473C12_nt s5082c3f0;
  int s5082c3f1[2];
  char s5082c3f2;
  virtual  ~S5082C3(); // _ZN7S5082C3D1Ev
  virtual void  v4(); // _ZN7S5082C32v4Ev
  virtual void  v5(); // _ZN7S5082C32v5Ev
  virtual void  v6(); // _ZN7S5082C32v6Ev
  S5082C3(); // tgen
};
//SIG(-1 S5082C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5082C3 ::~S5082C3(){ note_dtor("S5082C3", this);}
void  S5082C3 ::v4(){vfunc_called(this, "_ZN7S5082C32v4Ev");}
void  S5082C3 ::v5(){vfunc_called(this, "_ZN7S5082C32v5Ev");}
void  S5082C3 ::v6(){vfunc_called(this, "_ZN7S5082C32v6Ev");}
S5082C3 ::S5082C3(){ note_ctor("S5082C3", this);} // tgen

static void Test_S5082C3()
{
  extern Class_Descriptor cd_S5082C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5082C3, buf);
    S5082C3 *dp, &lv = *(dp=new (buf) S5082C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5082C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5082C3)");
    check_field_offset(lv, s5082c3f0, ABISELECT(8,4), "S5082C3.s5082c3f0");
    check_field_offset(lv, s5082c3f1, ABISELECT(24,16), "S5082C3.s5082c3f1");
    check_field_offset(lv, s5082c3f2, ABISELECT(32,24), "S5082C3.s5082c3f2");
    test_class_info(&lv, &cd_S5082C3);
    dp->~S5082C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5082C3(Test_S5082C3, "S5082C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5082C3C1Ev();
extern void _ZN7S5082C3D1Ev();
Name_Map name_map_S5082C3[] = {
  NSPAIR(_ZN7S5082C3C1Ev),
  NSPAIR(_ZN7S5082C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5082C3[];
extern void _ZN7S5082C3D1Ev();
extern void _ZN7S5082C3D0Ev();
extern void _ZN7S5082C32v4Ev();
extern void _ZN7S5082C32v5Ev();
extern void _ZN7S5082C32v6Ev();
static  VTBL_ENTRY vtc_S5082C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5082C3[0]),
  (VTBL_ENTRY)&_ZN7S5082C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5082C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5082C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5082C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5082C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5082C3[];
extern  VTBL_ENTRY _ZTV7S5082C3[];
Class_Descriptor cd_S5082C3 = {  "S5082C3", // class name
  0,0,//no base classes
  &(vtc_S5082C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5082C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5082C3),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  S5082C2  : S5082C3 {
  void *s5082c2f0;
  virtual void  v7(); // _ZN7S5082C22v7Ev
  virtual void  v8(); // _ZN7S5082C22v8Ev
  ~S5082C2(); // tgen
  S5082C2(); // tgen
};
//SIG(-1 S5082C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5082C2 ::v7(){vfunc_called(this, "_ZN7S5082C22v7Ev");}
void  S5082C2 ::v8(){vfunc_called(this, "_ZN7S5082C22v8Ev");}
S5082C2 ::~S5082C2(){ note_dtor("S5082C2", this);} // tgen
S5082C2 ::S5082C2(){ note_ctor("S5082C2", this);} // tgen

static void Test_S5082C2()
{
  extern Class_Descriptor cd_S5082C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5082C2, buf);
    S5082C2 *dp, &lv = *(dp=new (buf) S5082C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5082C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5082C2)");
    check_base_class_offset(lv, (S5082C3*), 0, "S5082C2");
    check_field_offset(lv, s5082c2f0, ABISELECT(40,28), "S5082C2.s5082c2f0");
    test_class_info(&lv, &cd_S5082C2);
    dp->~S5082C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5082C2(Test_S5082C2, "S5082C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5082C2C1Ev();
extern void _ZN7S5082C2D1Ev();
Name_Map name_map_S5082C2[] = {
  NSPAIR(_ZN7S5082C2C1Ev),
  NSPAIR(_ZN7S5082C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5082C3;
extern VTBL_ENTRY _ZTI7S5082C3[];
extern  VTBL_ENTRY _ZTV7S5082C3[];
static Base_Class bases_S5082C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5082C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5082C2[];
extern void _ZN7S5082C2D1Ev();
extern void _ZN7S5082C2D0Ev();
extern void _ZN7S5082C32v4Ev();
extern void _ZN7S5082C32v5Ev();
extern void _ZN7S5082C32v6Ev();
extern void _ZN7S5082C22v7Ev();
extern void _ZN7S5082C22v8Ev();
static  VTBL_ENTRY vtc_S5082C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5082C2[0]),
  (VTBL_ENTRY)&_ZN7S5082C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5082C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5082C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5082C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5082C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5082C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5082C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5082C2[];
extern  VTBL_ENTRY _ZTV7S5082C2[];
Class_Descriptor cd_S5082C2 = {  "S5082C2", // class name
  bases_S5082C2, 1,
  &(vtc_S5082C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5082C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5082C2),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  S5082C10_nt  {
  char s5082c10f0[20];
};
//SIG(-1 S5082C10_nt) C1{ Fc[20]}



//skip512 S5082C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5082C9_nt  {
  ::S5082C10_nt s5082c9f0;
  char s5082c9f1[16];
};
//SIG(-1 S5082C9_nt) C1{ FC2{ Fc[20]} Fc[16]}



//skip512 S5082C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5082C1  : S5082C2 {
  ::S2173C10_nt s5082c1f0;
  int s5082c1f1[2];
  void *s5082c1f2;
  ::S2366C19 s5082c1f3;
  void *s5082c1f4;
  ::S5082C9_nt s5082c1f5;
  virtual  ~S5082C1(); // _ZN7S5082C1D1Ev
  virtual void  v1(); // _ZN7S5082C12v1Ev
  virtual void  v2(); // _ZN7S5082C12v2Ev
  virtual void  v3(); // _ZN7S5082C12v3Ev
  S5082C1(); // tgen
};
//SIG(1 S5082C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} vd v1 v2 v3 FC6{ m FC7{ FL[4]}} Fi[2] Fp FC8{ m Fp} Fp FC9{ FC10{ Fc[20]} Fc[16]}}


 S5082C1 ::~S5082C1(){ note_dtor("S5082C1", this);}
void  S5082C1 ::v1(){vfunc_called(this, "_ZN7S5082C12v1Ev");}
void  S5082C1 ::v2(){vfunc_called(this, "_ZN7S5082C12v2Ev");}
void  S5082C1 ::v3(){vfunc_called(this, "_ZN7S5082C12v3Ev");}
S5082C1 ::S5082C1(){ note_ctor("S5082C1", this);} // tgen

static void Test_S5082C1()
{
  extern Class_Descriptor cd_S5082C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,31)];
    init_test(&cd_S5082C1, buf);
    S5082C1 *dp, &lv = *(dp=new (buf) S5082C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,120), "sizeof(S5082C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5082C1)");
    check_base_class_offset(lv, (S5082C3*)(S5082C2*), 0, "S5082C1");
    check_base_class_offset(lv, (S5082C2*), 0, "S5082C1");
    check_field_offset(lv, s5082c1f0, ABISELECT(48,32), "S5082C1.s5082c1f0");
    check_field_offset(lv, s5082c1f1, ABISELECT(80,64), "S5082C1.s5082c1f1");
    check_field_offset(lv, s5082c1f2, ABISELECT(88,72), "S5082C1.s5082c1f2");
    check_field_offset(lv, s5082c1f3, ABISELECT(96,76), "S5082C1.s5082c1f3");
    check_field_offset(lv, s5082c1f4, ABISELECT(104,80), "S5082C1.s5082c1f4");
    check_field_offset(lv, s5082c1f5, ABISELECT(112,84), "S5082C1.s5082c1f5");
    test_class_info(&lv, &cd_S5082C1);
    dp->~S5082C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5082C1(Test_S5082C1, "S5082C1", ABISELECT(152,120));

#else // __cplusplus

extern void _ZN7S5082C1C1Ev();
extern void _ZN7S5082C1D1Ev();
Name_Map name_map_S5082C1[] = {
  NSPAIR(_ZN7S5082C1C1Ev),
  NSPAIR(_ZN7S5082C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5082C3;
extern VTBL_ENTRY _ZTI7S5082C3[];
extern  VTBL_ENTRY _ZTV7S5082C3[];
extern Class_Descriptor cd_S5082C2;
extern VTBL_ENTRY _ZTI7S5082C2[];
extern  VTBL_ENTRY _ZTV7S5082C2[];
static Base_Class bases_S5082C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5082C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5082C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5082C1[];
extern void _ZN7S5082C1D1Ev();
extern void _ZN7S5082C1D0Ev();
extern void _ZN7S5082C32v4Ev();
extern void _ZN7S5082C32v5Ev();
extern void _ZN7S5082C32v6Ev();
extern void _ZN7S5082C22v7Ev();
extern void _ZN7S5082C22v8Ev();
extern void _ZN7S5082C12v1Ev();
extern void _ZN7S5082C12v2Ev();
extern void _ZN7S5082C12v3Ev();
static  VTBL_ENTRY vtc_S5082C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5082C1[0]),
  (VTBL_ENTRY)&_ZN7S5082C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5082C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5082C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5082C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5082C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5082C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5082C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5082C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5082C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5082C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5082C1[];
extern  VTBL_ENTRY _ZTV7S5082C1[];
Class_Descriptor cd_S5082C1 = {  "S5082C1", // class name
  bases_S5082C1, 2,
  &(vtc_S5082C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,120), // object size
  NSPAIRA(_ZTI7S5082C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5082C1),12, //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  S16485C1  {
  ::S19572C18 s16485c1f0;
  void  mf16485c1(); // _ZN8S16485C19mf16485c1Ev
};
//SIG(1 S16485C1) C1{ m FC2{ VBC3{ BC4{ m Fs:13}} VBC5{ VBC3} VBC6{ VBC4 VBC3 BC5 BC7{ BC8{ VBC4} BC3 vd} BC8 vd FD[5]} BC8 v1 FC9{ VBC10{ VBC4} VBC8 BC4 VBC3 vd Fi}}}


void  S16485C1 ::mf16485c1(){}

static void Test_S16485C1()
{
  {
    init_simple_test("S16485C1");
    static S16485C1 lv;
    check2(sizeof(lv), ABISELECT(192,116), "sizeof(S16485C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S16485C1)");
    check_field_offset(lv, s16485c1f0, 0, "S16485C1.s16485c1f0");
  }
}
static Arrange_To_Call_Me vS16485C1(Test_S16485C1, "S16485C1", ABISELECT(192,116));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4378C3  {
  ::S4473C12_nt s4378c3f0;
  int s4378c3f1[2];
  char s4378c3f2;
  virtual  ~S4378C3(); // _ZN7S4378C3D1Ev
  virtual void  v2(); // _ZN7S4378C32v2Ev
  virtual void  v3(); // _ZN7S4378C32v3Ev
  virtual void  v4(); // _ZN7S4378C32v4Ev
  S4378C3(); // tgen
};
//SIG(-1 S4378C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4378C3 ::~S4378C3(){ note_dtor("S4378C3", this);}
void  S4378C3 ::v2(){vfunc_called(this, "_ZN7S4378C32v2Ev");}
void  S4378C3 ::v3(){vfunc_called(this, "_ZN7S4378C32v3Ev");}
void  S4378C3 ::v4(){vfunc_called(this, "_ZN7S4378C32v4Ev");}
S4378C3 ::S4378C3(){ note_ctor("S4378C3", this);} // tgen

static void Test_S4378C3()
{
  extern Class_Descriptor cd_S4378C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4378C3, buf);
    S4378C3 *dp, &lv = *(dp=new (buf) S4378C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4378C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4378C3)");
    check_field_offset(lv, s4378c3f0, ABISELECT(8,4), "S4378C3.s4378c3f0");
    check_field_offset(lv, s4378c3f1, ABISELECT(24,16), "S4378C3.s4378c3f1");
    check_field_offset(lv, s4378c3f2, ABISELECT(32,24), "S4378C3.s4378c3f2");
    test_class_info(&lv, &cd_S4378C3);
    dp->~S4378C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4378C3(Test_S4378C3, "S4378C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4378C3C1Ev();
extern void _ZN7S4378C3D1Ev();
Name_Map name_map_S4378C3[] = {
  NSPAIR(_ZN7S4378C3C1Ev),
  NSPAIR(_ZN7S4378C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4378C3[];
extern void _ZN7S4378C3D1Ev();
extern void _ZN7S4378C3D0Ev();
extern void _ZN7S4378C32v2Ev();
extern void _ZN7S4378C32v3Ev();
extern void _ZN7S4378C32v4Ev();
static  VTBL_ENTRY vtc_S4378C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4378C3[0]),
  (VTBL_ENTRY)&_ZN7S4378C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4378C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4378C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4378C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4378C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4378C3[];
extern  VTBL_ENTRY _ZTV7S4378C3[];
Class_Descriptor cd_S4378C3 = {  "S4378C3", // class name
  0,0,//no base classes
  &(vtc_S4378C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4378C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4378C3),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  S4378C2  : S4378C3 {
  void *s4378c2f0;
  virtual void  v5(); // _ZN7S4378C22v5Ev
  virtual void  v6(); // _ZN7S4378C22v6Ev
  ~S4378C2(); // tgen
  S4378C2(); // tgen
};
//SIG(-1 S4378C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4378C2 ::v5(){vfunc_called(this, "_ZN7S4378C22v5Ev");}
void  S4378C2 ::v6(){vfunc_called(this, "_ZN7S4378C22v6Ev");}
S4378C2 ::~S4378C2(){ note_dtor("S4378C2", this);} // tgen
S4378C2 ::S4378C2(){ note_ctor("S4378C2", this);} // tgen

static void Test_S4378C2()
{
  extern Class_Descriptor cd_S4378C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4378C2, buf);
    S4378C2 *dp, &lv = *(dp=new (buf) S4378C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4378C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4378C2)");
    check_base_class_offset(lv, (S4378C3*), 0, "S4378C2");
    check_field_offset(lv, s4378c2f0, ABISELECT(40,28), "S4378C2.s4378c2f0");
    test_class_info(&lv, &cd_S4378C2);
    dp->~S4378C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4378C2(Test_S4378C2, "S4378C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4378C2C1Ev();
extern void _ZN7S4378C2D1Ev();
Name_Map name_map_S4378C2[] = {
  NSPAIR(_ZN7S4378C2C1Ev),
  NSPAIR(_ZN7S4378C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4378C3;
extern VTBL_ENTRY _ZTI7S4378C3[];
extern  VTBL_ENTRY _ZTV7S4378C3[];
static Base_Class bases_S4378C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4378C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4378C2[];
extern void _ZN7S4378C2D1Ev();
extern void _ZN7S4378C2D0Ev();
extern void _ZN7S4378C32v2Ev();
extern void _ZN7S4378C32v3Ev();
extern void _ZN7S4378C32v4Ev();
extern void _ZN7S4378C22v5Ev();
extern void _ZN7S4378C22v6Ev();
static  VTBL_ENTRY vtc_S4378C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4378C2[0]),
  (VTBL_ENTRY)&_ZN7S4378C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4378C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4378C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4378C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4378C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4378C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4378C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4378C2[];
extern  VTBL_ENTRY _ZTV7S4378C2[];
Class_Descriptor cd_S4378C2 = {  "S4378C2", // class name
  bases_S4378C2, 1,
  &(vtc_S4378C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4378C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4378C2),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  S4378C1  : S4378C2 {
  ::S2173C10_nt s4378c1f0;
  ::S5305C9_nt s4378c1f1;
  void *s4378c1f2[2];
  ::S2173C14 s4378c1f3;
  virtual void  v1(); // _ZN7S4378C12v1Ev
  ~S4378C1(); // tgen
  S4378C1(); // tgen
};
//SIG(1 S4378C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 FC6{ m FC7{ FL[4]}} FC8{ m Fp FC9{ Fi[4]}} Fp[2] FC10{ m Fp Fi[2] FC11{ m}}}


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

static void Test_S4378C1()
{
  extern Class_Descriptor cd_S4378C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,28)];
    init_test(&cd_S4378C1, buf);
    S4378C1 *dp, &lv = *(dp=new (buf) S4378C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,108), "sizeof(S4378C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4378C1)");
    check_base_class_offset(lv, (S4378C3*)(S4378C2*), 0, "S4378C1");
    check_base_class_offset(lv, (S4378C2*), 0, "S4378C1");
    check_field_offset(lv, s4378c1f0, ABISELECT(48,32), "S4378C1.s4378c1f0");
    check_field_offset(lv, s4378c1f1, ABISELECT(80,64), "S4378C1.s4378c1f1");
    check_field_offset(lv, s4378c1f2, ABISELECT(104,84), "S4378C1.s4378c1f2");
    check_field_offset(lv, s4378c1f3, ABISELECT(120,92), "S4378C1.s4378c1f3");
    test_class_info(&lv, &cd_S4378C1);
    dp->~S4378C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4378C1(Test_S4378C1, "S4378C1", ABISELECT(144,108));

#else // __cplusplus

extern void _ZN7S4378C1C1Ev();
extern void _ZN7S4378C1D1Ev();
Name_Map name_map_S4378C1[] = {
  NSPAIR(_ZN7S4378C1C1Ev),
  NSPAIR(_ZN7S4378C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4378C3;
extern VTBL_ENTRY _ZTI7S4378C3[];
extern  VTBL_ENTRY _ZTV7S4378C3[];
extern Class_Descriptor cd_S4378C2;
extern VTBL_ENTRY _ZTI7S4378C2[];
extern  VTBL_ENTRY _ZTV7S4378C2[];
static Base_Class bases_S4378C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4378C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4378C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4378C1[];
extern void _ZN7S4378C1D1Ev();
extern void _ZN7S4378C1D0Ev();
extern void _ZN7S4378C32v2Ev();
extern void _ZN7S4378C32v3Ev();
extern void _ZN7S4378C32v4Ev();
extern void _ZN7S4378C22v5Ev();
extern void _ZN7S4378C22v6Ev();
extern void _ZN7S4378C12v1Ev();
static  VTBL_ENTRY vtc_S4378C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4378C1[0]),
  (VTBL_ENTRY)&_ZN7S4378C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4378C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4378C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4378C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4378C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4378C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4378C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4378C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4378C1[];
extern  VTBL_ENTRY _ZTV7S4378C1[];
Class_Descriptor cd_S4378C1 = {  "S4378C1", // class name
  bases_S4378C1, 2,
  &(vtc_S4378C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,108), // object size
  NSPAIRA(_ZTI7S4378C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4378C1),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  S4479C3  {
  int s4479c3f0[4];
  ::S4474C4_nt s4479c3f1;
  int s4479c3f2;
  char s4479c3f3;
  ::S4474C5_nt s4479c3f4;
  int s4479c3f5;
  virtual  ~S4479C3(); // _ZN7S4479C3D1Ev
  virtual void  v2(); // _ZN7S4479C32v2Ev
  virtual void  v3(); // _ZN7S4479C32v3Ev
  virtual void  v4(); // _ZN7S4479C32v4Ev
  S4479C3(); // tgen
};
//SIG(-1 S4479C3) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4479C3 ::~S4479C3(){ note_dtor("S4479C3", this);}
void  S4479C3 ::v2(){vfunc_called(this, "_ZN7S4479C32v2Ev");}
void  S4479C3 ::v3(){vfunc_called(this, "_ZN7S4479C32v3Ev");}
void  S4479C3 ::v4(){vfunc_called(this, "_ZN7S4479C32v4Ev");}
S4479C3 ::S4479C3(){ note_ctor("S4479C3", this);} // tgen

static void Test_S4479C3()
{
  extern Class_Descriptor cd_S4479C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4479C3, buf);
    S4479C3 *dp, &lv = *(dp=new (buf) S4479C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4479C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4479C3)");
    check_field_offset(lv, s4479c3f0, ABISELECT(8,4), "S4479C3.s4479c3f0");
    check_field_offset(lv, s4479c3f1, ABISELECT(24,20), "S4479C3.s4479c3f1");
    check_field_offset(lv, s4479c3f2, ABISELECT(40,28), "S4479C3.s4479c3f2");
    check_field_offset(lv, s4479c3f3, ABISELECT(44,32), "S4479C3.s4479c3f3");
    check_field_offset(lv, s4479c3f4, ABISELECT(48,36), "S4479C3.s4479c3f4");
    check_field_offset(lv, s4479c3f5, ABISELECT(64,48), "S4479C3.s4479c3f5");
    test_class_info(&lv, &cd_S4479C3);
    dp->~S4479C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4479C3(Test_S4479C3, "S4479C3", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4479C3C1Ev();
extern void _ZN7S4479C3D1Ev();
Name_Map name_map_S4479C3[] = {
  NSPAIR(_ZN7S4479C3C1Ev),
  NSPAIR(_ZN7S4479C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4479C3[];
extern void _ZN7S4479C3D1Ev();
extern void _ZN7S4479C3D0Ev();
extern void _ZN7S4479C32v2Ev();
extern void _ZN7S4479C32v3Ev();
extern void _ZN7S4479C32v4Ev();
static  VTBL_ENTRY vtc_S4479C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4479C3[0]),
  (VTBL_ENTRY)&_ZN7S4479C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4479C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4479C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4479C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4479C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4479C3[];
extern  VTBL_ENTRY _ZTV7S4479C3[];
Class_Descriptor cd_S4479C3 = {  "S4479C3", // class name
  0,0,//no base classes
  &(vtc_S4479C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4479C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4479C3),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  S4479C6  {
  virtual  ~S4479C6(); // _ZN7S4479C6D1Ev
  virtual void  v5(); // _ZN7S4479C62v5Ev
  S4479C6(); // tgen
};
//SIG(-1 S4479C6) C1{ vd v1}


 S4479C6 ::~S4479C6(){ note_dtor("S4479C6", this);}
void  S4479C6 ::v5(){vfunc_called(this, "_ZN7S4479C62v5Ev");}
S4479C6 ::S4479C6(){ note_ctor("S4479C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S4479C6C1Ev();
extern void _ZN7S4479C6D1Ev();
Name_Map name_map_S4479C6[] = {
  NSPAIR(_ZN7S4479C6C1Ev),
  NSPAIR(_ZN7S4479C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4479C6[];
extern void _ZN7S4479C6D1Ev();
extern void _ZN7S4479C6D0Ev();
extern void _ZN7S4479C62v5Ev();
static  VTBL_ENTRY vtc_S4479C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4479C6[0]),
  (VTBL_ENTRY)&_ZN7S4479C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4479C6D0Ev,
  (VTBL_ENTRY)&_ZN7S4479C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4479C6[];
extern  VTBL_ENTRY _ZTV7S4479C6[];
Class_Descriptor cd_S4479C6 = {  "S4479C6", // class name
  0,0,//no base classes
  &(vtc_S4479C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4479C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4479C6),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  S4479C2  : S4479C3 , S4479C6 {
  void *s4479c2f0;
  int s4479c2f1;
  void *s4479c2f2;
  virtual  ~S4479C2(); // _ZN7S4479C2D1Ev
  virtual void  v6(); // _ZN7S4479C22v6Ev
  virtual void  v7(); // _ZN7S4479C22v7Ev
  S4479C2(); // tgen
};
//SIG(-1 S4479C2) C1{ BC2{ vd v3 v4 v5 Fi[4] FC3{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} BC5{ vd v6} vd v1 v2 Fp Fi Fp}


 S4479C2 ::~S4479C2(){ note_dtor("S4479C2", this);}
void  S4479C2 ::v6(){vfunc_called(this, "_ZN7S4479C22v6Ev");}
void  S4479C2 ::v7(){vfunc_called(this, "_ZN7S4479C22v7Ev");}
S4479C2 ::S4479C2(){ note_ctor("S4479C2", this);} // tgen

static void Test_S4479C2()
{
  extern Class_Descriptor cd_S4479C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4479C2, buf);
    S4479C2 *dp, &lv = *(dp=new (buf) S4479C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4479C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4479C2)");
    check_base_class_offset(lv, (S4479C3*), 0, "S4479C2");
    check_base_class_offset(lv, (S4479C6*), ABISELECT(72,52), "S4479C2");
    check_field_offset(lv, s4479c2f0, ABISELECT(80,56), "S4479C2.s4479c2f0");
    check_field_offset(lv, s4479c2f1, ABISELECT(88,60), "S4479C2.s4479c2f1");
    check_field_offset(lv, s4479c2f2, ABISELECT(96,64), "S4479C2.s4479c2f2");
    test_class_info(&lv, &cd_S4479C2);
    dp->~S4479C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4479C2(Test_S4479C2, "S4479C2", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4479C2C1Ev();
extern void _ZN7S4479C2D1Ev();
Name_Map name_map_S4479C2[] = {
  NSPAIR(_ZN7S4479C2C1Ev),
  NSPAIR(_ZN7S4479C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4479C3;
extern VTBL_ENTRY _ZTI7S4479C3[];
extern  VTBL_ENTRY _ZTV7S4479C3[];
extern Class_Descriptor cd_S4479C6;
extern VTBL_ENTRY _ZTI7S4479C6[];
extern  VTBL_ENTRY _ZTV7S4479C6[];
static Base_Class bases_S4479C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4479C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S4479C6,    ABISELECT(72,52), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4479C2[];
extern void _ZN7S4479C2D1Ev();
extern void _ZN7S4479C2D0Ev();
extern void _ZN7S4479C32v2Ev();
extern void _ZN7S4479C32v3Ev();
extern void _ZN7S4479C32v4Ev();
extern void _ZN7S4479C22v6Ev();
extern void _ZN7S4479C22v7Ev();
extern void ABISELECT(_ZThn72_N7S4479C2D1Ev,_ZThn52_N7S4479C2D1Ev)();
extern void ABISELECT(_ZThn72_N7S4479C2D0Ev,_ZThn52_N7S4479C2D0Ev)();
extern void _ZN7S4479C62v5Ev();
static  VTBL_ENTRY vtc_S4479C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4479C2[0]),
  (VTBL_ENTRY)&_ZN7S4479C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4479C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4479C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4479C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4479C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4479C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4479C22v7Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4479C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4479C2D1Ev,_ZThn52_N7S4479C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4479C2D0Ev,_ZThn52_N7S4479C2D0Ev),
  (VTBL_ENTRY)&_ZN7S4479C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4479C2[];
extern  VTBL_ENTRY _ZTV7S4479C2[];
Class_Descriptor cd_S4479C2 = {  "S4479C2", // class name
  bases_S4479C2, 2,
  &(vtc_S4479C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4479C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4479C2),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4479C1  : S4479C2 {
  virtual  ~S4479C1(); // _ZN7S4479C1D1Ev
  virtual void  v1(); // _ZN7S4479C12v1Ev
  S4479C1(); // tgen
};
//SIG(1 S4479C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} BC6{ vd v5} vd v6 v7 Fp Fi Fp} vd v1}


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

static void Test_S4479C1()
{
  extern Class_Descriptor cd_S4479C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4479C1, buf);
    S4479C1 *dp, &lv = *(dp=new (buf) S4479C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4479C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4479C1)");
    check_base_class_offset(lv, (S4479C3*)(S4479C2*), 0, "S4479C1");
    check_base_class_offset(lv, (S4479C6*)(S4479C2*), ABISELECT(72,52), "S4479C1");
    check_base_class_offset(lv, (S4479C2*), 0, "S4479C1");
    test_class_info(&lv, &cd_S4479C1);
    dp->~S4479C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4479C1(Test_S4479C1, "S4479C1", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4479C1C1Ev();
extern void _ZN7S4479C1D1Ev();
Name_Map name_map_S4479C1[] = {
  NSPAIR(_ZN7S4479C1C1Ev),
  NSPAIR(_ZN7S4479C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4479C3;
extern VTBL_ENTRY _ZTI7S4479C3[];
extern  VTBL_ENTRY _ZTV7S4479C3[];
extern Class_Descriptor cd_S4479C6;
extern VTBL_ENTRY _ZTI7S4479C6[];
extern  VTBL_ENTRY _ZTV7S4479C6[];
extern Class_Descriptor cd_S4479C2;
extern VTBL_ENTRY _ZTI7S4479C2[];
extern  VTBL_ENTRY _ZTV7S4479C2[];
static Base_Class bases_S4479C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4479C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4479C6,    ABISELECT(72,52), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S4479C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4479C1[];
extern void _ZN7S4479C1D1Ev();
extern void _ZN7S4479C1D0Ev();
extern void _ZN7S4479C32v2Ev();
extern void _ZN7S4479C32v3Ev();
extern void _ZN7S4479C32v4Ev();
extern void _ZN7S4479C22v6Ev();
extern void _ZN7S4479C22v7Ev();
extern void _ZN7S4479C12v1Ev();
extern void ABISELECT(_ZThn72_N7S4479C1D1Ev,_ZThn52_N7S4479C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4479C1D0Ev,_ZThn52_N7S4479C1D0Ev)();
extern void _ZN7S4479C62v5Ev();
static  VTBL_ENTRY vtc_S4479C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4479C1[0]),
  (VTBL_ENTRY)&_ZN7S4479C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4479C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4479C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4479C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4479C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4479C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4479C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4479C12v1Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4479C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4479C1D1Ev,_ZThn52_N7S4479C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4479C1D0Ev,_ZThn52_N7S4479C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4479C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4479C1[];
extern  VTBL_ENTRY _ZTV7S4479C1[];
Class_Descriptor cd_S4479C1 = {  "S4479C1", // class name
  bases_S4479C1, 3,
  &(vtc_S4479C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4479C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4479C1),15, //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  S3013C3  {
  void *s3013c3f0;
  long double s3013c3f1;
  int s3013c3f2;
  virtual void  v11(); // _ZN7S3013C33v11Ev
  virtual void  v12(); // _ZN7S3013C33v12Ev
  ~S3013C3(); // tgen
  S3013C3(); // tgen
};
//SIG(-1 S3013C3) C1{ v1 v2 Fp FD Fi}


void  S3013C3 ::v11(){vfunc_called(this, "_ZN7S3013C33v11Ev");}
void  S3013C3 ::v12(){vfunc_called(this, "_ZN7S3013C33v12Ev");}
S3013C3 ::~S3013C3(){ note_dtor("S3013C3", this);} // tgen
S3013C3 ::S3013C3(){ note_ctor("S3013C3", this);} // tgen

static void Test_S3013C3()
{
  extern Class_Descriptor cd_S3013C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S3013C3, buf);
    S3013C3 *dp, &lv = *(dp=new (buf) S3013C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3013C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3013C3)");
    check_field_offset(lv, s3013c3f0, ABISELECT(8,4), "S3013C3.s3013c3f0");
    check_field_offset(lv, s3013c3f1, ABISELECT(16,8), "S3013C3.s3013c3f1");
    check_field_offset(lv, s3013c3f2, ABISELECT(32,20), "S3013C3.s3013c3f2");
    test_class_info(&lv, &cd_S3013C3);
    dp->~S3013C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3013C3(Test_S3013C3, "S3013C3", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3013C3C1Ev();
extern void _ZN7S3013C3D1Ev();
Name_Map name_map_S3013C3[] = {
  NSPAIR(_ZN7S3013C3C1Ev),
  NSPAIR(_ZN7S3013C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3013C3[];
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
static  VTBL_ENTRY vtc_S3013C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3013C3[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
};
extern VTBL_ENTRY _ZTI7S3013C3[];
extern  VTBL_ENTRY _ZTV7S3013C3[];
Class_Descriptor cd_S3013C3 = {  "S3013C3", // class name
  0,0,//no base classes
  &(vtc_S3013C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3013C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3013C3),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  S3013C5  : S3013C3 {
  virtual void  v13(); // _ZN7S3013C53v13Ev
  virtual void  v14(); // _ZN7S3013C53v14Ev
  ~S3013C5(); // tgen
  S3013C5(); // tgen
};
//SIG(-1 S3013C5) C1{ BC2{ v3 v4 Fp FD Fi} v1 v2}


void  S3013C5 ::v13(){vfunc_called(this, "_ZN7S3013C53v13Ev");}
void  S3013C5 ::v14(){vfunc_called(this, "_ZN7S3013C53v14Ev");}
S3013C5 ::~S3013C5(){ note_dtor("S3013C5", this);} // tgen
S3013C5 ::S3013C5(){ note_ctor("S3013C5", this);} // tgen

static void Test_S3013C5()
{
  extern Class_Descriptor cd_S3013C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S3013C5, buf);
    S3013C5 *dp, &lv = *(dp=new (buf) S3013C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3013C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3013C5)");
    check_base_class_offset(lv, (S3013C3*), 0, "S3013C5");
    test_class_info(&lv, &cd_S3013C5);
    dp->~S3013C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3013C5(Test_S3013C5, "S3013C5", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3013C5C1Ev();
extern void _ZN7S3013C5D1Ev();
Name_Map name_map_S3013C5[] = {
  NSPAIR(_ZN7S3013C5C1Ev),
  NSPAIR(_ZN7S3013C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3013C3;
extern VTBL_ENTRY _ZTI7S3013C3[];
extern  VTBL_ENTRY _ZTV7S3013C3[];
static Base_Class bases_S3013C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3013C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3013C5[];
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
extern void _ZN7S3013C53v13Ev();
extern void _ZN7S3013C53v14Ev();
static  VTBL_ENTRY vtc_S3013C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3013C5[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3013C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3013C53v14Ev,
};
extern VTBL_ENTRY _ZTI7S3013C5[];
extern  VTBL_ENTRY _ZTV7S3013C5[];
Class_Descriptor cd_S3013C5 = {  "S3013C5", // class name
  bases_S3013C5, 1,
  &(vtc_S3013C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3013C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3013C5),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  S3013C4  : S3013C5 , S3013C3 {
  virtual void  v15(); // _ZN7S3013C43v15Ev
  virtual void  v16(); // _ZN7S3013C43v16Ev
  virtual void  v17(); // _ZN7S3013C43v17Ev
  virtual void  v18(); // _ZN7S3013C43v18Ev
  ~S3013C4(); // tgen
  S3013C4(); // tgen
};
//SIG(-1 S3013C4) C1{ BC2{ BC3{ v5 v6 Fp FD Fi} v7 v8} BC3 v1 v2 v3 v4}


void  S3013C4 ::v15(){vfunc_called(this, "_ZN7S3013C43v15Ev");}
void  S3013C4 ::v16(){vfunc_called(this, "_ZN7S3013C43v16Ev");}
void  S3013C4 ::v17(){vfunc_called(this, "_ZN7S3013C43v17Ev");}
void  S3013C4 ::v18(){vfunc_called(this, "_ZN7S3013C43v18Ev");}
S3013C4 ::~S3013C4(){ note_dtor("S3013C4", this);} // tgen
S3013C4 ::S3013C4(){ note_ctor("S3013C4", this);} // tgen

static void Test_S3013C4()
{
  extern Class_Descriptor cd_S3013C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S3013C4, buf);
    S3013C4 *dp, &lv = *(dp=new (buf) S3013C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S3013C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3013C4)");
    check_base_class_offset(lv, (S3013C3*)(S3013C5*), 0, "S3013C4");
    check_base_class_offset(lv, (S3013C5*), 0, "S3013C4");
    /*is_ambiguous_... S3013C4::S3013C3 */ AMB_check_base_class_offset(lv, (S3013C3*), ABISELECT(48,24), "S3013C4");
    test_class_info(&lv, &cd_S3013C4);
    dp->~S3013C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3013C4(Test_S3013C4, "S3013C4", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN7S3013C4C1Ev();
extern void _ZN7S3013C4D1Ev();
Name_Map name_map_S3013C4[] = {
  NSPAIR(_ZN7S3013C4C1Ev),
  NSPAIR(_ZN7S3013C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3013C3;
extern VTBL_ENTRY _ZTI7S3013C3[];
extern  VTBL_ENTRY _ZTV7S3013C3[];
extern Class_Descriptor cd_S3013C5;
extern VTBL_ENTRY _ZTI7S3013C5[];
extern  VTBL_ENTRY _ZTV7S3013C5[];
extern Class_Descriptor cd_S3013C3;
extern VTBL_ENTRY _ZTI7S3013C3[];
extern  VTBL_ENTRY _ZTV7S3013C3[];
static Base_Class bases_S3013C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3013C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3013C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3013C3,    ABISELECT(48,24), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3013C4[];
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
extern void _ZN7S3013C53v13Ev();
extern void _ZN7S3013C53v14Ev();
extern void _ZN7S3013C43v15Ev();
extern void _ZN7S3013C43v16Ev();
extern void _ZN7S3013C43v17Ev();
extern void _ZN7S3013C43v18Ev();
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
static  VTBL_ENTRY vtc_S3013C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3013C4[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3013C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3013C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v18Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3013C4[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
};
extern VTBL_ENTRY _ZTI7S3013C4[];
extern  VTBL_ENTRY _ZTV7S3013C4[];
Class_Descriptor cd_S3013C4 = {  "S3013C4", // class name
  bases_S3013C4, 3,
  &(vtc_S3013C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI7S3013C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3013C4),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  S3013C2  : S3013C3 , virtual S3013C4 {
  __tsi64 s3013c2f0;
  int s3013c2f1;
  virtual  ~S3013C2(); // _ZN7S3013C2D2Ev
  virtual void  v19(); // _ZN7S3013C23v19Ev
  S3013C2(); // tgen
};
//SIG(-1 S3013C2) C1{ BC2{ v2 v3 Fp FD Fi} VBC3{ BC4{ BC2 v4 v5} BC2 v6 v7 v8 v9} vd v1 FL Fi}


 S3013C2 ::~S3013C2(){ note_dtor("S3013C2", this);}
void  S3013C2 ::v19(){vfunc_called(this, "_ZN7S3013C23v19Ev");}
S3013C2 ::S3013C2(){ note_ctor("S3013C2", this);} // tgen

static void Test_S3013C2()
{
  extern Class_Descriptor cd_S3013C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,22)];
    init_test(&cd_S3013C2, buf);
    S3013C2 *dp, &lv = *(dp=new (buf) S3013C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,84), "sizeof(S3013C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3013C2)");
    /*is_ambiguous_... S3013C2::S3013C3 */ AMB_check_base_class_offset(lv, (S3013C3*), 0, "S3013C2");
    check_base_class_offset(lv, (S3013C3*)(S3013C5*)(S3013C4*), ABISELECT(64,36), "S3013C2");
    check_base_class_offset(lv, (S3013C5*)(S3013C4*), ABISELECT(64,36), "S3013C2");
    /*is_ambiguous_... S3013C4::S3013C3 */ AMB_check_base_class_offset(lv, (S3013C3*)(S3013C4*), ABISELECT(112,60), "S3013C2");
    check_base_class_offset(lv, (S3013C4*), ABISELECT(64,36), "S3013C2");
    check_field_offset(lv, s3013c2f0, ABISELECT(40,24), "S3013C2.s3013c2f0");
    check_field_offset(lv, s3013c2f1, ABISELECT(48,32), "S3013C2.s3013c2f1");
    test_class_info(&lv, &cd_S3013C2);
    dp->~S3013C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3013C2(Test_S3013C2, "S3013C2", ABISELECT(160,84));

#else // __cplusplus

extern void _ZN7S3013C2C1Ev();
extern void _ZN7S3013C2D2Ev();
Name_Map name_map_S3013C2[] = {
  NSPAIR(_ZN7S3013C2C1Ev),
  NSPAIR(_ZN7S3013C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3013C3;
extern VTBL_ENTRY _ZTI7S3013C3[];
extern  VTBL_ENTRY _ZTV7S3013C3[];
extern Class_Descriptor cd_S3013C3;
extern VTBL_ENTRY _ZTI7S3013C3[];
extern  VTBL_ENTRY _ZTV7S3013C3[];
extern Class_Descriptor cd_S3013C5;
extern VTBL_ENTRY _ZTI7S3013C5[];
extern  VTBL_ENTRY _ZTV7S3013C5[];
extern Class_Descriptor cd_S3013C3;
extern VTBL_ENTRY _ZTI7S3013C3[];
extern  VTBL_ENTRY _ZTV7S3013C3[];
extern Class_Descriptor cd_S3013C4;
extern VTBL_ENTRY _ZTI7S3013C4[];
extern  VTBL_ENTRY _ZTV7S3013C4[];
static Base_Class bases_S3013C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3013C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3013C3,    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
    2, //immediately_derived
  0, 0},
  {&cd_S3013C5,    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
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3013C3,    ABISELECT(112,60), //bcp->offset
    26, //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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3013C4,    ABISELECT(64,36), //bcp->offset
    8, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S3013C2[];
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
extern void _ZN7S3013C2D1Ev();
extern void _ZN7S3013C2D0Ev();
extern void _ZN7S3013C23v19Ev();
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
extern void _ZN7S3013C53v13Ev();
extern void _ZN7S3013C53v14Ev();
extern void _ZN7S3013C43v15Ev();
extern void _ZN7S3013C43v16Ev();
extern void _ZN7S3013C43v17Ev();
extern void _ZN7S3013C43v18Ev();
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
static  VTBL_ENTRY vtc_S3013C2[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S3013C2[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3013C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3013C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3013C23v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3013C2[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3013C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3013C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v18Ev,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S3013C2[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
};
extern VTBL_ENTRY _ZTV7S3013C2[];
static  VTT_ENTRY vtt_S3013C2[] = {
  {&(_ZTV7S3013C2[3]),  3,30},
  {&(_ZTV7S3013C2[18]),  18,30},
  {&(_ZTV7S3013C2[28]),  28,30},
};
extern VTBL_ENTRY _ZTI7S3013C2[];
extern  VTBL_ENTRY _ZTV7S3013C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3013C2[];
Class_Descriptor cd_S3013C2 = {  "S3013C2", // class name
  bases_S3013C2, 5,
  &(vtc_S3013C2[0]), // expected_vtbl_contents
  &(vtt_S3013C2[0]), // expected_vtt_contents
  ABISELECT(160,84), // object size
  NSPAIRA(_ZTI7S3013C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3013C2),30, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3013C2),3, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3013C6_nt  {
  ::S3013C5 s3013c6f0[2];
  virtual void  v20(); // _ZN10S3013C6_nt3v20Ev
  ~S3013C6_nt(); // tgen
  S3013C6_nt(); // tgen
};
//SIG(-1 S3013C6_nt) C1{ v1 FC2{ BC3{ v4 v5 Fp FD Fi} v2 v3}[2]}


void  S3013C6_nt ::v20(){vfunc_called(this, "_ZN10S3013C6_nt3v20Ev");}
S3013C6_nt ::~S3013C6_nt(){ note_dtor("S3013C6_nt", this);} // tgen
S3013C6_nt ::S3013C6_nt(){ note_ctor("S3013C6_nt", this);} // tgen

//skip512 S3013C6_nt

#else // __cplusplus

extern void _ZN10S3013C6_ntC1Ev();
extern void _ZN10S3013C6_ntD1Ev();
Name_Map name_map_S3013C6_nt[] = {
  NSPAIR(_ZN10S3013C6_ntC1Ev),
  NSPAIR(_ZN10S3013C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3013C6_nt[];
extern void _ZN10S3013C6_nt3v20Ev();
static  VTBL_ENTRY vtc_S3013C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3013C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S3013C6_nt3v20Ev,
};
extern VTBL_ENTRY _ZTI10S3013C6_nt[];
VTBL_ENTRY *P__ZTI10S3013C6_nt = _ZTI10S3013C6_nt; 
extern  VTBL_ENTRY _ZTV10S3013C6_nt[];
Class_Descriptor cd_S3013C6_nt = {  "S3013C6_nt", // class name
  0,0,//no base classes
  &(vtc_S3013C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,52), // object size
  NSPAIRA(_ZTI10S3013C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3013C6_nt),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  S3013C1  : S3013C2 , S3013C6_nt {
  virtual void  v1(); // _ZN7S3013C12v1Ev
  virtual void  v2(); // _ZN7S3013C12v2Ev
  virtual void  v3(); // _ZN7S3013C12v3Ev
  virtual void  v4(); // _ZN7S3013C12v4Ev
  virtual void  v5(); // _ZN7S3013C12v5Ev
  virtual void  v6(); // _ZN7S3013C12v6Ev
  virtual void  v7(); // _ZN7S3013C12v7Ev
  virtual void  v8(); // _ZN7S3013C12v8Ev
  virtual void  v9(); // _ZN7S3013C12v9Ev
  virtual void  v10(); // _ZN7S3013C13v10Ev
  ~S3013C1(); // tgen
  S3013C1(); // tgen
};
//SIG(1 S3013C1) C1{ BC2{ BC3{ v11 v12 Fp FD Fi} VBC4{ BC5{ BC3 v13 v14} BC3 v15 v16 v17 v18} vd v19 FL Fi} BC6{ v20 FC5[2]} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


void  S3013C1 ::v1(){vfunc_called(this, "_ZN7S3013C12v1Ev");}
void  S3013C1 ::v2(){vfunc_called(this, "_ZN7S3013C12v2Ev");}
void  S3013C1 ::v3(){vfunc_called(this, "_ZN7S3013C12v3Ev");}
void  S3013C1 ::v4(){vfunc_called(this, "_ZN7S3013C12v4Ev");}
void  S3013C1 ::v5(){vfunc_called(this, "_ZN7S3013C12v5Ev");}
void  S3013C1 ::v6(){vfunc_called(this, "_ZN7S3013C12v6Ev");}
void  S3013C1 ::v7(){vfunc_called(this, "_ZN7S3013C12v7Ev");}
void  S3013C1 ::v8(){vfunc_called(this, "_ZN7S3013C12v8Ev");}
void  S3013C1 ::v9(){vfunc_called(this, "_ZN7S3013C12v9Ev");}
void  S3013C1 ::v10(){vfunc_called(this, "_ZN7S3013C13v10Ev");}
S3013C1 ::~S3013C1(){ note_dtor("S3013C1", this);} // tgen
S3013C1 ::S3013C1(){ note_ctor("S3013C1", this);} // tgen

static void Test_S3013C1()
{
  extern Class_Descriptor cd_S3013C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,35)];
    init_test(&cd_S3013C1, buf);
    S3013C1 *dp, &lv = *(dp=new (buf) S3013C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,136), "sizeof(S3013C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3013C1)");
    /*is_ambiguous_... S3013C2::S3013C3 */ AMB_check_base_class_offset(lv, (S3013C3*)(S3013C2*), 0, "S3013C1");
    check_base_class_offset(lv, (S3013C3*)(S3013C5*)(S3013C4*), ABISELECT(176,88), "S3013C1");
    check_base_class_offset(lv, (S3013C5*)(S3013C4*), ABISELECT(176,88), "S3013C1");
    /*is_ambiguous_... S3013C4::S3013C3 */ AMB_check_base_class_offset(lv, (S3013C3*)(S3013C4*), ABISELECT(224,112), "S3013C1");
    check_base_class_offset(lv, (S3013C4*)(S3013C2*), ABISELECT(176,88), "S3013C1");
    check_base_class_offset(lv, (S3013C2*), 0, "S3013C1");
    check_base_class_offset(lv, (S3013C6_nt*), ABISELECT(64,36), "S3013C1");
    test_class_info(&lv, &cd_S3013C1);
    dp->~S3013C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3013C1(Test_S3013C1, "S3013C1", ABISELECT(272,136));

#else // __cplusplus

extern void _ZN7S3013C1C1Ev();
extern void _ZN7S3013C1D1Ev();
Name_Map name_map_S3013C1[] = {
  NSPAIR(_ZN7S3013C1C1Ev),
  NSPAIR(_ZN7S3013C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3013C3;
extern VTBL_ENTRY _ZTI7S3013C3[];
extern  VTBL_ENTRY _ZTV7S3013C3[];
extern Class_Descriptor cd_S3013C3;
extern VTBL_ENTRY _ZTI7S3013C3[];
extern  VTBL_ENTRY _ZTV7S3013C3[];
extern Class_Descriptor cd_S3013C5;
extern VTBL_ENTRY _ZTI7S3013C5[];
extern  VTBL_ENTRY _ZTV7S3013C5[];
extern Class_Descriptor cd_S3013C3;
extern VTBL_ENTRY _ZTI7S3013C3[];
extern  VTBL_ENTRY _ZTV7S3013C3[];
extern Class_Descriptor cd_S3013C4;
extern VTBL_ENTRY _ZTI7S3013C4[];
extern  VTBL_ENTRY _ZTV7S3013C4[];
extern Class_Descriptor cd_S3013C2;
extern VTBL_ENTRY _ZTI7S3013C2[];
extern  VTBL_ENTRY _ZTV7S3013C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3013C2[];
extern Class_Descriptor cd_S3013C6_nt;
extern VTBL_ENTRY _ZTI10S3013C6_nt[];
extern  VTBL_ENTRY _ZTV10S3013C6_nt[];
static Base_Class bases_S3013C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3013C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3013C3,    ABISELECT(176,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
    2, //immediately_derived
  0, 0},
  {&cd_S3013C5,    ABISELECT(176,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
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3013C3,    ABISELECT(224,112), //bcp->offset
    39, //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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3013C4,    ABISELECT(176,88), //bcp->offset
    21, //bcp->virtual_function_table_offset
    10, //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
    5, //immediately_derived
  0, 1},
  {&cd_S3013C2,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3013C6_nt,    ABISELECT(64,36), //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3013C1[];
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
extern void _ZN7S3013C1D1Ev();
extern void _ZN7S3013C1D0Ev();
extern void _ZN7S3013C23v19Ev();
extern void _ZN7S3013C12v1Ev();
extern void _ZN7S3013C12v2Ev();
extern void _ZN7S3013C12v3Ev();
extern void _ZN7S3013C12v4Ev();
extern void _ZN7S3013C12v5Ev();
extern void _ZN7S3013C12v6Ev();
extern void _ZN7S3013C12v7Ev();
extern void _ZN7S3013C12v8Ev();
extern void _ZN7S3013C12v9Ev();
extern void _ZN7S3013C13v10Ev();
extern void _ZN10S3013C6_nt3v20Ev();
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
extern void _ZN7S3013C53v13Ev();
extern void _ZN7S3013C53v14Ev();
extern void _ZN7S3013C43v15Ev();
extern void _ZN7S3013C43v16Ev();
extern void _ZN7S3013C43v17Ev();
extern void _ZN7S3013C43v18Ev();
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
static  VTBL_ENTRY vtc_S3013C1[] = {
  ABISELECT(176,88),
  0,
  (VTBL_ENTRY)&(_ZTI7S3013C1[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3013C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3013C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3013C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3013C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3013C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3013C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3013C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3013C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3013C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3013C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3013C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3013C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3013C13v10Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3013C1[0]),
  (VTBL_ENTRY)&_ZN10S3013C6_nt3v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI7S3013C1[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3013C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3013C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v18Ev,
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI7S3013C1[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
};
extern VTBL_ENTRY _ZTV7S3013C1[];
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
extern void _ZN7S3013C2D1Ev();
extern void _ZN7S3013C2D0Ev();
extern void _ZN7S3013C23v19Ev();
static  VTBL_ENTRY _tg__ZTV7S3013C2__7S3013C1[] = {
  ABISELECT(176,88),
  0,
  (VTBL_ENTRY)&(_ZTI7S3013C2[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3013C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3013C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3013C23v19Ev,
};
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
extern void _ZN7S3013C53v13Ev();
extern void _ZN7S3013C53v14Ev();
extern void _ZN7S3013C43v15Ev();
extern void _ZN7S3013C43v16Ev();
extern void _ZN7S3013C43v17Ev();
extern void _ZN7S3013C43v18Ev();
static  VTBL_ENTRY _tg__ZTV7S3013C4__7S3013C2__7S3013C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI7S3013C2[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3013C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3013C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v18Ev,
};
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S3013C37S3013C4__A2__7S3013C2__7S3013C1[] = {
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI7S3013C2[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
};
static  VTT_ENTRY vtt_S3013C1[] = {
  {&(_ZTV7S3013C1[3]),  3,43},
  {&(_tg__ZTV7S3013C2__7S3013C1[3]),  3,8},
  {&(_tg__ZTV7S3013C4__7S3013C2__7S3013C1[10]),  10,18},
  {&(_tg__ZTV7S3013C37S3013C4__A2__7S3013C2__7S3013C1[2]),  2,4},
  {&(_ZTV7S3013C1[31]),  31,43},
  {&(_ZTV7S3013C1[41]),  41,43},
};
extern VTBL_ENTRY _ZTI7S3013C1[];
extern  VTBL_ENTRY _ZTV7S3013C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3013C1[];
Class_Descriptor cd_S3013C1 = {  "S3013C1", // class name
  bases_S3013C1, 7,
  &(vtc_S3013C1[0]), // expected_vtbl_contents
  &(vtt_S3013C1[0]), // expected_vtt_contents
  ABISELECT(272,136), // object size
  NSPAIRA(_ZTI7S3013C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3013C1),43, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3013C1),6, //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  S2160C4  {
  ::S4473C12_nt s2160c4f0;
  int s2160c4f1[2];
  char s2160c4f2;
  virtual  ~S2160C4(); // _ZN7S2160C4D1Ev
  virtual void  v3(); // _ZN7S2160C42v3Ev
  virtual void  v4(); // _ZN7S2160C42v4Ev
  virtual void  v5(); // _ZN7S2160C42v5Ev
  S2160C4(); // tgen
};
//SIG(-1 S2160C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2160C4 ::~S2160C4(){ note_dtor("S2160C4", this);}
void  S2160C4 ::v3(){vfunc_called(this, "_ZN7S2160C42v3Ev");}
void  S2160C4 ::v4(){vfunc_called(this, "_ZN7S2160C42v4Ev");}
void  S2160C4 ::v5(){vfunc_called(this, "_ZN7S2160C42v5Ev");}
S2160C4 ::S2160C4(){ note_ctor("S2160C4", this);} // tgen

static void Test_S2160C4()
{
  extern Class_Descriptor cd_S2160C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2160C4, buf);
    S2160C4 *dp, &lv = *(dp=new (buf) S2160C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2160C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2160C4)");
    check_field_offset(lv, s2160c4f0, ABISELECT(8,4), "S2160C4.s2160c4f0");
    check_field_offset(lv, s2160c4f1, ABISELECT(24,16), "S2160C4.s2160c4f1");
    check_field_offset(lv, s2160c4f2, ABISELECT(32,24), "S2160C4.s2160c4f2");
    test_class_info(&lv, &cd_S2160C4);
    dp->~S2160C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2160C4(Test_S2160C4, "S2160C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2160C4C1Ev();
extern void _ZN7S2160C4D1Ev();
Name_Map name_map_S2160C4[] = {
  NSPAIR(_ZN7S2160C4C1Ev),
  NSPAIR(_ZN7S2160C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2160C4[];
extern void _ZN7S2160C4D1Ev();
extern void _ZN7S2160C4D0Ev();
extern void _ZN7S2160C42v3Ev();
extern void _ZN7S2160C42v4Ev();
extern void _ZN7S2160C42v5Ev();
static  VTBL_ENTRY vtc_S2160C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2160C4[0]),
  (VTBL_ENTRY)&_ZN7S2160C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2160C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2160C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2160C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2160C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2160C4[];
extern  VTBL_ENTRY _ZTV7S2160C4[];
Class_Descriptor cd_S2160C4 = {  "S2160C4", // class name
  0,0,//no base classes
  &(vtc_S2160C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2160C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2160C4),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  S2160C3  : S2160C4 {
  void *s2160c3f0;
  virtual void  v6(); // _ZN7S2160C32v6Ev
  virtual void  v7(); // _ZN7S2160C32v7Ev
  ~S2160C3(); // tgen
  S2160C3(); // tgen
};
//SIG(-1 S2160C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2160C3 ::v6(){vfunc_called(this, "_ZN7S2160C32v6Ev");}
void  S2160C3 ::v7(){vfunc_called(this, "_ZN7S2160C32v7Ev");}
S2160C3 ::~S2160C3(){ note_dtor("S2160C3", this);} // tgen
S2160C3 ::S2160C3(){ note_ctor("S2160C3", this);} // tgen

static void Test_S2160C3()
{
  extern Class_Descriptor cd_S2160C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2160C3, buf);
    S2160C3 *dp, &lv = *(dp=new (buf) S2160C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2160C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2160C3)");
    check_base_class_offset(lv, (S2160C4*), 0, "S2160C3");
    check_field_offset(lv, s2160c3f0, ABISELECT(40,28), "S2160C3.s2160c3f0");
    test_class_info(&lv, &cd_S2160C3);
    dp->~S2160C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2160C3(Test_S2160C3, "S2160C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2160C3C1Ev();
extern void _ZN7S2160C3D1Ev();
Name_Map name_map_S2160C3[] = {
  NSPAIR(_ZN7S2160C3C1Ev),
  NSPAIR(_ZN7S2160C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2160C4;
extern VTBL_ENTRY _ZTI7S2160C4[];
extern  VTBL_ENTRY _ZTV7S2160C4[];
static Base_Class bases_S2160C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2160C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2160C3[];
extern void _ZN7S2160C3D1Ev();
extern void _ZN7S2160C3D0Ev();
extern void _ZN7S2160C42v3Ev();
extern void _ZN7S2160C42v4Ev();
extern void _ZN7S2160C42v5Ev();
extern void _ZN7S2160C32v6Ev();
extern void _ZN7S2160C32v7Ev();
static  VTBL_ENTRY vtc_S2160C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2160C3[0]),
  (VTBL_ENTRY)&_ZN7S2160C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2160C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2160C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2160C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2160C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2160C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2160C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S2160C3[];
extern  VTBL_ENTRY _ZTV7S2160C3[];
Class_Descriptor cd_S2160C3 = {  "S2160C3", // class name
  bases_S2160C3, 1,
  &(vtc_S2160C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2160C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2160C3),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  S2160C2  : S2160C3 {
  void *s2160c2f0;
  char s2160c2f1;
  ::S2366C14_nt s2160c2f2;
  virtual  ~S2160C2(); // _ZN7S2160C2D1Ev
  virtual void  v8(); // _ZN7S2160C22v8Ev
  S2160C2(); // tgen
};
//SIG(-1 S2160C2) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1 Fp Fc FC6{ m Fi[2]}}


 S2160C2 ::~S2160C2(){ note_dtor("S2160C2", this);}
void  S2160C2 ::v8(){vfunc_called(this, "_ZN7S2160C22v8Ev");}
S2160C2 ::S2160C2(){ note_ctor("S2160C2", this);} // tgen

static void Test_S2160C2()
{
  extern Class_Descriptor cd_S2160C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2160C2, buf);
    S2160C2 *dp, &lv = *(dp=new (buf) S2160C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2160C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2160C2)");
    check_base_class_offset(lv, (S2160C4*)(S2160C3*), 0, "S2160C2");
    check_base_class_offset(lv, (S2160C3*), 0, "S2160C2");
    check_field_offset(lv, s2160c2f0, ABISELECT(48,32), "S2160C2.s2160c2f0");
    check_field_offset(lv, s2160c2f1, ABISELECT(56,36), "S2160C2.s2160c2f1");
    check_field_offset(lv, s2160c2f2, ABISELECT(60,40), "S2160C2.s2160c2f2");
    test_class_info(&lv, &cd_S2160C2);
    dp->~S2160C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2160C2(Test_S2160C2, "S2160C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2160C2C1Ev();
extern void _ZN7S2160C2D1Ev();
Name_Map name_map_S2160C2[] = {
  NSPAIR(_ZN7S2160C2C1Ev),
  NSPAIR(_ZN7S2160C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2160C4;
extern VTBL_ENTRY _ZTI7S2160C4[];
extern  VTBL_ENTRY _ZTV7S2160C4[];
extern Class_Descriptor cd_S2160C3;
extern VTBL_ENTRY _ZTI7S2160C3[];
extern  VTBL_ENTRY _ZTV7S2160C3[];
static Base_Class bases_S2160C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2160C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2160C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2160C2[];
extern void _ZN7S2160C2D1Ev();
extern void _ZN7S2160C2D0Ev();
extern void _ZN7S2160C42v3Ev();
extern void _ZN7S2160C42v4Ev();
extern void _ZN7S2160C42v5Ev();
extern void _ZN7S2160C32v6Ev();
extern void _ZN7S2160C32v7Ev();
extern void _ZN7S2160C22v8Ev();
static  VTBL_ENTRY vtc_S2160C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2160C2[0]),
  (VTBL_ENTRY)&_ZN7S2160C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2160C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2160C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2160C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2160C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2160C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2160C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2160C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S2160C2[];
extern  VTBL_ENTRY _ZTV7S2160C2[];
Class_Descriptor cd_S2160C2 = {  "S2160C2", // class name
  bases_S2160C2, 2,
  &(vtc_S2160C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2160C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2160C2),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  S2160C1  : S2160C2 {
  void *s2160c1f0;
  ::S4473C12_nt s2160c1f1;
  ::S2173C14 s2160c1f2;
  virtual  ~S2160C1(); // _ZN7S2160C1D1Ev
  virtual void  v1(); // _ZN7S2160C12v1Ev
  virtual void  v2(); // _ZN7S2160C12v2Ev
  S2160C1(); // tgen
};
//SIG(1 S2160C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v6 v7 Fp} vd v8 Fp Fc FC7{ m Fi[2]}} vd v1 v2 Fp FC5 FC8{ m Fp Fi[2] FC9{ m}}}


 S2160C1 ::~S2160C1(){ note_dtor("S2160C1", this);}
void  S2160C1 ::v1(){vfunc_called(this, "_ZN7S2160C12v1Ev");}
void  S2160C1 ::v2(){vfunc_called(this, "_ZN7S2160C12v2Ev");}
S2160C1 ::S2160C1(){ note_ctor("S2160C1", this);} // tgen

static void Test_S2160C1()
{
  extern Class_Descriptor cd_S2160C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,21)];
    init_test(&cd_S2160C1, buf);
    S2160C1 *dp, &lv = *(dp=new (buf) S2160C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,80), "sizeof(S2160C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2160C1)");
    check_base_class_offset(lv, (S2160C4*)(S2160C3*)(S2160C2*), 0, "S2160C1");
    check_base_class_offset(lv, (S2160C3*)(S2160C2*), 0, "S2160C1");
    check_base_class_offset(lv, (S2160C2*), 0, "S2160C1");
    check_field_offset(lv, s2160c1f0, ABISELECT(72,48), "S2160C1.s2160c1f0");
    check_field_offset(lv, s2160c1f1, ABISELECT(80,52), "S2160C1.s2160c1f1");
    check_field_offset(lv, s2160c1f2, ABISELECT(96,64), "S2160C1.s2160c1f2");
    test_class_info(&lv, &cd_S2160C1);
    dp->~S2160C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2160C1(Test_S2160C1, "S2160C1", ABISELECT(120,80));

#else // __cplusplus

extern void _ZN7S2160C1C1Ev();
extern void _ZN7S2160C1D1Ev();
Name_Map name_map_S2160C1[] = {
  NSPAIR(_ZN7S2160C1C1Ev),
  NSPAIR(_ZN7S2160C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2160C4;
extern VTBL_ENTRY _ZTI7S2160C4[];
extern  VTBL_ENTRY _ZTV7S2160C4[];
extern Class_Descriptor cd_S2160C3;
extern VTBL_ENTRY _ZTI7S2160C3[];
extern  VTBL_ENTRY _ZTV7S2160C3[];
extern Class_Descriptor cd_S2160C2;
extern VTBL_ENTRY _ZTI7S2160C2[];
extern  VTBL_ENTRY _ZTV7S2160C2[];
static Base_Class bases_S2160C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2160C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2160C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2160C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2160C1[];
extern void _ZN7S2160C1D1Ev();
extern void _ZN7S2160C1D0Ev();
extern void _ZN7S2160C42v3Ev();
extern void _ZN7S2160C42v4Ev();
extern void _ZN7S2160C42v5Ev();
extern void _ZN7S2160C32v6Ev();
extern void _ZN7S2160C32v7Ev();
extern void _ZN7S2160C22v8Ev();
extern void _ZN7S2160C12v1Ev();
extern void _ZN7S2160C12v2Ev();
static  VTBL_ENTRY vtc_S2160C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2160C1[0]),
  (VTBL_ENTRY)&_ZN7S2160C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2160C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2160C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2160C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2160C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2160C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2160C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2160C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2160C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2160C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2160C1[];
extern  VTBL_ENTRY _ZTV7S2160C1[];
Class_Descriptor cd_S2160C1 = {  "S2160C1", // class name
  bases_S2160C1, 3,
  &(vtc_S2160C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,80), // object size
  NSPAIRA(_ZTI7S2160C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2160C1),12, //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  S5075C3  {
  ::S4473C12_nt s5075c3f0;
  int s5075c3f1[2];
  char s5075c3f2;
  virtual  ~S5075C3(); // _ZN7S5075C3D1Ev
  virtual void  v4(); // _ZN7S5075C32v4Ev
  virtual void  v5(); // _ZN7S5075C32v5Ev
  virtual void  v6(); // _ZN7S5075C32v6Ev
  S5075C3(); // tgen
};
//SIG(-1 S5075C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5075C3 ::~S5075C3(){ note_dtor("S5075C3", this);}
void  S5075C3 ::v4(){vfunc_called(this, "_ZN7S5075C32v4Ev");}
void  S5075C3 ::v5(){vfunc_called(this, "_ZN7S5075C32v5Ev");}
void  S5075C3 ::v6(){vfunc_called(this, "_ZN7S5075C32v6Ev");}
S5075C3 ::S5075C3(){ note_ctor("S5075C3", this);} // tgen

static void Test_S5075C3()
{
  extern Class_Descriptor cd_S5075C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5075C3, buf);
    S5075C3 *dp, &lv = *(dp=new (buf) S5075C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5075C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5075C3)");
    check_field_offset(lv, s5075c3f0, ABISELECT(8,4), "S5075C3.s5075c3f0");
    check_field_offset(lv, s5075c3f1, ABISELECT(24,16), "S5075C3.s5075c3f1");
    check_field_offset(lv, s5075c3f2, ABISELECT(32,24), "S5075C3.s5075c3f2");
    test_class_info(&lv, &cd_S5075C3);
    dp->~S5075C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5075C3(Test_S5075C3, "S5075C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5075C3C1Ev();
extern void _ZN7S5075C3D1Ev();
Name_Map name_map_S5075C3[] = {
  NSPAIR(_ZN7S5075C3C1Ev),
  NSPAIR(_ZN7S5075C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5075C3[];
extern void _ZN7S5075C3D1Ev();
extern void _ZN7S5075C3D0Ev();
extern void _ZN7S5075C32v4Ev();
extern void _ZN7S5075C32v5Ev();
extern void _ZN7S5075C32v6Ev();
static  VTBL_ENTRY vtc_S5075C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5075C3[0]),
  (VTBL_ENTRY)&_ZN7S5075C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5075C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5075C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5075C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5075C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5075C3[];
extern  VTBL_ENTRY _ZTV7S5075C3[];
Class_Descriptor cd_S5075C3 = {  "S5075C3", // class name
  0,0,//no base classes
  &(vtc_S5075C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5075C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5075C3),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  S5075C2  : S5075C3 {
  void *s5075c2f0;
  virtual void  v7(); // _ZN7S5075C22v7Ev
  virtual void  v8(); // _ZN7S5075C22v8Ev
  ~S5075C2(); // tgen
  S5075C2(); // tgen
};
//SIG(-1 S5075C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5075C2 ::v7(){vfunc_called(this, "_ZN7S5075C22v7Ev");}
void  S5075C2 ::v8(){vfunc_called(this, "_ZN7S5075C22v8Ev");}
S5075C2 ::~S5075C2(){ note_dtor("S5075C2", this);} // tgen
S5075C2 ::S5075C2(){ note_ctor("S5075C2", this);} // tgen

static void Test_S5075C2()
{
  extern Class_Descriptor cd_S5075C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5075C2, buf);
    S5075C2 *dp, &lv = *(dp=new (buf) S5075C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5075C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5075C2)");
    check_base_class_offset(lv, (S5075C3*), 0, "S5075C2");
    check_field_offset(lv, s5075c2f0, ABISELECT(40,28), "S5075C2.s5075c2f0");
    test_class_info(&lv, &cd_S5075C2);
    dp->~S5075C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5075C2(Test_S5075C2, "S5075C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5075C2C1Ev();
extern void _ZN7S5075C2D1Ev();
Name_Map name_map_S5075C2[] = {
  NSPAIR(_ZN7S5075C2C1Ev),
  NSPAIR(_ZN7S5075C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5075C3;
extern VTBL_ENTRY _ZTI7S5075C3[];
extern  VTBL_ENTRY _ZTV7S5075C3[];
static Base_Class bases_S5075C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5075C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5075C2[];
extern void _ZN7S5075C2D1Ev();
extern void _ZN7S5075C2D0Ev();
extern void _ZN7S5075C32v4Ev();
extern void _ZN7S5075C32v5Ev();
extern void _ZN7S5075C32v6Ev();
extern void _ZN7S5075C22v7Ev();
extern void _ZN7S5075C22v8Ev();
static  VTBL_ENTRY vtc_S5075C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5075C2[0]),
  (VTBL_ENTRY)&_ZN7S5075C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5075C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5075C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5075C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5075C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5075C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5075C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5075C2[];
extern  VTBL_ENTRY _ZTV7S5075C2[];
Class_Descriptor cd_S5075C2 = {  "S5075C2", // class name
  bases_S5075C2, 1,
  &(vtc_S5075C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5075C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5075C2),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  S5075C8_nt  {
  void *s5075c8f0[2];
  void  mf5075c8(); // _ZN10S5075C8_nt8mf5075c8Ev
};
//SIG(-1 S5075C8_nt) C1{ m Fp[2]}


void  S5075C8_nt ::mf5075c8(){}

//skip512 S5075C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5075C1  : S5075C2 {
  ::S4473C12_nt s5075c1f0;
  ::S2366C19 s5075c1f1;
  ::S130C11_nt s5075c1f2;
  int s5075c1f3;
  ::S2366C19 s5075c1f4;
  void *s5075c1f5[2];
  ::S5075C8_nt s5075c1f6;
  virtual  ~S5075C1(); // _ZN7S5075C1D1Ev
  virtual void  v1(); // _ZN7S5075C12v1Ev
  virtual void  v2(); // _ZN7S5075C12v2Ev
  virtual void  v3(); // _ZN7S5075C12v3Ev
  S5075C1(); // tgen
};
//SIG(1 S5075C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} vd v1 v2 v3 FC4 FC6{ m Fp} FC7{ m Fp[2]} Fi FC6 Fp[2] FC8{ m Fp[2]}}


 S5075C1 ::~S5075C1(){ note_dtor("S5075C1", this);}
void  S5075C1 ::v1(){vfunc_called(this, "_ZN7S5075C12v1Ev");}
void  S5075C1 ::v2(){vfunc_called(this, "_ZN7S5075C12v2Ev");}
void  S5075C1 ::v3(){vfunc_called(this, "_ZN7S5075C12v3Ev");}
S5075C1 ::S5075C1(){ note_ctor("S5075C1", this);} // tgen

static void Test_S5075C1()
{
  extern Class_Descriptor cd_S5075C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S5075C1, buf);
    S5075C1 *dp, &lv = *(dp=new (buf) S5075C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S5075C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5075C1)");
    check_base_class_offset(lv, (S5075C3*)(S5075C2*), 0, "S5075C1");
    check_base_class_offset(lv, (S5075C2*), 0, "S5075C1");
    check_field_offset(lv, s5075c1f0, ABISELECT(48,32), "S5075C1.s5075c1f0");
    check_field_offset(lv, s5075c1f1, ABISELECT(64,44), "S5075C1.s5075c1f1");
    check_field_offset(lv, s5075c1f2, ABISELECT(72,48), "S5075C1.s5075c1f2");
    check_field_offset(lv, s5075c1f3, ABISELECT(88,56), "S5075C1.s5075c1f3");
    check_field_offset(lv, s5075c1f4, ABISELECT(96,60), "S5075C1.s5075c1f4");
    check_field_offset(lv, s5075c1f5, ABISELECT(104,64), "S5075C1.s5075c1f5");
    check_field_offset(lv, s5075c1f6, ABISELECT(120,72), "S5075C1.s5075c1f6");
    test_class_info(&lv, &cd_S5075C1);
    dp->~S5075C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5075C1(Test_S5075C1, "S5075C1", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN7S5075C1C1Ev();
extern void _ZN7S5075C1D1Ev();
Name_Map name_map_S5075C1[] = {
  NSPAIR(_ZN7S5075C1C1Ev),
  NSPAIR(_ZN7S5075C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5075C3;
extern VTBL_ENTRY _ZTI7S5075C3[];
extern  VTBL_ENTRY _ZTV7S5075C3[];
extern Class_Descriptor cd_S5075C2;
extern VTBL_ENTRY _ZTI7S5075C2[];
extern  VTBL_ENTRY _ZTV7S5075C2[];
static Base_Class bases_S5075C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5075C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5075C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5075C1[];
extern void _ZN7S5075C1D1Ev();
extern void _ZN7S5075C1D0Ev();
extern void _ZN7S5075C32v4Ev();
extern void _ZN7S5075C32v5Ev();
extern void _ZN7S5075C32v6Ev();
extern void _ZN7S5075C22v7Ev();
extern void _ZN7S5075C22v8Ev();
extern void _ZN7S5075C12v1Ev();
extern void _ZN7S5075C12v2Ev();
extern void _ZN7S5075C12v3Ev();
static  VTBL_ENTRY vtc_S5075C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5075C1[0]),
  (VTBL_ENTRY)&_ZN7S5075C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5075C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5075C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5075C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5075C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5075C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5075C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5075C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5075C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5075C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5075C1[];
extern  VTBL_ENTRY _ZTV7S5075C1[];
Class_Descriptor cd_S5075C1 = {  "S5075C1", // class name
  bases_S5075C1, 2,
  &(vtc_S5075C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI7S5075C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5075C1),12, //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  S4764C3  {
  ::S4473C12_nt s4764c3f0;
  int s4764c3f1[2];
  char s4764c3f2;
  virtual  ~S4764C3(); // _ZN7S4764C3D1Ev
  virtual void  v3(); // _ZN7S4764C32v3Ev
  virtual void  v4(); // _ZN7S4764C32v4Ev
  virtual void  v5(); // _ZN7S4764C32v5Ev
  S4764C3(); // tgen
};
//SIG(-1 S4764C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4764C3 ::~S4764C3(){ note_dtor("S4764C3", this);}
void  S4764C3 ::v3(){vfunc_called(this, "_ZN7S4764C32v3Ev");}
void  S4764C3 ::v4(){vfunc_called(this, "_ZN7S4764C32v4Ev");}
void  S4764C3 ::v5(){vfunc_called(this, "_ZN7S4764C32v5Ev");}
S4764C3 ::S4764C3(){ note_ctor("S4764C3", this);} // tgen

static void Test_S4764C3()
{
  extern Class_Descriptor cd_S4764C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4764C3, buf);
    S4764C3 *dp, &lv = *(dp=new (buf) S4764C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4764C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4764C3)");
    check_field_offset(lv, s4764c3f0, ABISELECT(8,4), "S4764C3.s4764c3f0");
    check_field_offset(lv, s4764c3f1, ABISELECT(24,16), "S4764C3.s4764c3f1");
    check_field_offset(lv, s4764c3f2, ABISELECT(32,24), "S4764C3.s4764c3f2");
    test_class_info(&lv, &cd_S4764C3);
    dp->~S4764C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4764C3(Test_S4764C3, "S4764C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4764C3C1Ev();
extern void _ZN7S4764C3D1Ev();
Name_Map name_map_S4764C3[] = {
  NSPAIR(_ZN7S4764C3C1Ev),
  NSPAIR(_ZN7S4764C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4764C3[];
extern void _ZN7S4764C3D1Ev();
extern void _ZN7S4764C3D0Ev();
extern void _ZN7S4764C32v3Ev();
extern void _ZN7S4764C32v4Ev();
extern void _ZN7S4764C32v5Ev();
static  VTBL_ENTRY vtc_S4764C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4764C3[0]),
  (VTBL_ENTRY)&_ZN7S4764C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4764C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4764C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4764C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4764C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4764C3[];
extern  VTBL_ENTRY _ZTV7S4764C3[];
Class_Descriptor cd_S4764C3 = {  "S4764C3", // class name
  0,0,//no base classes
  &(vtc_S4764C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4764C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4764C3),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  S4764C2  : S4764C3 {
  void *s4764c2f0;
  virtual void  v6(); // _ZN7S4764C22v6Ev
  virtual void  v7(); // _ZN7S4764C22v7Ev
  ~S4764C2(); // tgen
  S4764C2(); // tgen
};
//SIG(-1 S4764C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4764C2 ::v6(){vfunc_called(this, "_ZN7S4764C22v6Ev");}
void  S4764C2 ::v7(){vfunc_called(this, "_ZN7S4764C22v7Ev");}
S4764C2 ::~S4764C2(){ note_dtor("S4764C2", this);} // tgen
S4764C2 ::S4764C2(){ note_ctor("S4764C2", this);} // tgen

static void Test_S4764C2()
{
  extern Class_Descriptor cd_S4764C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4764C2, buf);
    S4764C2 *dp, &lv = *(dp=new (buf) S4764C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4764C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4764C2)");
    check_base_class_offset(lv, (S4764C3*), 0, "S4764C2");
    check_field_offset(lv, s4764c2f0, ABISELECT(40,28), "S4764C2.s4764c2f0");
    test_class_info(&lv, &cd_S4764C2);
    dp->~S4764C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4764C2(Test_S4764C2, "S4764C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4764C2C1Ev();
extern void _ZN7S4764C2D1Ev();
Name_Map name_map_S4764C2[] = {
  NSPAIR(_ZN7S4764C2C1Ev),
  NSPAIR(_ZN7S4764C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4764C3;
extern VTBL_ENTRY _ZTI7S4764C3[];
extern  VTBL_ENTRY _ZTV7S4764C3[];
static Base_Class bases_S4764C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4764C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4764C2[];
extern void _ZN7S4764C2D1Ev();
extern void _ZN7S4764C2D0Ev();
extern void _ZN7S4764C32v3Ev();
extern void _ZN7S4764C32v4Ev();
extern void _ZN7S4764C32v5Ev();
extern void _ZN7S4764C22v6Ev();
extern void _ZN7S4764C22v7Ev();
static  VTBL_ENTRY vtc_S4764C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4764C2[0]),
  (VTBL_ENTRY)&_ZN7S4764C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4764C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4764C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4764C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4764C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4764C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4764C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4764C2[];
extern  VTBL_ENTRY _ZTV7S4764C2[];
Class_Descriptor cd_S4764C2 = {  "S4764C2", // class name
  bases_S4764C2, 1,
  &(vtc_S4764C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4764C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4764C2),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  S4764C6  {
  __tsi64 s4764c6f0;
  void *s4764c6f1[2];
  ::S4729C10_nt s4764c6f2;
};
//SIG(-1 S4764C6) C1{ FL Fp[2] FC2{ m FC3{ m FL}}}



static void Test_S4764C6()
{
  {
    init_simple_test("S4764C6");
    S4764C6 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S4764C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4764C6)");
    check_field_offset(lv, s4764c6f0, 0, "S4764C6.s4764c6f0");
    check_field_offset(lv, s4764c6f1, 8, "S4764C6.s4764c6f1");
    check_field_offset(lv, s4764c6f2, ABISELECT(24,16), "S4764C6.s4764c6f2");
  }
}
static Arrange_To_Call_Me vS4764C6(Test_S4764C6, "S4764C6", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4764C1  : S4764C2 {
  ::S4764C6 s4764c1f0;
  void *s4764c1f1[2];
  ::S2366C19 s4764c1f2;
  ::S4473C12_nt s4764c1f3;
  int s4764c1f4;
  virtual  ~S4764C1(); // _ZN7S4764C1D1Ev
  virtual void  v1(); // _ZN7S4764C12v1Ev
  virtual void  v2(); // _ZN7S4764C12v2Ev
  S4764C1(); // tgen
};
//SIG(1 S4764C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC6{ FL Fp[2] FC7{ m FC8{ m FL}}} Fp[2] FC9{ m Fp} FC4 Fi}


 S4764C1 ::~S4764C1(){ note_dtor("S4764C1", this);}
void  S4764C1 ::v1(){vfunc_called(this, "_ZN7S4764C12v1Ev");}
void  S4764C1 ::v2(){vfunc_called(this, "_ZN7S4764C12v2Ev");}
S4764C1 ::S4764C1(){ note_ctor("S4764C1", this);} // tgen

static void Test_S4764C1()
{
  extern Class_Descriptor cd_S4764C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S4764C1, buf);
    S4764C1 *dp, &lv = *(dp=new (buf) S4764C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S4764C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4764C1)");
    check_base_class_offset(lv, (S4764C3*)(S4764C2*), 0, "S4764C1");
    check_base_class_offset(lv, (S4764C2*), 0, "S4764C1");
    check_field_offset(lv, s4764c1f0, ABISELECT(48,32), "S4764C1.s4764c1f0");
    check_field_offset(lv, s4764c1f1, ABISELECT(80,56), "S4764C1.s4764c1f1");
    check_field_offset(lv, s4764c1f2, ABISELECT(96,64), "S4764C1.s4764c1f2");
    check_field_offset(lv, s4764c1f3, ABISELECT(104,68), "S4764C1.s4764c1f3");
    check_field_offset(lv, s4764c1f4, ABISELECT(120,80), "S4764C1.s4764c1f4");
    test_class_info(&lv, &cd_S4764C1);
    dp->~S4764C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4764C1(Test_S4764C1, "S4764C1", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN7S4764C1C1Ev();
extern void _ZN7S4764C1D1Ev();
Name_Map name_map_S4764C1[] = {
  NSPAIR(_ZN7S4764C1C1Ev),
  NSPAIR(_ZN7S4764C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4764C3;
extern VTBL_ENTRY _ZTI7S4764C3[];
extern  VTBL_ENTRY _ZTV7S4764C3[];
extern Class_Descriptor cd_S4764C2;
extern VTBL_ENTRY _ZTI7S4764C2[];
extern  VTBL_ENTRY _ZTV7S4764C2[];
static Base_Class bases_S4764C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4764C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4764C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4764C1[];
extern void _ZN7S4764C1D1Ev();
extern void _ZN7S4764C1D0Ev();
extern void _ZN7S4764C32v3Ev();
extern void _ZN7S4764C32v4Ev();
extern void _ZN7S4764C32v5Ev();
extern void _ZN7S4764C22v6Ev();
extern void _ZN7S4764C22v7Ev();
extern void _ZN7S4764C12v1Ev();
extern void _ZN7S4764C12v2Ev();
static  VTBL_ENTRY vtc_S4764C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4764C1[0]),
  (VTBL_ENTRY)&_ZN7S4764C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4764C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4764C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4764C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4764C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4764C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4764C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4764C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4764C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4764C1[];
extern  VTBL_ENTRY _ZTV7S4764C1[];
Class_Descriptor cd_S4764C1 = {  "S4764C1", // class name
  bases_S4764C1, 2,
  &(vtc_S4764C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI7S4764C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4764C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7352C5  {
  void *s7352c5f0;
  long double s7352c5f1;
  int s7352c5f2;
  virtual void  v5(); // _ZN7S7352C52v5Ev
  virtual void  v6(); // _ZN7S7352C52v6Ev
  ~S7352C5(); // tgen
  S7352C5(); // tgen
};
//SIG(-1 S7352C5) C1{ v1 v2 Fp FD Fi}


void  S7352C5 ::v5(){vfunc_called(this, "_ZN7S7352C52v5Ev");}
void  S7352C5 ::v6(){vfunc_called(this, "_ZN7S7352C52v6Ev");}
S7352C5 ::~S7352C5(){ note_dtor("S7352C5", this);} // tgen
S7352C5 ::S7352C5(){ note_ctor("S7352C5", this);} // tgen

static void Test_S7352C5()
{
  extern Class_Descriptor cd_S7352C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S7352C5, buf);
    S7352C5 *dp, &lv = *(dp=new (buf) S7352C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7352C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7352C5)");
    check_field_offset(lv, s7352c5f0, ABISELECT(8,4), "S7352C5.s7352c5f0");
    check_field_offset(lv, s7352c5f1, ABISELECT(16,8), "S7352C5.s7352c5f1");
    check_field_offset(lv, s7352c5f2, ABISELECT(32,20), "S7352C5.s7352c5f2");
    test_class_info(&lv, &cd_S7352C5);
    dp->~S7352C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7352C5(Test_S7352C5, "S7352C5", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S7352C5C1Ev();
extern void _ZN7S7352C5D1Ev();
Name_Map name_map_S7352C5[] = {
  NSPAIR(_ZN7S7352C5C1Ev),
  NSPAIR(_ZN7S7352C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7352C5[];
extern void _ZN7S7352C52v5Ev();
extern void _ZN7S7352C52v6Ev();
static  VTBL_ENTRY vtc_S7352C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7352C5[0]),
  (VTBL_ENTRY)&_ZN7S7352C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7352C52v6Ev,
};
extern VTBL_ENTRY _ZTI7S7352C5[];
extern  VTBL_ENTRY _ZTV7S7352C5[];
Class_Descriptor cd_S7352C5 = {  "S7352C5", // class name
  0,0,//no base classes
  &(vtc_S7352C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S7352C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7352C5),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  S7352C4  : virtual S7352C5 {
  void *s7352c4f0;
  virtual  ~S7352C4(); // _ZN7S7352C4D2Ev
  virtual void  v7(); // _ZN7S7352C42v7Ev
  virtual void  v8(); // _ZN7S7352C42v8Ev
  virtual void  v9(); // _ZN7S7352C42v9Ev
  virtual void  v10(); // _ZN7S7352C43v10Ev
  virtual void  v11(); // _ZN7S7352C43v11Ev
  virtual void  v12(); // _ZN7S7352C43v12Ev
  S7352C4(); // tgen
};
//SIG(-1 S7352C4) C1{ VBC2{ v7 v8 Fp FD Fi} vd v1 v2 v3 v4 v5 v6 Fp}


 S7352C4 ::~S7352C4(){ note_dtor("S7352C4", this);}
void  S7352C4 ::v7(){vfunc_called(this, "_ZN7S7352C42v7Ev");}
void  S7352C4 ::v8(){vfunc_called(this, "_ZN7S7352C42v8Ev");}
void  S7352C4 ::v9(){vfunc_called(this, "_ZN7S7352C42v9Ev");}
void  S7352C4 ::v10(){vfunc_called(this, "_ZN7S7352C43v10Ev");}
void  S7352C4 ::v11(){vfunc_called(this, "_ZN7S7352C43v11Ev");}
void  S7352C4 ::v12(){vfunc_called(this, "_ZN7S7352C43v12Ev");}
S7352C4 ::S7352C4(){ note_ctor("S7352C4", this);} // tgen

static void Test_S7352C4()
{
  extern Class_Descriptor cd_S7352C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,9)];
    init_test(&cd_S7352C4, buf);
    S7352C4 *dp, &lv = *(dp=new (buf) S7352C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7352C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7352C4)");
    check_base_class_offset(lv, (S7352C5*), ABISELECT(16,8), "S7352C4");
    check_field_offset(lv, s7352c4f0, ABISELECT(8,4), "S7352C4.s7352c4f0");
    test_class_info(&lv, &cd_S7352C4);
    dp->~S7352C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7352C4(Test_S7352C4, "S7352C4", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S7352C4C1Ev();
extern void _ZN7S7352C4D2Ev();
Name_Map name_map_S7352C4[] = {
  NSPAIR(_ZN7S7352C4C1Ev),
  NSPAIR(_ZN7S7352C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7352C5;
extern VTBL_ENTRY _ZTI7S7352C5[];
extern  VTBL_ENTRY _ZTV7S7352C5[];
static Base_Class bases_S7352C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7352C5,    ABISELECT(16,8), //bcp->offset
    11, //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 _ZTI7S7352C4[];
extern void _ZN7S7352C4D1Ev();
extern void _ZN7S7352C4D0Ev();
extern void _ZN7S7352C42v7Ev();
extern void _ZN7S7352C42v8Ev();
extern void _ZN7S7352C42v9Ev();
extern void _ZN7S7352C43v10Ev();
extern void _ZN7S7352C43v11Ev();
extern void _ZN7S7352C43v12Ev();
extern void _ZN7S7352C52v5Ev();
extern void _ZN7S7352C52v6Ev();
static  VTBL_ENTRY vtc_S7352C4[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7352C4[0]),
  (VTBL_ENTRY)&_ZN7S7352C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7352C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v12Ev,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7352C4[0]),
  (VTBL_ENTRY)&_ZN7S7352C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7352C52v6Ev,
};
extern VTBL_ENTRY _ZTV7S7352C4[];
static  VTT_ENTRY vtt_S7352C4[] = {
  {&(_ZTV7S7352C4[3]),  3,17},
  {&(_ZTV7S7352C4[15]),  15,17},
};
extern VTBL_ENTRY _ZTI7S7352C4[];
extern  VTBL_ENTRY _ZTV7S7352C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7352C4[];
Class_Descriptor cd_S7352C4 = {  "S7352C4", // class name
  bases_S7352C4, 1,
  &(vtc_S7352C4[0]), // expected_vtbl_contents
  &(vtt_S7352C4[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S7352C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7352C4),17, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7352C4),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  S7352C3  : S7352C4 {
  ::S7352C5 s7352c3f0;
  virtual  ~S7352C3(); // _ZN7S7352C3D2Ev
  virtual void  v13(); // _ZN7S7352C33v13Ev
  virtual void  v14(); // _ZN7S7352C33v14Ev
  S7352C3(); // tgen
};
//SIG(-1 S7352C3) C1{ BC2{ VBC3{ v3 v4 Fp FD Fi} vd v5 v6 v7 v8 v9 v10 Fp} vd v1 v2 FC3}


 S7352C3 ::~S7352C3(){ note_dtor("S7352C3", this);}
void  S7352C3 ::v13(){vfunc_called(this, "_ZN7S7352C33v13Ev");}
void  S7352C3 ::v14(){vfunc_called(this, "_ZN7S7352C33v14Ev");}
S7352C3 ::S7352C3(){ note_ctor("S7352C3", this);} // tgen

static void Test_S7352C3()
{
  extern Class_Descriptor cd_S7352C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,15)];
    init_test(&cd_S7352C3, buf);
    S7352C3 *dp, &lv = *(dp=new (buf) S7352C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S7352C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7352C3)");
    check_base_class_offset(lv, (S7352C5*)(S7352C4*), ABISELECT(64,32), "S7352C3");
    check_base_class_offset(lv, (S7352C4*), 0, "S7352C3");
    check_field_offset(lv, s7352c3f0, ABISELECT(16,8), "S7352C3.s7352c3f0");
    test_class_info(&lv, &cd_S7352C3);
    dp->~S7352C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7352C3(Test_S7352C3, "S7352C3", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN7S7352C3C1Ev();
extern void _ZN7S7352C3D2Ev();
Name_Map name_map_S7352C3[] = {
  NSPAIR(_ZN7S7352C3C1Ev),
  NSPAIR(_ZN7S7352C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7352C5;
extern VTBL_ENTRY _ZTI7S7352C5[];
extern  VTBL_ENTRY _ZTV7S7352C5[];
extern Class_Descriptor cd_S7352C4;
extern VTBL_ENTRY _ZTI7S7352C4[];
extern  VTBL_ENTRY _ZTV7S7352C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7352C4[];
static Base_Class bases_S7352C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7352C5,    ABISELECT(64,32), //bcp->offset
    13, //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_S7352C4,    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 _ZTI7S7352C3[];
extern void _ZN7S7352C3D1Ev();
extern void _ZN7S7352C3D0Ev();
extern void _ZN7S7352C42v7Ev();
extern void _ZN7S7352C42v8Ev();
extern void _ZN7S7352C42v9Ev();
extern void _ZN7S7352C43v10Ev();
extern void _ZN7S7352C43v11Ev();
extern void _ZN7S7352C43v12Ev();
extern void _ZN7S7352C33v13Ev();
extern void _ZN7S7352C33v14Ev();
extern void _ZN7S7352C52v5Ev();
extern void _ZN7S7352C52v6Ev();
static  VTBL_ENTRY vtc_S7352C3[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7352C3[0]),
  (VTBL_ENTRY)&_ZN7S7352C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7352C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7352C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7352C33v14Ev,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7352C3[0]),
  (VTBL_ENTRY)&_ZN7S7352C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7352C52v6Ev,
};
extern VTBL_ENTRY _ZTV7S7352C3[];
extern void _ZN7S7352C4D1Ev();
extern void _ZN7S7352C4D0Ev();
extern void _ZN7S7352C42v7Ev();
extern void _ZN7S7352C42v8Ev();
extern void _ZN7S7352C42v9Ev();
extern void _ZN7S7352C43v10Ev();
extern void _ZN7S7352C43v11Ev();
extern void _ZN7S7352C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C4__7S7352C3[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7352C4[0]),
  (VTBL_ENTRY)&_ZN7S7352C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7352C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v12Ev,
};
extern void _ZN7S7352C52v5Ev();
extern void _ZN7S7352C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C5__7S7352C4__7S7352C3[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7352C4[0]),
  (VTBL_ENTRY)&_ZN7S7352C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7352C52v6Ev,
};
static  VTT_ENTRY vtt_S7352C3[] = {
  {&(_ZTV7S7352C3[3]),  3,19},
  {&(_tg__ZTV7S7352C4__7S7352C3[3]),  3,11},
  {&(_tg__ZTV7S7352C5__7S7352C4__7S7352C3[4]),  4,6},
  {&(_ZTV7S7352C3[17]),  17,19},
};
extern VTBL_ENTRY _ZTI7S7352C3[];
extern  VTBL_ENTRY _ZTV7S7352C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7352C3[];
Class_Descriptor cd_S7352C3 = {  "S7352C3", // class name
  bases_S7352C3, 2,
  &(vtc_S7352C3[0]), // expected_vtbl_contents
  &(vtt_S7352C3[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI7S7352C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7352C3),19, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7352C3),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  S7352C2  : virtual S7352C3 {
  virtual  ~S7352C2(); // _ZN7S7352C2D2Ev
  virtual void  v15(); // _ZN7S7352C23v15Ev
  virtual void  v16(); // _ZN7S7352C23v16Ev
  virtual void  v17(); // _ZN7S7352C23v17Ev
  virtual void  v18(); // _ZN7S7352C23v18Ev
  S7352C2(); // tgen
};
//SIG(-1 S7352C2) C1{ VBC2{ BC3{ VBC4{ v5 v6 Fp FD Fi} vd v7 v8 v9 v10 v11 v12 Fp} vd v13 v14 FC4} vd v1 v2 v3 v4}


 S7352C2 ::~S7352C2(){ note_dtor("S7352C2", this);}
void  S7352C2 ::v15(){vfunc_called(this, "_ZN7S7352C23v15Ev");}
void  S7352C2 ::v16(){vfunc_called(this, "_ZN7S7352C23v16Ev");}
void  S7352C2 ::v17(){vfunc_called(this, "_ZN7S7352C23v17Ev");}
void  S7352C2 ::v18(){vfunc_called(this, "_ZN7S7352C23v18Ev");}
S7352C2 ::S7352C2(){ note_ctor("S7352C2", this);} // tgen

static void Test_S7352C2()
{
  extern Class_Descriptor cd_S7352C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,16)];
    init_test(&cd_S7352C2, buf);
    S7352C2 *dp, &lv = *(dp=new (buf) S7352C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,60), "sizeof(S7352C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7352C2)");
    check_base_class_offset(lv, (S7352C5*)(S7352C4*)(S7352C3*), ABISELECT(80,36), "S7352C2");
    check_base_class_offset(lv, (S7352C4*)(S7352C3*), ABISELECT(16,4), "S7352C2");
    check_base_class_offset(lv, (S7352C3*), ABISELECT(16,4), "S7352C2");
    test_class_info(&lv, &cd_S7352C2);
    dp->~S7352C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7352C2(Test_S7352C2, "S7352C2", ABISELECT(128,60));

#else // __cplusplus

extern void _ZN7S7352C2C1Ev();
extern void _ZN7S7352C2D2Ev();
Name_Map name_map_S7352C2[] = {
  NSPAIR(_ZN7S7352C2C1Ev),
  NSPAIR(_ZN7S7352C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7352C5;
extern VTBL_ENTRY _ZTI7S7352C5[];
extern  VTBL_ENTRY _ZTV7S7352C5[];
extern Class_Descriptor cd_S7352C4;
extern VTBL_ENTRY _ZTI7S7352C4[];
extern  VTBL_ENTRY _ZTV7S7352C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7352C4[];
extern Class_Descriptor cd_S7352C3;
extern VTBL_ENTRY _ZTI7S7352C3[];
extern  VTBL_ENTRY _ZTV7S7352C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7352C3[];
static Base_Class bases_S7352C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7352C5,    ABISELECT(80,36), //bcp->offset
    32, //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_S7352C4,    ABISELECT(16,4), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7352C3,    ABISELECT(16,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S7352C2[];
extern void _ZN7S7352C2D1Ev();
extern void _ZN7S7352C2D0Ev();
extern void _ZN7S7352C23v15Ev();
extern void _ZN7S7352C23v16Ev();
extern void _ZN7S7352C23v17Ev();
extern void _ZN7S7352C23v18Ev();
extern void ABISELECT(_ZTv0_n32_N7S7352C2D1Ev,_ZTv0_n16_N7S7352C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S7352C2D1Ev,_ZThn4_N7S7352C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7352C2D0Ev,_ZTv0_n16_N7S7352C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S7352C2D0Ev,_ZThn4_N7S7352C2D0Ev)() __attribute__((weak));
extern void _ZN7S7352C42v7Ev();
extern void _ZN7S7352C42v8Ev();
extern void _ZN7S7352C42v9Ev();
extern void _ZN7S7352C43v10Ev();
extern void _ZN7S7352C43v11Ev();
extern void _ZN7S7352C43v12Ev();
extern void _ZN7S7352C33v13Ev();
extern void _ZN7S7352C33v14Ev();
extern void _ZN7S7352C52v5Ev();
extern void _ZN7S7352C52v6Ev();
static  VTBL_ENTRY vtc_S7352C2[] = {
  ABISELECT(80,36),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7352C2[0]),
  (VTBL_ENTRY)&_ZN7S7352C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7352C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7352C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7352C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7352C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7352C23v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  ABISELECT(64,32),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S7352C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7352C2D1Ev,_ZTv0_n16_N7S7352C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7352C2D0Ev,_ZTv0_n16_N7S7352C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7352C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7352C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7352C33v14Ev,
  0,
  0,
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI7S7352C2[0]),
  (VTBL_ENTRY)&_ZN7S7352C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7352C52v6Ev,
};
extern VTBL_ENTRY _ZTV7S7352C2[];
extern void _ZN7S7352C3D1Ev();
extern void _ZN7S7352C3D0Ev();
extern void _ZN7S7352C42v7Ev();
extern void _ZN7S7352C42v8Ev();
extern void _ZN7S7352C42v9Ev();
extern void _ZN7S7352C43v10Ev();
extern void _ZN7S7352C43v11Ev();
extern void _ZN7S7352C43v12Ev();
extern void _ZN7S7352C33v13Ev();
extern void _ZN7S7352C33v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C3__7S7352C2[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7352C3[0]),
  (VTBL_ENTRY)&_ZN7S7352C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7352C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7352C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7352C33v14Ev,
};
extern void _ZN7S7352C4D1Ev();
extern void _ZN7S7352C4D0Ev();
extern void _ZN7S7352C42v7Ev();
extern void _ZN7S7352C42v8Ev();
extern void _ZN7S7352C42v9Ev();
extern void _ZN7S7352C43v10Ev();
extern void _ZN7S7352C43v11Ev();
extern void _ZN7S7352C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C47S7352C3__7S7352C2[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7352C4[0]),
  (VTBL_ENTRY)&_ZN7S7352C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7352C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v12Ev,
};
extern void _ZN7S7352C52v5Ev();
extern void _ZN7S7352C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C5__7S7352C47S7352C3__7S7352C2[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7352C4[0]),
  (VTBL_ENTRY)&_ZN7S7352C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7352C52v6Ev,
};
extern void _ZN7S7352C52v5Ev();
extern void _ZN7S7352C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C5__7S7352C3__7S7352C2[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7352C3[0]),
  (VTBL_ENTRY)&_ZN7S7352C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7352C52v6Ev,
};
static  VTT_ENTRY vtt_S7352C2[] = {
  {&(_ZTV7S7352C2[4]),  4,38},
  {&(_ZTV7S7352C2[22]),  22,38},
  {&(_ZTV7S7352C2[36]),  36,38},
  {&(_tg__ZTV7S7352C3__7S7352C2[3]),  3,13},
  {&(_tg__ZTV7S7352C47S7352C3__7S7352C2[3]),  3,11},
  {&(_tg__ZTV7S7352C5__7S7352C47S7352C3__7S7352C2[4]),  4,6},
  {&(_tg__ZTV7S7352C5__7S7352C3__7S7352C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7352C2[];
extern  VTBL_ENTRY _ZTV7S7352C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7352C2[];
static VTBL_ENTRY alt_thunk_names57[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7352C2D0Ev,_ZTv0_n16_N7S7352C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7352C2D0Ev,_ZThn4_N7S7352C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7352C2D1Ev,_ZTv0_n16_N7S7352C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7352C2D1Ev,_ZThn4_N7S7352C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7352C2 = {  "S7352C2", // class name
  bases_S7352C2, 3,
  &(vtc_S7352C2[0]), // expected_vtbl_contents
  &(vtt_S7352C2[0]), // expected_vtt_contents
  ABISELECT(128,60), // object size
  NSPAIRA(_ZTI7S7352C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7352C2),38, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7352C2),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names57,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7352C1  : S7352C2 {
  void *s7352c1f0;
  unsigned char s7352c1f1:1;
  virtual  ~S7352C1(); // _ZN7S7352C1D2Ev
  virtual void  v1(); // _ZN7S7352C12v1Ev
  virtual void  v2(); // _ZN7S7352C12v2Ev
  virtual void  v3(); // _ZN7S7352C12v3Ev
  virtual void  v4(); // _ZN7S7352C12v4Ev
  S7352C1(); // tgen
};
//SIG(1 S7352C1) C1{ BC2{ VBC3{ BC4{ VBC5{ v5 v6 Fp FD Fi} vd v7 v8 v9 v10 v11 v12 Fp} vd v13 v14 FC5} vd v15 v16 v17 v18} vd v1 v2 v3 v4 Fp Fc:1}


 S7352C1 ::~S7352C1(){ note_dtor("S7352C1", this);}
void  S7352C1 ::v1(){vfunc_called(this, "_ZN7S7352C12v1Ev");}
void  S7352C1 ::v2(){vfunc_called(this, "_ZN7S7352C12v2Ev");}
void  S7352C1 ::v3(){vfunc_called(this, "_ZN7S7352C12v3Ev");}
void  S7352C1 ::v4(){vfunc_called(this, "_ZN7S7352C12v4Ev");}
S7352C1 ::S7352C1(){ note_ctor("S7352C1", this);} // tgen

static void Test_S7352C1()
{
  extern Class_Descriptor cd_S7352C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,18)];
    init_test(&cd_S7352C1, buf);
    S7352C1 *dp, &lv = *(dp=new (buf) S7352C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,68), "sizeof(S7352C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7352C1)");
    check_base_class_offset(lv, (S7352C5*)(S7352C4*)(S7352C3*), ABISELECT(96,44), "S7352C1");
    check_base_class_offset(lv, (S7352C4*)(S7352C3*), ABISELECT(32,12), "S7352C1");
    check_base_class_offset(lv, (S7352C3*)(S7352C2*), ABISELECT(32,12), "S7352C1");
    check_base_class_offset(lv, (S7352C2*), 0, "S7352C1");
    check_field_offset(lv, s7352c1f0, ABISELECT(8,4), "S7352C1.s7352c1f0");
    set_bf_and_test(lv, s7352c1f1, ABISELECT(16,8), 0, 1, 1, "S7352C1");
    test_class_info(&lv, &cd_S7352C1);
    dp->~S7352C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7352C1(Test_S7352C1, "S7352C1", ABISELECT(144,68));

#else // __cplusplus

extern void _ZN7S7352C1C1Ev();
extern void _ZN7S7352C1D2Ev();
Name_Map name_map_S7352C1[] = {
  NSPAIR(_ZN7S7352C1C1Ev),
  NSPAIR(_ZN7S7352C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7352C5;
extern VTBL_ENTRY _ZTI7S7352C5[];
extern  VTBL_ENTRY _ZTV7S7352C5[];
extern Class_Descriptor cd_S7352C4;
extern VTBL_ENTRY _ZTI7S7352C4[];
extern  VTBL_ENTRY _ZTV7S7352C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7352C4[];
extern Class_Descriptor cd_S7352C3;
extern VTBL_ENTRY _ZTI7S7352C3[];
extern  VTBL_ENTRY _ZTV7S7352C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7352C3[];
extern Class_Descriptor cd_S7352C2;
extern VTBL_ENTRY _ZTI7S7352C2[];
extern  VTBL_ENTRY _ZTV7S7352C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7352C2[];
static Base_Class bases_S7352C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7352C5,    ABISELECT(96,44), //bcp->offset
    36, //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_S7352C4,    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
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7352C3,    ABISELECT(32,12), //bcp->offset
    14, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7352C2,    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 _ZTI7S7352C1[];
extern void _ZN7S7352C1D1Ev();
extern void _ZN7S7352C1D0Ev();
extern void _ZN7S7352C23v15Ev();
extern void _ZN7S7352C23v16Ev();
extern void _ZN7S7352C23v17Ev();
extern void _ZN7S7352C23v18Ev();
extern void _ZN7S7352C12v1Ev();
extern void _ZN7S7352C12v2Ev();
extern void _ZN7S7352C12v3Ev();
extern void _ZN7S7352C12v4Ev();
extern void ABISELECT(_ZTv0_n32_N7S7352C1D1Ev,_ZTv0_n16_N7S7352C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7352C1D1Ev,_ZThn12_N7S7352C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7352C1D0Ev,_ZTv0_n16_N7S7352C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S7352C1D0Ev,_ZThn12_N7S7352C1D0Ev)() __attribute__((weak));
extern void _ZN7S7352C42v7Ev();
extern void _ZN7S7352C42v8Ev();
extern void _ZN7S7352C42v9Ev();
extern void _ZN7S7352C43v10Ev();
extern void _ZN7S7352C43v11Ev();
extern void _ZN7S7352C43v12Ev();
extern void _ZN7S7352C33v13Ev();
extern void _ZN7S7352C33v14Ev();
extern void _ZN7S7352C52v5Ev();
extern void _ZN7S7352C52v6Ev();
static  VTBL_ENTRY vtc_S7352C1[] = {
  ABISELECT(96,44),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7352C1[0]),
  (VTBL_ENTRY)&_ZN7S7352C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7352C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7352C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7352C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7352C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7352C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7352C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7352C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7352C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7352C12v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  ABISELECT(64,32),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S7352C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7352C1D1Ev,_ZTv0_n16_N7S7352C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7352C1D0Ev,_ZTv0_n16_N7S7352C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7352C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7352C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7352C33v14Ev,
  0,
  0,
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI7S7352C1[0]),
  (VTBL_ENTRY)&_ZN7S7352C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7352C52v6Ev,
};
extern VTBL_ENTRY _ZTV7S7352C1[];
extern void _ZN7S7352C2D1Ev();
extern void _ZN7S7352C2D0Ev();
extern void _ZN7S7352C23v15Ev();
extern void _ZN7S7352C23v16Ev();
extern void _ZN7S7352C23v17Ev();
extern void _ZN7S7352C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C2__7S7352C1[] = {
  ABISELECT(96,44),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7352C2[0]),
  (VTBL_ENTRY)&_ZN7S7352C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7352C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7352C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7352C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7352C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7352C23v18Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7352C2D1Ev,_ZTv0_n16_N7S7352C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S7352C2D1Ev,_ZThn12_N7S7352C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7352C2D0Ev,_ZTv0_n16_N7S7352C2D0Ev)();
extern void ABISELECT(_ZThn32_N7S7352C2D0Ev,_ZThn12_N7S7352C2D0Ev)() __attribute__((weak));
extern void _ZN7S7352C42v7Ev();
extern void _ZN7S7352C42v8Ev();
extern void _ZN7S7352C42v9Ev();
extern void _ZN7S7352C43v10Ev();
extern void _ZN7S7352C43v11Ev();
extern void _ZN7S7352C43v12Ev();
extern void _ZN7S7352C33v13Ev();
extern void _ZN7S7352C33v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C3__7S7352C2__7S7352C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  ABISELECT(64,32),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S7352C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7352C2D1Ev,_ZTv0_n16_N7S7352C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7352C2D0Ev,_ZTv0_n16_N7S7352C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7352C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7352C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7352C33v14Ev,
};
extern void _ZN7S7352C52v5Ev();
extern void _ZN7S7352C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C5__7S7352C2__7S7352C1[] = {
  0,
  0,
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI7S7352C2[0]),
  (VTBL_ENTRY)&_ZN7S7352C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7352C52v6Ev,
};
extern void _ZN7S7352C3D1Ev();
extern void _ZN7S7352C3D0Ev();
extern void _ZN7S7352C42v7Ev();
extern void _ZN7S7352C42v8Ev();
extern void _ZN7S7352C42v9Ev();
extern void _ZN7S7352C43v10Ev();
extern void _ZN7S7352C43v11Ev();
extern void _ZN7S7352C43v12Ev();
extern void _ZN7S7352C33v13Ev();
extern void _ZN7S7352C33v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C3__7S7352C1[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7352C3[0]),
  (VTBL_ENTRY)&_ZN7S7352C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7352C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7352C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7352C33v14Ev,
};
extern void _ZN7S7352C4D1Ev();
extern void _ZN7S7352C4D0Ev();
extern void _ZN7S7352C42v7Ev();
extern void _ZN7S7352C42v8Ev();
extern void _ZN7S7352C42v9Ev();
extern void _ZN7S7352C43v10Ev();
extern void _ZN7S7352C43v11Ev();
extern void _ZN7S7352C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C47S7352C3__7S7352C1[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7352C4[0]),
  (VTBL_ENTRY)&_ZN7S7352C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7352C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v12Ev,
};
extern void _ZN7S7352C52v5Ev();
extern void _ZN7S7352C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C5__7S7352C47S7352C3__7S7352C1[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7352C4[0]),
  (VTBL_ENTRY)&_ZN7S7352C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7352C52v6Ev,
};
extern void _ZN7S7352C52v5Ev();
extern void _ZN7S7352C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C5__7S7352C3__7S7352C1[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7352C3[0]),
  (VTBL_ENTRY)&_ZN7S7352C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7352C52v6Ev,
};
static  VTT_ENTRY vtt_S7352C1[] = {
  {&(_ZTV7S7352C1[4]),  4,42},
  {&(_tg__ZTV7S7352C2__7S7352C1[4]),  4,10},
  {&(_tg__ZTV7S7352C3__7S7352C2__7S7352C1[12]),  12,22},
  {&(_tg__ZTV7S7352C5__7S7352C2__7S7352C1[4]),  4,6},
  {&(_ZTV7S7352C1[26]),  26,42},
  {&(_ZTV7S7352C1[40]),  40,42},
  {&(_tg__ZTV7S7352C3__7S7352C1[3]),  3,13},
  {&(_tg__ZTV7S7352C47S7352C3__7S7352C1[3]),  3,11},
  {&(_tg__ZTV7S7352C5__7S7352C47S7352C3__7S7352C1[4]),  4,6},
  {&(_tg__ZTV7S7352C5__7S7352C3__7S7352C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7352C1[];
extern  VTBL_ENTRY _ZTV7S7352C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7352C1[];
static VTBL_ENTRY alt_thunk_names58[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7352C2D0Ev,_ZTv0_n16_N7S7352C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7352C2D0Ev,_ZThn12_N7S7352C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7352C2D1Ev,_ZTv0_n16_N7S7352C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7352C2D1Ev,_ZThn12_N7S7352C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7352C1D0Ev,_ZTv0_n16_N7S7352C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7352C1D0Ev,_ZThn12_N7S7352C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7352C1D1Ev,_ZTv0_n16_N7S7352C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7352C1D1Ev,_ZThn12_N7S7352C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7352C1 = {  "S7352C1", // class name
  bases_S7352C1, 4,
  &(vtc_S7352C1[0]), // expected_vtbl_contents
  &(vtt_S7352C1[0]), // expected_vtt_contents
  ABISELECT(144,68), // object size
  NSPAIRA(_ZTI7S7352C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7352C1),42, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7352C1),10, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names58,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2240C4  {
  ::S4473C12_nt s2240c4f0;
  int s2240c4f1[2];
  char s2240c4f2;
  virtual  ~S2240C4(); // _ZN7S2240C4D1Ev
  virtual void  v4(); // _ZN7S2240C42v4Ev
  virtual void  v5(); // _ZN7S2240C42v5Ev
  virtual void  v6(); // _ZN7S2240C42v6Ev
  S2240C4(); // tgen
};
//SIG(-1 S2240C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2240C4 ::~S2240C4(){ note_dtor("S2240C4", this);}
void  S2240C4 ::v4(){vfunc_called(this, "_ZN7S2240C42v4Ev");}
void  S2240C4 ::v5(){vfunc_called(this, "_ZN7S2240C42v5Ev");}
void  S2240C4 ::v6(){vfunc_called(this, "_ZN7S2240C42v6Ev");}
S2240C4 ::S2240C4(){ note_ctor("S2240C4", this);} // tgen

static void Test_S2240C4()
{
  extern Class_Descriptor cd_S2240C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2240C4, buf);
    S2240C4 *dp, &lv = *(dp=new (buf) S2240C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2240C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2240C4)");
    check_field_offset(lv, s2240c4f0, ABISELECT(8,4), "S2240C4.s2240c4f0");
    check_field_offset(lv, s2240c4f1, ABISELECT(24,16), "S2240C4.s2240c4f1");
    check_field_offset(lv, s2240c4f2, ABISELECT(32,24), "S2240C4.s2240c4f2");
    test_class_info(&lv, &cd_S2240C4);
    dp->~S2240C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2240C4(Test_S2240C4, "S2240C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2240C4C1Ev();
extern void _ZN7S2240C4D1Ev();
Name_Map name_map_S2240C4[] = {
  NSPAIR(_ZN7S2240C4C1Ev),
  NSPAIR(_ZN7S2240C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2240C4[];
extern void _ZN7S2240C4D1Ev();
extern void _ZN7S2240C4D0Ev();
extern void _ZN7S2240C42v4Ev();
extern void _ZN7S2240C42v5Ev();
extern void _ZN7S2240C42v6Ev();
static  VTBL_ENTRY vtc_S2240C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2240C4[0]),
  (VTBL_ENTRY)&_ZN7S2240C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2240C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2240C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2240C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2240C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S2240C4[];
extern  VTBL_ENTRY _ZTV7S2240C4[];
Class_Descriptor cd_S2240C4 = {  "S2240C4", // class name
  0,0,//no base classes
  &(vtc_S2240C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2240C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2240C4),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  S2240C3  : S2240C4 {
  void *s2240c3f0;
  virtual void  v7(); // _ZN7S2240C32v7Ev
  virtual void  v8(); // _ZN7S2240C32v8Ev
  ~S2240C3(); // tgen
  S2240C3(); // tgen
};
//SIG(-1 S2240C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2240C3 ::v7(){vfunc_called(this, "_ZN7S2240C32v7Ev");}
void  S2240C3 ::v8(){vfunc_called(this, "_ZN7S2240C32v8Ev");}
S2240C3 ::~S2240C3(){ note_dtor("S2240C3", this);} // tgen
S2240C3 ::S2240C3(){ note_ctor("S2240C3", this);} // tgen

static void Test_S2240C3()
{
  extern Class_Descriptor cd_S2240C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2240C3, buf);
    S2240C3 *dp, &lv = *(dp=new (buf) S2240C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2240C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2240C3)");
    check_base_class_offset(lv, (S2240C4*), 0, "S2240C3");
    check_field_offset(lv, s2240c3f0, ABISELECT(40,28), "S2240C3.s2240c3f0");
    test_class_info(&lv, &cd_S2240C3);
    dp->~S2240C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2240C3(Test_S2240C3, "S2240C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2240C3C1Ev();
extern void _ZN7S2240C3D1Ev();
Name_Map name_map_S2240C3[] = {
  NSPAIR(_ZN7S2240C3C1Ev),
  NSPAIR(_ZN7S2240C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2240C4;
extern VTBL_ENTRY _ZTI7S2240C4[];
extern  VTBL_ENTRY _ZTV7S2240C4[];
static Base_Class bases_S2240C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2240C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2240C3[];
extern void _ZN7S2240C3D1Ev();
extern void _ZN7S2240C3D0Ev();
extern void _ZN7S2240C42v4Ev();
extern void _ZN7S2240C42v5Ev();
extern void _ZN7S2240C42v6Ev();
extern void _ZN7S2240C32v7Ev();
extern void _ZN7S2240C32v8Ev();
static  VTBL_ENTRY vtc_S2240C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2240C3[0]),
  (VTBL_ENTRY)&_ZN7S2240C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2240C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2240C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2240C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2240C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2240C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2240C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S2240C3[];
extern  VTBL_ENTRY _ZTV7S2240C3[];
Class_Descriptor cd_S2240C3 = {  "S2240C3", // class name
  bases_S2240C3, 1,
  &(vtc_S2240C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2240C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2240C3),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  S2240C2  : S2240C3 {
  void *s2240c2f0;
  char s2240c2f1;
  ::S2366C14_nt s2240c2f2;
  virtual  ~S2240C2(); // _ZN7S2240C2D1Ev
  virtual void  v9(); // _ZN7S2240C22v9Ev
  S2240C2(); // tgen
};
//SIG(-1 S2240C2) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1 Fp Fc FC6{ m Fi[2]}}


 S2240C2 ::~S2240C2(){ note_dtor("S2240C2", this);}
void  S2240C2 ::v9(){vfunc_called(this, "_ZN7S2240C22v9Ev");}
S2240C2 ::S2240C2(){ note_ctor("S2240C2", this);} // tgen

static void Test_S2240C2()
{
  extern Class_Descriptor cd_S2240C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2240C2, buf);
    S2240C2 *dp, &lv = *(dp=new (buf) S2240C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2240C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2240C2)");
    check_base_class_offset(lv, (S2240C4*)(S2240C3*), 0, "S2240C2");
    check_base_class_offset(lv, (S2240C3*), 0, "S2240C2");
    check_field_offset(lv, s2240c2f0, ABISELECT(48,32), "S2240C2.s2240c2f0");
    check_field_offset(lv, s2240c2f1, ABISELECT(56,36), "S2240C2.s2240c2f1");
    check_field_offset(lv, s2240c2f2, ABISELECT(60,40), "S2240C2.s2240c2f2");
    test_class_info(&lv, &cd_S2240C2);
    dp->~S2240C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2240C2(Test_S2240C2, "S2240C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2240C2C1Ev();
extern void _ZN7S2240C2D1Ev();
Name_Map name_map_S2240C2[] = {
  NSPAIR(_ZN7S2240C2C1Ev),
  NSPAIR(_ZN7S2240C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2240C4;
extern VTBL_ENTRY _ZTI7S2240C4[];
extern  VTBL_ENTRY _ZTV7S2240C4[];
extern Class_Descriptor cd_S2240C3;
extern VTBL_ENTRY _ZTI7S2240C3[];
extern  VTBL_ENTRY _ZTV7S2240C3[];
static Base_Class bases_S2240C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2240C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2240C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2240C2[];
extern void _ZN7S2240C2D1Ev();
extern void _ZN7S2240C2D0Ev();
extern void _ZN7S2240C42v4Ev();
extern void _ZN7S2240C42v5Ev();
extern void _ZN7S2240C42v6Ev();
extern void _ZN7S2240C32v7Ev();
extern void _ZN7S2240C32v8Ev();
extern void _ZN7S2240C22v9Ev();
static  VTBL_ENTRY vtc_S2240C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2240C2[0]),
  (VTBL_ENTRY)&_ZN7S2240C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2240C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2240C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2240C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2240C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2240C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2240C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2240C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S2240C2[];
extern  VTBL_ENTRY _ZTV7S2240C2[];
Class_Descriptor cd_S2240C2 = {  "S2240C2", // class name
  bases_S2240C2, 2,
  &(vtc_S2240C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2240C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2240C2),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  S2240C1  : S2240C2 {
  __tsi64 s2240c1f0;
  char s2240c1f1[65536];
  void *s2240c1f2[2];
  virtual  ~S2240C1(); // _ZN7S2240C1D1Ev
  virtual void  v1(); // _ZN7S2240C12v1Ev
  virtual void  v2(); // _ZN7S2240C12v2Ev
  virtual void  v3(); // _ZN7S2240C12v3Ev
  S2240C1(); // tgen
};
//SIG(1 S2240C1) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v7 v8 Fp} vd v9 Fp Fc FC7{ m Fi[2]}} vd v1 v2 v3 FL Fc[65536] Fp[2]}


 S2240C1 ::~S2240C1(){ note_dtor("S2240C1", this);}
void  S2240C1 ::v1(){vfunc_called(this, "_ZN7S2240C12v1Ev");}
void  S2240C1 ::v2(){vfunc_called(this, "_ZN7S2240C12v2Ev");}
void  S2240C1 ::v3(){vfunc_called(this, "_ZN7S2240C12v3Ev");}
S2240C1 ::S2240C1(){ note_ctor("S2240C1", this);} // tgen

static void Test_S2240C1()
{
  extern Class_Descriptor cd_S2240C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8205,16401)];
    init_test(&cd_S2240C1, buf);
    S2240C1 *dp, &lv = *(dp=new (buf) S2240C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(65632,65600), "sizeof(S2240C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2240C1)");
    check_base_class_offset(lv, (S2240C4*)(S2240C3*)(S2240C2*), 0, "S2240C1");
    check_base_class_offset(lv, (S2240C3*)(S2240C2*), 0, "S2240C1");
    check_base_class_offset(lv, (S2240C2*), 0, "S2240C1");
    check_field_offset(lv, s2240c1f0, ABISELECT(72,48), "S2240C1.s2240c1f0");
    check_field_offset(lv, s2240c1f1, ABISELECT(80,56), "S2240C1.s2240c1f1");
    check_field_offset(lv, s2240c1f2, ABISELECT(65616,65592), "S2240C1.s2240c1f2");
    test_class_info(&lv, &cd_S2240C1);
    dp->~S2240C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2240C1(Test_S2240C1, "S2240C1", ABISELECT(65632,65600));

#else // __cplusplus

extern void _ZN7S2240C1C1Ev();
extern void _ZN7S2240C1D1Ev();
Name_Map name_map_S2240C1[] = {
  NSPAIR(_ZN7S2240C1C1Ev),
  NSPAIR(_ZN7S2240C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2240C4;
extern VTBL_ENTRY _ZTI7S2240C4[];
extern  VTBL_ENTRY _ZTV7S2240C4[];
extern Class_Descriptor cd_S2240C3;
extern VTBL_ENTRY _ZTI7S2240C3[];
extern  VTBL_ENTRY _ZTV7S2240C3[];
extern Class_Descriptor cd_S2240C2;
extern VTBL_ENTRY _ZTI7S2240C2[];
extern  VTBL_ENTRY _ZTV7S2240C2[];
static Base_Class bases_S2240C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2240C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2240C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2240C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2240C1[];
extern void _ZN7S2240C1D1Ev();
extern void _ZN7S2240C1D0Ev();
extern void _ZN7S2240C42v4Ev();
extern void _ZN7S2240C42v5Ev();
extern void _ZN7S2240C42v6Ev();
extern void _ZN7S2240C32v7Ev();
extern void _ZN7S2240C32v8Ev();
extern void _ZN7S2240C22v9Ev();
extern void _ZN7S2240C12v1Ev();
extern void _ZN7S2240C12v2Ev();
extern void _ZN7S2240C12v3Ev();
static  VTBL_ENTRY vtc_S2240C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2240C1[0]),
  (VTBL_ENTRY)&_ZN7S2240C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2240C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2240C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2240C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2240C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2240C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2240C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2240C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2240C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2240C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2240C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S2240C1[];
extern  VTBL_ENTRY _ZTV7S2240C1[];
Class_Descriptor cd_S2240C1 = {  "S2240C1", // class name
  bases_S2240C1, 3,
  &(vtc_S2240C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(65632,65600), // object size
  NSPAIRA(_ZTI7S2240C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2240C1),13, //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  S2239C4  {
  ::S4473C12_nt s2239c4f0;
  int s2239c4f1[2];
  char s2239c4f2;
  virtual  ~S2239C4(); // _ZN7S2239C4D1Ev
  virtual void  v4(); // _ZN7S2239C42v4Ev
  virtual void  v5(); // _ZN7S2239C42v5Ev
  virtual void  v6(); // _ZN7S2239C42v6Ev
  S2239C4(); // tgen
};
//SIG(-1 S2239C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2239C4 ::~S2239C4(){ note_dtor("S2239C4", this);}
void  S2239C4 ::v4(){vfunc_called(this, "_ZN7S2239C42v4Ev");}
void  S2239C4 ::v5(){vfunc_called(this, "_ZN7S2239C42v5Ev");}
void  S2239C4 ::v6(){vfunc_called(this, "_ZN7S2239C42v6Ev");}
S2239C4 ::S2239C4(){ note_ctor("S2239C4", this);} // tgen

static void Test_S2239C4()
{
  extern Class_Descriptor cd_S2239C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2239C4, buf);
    S2239C4 *dp, &lv = *(dp=new (buf) S2239C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2239C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2239C4)");
    check_field_offset(lv, s2239c4f0, ABISELECT(8,4), "S2239C4.s2239c4f0");
    check_field_offset(lv, s2239c4f1, ABISELECT(24,16), "S2239C4.s2239c4f1");
    check_field_offset(lv, s2239c4f2, ABISELECT(32,24), "S2239C4.s2239c4f2");
    test_class_info(&lv, &cd_S2239C4);
    dp->~S2239C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2239C4(Test_S2239C4, "S2239C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2239C4C1Ev();
extern void _ZN7S2239C4D1Ev();
Name_Map name_map_S2239C4[] = {
  NSPAIR(_ZN7S2239C4C1Ev),
  NSPAIR(_ZN7S2239C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2239C4[];
extern void _ZN7S2239C4D1Ev();
extern void _ZN7S2239C4D0Ev();
extern void _ZN7S2239C42v4Ev();
extern void _ZN7S2239C42v5Ev();
extern void _ZN7S2239C42v6Ev();
static  VTBL_ENTRY vtc_S2239C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2239C4[0]),
  (VTBL_ENTRY)&_ZN7S2239C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2239C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2239C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2239C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2239C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S2239C4[];
extern  VTBL_ENTRY _ZTV7S2239C4[];
Class_Descriptor cd_S2239C4 = {  "S2239C4", // class name
  0,0,//no base classes
  &(vtc_S2239C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2239C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2239C4),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  S2239C3  : S2239C4 {
  void *s2239c3f0;
  virtual void  v7(); // _ZN7S2239C32v7Ev
  virtual void  v8(); // _ZN7S2239C32v8Ev
  ~S2239C3(); // tgen
  S2239C3(); // tgen
};
//SIG(-1 S2239C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2239C3 ::v7(){vfunc_called(this, "_ZN7S2239C32v7Ev");}
void  S2239C3 ::v8(){vfunc_called(this, "_ZN7S2239C32v8Ev");}
S2239C3 ::~S2239C3(){ note_dtor("S2239C3", this);} // tgen
S2239C3 ::S2239C3(){ note_ctor("S2239C3", this);} // tgen

static void Test_S2239C3()
{
  extern Class_Descriptor cd_S2239C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2239C3, buf);
    S2239C3 *dp, &lv = *(dp=new (buf) S2239C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2239C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2239C3)");
    check_base_class_offset(lv, (S2239C4*), 0, "S2239C3");
    check_field_offset(lv, s2239c3f0, ABISELECT(40,28), "S2239C3.s2239c3f0");
    test_class_info(&lv, &cd_S2239C3);
    dp->~S2239C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2239C3(Test_S2239C3, "S2239C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2239C3C1Ev();
extern void _ZN7S2239C3D1Ev();
Name_Map name_map_S2239C3[] = {
  NSPAIR(_ZN7S2239C3C1Ev),
  NSPAIR(_ZN7S2239C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2239C4;
extern VTBL_ENTRY _ZTI7S2239C4[];
extern  VTBL_ENTRY _ZTV7S2239C4[];
static Base_Class bases_S2239C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2239C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2239C3[];
extern void _ZN7S2239C3D1Ev();
extern void _ZN7S2239C3D0Ev();
extern void _ZN7S2239C42v4Ev();
extern void _ZN7S2239C42v5Ev();
extern void _ZN7S2239C42v6Ev();
extern void _ZN7S2239C32v7Ev();
extern void _ZN7S2239C32v8Ev();
static  VTBL_ENTRY vtc_S2239C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2239C3[0]),
  (VTBL_ENTRY)&_ZN7S2239C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2239C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2239C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2239C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2239C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2239C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2239C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S2239C3[];
extern  VTBL_ENTRY _ZTV7S2239C3[];
Class_Descriptor cd_S2239C3 = {  "S2239C3", // class name
  bases_S2239C3, 1,
  &(vtc_S2239C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2239C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2239C3),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  S2239C2  : S2239C3 {
  void *s2239c2f0;
  char s2239c2f1;
  ::S2366C14_nt s2239c2f2;
  virtual  ~S2239C2(); // _ZN7S2239C2D1Ev
  virtual void  v9(); // _ZN7S2239C22v9Ev
  S2239C2(); // tgen
};
//SIG(-1 S2239C2) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1 Fp Fc FC6{ m Fi[2]}}


 S2239C2 ::~S2239C2(){ note_dtor("S2239C2", this);}
void  S2239C2 ::v9(){vfunc_called(this, "_ZN7S2239C22v9Ev");}
S2239C2 ::S2239C2(){ note_ctor("S2239C2", this);} // tgen

static void Test_S2239C2()
{
  extern Class_Descriptor cd_S2239C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2239C2, buf);
    S2239C2 *dp, &lv = *(dp=new (buf) S2239C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2239C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2239C2)");
    check_base_class_offset(lv, (S2239C4*)(S2239C3*), 0, "S2239C2");
    check_base_class_offset(lv, (S2239C3*), 0, "S2239C2");
    check_field_offset(lv, s2239c2f0, ABISELECT(48,32), "S2239C2.s2239c2f0");
    check_field_offset(lv, s2239c2f1, ABISELECT(56,36), "S2239C2.s2239c2f1");
    check_field_offset(lv, s2239c2f2, ABISELECT(60,40), "S2239C2.s2239c2f2");
    test_class_info(&lv, &cd_S2239C2);
    dp->~S2239C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2239C2(Test_S2239C2, "S2239C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2239C2C1Ev();
extern void _ZN7S2239C2D1Ev();
Name_Map name_map_S2239C2[] = {
  NSPAIR(_ZN7S2239C2C1Ev),
  NSPAIR(_ZN7S2239C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2239C4;
extern VTBL_ENTRY _ZTI7S2239C4[];
extern  VTBL_ENTRY _ZTV7S2239C4[];
extern Class_Descriptor cd_S2239C3;
extern VTBL_ENTRY _ZTI7S2239C3[];
extern  VTBL_ENTRY _ZTV7S2239C3[];
static Base_Class bases_S2239C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2239C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2239C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2239C2[];
extern void _ZN7S2239C2D1Ev();
extern void _ZN7S2239C2D0Ev();
extern void _ZN7S2239C42v4Ev();
extern void _ZN7S2239C42v5Ev();
extern void _ZN7S2239C42v6Ev();
extern void _ZN7S2239C32v7Ev();
extern void _ZN7S2239C32v8Ev();
extern void _ZN7S2239C22v9Ev();
static  VTBL_ENTRY vtc_S2239C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2239C2[0]),
  (VTBL_ENTRY)&_ZN7S2239C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2239C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2239C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2239C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2239C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2239C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2239C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2239C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S2239C2[];
extern  VTBL_ENTRY _ZTV7S2239C2[];
Class_Descriptor cd_S2239C2 = {  "S2239C2", // class name
  bases_S2239C2, 2,
  &(vtc_S2239C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2239C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2239C2),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  S2239C1  : S2239C2 {
  long s2239c1f0;
  char s2239c1f1[65536];
  void *s2239c1f2[2];
  virtual  ~S2239C1(); // _ZN7S2239C1D1Ev
  virtual void  v1(); // _ZN7S2239C12v1Ev
  virtual void  v2(); // _ZN7S2239C12v2Ev
  virtual void  v3(); // _ZN7S2239C12v3Ev
  S2239C1(); // tgen
};
//SIG(1 S2239C1) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v7 v8 Fp} vd v9 Fp Fc FC7{ m Fi[2]}} vd v1 v2 v3 Fl Fc[65536] Fp[2]}


 S2239C1 ::~S2239C1(){ note_dtor("S2239C1", this);}
void  S2239C1 ::v1(){vfunc_called(this, "_ZN7S2239C12v1Ev");}
void  S2239C1 ::v2(){vfunc_called(this, "_ZN7S2239C12v2Ev");}
void  S2239C1 ::v3(){vfunc_called(this, "_ZN7S2239C12v3Ev");}
S2239C1 ::S2239C1(){ note_ctor("S2239C1", this);} // tgen

static void Test_S2239C1()
{
  extern Class_Descriptor cd_S2239C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8205,16400)];
    init_test(&cd_S2239C1, buf);
    S2239C1 *dp, &lv = *(dp=new (buf) S2239C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(65632,65596), "sizeof(S2239C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2239C1)");
    check_base_class_offset(lv, (S2239C4*)(S2239C3*)(S2239C2*), 0, "S2239C1");
    check_base_class_offset(lv, (S2239C3*)(S2239C2*), 0, "S2239C1");
    check_base_class_offset(lv, (S2239C2*), 0, "S2239C1");
    check_field_offset(lv, s2239c1f0, ABISELECT(72,48), "S2239C1.s2239c1f0");
    check_field_offset(lv, s2239c1f1, ABISELECT(80,52), "S2239C1.s2239c1f1");
    check_field_offset(lv, s2239c1f2, ABISELECT(65616,65588), "S2239C1.s2239c1f2");
    test_class_info(&lv, &cd_S2239C1);
    dp->~S2239C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2239C1(Test_S2239C1, "S2239C1", ABISELECT(65632,65596));

#else // __cplusplus

extern void _ZN7S2239C1C1Ev();
extern void _ZN7S2239C1D1Ev();
Name_Map name_map_S2239C1[] = {
  NSPAIR(_ZN7S2239C1C1Ev),
  NSPAIR(_ZN7S2239C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2239C4;
extern VTBL_ENTRY _ZTI7S2239C4[];
extern  VTBL_ENTRY _ZTV7S2239C4[];
extern Class_Descriptor cd_S2239C3;
extern VTBL_ENTRY _ZTI7S2239C3[];
extern  VTBL_ENTRY _ZTV7S2239C3[];
extern Class_Descriptor cd_S2239C2;
extern VTBL_ENTRY _ZTI7S2239C2[];
extern  VTBL_ENTRY _ZTV7S2239C2[];
static Base_Class bases_S2239C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2239C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2239C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2239C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2239C1[];
extern void _ZN7S2239C1D1Ev();
extern void _ZN7S2239C1D0Ev();
extern void _ZN7S2239C42v4Ev();
extern void _ZN7S2239C42v5Ev();
extern void _ZN7S2239C42v6Ev();
extern void _ZN7S2239C32v7Ev();
extern void _ZN7S2239C32v8Ev();
extern void _ZN7S2239C22v9Ev();
extern void _ZN7S2239C12v1Ev();
extern void _ZN7S2239C12v2Ev();
extern void _ZN7S2239C12v3Ev();
static  VTBL_ENTRY vtc_S2239C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2239C1[0]),
  (VTBL_ENTRY)&_ZN7S2239C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2239C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2239C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2239C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2239C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2239C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2239C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2239C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2239C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2239C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2239C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S2239C1[];
extern  VTBL_ENTRY _ZTV7S2239C1[];
Class_Descriptor cd_S2239C1 = {  "S2239C1", // class name
  bases_S2239C1, 3,
  &(vtc_S2239C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(65632,65596), // object size
  NSPAIRA(_ZTI7S2239C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2239C1),13, //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  S866C5  {
  ::S4473C12_nt s866c5f0;
  int s866c5f1[2];
  char s866c5f2;
  virtual  ~S866C5(); // _ZN6S866C5D1Ev
  virtual void  v2(); // _ZN6S866C52v2Ev
  virtual void  v3(); // _ZN6S866C52v3Ev
  virtual void  v4(); // _ZN6S866C52v4Ev
  S866C5(); // tgen
};
//SIG(-1 S866C5) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S866C5 ::~S866C5(){ note_dtor("S866C5", this);}
void  S866C5 ::v2(){vfunc_called(this, "_ZN6S866C52v2Ev");}
void  S866C5 ::v3(){vfunc_called(this, "_ZN6S866C52v3Ev");}
void  S866C5 ::v4(){vfunc_called(this, "_ZN6S866C52v4Ev");}
S866C5 ::S866C5(){ note_ctor("S866C5", this);} // tgen

static void Test_S866C5()
{
  extern Class_Descriptor cd_S866C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S866C5, buf);
    S866C5 *dp, &lv = *(dp=new (buf) S866C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S866C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S866C5)");
    check_field_offset(lv, s866c5f0, ABISELECT(8,4), "S866C5.s866c5f0");
    check_field_offset(lv, s866c5f1, ABISELECT(24,16), "S866C5.s866c5f1");
    check_field_offset(lv, s866c5f2, ABISELECT(32,24), "S866C5.s866c5f2");
    test_class_info(&lv, &cd_S866C5);
    dp->~S866C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS866C5(Test_S866C5, "S866C5", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN6S866C5C1Ev();
extern void _ZN6S866C5D1Ev();
Name_Map name_map_S866C5[] = {
  NSPAIR(_ZN6S866C5C1Ev),
  NSPAIR(_ZN6S866C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S866C5[];
extern void _ZN6S866C5D1Ev();
extern void _ZN6S866C5D0Ev();
extern void _ZN6S866C52v2Ev();
extern void _ZN6S866C52v3Ev();
extern void _ZN6S866C52v4Ev();
static  VTBL_ENTRY vtc_S866C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S866C5[0]),
  (VTBL_ENTRY)&_ZN6S866C5D1Ev,
  (VTBL_ENTRY)&_ZN6S866C5D0Ev,
  (VTBL_ENTRY)&_ZN6S866C52v2Ev,
  (VTBL_ENTRY)&_ZN6S866C52v3Ev,
  (VTBL_ENTRY)&_ZN6S866C52v4Ev,
};
extern VTBL_ENTRY _ZTI6S866C5[];
extern  VTBL_ENTRY _ZTV6S866C5[];
Class_Descriptor cd_S866C5 = {  "S866C5", // class name
  0,0,//no base classes
  &(vtc_S866C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI6S866C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S866C5),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  S866C4  : S866C5 {
  void *s866c4f0;
  virtual void  v5(); // _ZN6S866C42v5Ev
  virtual void  v6(); // _ZN6S866C42v6Ev
  ~S866C4(); // tgen
  S866C4(); // tgen
};
//SIG(-1 S866C4) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S866C4 ::v5(){vfunc_called(this, "_ZN6S866C42v5Ev");}
void  S866C4 ::v6(){vfunc_called(this, "_ZN6S866C42v6Ev");}
S866C4 ::~S866C4(){ note_dtor("S866C4", this);} // tgen
S866C4 ::S866C4(){ note_ctor("S866C4", this);} // tgen

static void Test_S866C4()
{
  extern Class_Descriptor cd_S866C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S866C4, buf);
    S866C4 *dp, &lv = *(dp=new (buf) S866C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S866C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S866C4)");
    check_base_class_offset(lv, (S866C5*), 0, "S866C4");
    check_field_offset(lv, s866c4f0, ABISELECT(40,28), "S866C4.s866c4f0");
    test_class_info(&lv, &cd_S866C4);
    dp->~S866C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS866C4(Test_S866C4, "S866C4", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN6S866C4C1Ev();
extern void _ZN6S866C4D1Ev();
Name_Map name_map_S866C4[] = {
  NSPAIR(_ZN6S866C4C1Ev),
  NSPAIR(_ZN6S866C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S866C5;
extern VTBL_ENTRY _ZTI6S866C5[];
extern  VTBL_ENTRY _ZTV6S866C5[];
static Base_Class bases_S866C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S866C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S866C4[];
extern void _ZN6S866C4D1Ev();
extern void _ZN6S866C4D0Ev();
extern void _ZN6S866C52v2Ev();
extern void _ZN6S866C52v3Ev();
extern void _ZN6S866C52v4Ev();
extern void _ZN6S866C42v5Ev();
extern void _ZN6S866C42v6Ev();
static  VTBL_ENTRY vtc_S866C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S866C4[0]),
  (VTBL_ENTRY)&_ZN6S866C4D1Ev,
  (VTBL_ENTRY)&_ZN6S866C4D0Ev,
  (VTBL_ENTRY)&_ZN6S866C52v2Ev,
  (VTBL_ENTRY)&_ZN6S866C52v3Ev,
  (VTBL_ENTRY)&_ZN6S866C52v4Ev,
  (VTBL_ENTRY)&_ZN6S866C42v5Ev,
  (VTBL_ENTRY)&_ZN6S866C42v6Ev,
};
extern VTBL_ENTRY _ZTI6S866C4[];
extern  VTBL_ENTRY _ZTV6S866C4[];
Class_Descriptor cd_S866C4 = {  "S866C4", // class name
  bases_S866C4, 1,
  &(vtc_S866C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI6S866C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S866C4),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  S866C3  : S866C4 {
  void *s866c3f0;
  char s866c3f1;
  ::S2366C14_nt s866c3f2;
  virtual  ~S866C3(); // _ZN6S866C3D1Ev
  virtual void  v7(); // _ZN6S866C32v7Ev
  S866C3(); // tgen
};
//SIG(-1 S866C3) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1 Fp Fc FC6{ m Fi[2]}}


 S866C3 ::~S866C3(){ note_dtor("S866C3", this);}
void  S866C3 ::v7(){vfunc_called(this, "_ZN6S866C32v7Ev");}
S866C3 ::S866C3(){ note_ctor("S866C3", this);} // tgen

static void Test_S866C3()
{
  extern Class_Descriptor cd_S866C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S866C3, buf);
    S866C3 *dp, &lv = *(dp=new (buf) S866C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S866C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S866C3)");
    check_base_class_offset(lv, (S866C5*)(S866C4*), 0, "S866C3");
    check_base_class_offset(lv, (S866C4*), 0, "S866C3");
    check_field_offset(lv, s866c3f0, ABISELECT(48,32), "S866C3.s866c3f0");
    check_field_offset(lv, s866c3f1, ABISELECT(56,36), "S866C3.s866c3f1");
    check_field_offset(lv, s866c3f2, ABISELECT(60,40), "S866C3.s866c3f2");
    test_class_info(&lv, &cd_S866C3);
    dp->~S866C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS866C3(Test_S866C3, "S866C3", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN6S866C3C1Ev();
extern void _ZN6S866C3D1Ev();
Name_Map name_map_S866C3[] = {
  NSPAIR(_ZN6S866C3C1Ev),
  NSPAIR(_ZN6S866C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S866C5;
extern VTBL_ENTRY _ZTI6S866C5[];
extern  VTBL_ENTRY _ZTV6S866C5[];
extern Class_Descriptor cd_S866C4;
extern VTBL_ENTRY _ZTI6S866C4[];
extern  VTBL_ENTRY _ZTV6S866C4[];
static Base_Class bases_S866C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S866C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S866C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S866C3[];
extern void _ZN6S866C3D1Ev();
extern void _ZN6S866C3D0Ev();
extern void _ZN6S866C52v2Ev();
extern void _ZN6S866C52v3Ev();
extern void _ZN6S866C52v4Ev();
extern void _ZN6S866C42v5Ev();
extern void _ZN6S866C42v6Ev();
extern void _ZN6S866C32v7Ev();
static  VTBL_ENTRY vtc_S866C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S866C3[0]),
  (VTBL_ENTRY)&_ZN6S866C3D1Ev,
  (VTBL_ENTRY)&_ZN6S866C3D0Ev,
  (VTBL_ENTRY)&_ZN6S866C52v2Ev,
  (VTBL_ENTRY)&_ZN6S866C52v3Ev,
  (VTBL_ENTRY)&_ZN6S866C52v4Ev,
  (VTBL_ENTRY)&_ZN6S866C42v5Ev,
  (VTBL_ENTRY)&_ZN6S866C42v6Ev,
  (VTBL_ENTRY)&_ZN6S866C32v7Ev,
};
extern VTBL_ENTRY _ZTI6S866C3[];
extern  VTBL_ENTRY _ZTV6S866C3[];
Class_Descriptor cd_S866C3 = {  "S866C3", // class name
  bases_S866C3, 2,
  &(vtc_S866C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI6S866C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S866C3),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  S866C2  : S866C3 {
  void *s866c2f0[3];
  virtual  ~S866C2(); // _ZN6S866C2D1Ev
  virtual void  v8(); // _ZN6S866C22v8Ev
  virtual void  v9(); // _ZN6S866C22v9Ev
  S866C2(); // tgen
};
//SIG(-1 S866C2) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v6 v7 Fp} vd v8 Fp Fc FC7{ m Fi[2]}} vd v1 v2 Fp[3]}


 S866C2 ::~S866C2(){ note_dtor("S866C2", this);}
void  S866C2 ::v8(){vfunc_called(this, "_ZN6S866C22v8Ev");}
void  S866C2 ::v9(){vfunc_called(this, "_ZN6S866C22v9Ev");}
S866C2 ::S866C2(){ note_ctor("S866C2", this);} // tgen

static void Test_S866C2()
{
  extern Class_Descriptor cd_S866C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S866C2, buf);
    S866C2 *dp, &lv = *(dp=new (buf) S866C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S866C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S866C2)");
    check_base_class_offset(lv, (S866C5*)(S866C4*)(S866C3*), 0, "S866C2");
    check_base_class_offset(lv, (S866C4*)(S866C3*), 0, "S866C2");
    check_base_class_offset(lv, (S866C3*), 0, "S866C2");
    check_field_offset(lv, s866c2f0, ABISELECT(72,48), "S866C2.s866c2f0");
    test_class_info(&lv, &cd_S866C2);
    dp->~S866C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS866C2(Test_S866C2, "S866C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S866C2C1Ev();
extern void _ZN6S866C2D1Ev();
Name_Map name_map_S866C2[] = {
  NSPAIR(_ZN6S866C2C1Ev),
  NSPAIR(_ZN6S866C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S866C5;
extern VTBL_ENTRY _ZTI6S866C5[];
extern  VTBL_ENTRY _ZTV6S866C5[];
extern Class_Descriptor cd_S866C4;
extern VTBL_ENTRY _ZTI6S866C4[];
extern  VTBL_ENTRY _ZTV6S866C4[];
extern Class_Descriptor cd_S866C3;
extern VTBL_ENTRY _ZTI6S866C3[];
extern  VTBL_ENTRY _ZTV6S866C3[];
static Base_Class bases_S866C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S866C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S866C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S866C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S866C2[];
extern void _ZN6S866C2D1Ev();
extern void _ZN6S866C2D0Ev();
extern void _ZN6S866C52v2Ev();
extern void _ZN6S866C52v3Ev();
extern void _ZN6S866C52v4Ev();
extern void _ZN6S866C42v5Ev();
extern void _ZN6S866C42v6Ev();
extern void _ZN6S866C32v7Ev();
extern void _ZN6S866C22v8Ev();
extern void _ZN6S866C22v9Ev();
static  VTBL_ENTRY vtc_S866C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S866C2[0]),
  (VTBL_ENTRY)&_ZN6S866C2D1Ev,
  (VTBL_ENTRY)&_ZN6S866C2D0Ev,
  (VTBL_ENTRY)&_ZN6S866C52v2Ev,
  (VTBL_ENTRY)&_ZN6S866C52v3Ev,
  (VTBL_ENTRY)&_ZN6S866C52v4Ev,
  (VTBL_ENTRY)&_ZN6S866C42v5Ev,
  (VTBL_ENTRY)&_ZN6S866C42v6Ev,
  (VTBL_ENTRY)&_ZN6S866C32v7Ev,
  (VTBL_ENTRY)&_ZN6S866C22v8Ev,
  (VTBL_ENTRY)&_ZN6S866C22v9Ev,
};
extern VTBL_ENTRY _ZTI6S866C2[];
extern  VTBL_ENTRY _ZTV6S866C2[];
Class_Descriptor cd_S866C2 = {  "S866C2", // class name
  bases_S866C2, 3,
  &(vtc_S866C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S866C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S866C2),12, //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  S866C1  : S866C2 {
  virtual  ~S866C1(); // _ZN6S866C1D1Ev
  virtual void  v1(); // _ZN6S866C12v1Ev
  S866C1(); // tgen
};
//SIG(1 S866C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v2 v3 v4 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} v5 v6 Fp} vd v7 Fp Fc FC8{ m Fi[2]}} vd v8 v9 Fp[3]} vd v1}


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

static void Test_S866C1()
{
  extern Class_Descriptor cd_S866C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S866C1, buf);
    S866C1 *dp, &lv = *(dp=new (buf) S866C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S866C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S866C1)");
    check_base_class_offset(lv, (S866C5*)(S866C4*)(S866C3*)(S866C2*), 0, "S866C1");
    check_base_class_offset(lv, (S866C4*)(S866C3*)(S866C2*), 0, "S866C1");
    check_base_class_offset(lv, (S866C3*)(S866C2*), 0, "S866C1");
    check_base_class_offset(lv, (S866C2*), 0, "S866C1");
    test_class_info(&lv, &cd_S866C1);
    dp->~S866C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS866C1(Test_S866C1, "S866C1", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S866C1C1Ev();
extern void _ZN6S866C1D1Ev();
Name_Map name_map_S866C1[] = {
  NSPAIR(_ZN6S866C1C1Ev),
  NSPAIR(_ZN6S866C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S866C5;
extern VTBL_ENTRY _ZTI6S866C5[];
extern  VTBL_ENTRY _ZTV6S866C5[];
extern Class_Descriptor cd_S866C4;
extern VTBL_ENTRY _ZTI6S866C4[];
extern  VTBL_ENTRY _ZTV6S866C4[];
extern Class_Descriptor cd_S866C3;
extern VTBL_ENTRY _ZTI6S866C3[];
extern  VTBL_ENTRY _ZTV6S866C3[];
extern Class_Descriptor cd_S866C2;
extern VTBL_ENTRY _ZTI6S866C2[];
extern  VTBL_ENTRY _ZTV6S866C2[];
static Base_Class bases_S866C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S866C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S866C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S866C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S866C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S866C1[];
extern void _ZN6S866C1D1Ev();
extern void _ZN6S866C1D0Ev();
extern void _ZN6S866C52v2Ev();
extern void _ZN6S866C52v3Ev();
extern void _ZN6S866C52v4Ev();
extern void _ZN6S866C42v5Ev();
extern void _ZN6S866C42v6Ev();
extern void _ZN6S866C32v7Ev();
extern void _ZN6S866C22v8Ev();
extern void _ZN6S866C22v9Ev();
extern void _ZN6S866C12v1Ev();
static  VTBL_ENTRY vtc_S866C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S866C1[0]),
  (VTBL_ENTRY)&_ZN6S866C1D1Ev,
  (VTBL_ENTRY)&_ZN6S866C1D0Ev,
  (VTBL_ENTRY)&_ZN6S866C52v2Ev,
  (VTBL_ENTRY)&_ZN6S866C52v3Ev,
  (VTBL_ENTRY)&_ZN6S866C52v4Ev,
  (VTBL_ENTRY)&_ZN6S866C42v5Ev,
  (VTBL_ENTRY)&_ZN6S866C42v6Ev,
  (VTBL_ENTRY)&_ZN6S866C32v7Ev,
  (VTBL_ENTRY)&_ZN6S866C22v8Ev,
  (VTBL_ENTRY)&_ZN6S866C22v9Ev,
  (VTBL_ENTRY)&_ZN6S866C12v1Ev,
};
extern VTBL_ENTRY _ZTI6S866C1[];
extern  VTBL_ENTRY _ZTV6S866C1[];
Class_Descriptor cd_S866C1 = {  "S866C1", // class name
  bases_S866C1, 4,
  &(vtc_S866C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S866C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S866C1),13, //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  S4785C3  {
  ::S4473C12_nt s4785c3f0;
  int s4785c3f1[2];
  char s4785c3f2;
  virtual  ~S4785C3(); // _ZN7S4785C3D1Ev
  virtual void  v3(); // _ZN7S4785C32v3Ev
  virtual void  v4(); // _ZN7S4785C32v4Ev
  virtual void  v5(); // _ZN7S4785C32v5Ev
  S4785C3(); // tgen
};
//SIG(-1 S4785C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4785C3 ::~S4785C3(){ note_dtor("S4785C3", this);}
void  S4785C3 ::v3(){vfunc_called(this, "_ZN7S4785C32v3Ev");}
void  S4785C3 ::v4(){vfunc_called(this, "_ZN7S4785C32v4Ev");}
void  S4785C3 ::v5(){vfunc_called(this, "_ZN7S4785C32v5Ev");}
S4785C3 ::S4785C3(){ note_ctor("S4785C3", this);} // tgen

static void Test_S4785C3()
{
  extern Class_Descriptor cd_S4785C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4785C3, buf);
    S4785C3 *dp, &lv = *(dp=new (buf) S4785C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4785C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4785C3)");
    check_field_offset(lv, s4785c3f0, ABISELECT(8,4), "S4785C3.s4785c3f0");
    check_field_offset(lv, s4785c3f1, ABISELECT(24,16), "S4785C3.s4785c3f1");
    check_field_offset(lv, s4785c3f2, ABISELECT(32,24), "S4785C3.s4785c3f2");
    test_class_info(&lv, &cd_S4785C3);
    dp->~S4785C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4785C3(Test_S4785C3, "S4785C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4785C3C1Ev();
extern void _ZN7S4785C3D1Ev();
Name_Map name_map_S4785C3[] = {
  NSPAIR(_ZN7S4785C3C1Ev),
  NSPAIR(_ZN7S4785C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4785C3[];
extern void _ZN7S4785C3D1Ev();
extern void _ZN7S4785C3D0Ev();
extern void _ZN7S4785C32v3Ev();
extern void _ZN7S4785C32v4Ev();
extern void _ZN7S4785C32v5Ev();
static  VTBL_ENTRY vtc_S4785C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4785C3[0]),
  (VTBL_ENTRY)&_ZN7S4785C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4785C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4785C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4785C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4785C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4785C3[];
extern  VTBL_ENTRY _ZTV7S4785C3[];
Class_Descriptor cd_S4785C3 = {  "S4785C3", // class name
  0,0,//no base classes
  &(vtc_S4785C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4785C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4785C3),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  S4785C2  : S4785C3 {
  void *s4785c2f0;
  virtual void  v6(); // _ZN7S4785C22v6Ev
  virtual void  v7(); // _ZN7S4785C22v7Ev
  ~S4785C2(); // tgen
  S4785C2(); // tgen
};
//SIG(-1 S4785C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4785C2 ::v6(){vfunc_called(this, "_ZN7S4785C22v6Ev");}
void  S4785C2 ::v7(){vfunc_called(this, "_ZN7S4785C22v7Ev");}
S4785C2 ::~S4785C2(){ note_dtor("S4785C2", this);} // tgen
S4785C2 ::S4785C2(){ note_ctor("S4785C2", this);} // tgen

static void Test_S4785C2()
{
  extern Class_Descriptor cd_S4785C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4785C2, buf);
    S4785C2 *dp, &lv = *(dp=new (buf) S4785C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4785C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4785C2)");
    check_base_class_offset(lv, (S4785C3*), 0, "S4785C2");
    check_field_offset(lv, s4785c2f0, ABISELECT(40,28), "S4785C2.s4785c2f0");
    test_class_info(&lv, &cd_S4785C2);
    dp->~S4785C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4785C2(Test_S4785C2, "S4785C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4785C2C1Ev();
extern void _ZN7S4785C2D1Ev();
Name_Map name_map_S4785C2[] = {
  NSPAIR(_ZN7S4785C2C1Ev),
  NSPAIR(_ZN7S4785C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4785C3;
extern VTBL_ENTRY _ZTI7S4785C3[];
extern  VTBL_ENTRY _ZTV7S4785C3[];
static Base_Class bases_S4785C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4785C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4785C2[];
extern void _ZN7S4785C2D1Ev();
extern void _ZN7S4785C2D0Ev();
extern void _ZN7S4785C32v3Ev();
extern void _ZN7S4785C32v4Ev();
extern void _ZN7S4785C32v5Ev();
extern void _ZN7S4785C22v6Ev();
extern void _ZN7S4785C22v7Ev();
static  VTBL_ENTRY vtc_S4785C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4785C2[0]),
  (VTBL_ENTRY)&_ZN7S4785C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4785C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4785C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4785C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4785C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4785C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4785C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4785C2[];
extern  VTBL_ENTRY _ZTV7S4785C2[];
Class_Descriptor cd_S4785C2 = {  "S4785C2", // class name
  bases_S4785C2, 1,
  &(vtc_S4785C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4785C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4785C2),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  S4785C1  : S4785C2 {
  int s4785c1f0;
  void *s4785c1f1[2];
  ::S2173C14 s4785c1f2;
  ::S2366C19 s4785c1f3;
  virtual  ~S4785C1(); // _ZN7S4785C1D1Ev
  virtual void  v1(); // _ZN7S4785C12v1Ev
  virtual void  v2(); // _ZN7S4785C12v2Ev
  S4785C1(); // tgen
};
//SIG(1 S4785C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 Fi Fp[2] FC6{ m Fp Fi[2] FC7{ m}} FC8{ m Fp}}


 S4785C1 ::~S4785C1(){ note_dtor("S4785C1", this);}
void  S4785C1 ::v1(){vfunc_called(this, "_ZN7S4785C12v1Ev");}
void  S4785C1 ::v2(){vfunc_called(this, "_ZN7S4785C12v2Ev");}
S4785C1 ::S4785C1(){ note_ctor("S4785C1", this);} // tgen

static void Test_S4785C1()
{
  extern Class_Descriptor cd_S4785C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S4785C1, buf);
    S4785C1 *dp, &lv = *(dp=new (buf) S4785C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S4785C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4785C1)");
    check_base_class_offset(lv, (S4785C3*)(S4785C2*), 0, "S4785C1");
    check_base_class_offset(lv, (S4785C2*), 0, "S4785C1");
    check_field_offset(lv, s4785c1f0, ABISELECT(48,32), "S4785C1.s4785c1f0");
    check_field_offset(lv, s4785c1f1, ABISELECT(56,36), "S4785C1.s4785c1f1");
    check_field_offset(lv, s4785c1f2, ABISELECT(72,44), "S4785C1.s4785c1f2");
    check_field_offset(lv, s4785c1f3, ABISELECT(96,60), "S4785C1.s4785c1f3");
    test_class_info(&lv, &cd_S4785C1);
    dp->~S4785C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4785C1(Test_S4785C1, "S4785C1", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S4785C1C1Ev();
extern void _ZN7S4785C1D1Ev();
Name_Map name_map_S4785C1[] = {
  NSPAIR(_ZN7S4785C1C1Ev),
  NSPAIR(_ZN7S4785C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4785C3;
extern VTBL_ENTRY _ZTI7S4785C3[];
extern  VTBL_ENTRY _ZTV7S4785C3[];
extern Class_Descriptor cd_S4785C2;
extern VTBL_ENTRY _ZTI7S4785C2[];
extern  VTBL_ENTRY _ZTV7S4785C2[];
static Base_Class bases_S4785C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4785C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4785C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4785C1[];
extern void _ZN7S4785C1D1Ev();
extern void _ZN7S4785C1D0Ev();
extern void _ZN7S4785C32v3Ev();
extern void _ZN7S4785C32v4Ev();
extern void _ZN7S4785C32v5Ev();
extern void _ZN7S4785C22v6Ev();
extern void _ZN7S4785C22v7Ev();
extern void _ZN7S4785C12v1Ev();
extern void _ZN7S4785C12v2Ev();
static  VTBL_ENTRY vtc_S4785C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4785C1[0]),
  (VTBL_ENTRY)&_ZN7S4785C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4785C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4785C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4785C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4785C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4785C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4785C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4785C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4785C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4785C1[];
extern  VTBL_ENTRY _ZTV7S4785C1[];
Class_Descriptor cd_S4785C1 = {  "S4785C1", // class name
  bases_S4785C1, 2,
  &(vtc_S4785C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S4785C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4785C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4771C3  {
  ::S4473C12_nt s4771c3f0;
  int s4771c3f1[2];
  char s4771c3f2;
  virtual  ~S4771C3(); // _ZN7S4771C3D1Ev
  virtual void  v3(); // _ZN7S4771C32v3Ev
  virtual void  v4(); // _ZN7S4771C32v4Ev
  virtual void  v5(); // _ZN7S4771C32v5Ev
  S4771C3(); // tgen
};
//SIG(-1 S4771C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4771C3 ::~S4771C3(){ note_dtor("S4771C3", this);}
void  S4771C3 ::v3(){vfunc_called(this, "_ZN7S4771C32v3Ev");}
void  S4771C3 ::v4(){vfunc_called(this, "_ZN7S4771C32v4Ev");}
void  S4771C3 ::v5(){vfunc_called(this, "_ZN7S4771C32v5Ev");}
S4771C3 ::S4771C3(){ note_ctor("S4771C3", this);} // tgen

static void Test_S4771C3()
{
  extern Class_Descriptor cd_S4771C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4771C3, buf);
    S4771C3 *dp, &lv = *(dp=new (buf) S4771C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4771C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4771C3)");
    check_field_offset(lv, s4771c3f0, ABISELECT(8,4), "S4771C3.s4771c3f0");
    check_field_offset(lv, s4771c3f1, ABISELECT(24,16), "S4771C3.s4771c3f1");
    check_field_offset(lv, s4771c3f2, ABISELECT(32,24), "S4771C3.s4771c3f2");
    test_class_info(&lv, &cd_S4771C3);
    dp->~S4771C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4771C3(Test_S4771C3, "S4771C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4771C3C1Ev();
extern void _ZN7S4771C3D1Ev();
Name_Map name_map_S4771C3[] = {
  NSPAIR(_ZN7S4771C3C1Ev),
  NSPAIR(_ZN7S4771C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4771C3[];
extern void _ZN7S4771C3D1Ev();
extern void _ZN7S4771C3D0Ev();
extern void _ZN7S4771C32v3Ev();
extern void _ZN7S4771C32v4Ev();
extern void _ZN7S4771C32v5Ev();
static  VTBL_ENTRY vtc_S4771C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4771C3[0]),
  (VTBL_ENTRY)&_ZN7S4771C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4771C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4771C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4771C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4771C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4771C3[];
extern  VTBL_ENTRY _ZTV7S4771C3[];
Class_Descriptor cd_S4771C3 = {  "S4771C3", // class name
  0,0,//no base classes
  &(vtc_S4771C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4771C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4771C3),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  S4771C2  : S4771C3 {
  void *s4771c2f0;
  virtual void  v6(); // _ZN7S4771C22v6Ev
  virtual void  v7(); // _ZN7S4771C22v7Ev
  ~S4771C2(); // tgen
  S4771C2(); // tgen
};
//SIG(-1 S4771C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4771C2 ::v6(){vfunc_called(this, "_ZN7S4771C22v6Ev");}
void  S4771C2 ::v7(){vfunc_called(this, "_ZN7S4771C22v7Ev");}
S4771C2 ::~S4771C2(){ note_dtor("S4771C2", this);} // tgen
S4771C2 ::S4771C2(){ note_ctor("S4771C2", this);} // tgen

static void Test_S4771C2()
{
  extern Class_Descriptor cd_S4771C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4771C2, buf);
    S4771C2 *dp, &lv = *(dp=new (buf) S4771C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4771C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4771C2)");
    check_base_class_offset(lv, (S4771C3*), 0, "S4771C2");
    check_field_offset(lv, s4771c2f0, ABISELECT(40,28), "S4771C2.s4771c2f0");
    test_class_info(&lv, &cd_S4771C2);
    dp->~S4771C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4771C2(Test_S4771C2, "S4771C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4771C2C1Ev();
extern void _ZN7S4771C2D1Ev();
Name_Map name_map_S4771C2[] = {
  NSPAIR(_ZN7S4771C2C1Ev),
  NSPAIR(_ZN7S4771C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4771C3;
extern VTBL_ENTRY _ZTI7S4771C3[];
extern  VTBL_ENTRY _ZTV7S4771C3[];
static Base_Class bases_S4771C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4771C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4771C2[];
extern void _ZN7S4771C2D1Ev();
extern void _ZN7S4771C2D0Ev();
extern void _ZN7S4771C32v3Ev();
extern void _ZN7S4771C32v4Ev();
extern void _ZN7S4771C32v5Ev();
extern void _ZN7S4771C22v6Ev();
extern void _ZN7S4771C22v7Ev();
static  VTBL_ENTRY vtc_S4771C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4771C2[0]),
  (VTBL_ENTRY)&_ZN7S4771C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4771C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4771C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4771C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4771C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4771C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4771C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4771C2[];
extern  VTBL_ENTRY _ZTV7S4771C2[];
Class_Descriptor cd_S4771C2 = {  "S4771C2", // class name
  bases_S4771C2, 1,
  &(vtc_S4771C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4771C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4771C2),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  S4771C6_nt  {
  int s4771c6f0;
  __tsi64 s4771c6f1[5];
  short s4771c6f2[2];
  int s4771c6f3[2];
  void  mf4771c6(); // _ZN10S4771C6_nt8mf4771c6Ev
};
//SIG(-1 S4771C6_nt) C1{ m Fi FL[5] Fs[2] Fi[2]}


void  S4771C6_nt ::mf4771c6(){}

//skip512 S4771C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4771C1  : S4771C2 {
  ::S4771C6_nt s4771c1f0;
  void *s4771c1f1;
  int s4771c1f2[2];
  void *s4771c1f3;
  virtual  ~S4771C1(); // _ZN7S4771C1D1Ev
  virtual void  v1(); // _ZN7S4771C12v1Ev
  virtual void  v2(); // _ZN7S4771C12v2Ev
  S4771C1(); // tgen
};
//SIG(1 S4771C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC6{ m Fi FL[5] Fs[2] Fi[2]} Fp Fi[2] Fp}


 S4771C1 ::~S4771C1(){ note_dtor("S4771C1", this);}
void  S4771C1 ::v1(){vfunc_called(this, "_ZN7S4771C12v1Ev");}
void  S4771C1 ::v2(){vfunc_called(this, "_ZN7S4771C12v2Ev");}
S4771C1 ::S4771C1(){ note_ctor("S4771C1", this);} // tgen

static void Test_S4771C1()
{
  extern Class_Descriptor cd_S4771C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,27)];
    init_test(&cd_S4771C1, buf);
    S4771C1 *dp, &lv = *(dp=new (buf) S4771C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,104), "sizeof(S4771C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4771C1)");
    check_base_class_offset(lv, (S4771C3*)(S4771C2*), 0, "S4771C1");
    check_base_class_offset(lv, (S4771C2*), 0, "S4771C1");
    check_field_offset(lv, s4771c1f0, ABISELECT(48,32), "S4771C1.s4771c1f0");
    check_field_offset(lv, s4771c1f1, ABISELECT(112,88), "S4771C1.s4771c1f1");
    check_field_offset(lv, s4771c1f2, ABISELECT(120,92), "S4771C1.s4771c1f2");
    check_field_offset(lv, s4771c1f3, ABISELECT(128,100), "S4771C1.s4771c1f3");
    test_class_info(&lv, &cd_S4771C1);
    dp->~S4771C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4771C1(Test_S4771C1, "S4771C1", ABISELECT(136,104));

#else // __cplusplus

extern void _ZN7S4771C1C1Ev();
extern void _ZN7S4771C1D1Ev();
Name_Map name_map_S4771C1[] = {
  NSPAIR(_ZN7S4771C1C1Ev),
  NSPAIR(_ZN7S4771C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4771C3;
extern VTBL_ENTRY _ZTI7S4771C3[];
extern  VTBL_ENTRY _ZTV7S4771C3[];
extern Class_Descriptor cd_S4771C2;
extern VTBL_ENTRY _ZTI7S4771C2[];
extern  VTBL_ENTRY _ZTV7S4771C2[];
static Base_Class bases_S4771C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4771C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4771C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4771C1[];
extern void _ZN7S4771C1D1Ev();
extern void _ZN7S4771C1D0Ev();
extern void _ZN7S4771C32v3Ev();
extern void _ZN7S4771C32v4Ev();
extern void _ZN7S4771C32v5Ev();
extern void _ZN7S4771C22v6Ev();
extern void _ZN7S4771C22v7Ev();
extern void _ZN7S4771C12v1Ev();
extern void _ZN7S4771C12v2Ev();
static  VTBL_ENTRY vtc_S4771C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4771C1[0]),
  (VTBL_ENTRY)&_ZN7S4771C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4771C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4771C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4771C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4771C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4771C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4771C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4771C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4771C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4771C1[];
extern  VTBL_ENTRY _ZTV7S4771C1[];
Class_Descriptor cd_S4771C1 = {  "S4771C1", // class name
  bases_S4771C1, 2,
  &(vtc_S4771C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,104), // object size
  NSPAIRA(_ZTI7S4771C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4771C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4737C3  {
  ::S4473C12_nt s4737c3f0;
  int s4737c3f1[2];
  char s4737c3f2;
  virtual  ~S4737C3(); // _ZN7S4737C3D1Ev
  virtual void  v3(); // _ZN7S4737C32v3Ev
  virtual void  v4(); // _ZN7S4737C32v4Ev
  virtual void  v5(); // _ZN7S4737C32v5Ev
  S4737C3(); // tgen
};
//SIG(-1 S4737C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4737C3 ::~S4737C3(){ note_dtor("S4737C3", this);}
void  S4737C3 ::v3(){vfunc_called(this, "_ZN7S4737C32v3Ev");}
void  S4737C3 ::v4(){vfunc_called(this, "_ZN7S4737C32v4Ev");}
void  S4737C3 ::v5(){vfunc_called(this, "_ZN7S4737C32v5Ev");}
S4737C3 ::S4737C3(){ note_ctor("S4737C3", this);} // tgen

static void Test_S4737C3()
{
  extern Class_Descriptor cd_S4737C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4737C3, buf);
    S4737C3 *dp, &lv = *(dp=new (buf) S4737C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4737C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4737C3)");
    check_field_offset(lv, s4737c3f0, ABISELECT(8,4), "S4737C3.s4737c3f0");
    check_field_offset(lv, s4737c3f1, ABISELECT(24,16), "S4737C3.s4737c3f1");
    check_field_offset(lv, s4737c3f2, ABISELECT(32,24), "S4737C3.s4737c3f2");
    test_class_info(&lv, &cd_S4737C3);
    dp->~S4737C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4737C3(Test_S4737C3, "S4737C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4737C3C1Ev();
extern void _ZN7S4737C3D1Ev();
Name_Map name_map_S4737C3[] = {
  NSPAIR(_ZN7S4737C3C1Ev),
  NSPAIR(_ZN7S4737C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4737C3[];
extern void _ZN7S4737C3D1Ev();
extern void _ZN7S4737C3D0Ev();
extern void _ZN7S4737C32v3Ev();
extern void _ZN7S4737C32v4Ev();
extern void _ZN7S4737C32v5Ev();
static  VTBL_ENTRY vtc_S4737C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4737C3[0]),
  (VTBL_ENTRY)&_ZN7S4737C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4737C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4737C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4737C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4737C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4737C3[];
extern  VTBL_ENTRY _ZTV7S4737C3[];
Class_Descriptor cd_S4737C3 = {  "S4737C3", // class name
  0,0,//no base classes
  &(vtc_S4737C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4737C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4737C3),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  S4737C2  : S4737C3 {
  void *s4737c2f0;
  virtual void  v6(); // _ZN7S4737C22v6Ev
  virtual void  v7(); // _ZN7S4737C22v7Ev
  ~S4737C2(); // tgen
  S4737C2(); // tgen
};
//SIG(-1 S4737C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4737C2 ::v6(){vfunc_called(this, "_ZN7S4737C22v6Ev");}
void  S4737C2 ::v7(){vfunc_called(this, "_ZN7S4737C22v7Ev");}
S4737C2 ::~S4737C2(){ note_dtor("S4737C2", this);} // tgen
S4737C2 ::S4737C2(){ note_ctor("S4737C2", this);} // tgen

static void Test_S4737C2()
{
  extern Class_Descriptor cd_S4737C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4737C2, buf);
    S4737C2 *dp, &lv = *(dp=new (buf) S4737C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4737C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4737C2)");
    check_base_class_offset(lv, (S4737C3*), 0, "S4737C2");
    check_field_offset(lv, s4737c2f0, ABISELECT(40,28), "S4737C2.s4737c2f0");
    test_class_info(&lv, &cd_S4737C2);
    dp->~S4737C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4737C2(Test_S4737C2, "S4737C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4737C2C1Ev();
extern void _ZN7S4737C2D1Ev();
Name_Map name_map_S4737C2[] = {
  NSPAIR(_ZN7S4737C2C1Ev),
  NSPAIR(_ZN7S4737C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4737C3;
extern VTBL_ENTRY _ZTI7S4737C3[];
extern  VTBL_ENTRY _ZTV7S4737C3[];
static Base_Class bases_S4737C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4737C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4737C2[];
extern void _ZN7S4737C2D1Ev();
extern void _ZN7S4737C2D0Ev();
extern void _ZN7S4737C32v3Ev();
extern void _ZN7S4737C32v4Ev();
extern void _ZN7S4737C32v5Ev();
extern void _ZN7S4737C22v6Ev();
extern void _ZN7S4737C22v7Ev();
static  VTBL_ENTRY vtc_S4737C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4737C2[0]),
  (VTBL_ENTRY)&_ZN7S4737C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4737C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4737C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4737C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4737C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4737C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4737C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4737C2[];
extern  VTBL_ENTRY _ZTV7S4737C2[];
Class_Descriptor cd_S4737C2 = {  "S4737C2", // class name
  bases_S4737C2, 1,
  &(vtc_S4737C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4737C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4737C2),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  S4737C7_nt  {
  void *s4737c7f0[3];
  int s4737c7f1;
  void  mf4737c7(); // _ZN10S4737C7_nt8mf4737c7Ev
};
//SIG(-1 S4737C7_nt) C1{ m Fp[3] Fi}


void  S4737C7_nt ::mf4737c7(){}

//skip512 S4737C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4737C1  : S4737C2 {
  ::S2366C19 s4737c1f0;
  void *s4737c1f1;
  ::S4737C7_nt s4737c1f2;
  int s4737c1f3;
  ::S2366C10_nt s4737c1f4;
  virtual void  v1(); // _ZN7S4737C12v1Ev
  virtual void  v2(); // _ZN7S4737C12v2Ev
  ~S4737C1(); // tgen
  S4737C1(); // tgen
};
//SIG(1 S4737C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} v1 v2 FC6{ m Fp} Fp FC7{ m Fp[3] Fi} Fi FC8{ m Fp}}


void  S4737C1 ::v1(){vfunc_called(this, "_ZN7S4737C12v1Ev");}
void  S4737C1 ::v2(){vfunc_called(this, "_ZN7S4737C12v2Ev");}
S4737C1 ::~S4737C1(){ note_dtor("S4737C1", this);} // tgen
S4737C1 ::S4737C1(){ note_ctor("S4737C1", this);} // tgen

static void Test_S4737C1()
{
  extern Class_Descriptor cd_S4737C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,17)];
    init_test(&cd_S4737C1, buf);
    S4737C1 *dp, &lv = *(dp=new (buf) S4737C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S4737C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4737C1)");
    check_base_class_offset(lv, (S4737C3*)(S4737C2*), 0, "S4737C1");
    check_base_class_offset(lv, (S4737C2*), 0, "S4737C1");
    check_field_offset(lv, s4737c1f0, ABISELECT(48,32), "S4737C1.s4737c1f0");
    check_field_offset(lv, s4737c1f1, ABISELECT(56,36), "S4737C1.s4737c1f1");
    check_field_offset(lv, s4737c1f2, ABISELECT(64,40), "S4737C1.s4737c1f2");
    check_field_offset(lv, s4737c1f3, ABISELECT(96,56), "S4737C1.s4737c1f3");
    check_field_offset(lv, s4737c1f4, ABISELECT(104,60), "S4737C1.s4737c1f4");
    test_class_info(&lv, &cd_S4737C1);
    dp->~S4737C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4737C1(Test_S4737C1, "S4737C1", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN7S4737C1C1Ev();
extern void _ZN7S4737C1D1Ev();
Name_Map name_map_S4737C1[] = {
  NSPAIR(_ZN7S4737C1C1Ev),
  NSPAIR(_ZN7S4737C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4737C3;
extern VTBL_ENTRY _ZTI7S4737C3[];
extern  VTBL_ENTRY _ZTV7S4737C3[];
extern Class_Descriptor cd_S4737C2;
extern VTBL_ENTRY _ZTI7S4737C2[];
extern  VTBL_ENTRY _ZTV7S4737C2[];
static Base_Class bases_S4737C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4737C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4737C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4737C1[];
extern void _ZN7S4737C1D1Ev();
extern void _ZN7S4737C1D0Ev();
extern void _ZN7S4737C32v3Ev();
extern void _ZN7S4737C32v4Ev();
extern void _ZN7S4737C32v5Ev();
extern void _ZN7S4737C22v6Ev();
extern void _ZN7S4737C22v7Ev();
extern void _ZN7S4737C12v1Ev();
extern void _ZN7S4737C12v2Ev();
static  VTBL_ENTRY vtc_S4737C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4737C1[0]),
  (VTBL_ENTRY)&_ZN7S4737C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4737C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4737C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4737C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4737C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4737C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4737C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4737C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4737C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4737C1[];
extern  VTBL_ENTRY _ZTV7S4737C1[];
Class_Descriptor cd_S4737C1 = {  "S4737C1", // class name
  bases_S4737C1, 2,
  &(vtc_S4737C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI7S4737C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4737C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2083C4  {
  ::S4473C12_nt s2083c4f0;
  int s2083c4f1[2];
  char s2083c4f2;
  virtual  ~S2083C4(); // _ZN7S2083C4D1Ev
  virtual void  v2(); // _ZN7S2083C42v2Ev
  virtual void  v3(); // _ZN7S2083C42v3Ev
  virtual void  v4(); // _ZN7S2083C42v4Ev
  S2083C4(); // tgen
};
//SIG(-1 S2083C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2083C4 ::~S2083C4(){ note_dtor("S2083C4", this);}
void  S2083C4 ::v2(){vfunc_called(this, "_ZN7S2083C42v2Ev");}
void  S2083C4 ::v3(){vfunc_called(this, "_ZN7S2083C42v3Ev");}
void  S2083C4 ::v4(){vfunc_called(this, "_ZN7S2083C42v4Ev");}
S2083C4 ::S2083C4(){ note_ctor("S2083C4", this);} // tgen

static void Test_S2083C4()
{
  extern Class_Descriptor cd_S2083C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2083C4, buf);
    S2083C4 *dp, &lv = *(dp=new (buf) S2083C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2083C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2083C4)");
    check_field_offset(lv, s2083c4f0, ABISELECT(8,4), "S2083C4.s2083c4f0");
    check_field_offset(lv, s2083c4f1, ABISELECT(24,16), "S2083C4.s2083c4f1");
    check_field_offset(lv, s2083c4f2, ABISELECT(32,24), "S2083C4.s2083c4f2");
    test_class_info(&lv, &cd_S2083C4);
    dp->~S2083C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2083C4(Test_S2083C4, "S2083C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2083C4C1Ev();
extern void _ZN7S2083C4D1Ev();
Name_Map name_map_S2083C4[] = {
  NSPAIR(_ZN7S2083C4C1Ev),
  NSPAIR(_ZN7S2083C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2083C4[];
extern void _ZN7S2083C4D1Ev();
extern void _ZN7S2083C4D0Ev();
extern void _ZN7S2083C42v2Ev();
extern void _ZN7S2083C42v3Ev();
extern void _ZN7S2083C42v4Ev();
static  VTBL_ENTRY vtc_S2083C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2083C4[0]),
  (VTBL_ENTRY)&_ZN7S2083C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2083C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2083C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2083C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2083C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S2083C4[];
extern  VTBL_ENTRY _ZTV7S2083C4[];
Class_Descriptor cd_S2083C4 = {  "S2083C4", // class name
  0,0,//no base classes
  &(vtc_S2083C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2083C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2083C4),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  S2083C3  : S2083C4 {
  void *s2083c3f0;
  virtual void  v5(); // _ZN7S2083C32v5Ev
  virtual void  v6(); // _ZN7S2083C32v6Ev
  ~S2083C3(); // tgen
  S2083C3(); // tgen
};
//SIG(-1 S2083C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2083C3 ::v5(){vfunc_called(this, "_ZN7S2083C32v5Ev");}
void  S2083C3 ::v6(){vfunc_called(this, "_ZN7S2083C32v6Ev");}
S2083C3 ::~S2083C3(){ note_dtor("S2083C3", this);} // tgen
S2083C3 ::S2083C3(){ note_ctor("S2083C3", this);} // tgen

static void Test_S2083C3()
{
  extern Class_Descriptor cd_S2083C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2083C3, buf);
    S2083C3 *dp, &lv = *(dp=new (buf) S2083C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2083C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2083C3)");
    check_base_class_offset(lv, (S2083C4*), 0, "S2083C3");
    check_field_offset(lv, s2083c3f0, ABISELECT(40,28), "S2083C3.s2083c3f0");
    test_class_info(&lv, &cd_S2083C3);
    dp->~S2083C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2083C3(Test_S2083C3, "S2083C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2083C3C1Ev();
extern void _ZN7S2083C3D1Ev();
Name_Map name_map_S2083C3[] = {
  NSPAIR(_ZN7S2083C3C1Ev),
  NSPAIR(_ZN7S2083C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2083C4;
extern VTBL_ENTRY _ZTI7S2083C4[];
extern  VTBL_ENTRY _ZTV7S2083C4[];
static Base_Class bases_S2083C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2083C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2083C3[];
extern void _ZN7S2083C3D1Ev();
extern void _ZN7S2083C3D0Ev();
extern void _ZN7S2083C42v2Ev();
extern void _ZN7S2083C42v3Ev();
extern void _ZN7S2083C42v4Ev();
extern void _ZN7S2083C32v5Ev();
extern void _ZN7S2083C32v6Ev();
static  VTBL_ENTRY vtc_S2083C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2083C3[0]),
  (VTBL_ENTRY)&_ZN7S2083C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2083C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2083C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2083C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2083C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2083C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2083C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2083C3[];
extern  VTBL_ENTRY _ZTV7S2083C3[];
Class_Descriptor cd_S2083C3 = {  "S2083C3", // class name
  bases_S2083C3, 1,
  &(vtc_S2083C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2083C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2083C3),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  S2083C2  : S2083C3 {
  void *s2083c2f0[2];
  ::S4473C12_nt s2083c2f1;
  ::S4473C12_nt s2083c2f2;
  __tsi64 s2083c2f3;
  int s2083c2f4;
  __tsi64 s2083c2f5;
  int s2083c2f6;
  virtual  ~S2083C2(); // _ZN7S2083C2D1Ev
  virtual void  v7(); // _ZN7S2083C22v7Ev
  virtual void  v8(); // _ZN7S2083C22v8Ev
  virtual void  v9(); // _ZN7S2083C22v9Ev
  S2083C2(); // tgen
};
//SIG(-1 S2083C2) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} vd v1 v2 v3 Fp[2] FC4 FC4 FL Fi FL Fi}


 S2083C2 ::~S2083C2(){ note_dtor("S2083C2", this);}
void  S2083C2 ::v7(){vfunc_called(this, "_ZN7S2083C22v7Ev");}
void  S2083C2 ::v8(){vfunc_called(this, "_ZN7S2083C22v8Ev");}
void  S2083C2 ::v9(){vfunc_called(this, "_ZN7S2083C22v9Ev");}
S2083C2 ::S2083C2(){ note_ctor("S2083C2", this);} // tgen

static void Test_S2083C2()
{
  extern Class_Descriptor cd_S2083C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,23)];
    init_test(&cd_S2083C2, buf);
    S2083C2 *dp, &lv = *(dp=new (buf) S2083C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,88), "sizeof(S2083C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2083C2)");
    check_base_class_offset(lv, (S2083C4*)(S2083C3*), 0, "S2083C2");
    check_base_class_offset(lv, (S2083C3*), 0, "S2083C2");
    check_field_offset(lv, s2083c2f0, ABISELECT(48,32), "S2083C2.s2083c2f0");
    check_field_offset(lv, s2083c2f1, ABISELECT(64,40), "S2083C2.s2083c2f1");
    check_field_offset(lv, s2083c2f2, ABISELECT(80,52), "S2083C2.s2083c2f2");
    check_field_offset(lv, s2083c2f3, ABISELECT(96,64), "S2083C2.s2083c2f3");
    check_field_offset(lv, s2083c2f4, ABISELECT(104,72), "S2083C2.s2083c2f4");
    check_field_offset(lv, s2083c2f5, ABISELECT(112,76), "S2083C2.s2083c2f5");
    check_field_offset(lv, s2083c2f6, ABISELECT(120,84), "S2083C2.s2083c2f6");
    test_class_info(&lv, &cd_S2083C2);
    dp->~S2083C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2083C2(Test_S2083C2, "S2083C2", ABISELECT(128,88));

#else // __cplusplus

extern void _ZN7S2083C2C1Ev();
extern void _ZN7S2083C2D1Ev();
Name_Map name_map_S2083C2[] = {
  NSPAIR(_ZN7S2083C2C1Ev),
  NSPAIR(_ZN7S2083C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2083C4;
extern VTBL_ENTRY _ZTI7S2083C4[];
extern  VTBL_ENTRY _ZTV7S2083C4[];
extern Class_Descriptor cd_S2083C3;
extern VTBL_ENTRY _ZTI7S2083C3[];
extern  VTBL_ENTRY _ZTV7S2083C3[];
static Base_Class bases_S2083C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2083C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2083C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2083C2[];
extern void _ZN7S2083C2D1Ev();
extern void _ZN7S2083C2D0Ev();
extern void _ZN7S2083C42v2Ev();
extern void _ZN7S2083C42v3Ev();
extern void _ZN7S2083C42v4Ev();
extern void _ZN7S2083C32v5Ev();
extern void _ZN7S2083C32v6Ev();
extern void _ZN7S2083C22v7Ev();
extern void _ZN7S2083C22v8Ev();
extern void _ZN7S2083C22v9Ev();
static  VTBL_ENTRY vtc_S2083C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2083C2[0]),
  (VTBL_ENTRY)&_ZN7S2083C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2083C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2083C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2083C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2083C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2083C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2083C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2083C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2083C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2083C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S2083C2[];
extern  VTBL_ENTRY _ZTV7S2083C2[];
Class_Descriptor cd_S2083C2 = {  "S2083C2", // class name
  bases_S2083C2, 2,
  &(vtc_S2083C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,88), // object size
  NSPAIRA(_ZTI7S2083C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2083C2),12, //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  S2083C1  : S2083C2 {
  virtual void  v1(); // _ZN7S2083C12v1Ev
  ~S2083C1(); // tgen
  S2083C1(); // tgen
};
//SIG(1 S2083C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v5 v6 Fp} vd v7 v8 v9 Fp[2] FC5 FC5 FL Fi FL Fi} v1}


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

static void Test_S2083C1()
{
  extern Class_Descriptor cd_S2083C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,23)];
    init_test(&cd_S2083C1, buf);
    S2083C1 *dp, &lv = *(dp=new (buf) S2083C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,88), "sizeof(S2083C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2083C1)");
    check_base_class_offset(lv, (S2083C4*)(S2083C3*)(S2083C2*), 0, "S2083C1");
    check_base_class_offset(lv, (S2083C3*)(S2083C2*), 0, "S2083C1");
    check_base_class_offset(lv, (S2083C2*), 0, "S2083C1");
    test_class_info(&lv, &cd_S2083C1);
    dp->~S2083C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2083C1(Test_S2083C1, "S2083C1", ABISELECT(128,88));

#else // __cplusplus

extern void _ZN7S2083C1C1Ev();
extern void _ZN7S2083C1D1Ev();
Name_Map name_map_S2083C1[] = {
  NSPAIR(_ZN7S2083C1C1Ev),
  NSPAIR(_ZN7S2083C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2083C4;
extern VTBL_ENTRY _ZTI7S2083C4[];
extern  VTBL_ENTRY _ZTV7S2083C4[];
extern Class_Descriptor cd_S2083C3;
extern VTBL_ENTRY _ZTI7S2083C3[];
extern  VTBL_ENTRY _ZTV7S2083C3[];
extern Class_Descriptor cd_S2083C2;
extern VTBL_ENTRY _ZTI7S2083C2[];
extern  VTBL_ENTRY _ZTV7S2083C2[];
static Base_Class bases_S2083C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2083C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2083C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2083C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2083C1[];
extern void _ZN7S2083C1D1Ev();
extern void _ZN7S2083C1D0Ev();
extern void _ZN7S2083C42v2Ev();
extern void _ZN7S2083C42v3Ev();
extern void _ZN7S2083C42v4Ev();
extern void _ZN7S2083C32v5Ev();
extern void _ZN7S2083C32v6Ev();
extern void _ZN7S2083C22v7Ev();
extern void _ZN7S2083C22v8Ev();
extern void _ZN7S2083C22v9Ev();
extern void _ZN7S2083C12v1Ev();
static  VTBL_ENTRY vtc_S2083C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2083C1[0]),
  (VTBL_ENTRY)&_ZN7S2083C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2083C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2083C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2083C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2083C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2083C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2083C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2083C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2083C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2083C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2083C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S2083C1[];
extern  VTBL_ENTRY _ZTV7S2083C1[];
Class_Descriptor cd_S2083C1 = {  "S2083C1", // class name
  bases_S2083C1, 3,
  &(vtc_S2083C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,88), // object size
  NSPAIRA(_ZTI7S2083C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2083C1),13, //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  S4749C3  {
  ::S4473C12_nt s4749c3f0;
  int s4749c3f1[2];
  char s4749c3f2;
  virtual  ~S4749C3(); // _ZN7S4749C3D1Ev
  virtual void  v3(); // _ZN7S4749C32v3Ev
  virtual void  v4(); // _ZN7S4749C32v4Ev
  virtual void  v5(); // _ZN7S4749C32v5Ev
  S4749C3(); // tgen
};
//SIG(-1 S4749C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4749C3 ::~S4749C3(){ note_dtor("S4749C3", this);}
void  S4749C3 ::v3(){vfunc_called(this, "_ZN7S4749C32v3Ev");}
void  S4749C3 ::v4(){vfunc_called(this, "_ZN7S4749C32v4Ev");}
void  S4749C3 ::v5(){vfunc_called(this, "_ZN7S4749C32v5Ev");}
S4749C3 ::S4749C3(){ note_ctor("S4749C3", this);} // tgen

static void Test_S4749C3()
{
  extern Class_Descriptor cd_S4749C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4749C3, buf);
    S4749C3 *dp, &lv = *(dp=new (buf) S4749C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4749C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4749C3)");
    check_field_offset(lv, s4749c3f0, ABISELECT(8,4), "S4749C3.s4749c3f0");
    check_field_offset(lv, s4749c3f1, ABISELECT(24,16), "S4749C3.s4749c3f1");
    check_field_offset(lv, s4749c3f2, ABISELECT(32,24), "S4749C3.s4749c3f2");
    test_class_info(&lv, &cd_S4749C3);
    dp->~S4749C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4749C3(Test_S4749C3, "S4749C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4749C3C1Ev();
extern void _ZN7S4749C3D1Ev();
Name_Map name_map_S4749C3[] = {
  NSPAIR(_ZN7S4749C3C1Ev),
  NSPAIR(_ZN7S4749C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4749C3[];
extern void _ZN7S4749C3D1Ev();
extern void _ZN7S4749C3D0Ev();
extern void _ZN7S4749C32v3Ev();
extern void _ZN7S4749C32v4Ev();
extern void _ZN7S4749C32v5Ev();
static  VTBL_ENTRY vtc_S4749C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4749C3[0]),
  (VTBL_ENTRY)&_ZN7S4749C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4749C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4749C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4749C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4749C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4749C3[];
extern  VTBL_ENTRY _ZTV7S4749C3[];
Class_Descriptor cd_S4749C3 = {  "S4749C3", // class name
  0,0,//no base classes
  &(vtc_S4749C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4749C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4749C3),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  S4749C2  : S4749C3 {
  void *s4749c2f0;
  virtual void  v6(); // _ZN7S4749C22v6Ev
  virtual void  v7(); // _ZN7S4749C22v7Ev
  ~S4749C2(); // tgen
  S4749C2(); // tgen
};
//SIG(-1 S4749C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4749C2 ::v6(){vfunc_called(this, "_ZN7S4749C22v6Ev");}
void  S4749C2 ::v7(){vfunc_called(this, "_ZN7S4749C22v7Ev");}
S4749C2 ::~S4749C2(){ note_dtor("S4749C2", this);} // tgen
S4749C2 ::S4749C2(){ note_ctor("S4749C2", this);} // tgen

static void Test_S4749C2()
{
  extern Class_Descriptor cd_S4749C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4749C2, buf);
    S4749C2 *dp, &lv = *(dp=new (buf) S4749C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4749C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4749C2)");
    check_base_class_offset(lv, (S4749C3*), 0, "S4749C2");
    check_field_offset(lv, s4749c2f0, ABISELECT(40,28), "S4749C2.s4749c2f0");
    test_class_info(&lv, &cd_S4749C2);
    dp->~S4749C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4749C2(Test_S4749C2, "S4749C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4749C2C1Ev();
extern void _ZN7S4749C2D1Ev();
Name_Map name_map_S4749C2[] = {
  NSPAIR(_ZN7S4749C2C1Ev),
  NSPAIR(_ZN7S4749C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4749C3;
extern VTBL_ENTRY _ZTI7S4749C3[];
extern  VTBL_ENTRY _ZTV7S4749C3[];
static Base_Class bases_S4749C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4749C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4749C2[];
extern void _ZN7S4749C2D1Ev();
extern void _ZN7S4749C2D0Ev();
extern void _ZN7S4749C32v3Ev();
extern void _ZN7S4749C32v4Ev();
extern void _ZN7S4749C32v5Ev();
extern void _ZN7S4749C22v6Ev();
extern void _ZN7S4749C22v7Ev();
static  VTBL_ENTRY vtc_S4749C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4749C2[0]),
  (VTBL_ENTRY)&_ZN7S4749C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4749C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4749C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4749C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4749C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4749C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4749C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4749C2[];
extern  VTBL_ENTRY _ZTV7S4749C2[];
Class_Descriptor cd_S4749C2 = {  "S4749C2", // class name
  bases_S4749C2, 1,
  &(vtc_S4749C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4749C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4749C2),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  S4749C1  : S4749C2 {
  ::S4473C12_nt s4749c1f0;
  ::S2366C19 s4749c1f1;
  ::S5075C8_nt s4749c1f2;
  char s4749c1f3;
  int s4749c1f4[2];
  virtual  ~S4749C1(); // _ZN7S4749C1D1Ev
  virtual void  v1(); // _ZN7S4749C12v1Ev
  virtual void  v2(); // _ZN7S4749C12v2Ev
  S4749C1(); // tgen
};
//SIG(1 S4749C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC4 FC6{ m Fp} FC7{ m Fp[2]} Fc Fi[2]}


 S4749C1 ::~S4749C1(){ note_dtor("S4749C1", this);}
void  S4749C1 ::v1(){vfunc_called(this, "_ZN7S4749C12v1Ev");}
void  S4749C1 ::v2(){vfunc_called(this, "_ZN7S4749C12v2Ev");}
S4749C1 ::S4749C1(){ note_ctor("S4749C1", this);} // tgen

static void Test_S4749C1()
{
  extern Class_Descriptor cd_S4749C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4749C1, buf);
    S4749C1 *dp, &lv = *(dp=new (buf) S4749C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4749C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4749C1)");
    check_base_class_offset(lv, (S4749C3*)(S4749C2*), 0, "S4749C1");
    check_base_class_offset(lv, (S4749C2*), 0, "S4749C1");
    check_field_offset(lv, s4749c1f0, ABISELECT(48,32), "S4749C1.s4749c1f0");
    check_field_offset(lv, s4749c1f1, ABISELECT(64,44), "S4749C1.s4749c1f1");
    check_field_offset(lv, s4749c1f2, ABISELECT(72,48), "S4749C1.s4749c1f2");
    check_field_offset(lv, s4749c1f3, ABISELECT(88,56), "S4749C1.s4749c1f3");
    check_field_offset(lv, s4749c1f4, ABISELECT(92,60), "S4749C1.s4749c1f4");
    test_class_info(&lv, &cd_S4749C1);
    dp->~S4749C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4749C1(Test_S4749C1, "S4749C1", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4749C1C1Ev();
extern void _ZN7S4749C1D1Ev();
Name_Map name_map_S4749C1[] = {
  NSPAIR(_ZN7S4749C1C1Ev),
  NSPAIR(_ZN7S4749C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4749C3;
extern VTBL_ENTRY _ZTI7S4749C3[];
extern  VTBL_ENTRY _ZTV7S4749C3[];
extern Class_Descriptor cd_S4749C2;
extern VTBL_ENTRY _ZTI7S4749C2[];
extern  VTBL_ENTRY _ZTV7S4749C2[];
static Base_Class bases_S4749C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4749C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4749C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4749C1[];
extern void _ZN7S4749C1D1Ev();
extern void _ZN7S4749C1D0Ev();
extern void _ZN7S4749C32v3Ev();
extern void _ZN7S4749C32v4Ev();
extern void _ZN7S4749C32v5Ev();
extern void _ZN7S4749C22v6Ev();
extern void _ZN7S4749C22v7Ev();
extern void _ZN7S4749C12v1Ev();
extern void _ZN7S4749C12v2Ev();
static  VTBL_ENTRY vtc_S4749C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4749C1[0]),
  (VTBL_ENTRY)&_ZN7S4749C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4749C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4749C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4749C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4749C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4749C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4749C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4749C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4749C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4749C1[];
extern  VTBL_ENTRY _ZTV7S4749C1[];
Class_Descriptor cd_S4749C1 = {  "S4749C1", // class name
  bases_S4749C1, 2,
  &(vtc_S4749C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4749C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4749C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4791C3  {
  ::S4473C12_nt s4791c3f0;
  int s4791c3f1[2];
  char s4791c3f2;
  virtual  ~S4791C3(); // _ZN7S4791C3D1Ev
  virtual void  v3(); // _ZN7S4791C32v3Ev
  virtual void  v4(); // _ZN7S4791C32v4Ev
  virtual void  v5(); // _ZN7S4791C32v5Ev
  S4791C3(); // tgen
};
//SIG(-1 S4791C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4791C3 ::~S4791C3(){ note_dtor("S4791C3", this);}
void  S4791C3 ::v3(){vfunc_called(this, "_ZN7S4791C32v3Ev");}
void  S4791C3 ::v4(){vfunc_called(this, "_ZN7S4791C32v4Ev");}
void  S4791C3 ::v5(){vfunc_called(this, "_ZN7S4791C32v5Ev");}
S4791C3 ::S4791C3(){ note_ctor("S4791C3", this);} // tgen

static void Test_S4791C3()
{
  extern Class_Descriptor cd_S4791C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4791C3, buf);
    S4791C3 *dp, &lv = *(dp=new (buf) S4791C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4791C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4791C3)");
    check_field_offset(lv, s4791c3f0, ABISELECT(8,4), "S4791C3.s4791c3f0");
    check_field_offset(lv, s4791c3f1, ABISELECT(24,16), "S4791C3.s4791c3f1");
    check_field_offset(lv, s4791c3f2, ABISELECT(32,24), "S4791C3.s4791c3f2");
    test_class_info(&lv, &cd_S4791C3);
    dp->~S4791C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4791C3(Test_S4791C3, "S4791C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4791C3C1Ev();
extern void _ZN7S4791C3D1Ev();
Name_Map name_map_S4791C3[] = {
  NSPAIR(_ZN7S4791C3C1Ev),
  NSPAIR(_ZN7S4791C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4791C3[];
extern void _ZN7S4791C3D1Ev();
extern void _ZN7S4791C3D0Ev();
extern void _ZN7S4791C32v3Ev();
extern void _ZN7S4791C32v4Ev();
extern void _ZN7S4791C32v5Ev();
static  VTBL_ENTRY vtc_S4791C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4791C3[0]),
  (VTBL_ENTRY)&_ZN7S4791C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4791C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4791C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4791C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4791C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4791C3[];
extern  VTBL_ENTRY _ZTV7S4791C3[];
Class_Descriptor cd_S4791C3 = {  "S4791C3", // class name
  0,0,//no base classes
  &(vtc_S4791C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4791C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4791C3),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  S4791C2  : S4791C3 {
  void *s4791c2f0;
  virtual void  v6(); // _ZN7S4791C22v6Ev
  virtual void  v7(); // _ZN7S4791C22v7Ev
  ~S4791C2(); // tgen
  S4791C2(); // tgen
};
//SIG(-1 S4791C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4791C2 ::v6(){vfunc_called(this, "_ZN7S4791C22v6Ev");}
void  S4791C2 ::v7(){vfunc_called(this, "_ZN7S4791C22v7Ev");}
S4791C2 ::~S4791C2(){ note_dtor("S4791C2", this);} // tgen
S4791C2 ::S4791C2(){ note_ctor("S4791C2", this);} // tgen

static void Test_S4791C2()
{
  extern Class_Descriptor cd_S4791C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4791C2, buf);
    S4791C2 *dp, &lv = *(dp=new (buf) S4791C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4791C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4791C2)");
    check_base_class_offset(lv, (S4791C3*), 0, "S4791C2");
    check_field_offset(lv, s4791c2f0, ABISELECT(40,28), "S4791C2.s4791c2f0");
    test_class_info(&lv, &cd_S4791C2);
    dp->~S4791C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4791C2(Test_S4791C2, "S4791C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4791C2C1Ev();
extern void _ZN7S4791C2D1Ev();
Name_Map name_map_S4791C2[] = {
  NSPAIR(_ZN7S4791C2C1Ev),
  NSPAIR(_ZN7S4791C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4791C3;
extern VTBL_ENTRY _ZTI7S4791C3[];
extern  VTBL_ENTRY _ZTV7S4791C3[];
static Base_Class bases_S4791C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4791C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4791C2[];
extern void _ZN7S4791C2D1Ev();
extern void _ZN7S4791C2D0Ev();
extern void _ZN7S4791C32v3Ev();
extern void _ZN7S4791C32v4Ev();
extern void _ZN7S4791C32v5Ev();
extern void _ZN7S4791C22v6Ev();
extern void _ZN7S4791C22v7Ev();
static  VTBL_ENTRY vtc_S4791C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4791C2[0]),
  (VTBL_ENTRY)&_ZN7S4791C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4791C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4791C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4791C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4791C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4791C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4791C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4791C2[];
extern  VTBL_ENTRY _ZTV7S4791C2[];
Class_Descriptor cd_S4791C2 = {  "S4791C2", // class name
  bases_S4791C2, 1,
  &(vtc_S4791C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4791C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4791C2),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  S4791C1  : S4791C2 {
  void *s4791c1f0;
  ::S4473C12_nt s4791c1f1;
  ::S4473C12_nt s4791c1f2;
  int s4791c1f3;
  ::S5075C8_nt s4791c1f4;
  int s4791c1f5;
  void *s4791c1f6;
  virtual  ~S4791C1(); // _ZN7S4791C1D1Ev
  virtual void  v1(); // _ZN7S4791C12v1Ev
  virtual void  v2(); // _ZN7S4791C12v2Ev
  S4791C1(); // tgen
};
//SIG(1 S4791C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 Fp FC4 FC4 Fi FC6{ m Fp[2]} Fi Fp}


 S4791C1 ::~S4791C1(){ note_dtor("S4791C1", this);}
void  S4791C1 ::v1(){vfunc_called(this, "_ZN7S4791C12v1Ev");}
void  S4791C1 ::v2(){vfunc_called(this, "_ZN7S4791C12v2Ev");}
S4791C1 ::S4791C1(){ note_ctor("S4791C1", this);} // tgen

static void Test_S4791C1()
{
  extern Class_Descriptor cd_S4791C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,21)];
    init_test(&cd_S4791C1, buf);
    S4791C1 *dp, &lv = *(dp=new (buf) S4791C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,80), "sizeof(S4791C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4791C1)");
    check_base_class_offset(lv, (S4791C3*)(S4791C2*), 0, "S4791C1");
    check_base_class_offset(lv, (S4791C2*), 0, "S4791C1");
    check_field_offset(lv, s4791c1f0, ABISELECT(48,32), "S4791C1.s4791c1f0");
    check_field_offset(lv, s4791c1f1, ABISELECT(56,36), "S4791C1.s4791c1f1");
    check_field_offset(lv, s4791c1f2, ABISELECT(72,48), "S4791C1.s4791c1f2");
    check_field_offset(lv, s4791c1f3, ABISELECT(88,60), "S4791C1.s4791c1f3");
    check_field_offset(lv, s4791c1f4, ABISELECT(96,64), "S4791C1.s4791c1f4");
    check_field_offset(lv, s4791c1f5, ABISELECT(112,72), "S4791C1.s4791c1f5");
    check_field_offset(lv, s4791c1f6, ABISELECT(120,76), "S4791C1.s4791c1f6");
    test_class_info(&lv, &cd_S4791C1);
    dp->~S4791C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4791C1(Test_S4791C1, "S4791C1", ABISELECT(128,80));

#else // __cplusplus

extern void _ZN7S4791C1C1Ev();
extern void _ZN7S4791C1D1Ev();
Name_Map name_map_S4791C1[] = {
  NSPAIR(_ZN7S4791C1C1Ev),
  NSPAIR(_ZN7S4791C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4791C3;
extern VTBL_ENTRY _ZTI7S4791C3[];
extern  VTBL_ENTRY _ZTV7S4791C3[];
extern Class_Descriptor cd_S4791C2;
extern VTBL_ENTRY _ZTI7S4791C2[];
extern  VTBL_ENTRY _ZTV7S4791C2[];
static Base_Class bases_S4791C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4791C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4791C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4791C1[];
extern void _ZN7S4791C1D1Ev();
extern void _ZN7S4791C1D0Ev();
extern void _ZN7S4791C32v3Ev();
extern void _ZN7S4791C32v4Ev();
extern void _ZN7S4791C32v5Ev();
extern void _ZN7S4791C22v6Ev();
extern void _ZN7S4791C22v7Ev();
extern void _ZN7S4791C12v1Ev();
extern void _ZN7S4791C12v2Ev();
static  VTBL_ENTRY vtc_S4791C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4791C1[0]),
  (VTBL_ENTRY)&_ZN7S4791C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4791C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4791C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4791C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4791C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4791C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4791C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4791C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4791C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4791C1[];
extern  VTBL_ENTRY _ZTV7S4791C1[];
Class_Descriptor cd_S4791C1 = {  "S4791C1", // class name
  bases_S4791C1, 2,
  &(vtc_S4791C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,80), // object size
  NSPAIRA(_ZTI7S4791C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4791C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4768C3  {
  ::S4473C12_nt s4768c3f0;
  int s4768c3f1[2];
  char s4768c3f2;
  virtual  ~S4768C3(); // _ZN7S4768C3D1Ev
  virtual void  v3(); // _ZN7S4768C32v3Ev
  virtual void  v4(); // _ZN7S4768C32v4Ev
  virtual void  v5(); // _ZN7S4768C32v5Ev
  S4768C3(); // tgen
};
//SIG(-1 S4768C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4768C3 ::~S4768C3(){ note_dtor("S4768C3", this);}
void  S4768C3 ::v3(){vfunc_called(this, "_ZN7S4768C32v3Ev");}
void  S4768C3 ::v4(){vfunc_called(this, "_ZN7S4768C32v4Ev");}
void  S4768C3 ::v5(){vfunc_called(this, "_ZN7S4768C32v5Ev");}
S4768C3 ::S4768C3(){ note_ctor("S4768C3", this);} // tgen

static void Test_S4768C3()
{
  extern Class_Descriptor cd_S4768C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4768C3, buf);
    S4768C3 *dp, &lv = *(dp=new (buf) S4768C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4768C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4768C3)");
    check_field_offset(lv, s4768c3f0, ABISELECT(8,4), "S4768C3.s4768c3f0");
    check_field_offset(lv, s4768c3f1, ABISELECT(24,16), "S4768C3.s4768c3f1");
    check_field_offset(lv, s4768c3f2, ABISELECT(32,24), "S4768C3.s4768c3f2");
    test_class_info(&lv, &cd_S4768C3);
    dp->~S4768C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4768C3(Test_S4768C3, "S4768C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4768C3C1Ev();
extern void _ZN7S4768C3D1Ev();
Name_Map name_map_S4768C3[] = {
  NSPAIR(_ZN7S4768C3C1Ev),
  NSPAIR(_ZN7S4768C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4768C3[];
extern void _ZN7S4768C3D1Ev();
extern void _ZN7S4768C3D0Ev();
extern void _ZN7S4768C32v3Ev();
extern void _ZN7S4768C32v4Ev();
extern void _ZN7S4768C32v5Ev();
static  VTBL_ENTRY vtc_S4768C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4768C3[0]),
  (VTBL_ENTRY)&_ZN7S4768C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4768C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4768C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4768C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4768C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4768C3[];
extern  VTBL_ENTRY _ZTV7S4768C3[];
Class_Descriptor cd_S4768C3 = {  "S4768C3", // class name
  0,0,//no base classes
  &(vtc_S4768C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4768C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4768C3),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  S4768C2  : S4768C3 {
  void *s4768c2f0;
  virtual void  v6(); // _ZN7S4768C22v6Ev
  virtual void  v7(); // _ZN7S4768C22v7Ev
  ~S4768C2(); // tgen
  S4768C2(); // tgen
};
//SIG(-1 S4768C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4768C2 ::v6(){vfunc_called(this, "_ZN7S4768C22v6Ev");}
void  S4768C2 ::v7(){vfunc_called(this, "_ZN7S4768C22v7Ev");}
S4768C2 ::~S4768C2(){ note_dtor("S4768C2", this);} // tgen
S4768C2 ::S4768C2(){ note_ctor("S4768C2", this);} // tgen

static void Test_S4768C2()
{
  extern Class_Descriptor cd_S4768C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4768C2, buf);
    S4768C2 *dp, &lv = *(dp=new (buf) S4768C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4768C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4768C2)");
    check_base_class_offset(lv, (S4768C3*), 0, "S4768C2");
    check_field_offset(lv, s4768c2f0, ABISELECT(40,28), "S4768C2.s4768c2f0");
    test_class_info(&lv, &cd_S4768C2);
    dp->~S4768C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4768C2(Test_S4768C2, "S4768C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4768C2C1Ev();
extern void _ZN7S4768C2D1Ev();
Name_Map name_map_S4768C2[] = {
  NSPAIR(_ZN7S4768C2C1Ev),
  NSPAIR(_ZN7S4768C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4768C3;
extern VTBL_ENTRY _ZTI7S4768C3[];
extern  VTBL_ENTRY _ZTV7S4768C3[];
static Base_Class bases_S4768C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4768C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4768C2[];
extern void _ZN7S4768C2D1Ev();
extern void _ZN7S4768C2D0Ev();
extern void _ZN7S4768C32v3Ev();
extern void _ZN7S4768C32v4Ev();
extern void _ZN7S4768C32v5Ev();
extern void _ZN7S4768C22v6Ev();
extern void _ZN7S4768C22v7Ev();
static  VTBL_ENTRY vtc_S4768C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4768C2[0]),
  (VTBL_ENTRY)&_ZN7S4768C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4768C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4768C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4768C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4768C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4768C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4768C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4768C2[];
extern  VTBL_ENTRY _ZTV7S4768C2[];
Class_Descriptor cd_S4768C2 = {  "S4768C2", // class name
  bases_S4768C2, 1,
  &(vtc_S4768C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4768C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4768C2),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  S4768C1  : S4768C2 {
  ::S2173C10_nt s4768c1f0;
  int s4768c1f1[2];
  char s4768c1f2[2];
  virtual  ~S4768C1(); // _ZN7S4768C1D1Ev
  virtual void  v1(); // _ZN7S4768C12v1Ev
  virtual void  v2(); // _ZN7S4768C12v2Ev
  S4768C1(); // tgen
};
//SIG(1 S4768C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC6{ m FC7{ FL[4]}} Fi[2] Fc[2]}


 S4768C1 ::~S4768C1(){ note_dtor("S4768C1", this);}
void  S4768C1 ::v1(){vfunc_called(this, "_ZN7S4768C12v1Ev");}
void  S4768C1 ::v2(){vfunc_called(this, "_ZN7S4768C12v2Ev");}
S4768C1 ::S4768C1(){ note_ctor("S4768C1", this);} // tgen

static void Test_S4768C1()
{
  extern Class_Descriptor cd_S4768C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,20)];
    init_test(&cd_S4768C1, buf);
    S4768C1 *dp, &lv = *(dp=new (buf) S4768C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,76), "sizeof(S4768C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4768C1)");
    check_base_class_offset(lv, (S4768C3*)(S4768C2*), 0, "S4768C1");
    check_base_class_offset(lv, (S4768C2*), 0, "S4768C1");
    check_field_offset(lv, s4768c1f0, ABISELECT(48,32), "S4768C1.s4768c1f0");
    check_field_offset(lv, s4768c1f1, ABISELECT(80,64), "S4768C1.s4768c1f1");
    check_field_offset(lv, s4768c1f2, ABISELECT(88,72), "S4768C1.s4768c1f2");
    test_class_info(&lv, &cd_S4768C1);
    dp->~S4768C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4768C1(Test_S4768C1, "S4768C1", ABISELECT(96,76));

#else // __cplusplus

extern void _ZN7S4768C1C1Ev();
extern void _ZN7S4768C1D1Ev();
Name_Map name_map_S4768C1[] = {
  NSPAIR(_ZN7S4768C1C1Ev),
  NSPAIR(_ZN7S4768C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4768C3;
extern VTBL_ENTRY _ZTI7S4768C3[];
extern  VTBL_ENTRY _ZTV7S4768C3[];
extern Class_Descriptor cd_S4768C2;
extern VTBL_ENTRY _ZTI7S4768C2[];
extern  VTBL_ENTRY _ZTV7S4768C2[];
static Base_Class bases_S4768C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4768C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4768C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4768C1[];
extern void _ZN7S4768C1D1Ev();
extern void _ZN7S4768C1D0Ev();
extern void _ZN7S4768C32v3Ev();
extern void _ZN7S4768C32v4Ev();
extern void _ZN7S4768C32v5Ev();
extern void _ZN7S4768C22v6Ev();
extern void _ZN7S4768C22v7Ev();
extern void _ZN7S4768C12v1Ev();
extern void _ZN7S4768C12v2Ev();
static  VTBL_ENTRY vtc_S4768C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4768C1[0]),
  (VTBL_ENTRY)&_ZN7S4768C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4768C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4768C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4768C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4768C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4768C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4768C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4768C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4768C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4768C1[];
extern  VTBL_ENTRY _ZTV7S4768C1[];
Class_Descriptor cd_S4768C1 = {  "S4768C1", // class name
  bases_S4768C1, 2,
  &(vtc_S4768C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,76), // object size
  NSPAIRA(_ZTI7S4768C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4768C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4767C3  {
  ::S4473C12_nt s4767c3f0;
  int s4767c3f1[2];
  char s4767c3f2;
  virtual  ~S4767C3(); // _ZN7S4767C3D1Ev
  virtual void  v3(); // _ZN7S4767C32v3Ev
  virtual void  v4(); // _ZN7S4767C32v4Ev
  virtual void  v5(); // _ZN7S4767C32v5Ev
  S4767C3(); // tgen
};
//SIG(-1 S4767C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4767C3 ::~S4767C3(){ note_dtor("S4767C3", this);}
void  S4767C3 ::v3(){vfunc_called(this, "_ZN7S4767C32v3Ev");}
void  S4767C3 ::v4(){vfunc_called(this, "_ZN7S4767C32v4Ev");}
void  S4767C3 ::v5(){vfunc_called(this, "_ZN7S4767C32v5Ev");}
S4767C3 ::S4767C3(){ note_ctor("S4767C3", this);} // tgen

static void Test_S4767C3()
{
  extern Class_Descriptor cd_S4767C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4767C3, buf);
    S4767C3 *dp, &lv = *(dp=new (buf) S4767C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4767C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4767C3)");
    check_field_offset(lv, s4767c3f0, ABISELECT(8,4), "S4767C3.s4767c3f0");
    check_field_offset(lv, s4767c3f1, ABISELECT(24,16), "S4767C3.s4767c3f1");
    check_field_offset(lv, s4767c3f2, ABISELECT(32,24), "S4767C3.s4767c3f2");
    test_class_info(&lv, &cd_S4767C3);
    dp->~S4767C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4767C3(Test_S4767C3, "S4767C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4767C3C1Ev();
extern void _ZN7S4767C3D1Ev();
Name_Map name_map_S4767C3[] = {
  NSPAIR(_ZN7S4767C3C1Ev),
  NSPAIR(_ZN7S4767C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4767C3[];
extern void _ZN7S4767C3D1Ev();
extern void _ZN7S4767C3D0Ev();
extern void _ZN7S4767C32v3Ev();
extern void _ZN7S4767C32v4Ev();
extern void _ZN7S4767C32v5Ev();
static  VTBL_ENTRY vtc_S4767C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4767C3[0]),
  (VTBL_ENTRY)&_ZN7S4767C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4767C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4767C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4767C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4767C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4767C3[];
extern  VTBL_ENTRY _ZTV7S4767C3[];
Class_Descriptor cd_S4767C3 = {  "S4767C3", // class name
  0,0,//no base classes
  &(vtc_S4767C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4767C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4767C3),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  S4767C2  : S4767C3 {
  void *s4767c2f0;
  virtual void  v6(); // _ZN7S4767C22v6Ev
  virtual void  v7(); // _ZN7S4767C22v7Ev
  ~S4767C2(); // tgen
  S4767C2(); // tgen
};
//SIG(-1 S4767C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4767C2 ::v6(){vfunc_called(this, "_ZN7S4767C22v6Ev");}
void  S4767C2 ::v7(){vfunc_called(this, "_ZN7S4767C22v7Ev");}
S4767C2 ::~S4767C2(){ note_dtor("S4767C2", this);} // tgen
S4767C2 ::S4767C2(){ note_ctor("S4767C2", this);} // tgen

static void Test_S4767C2()
{
  extern Class_Descriptor cd_S4767C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4767C2, buf);
    S4767C2 *dp, &lv = *(dp=new (buf) S4767C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4767C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4767C2)");
    check_base_class_offset(lv, (S4767C3*), 0, "S4767C2");
    check_field_offset(lv, s4767c2f0, ABISELECT(40,28), "S4767C2.s4767c2f0");
    test_class_info(&lv, &cd_S4767C2);
    dp->~S4767C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4767C2(Test_S4767C2, "S4767C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4767C2C1Ev();
extern void _ZN7S4767C2D1Ev();
Name_Map name_map_S4767C2[] = {
  NSPAIR(_ZN7S4767C2C1Ev),
  NSPAIR(_ZN7S4767C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4767C3;
extern VTBL_ENTRY _ZTI7S4767C3[];
extern  VTBL_ENTRY _ZTV7S4767C3[];
static Base_Class bases_S4767C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4767C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4767C2[];
extern void _ZN7S4767C2D1Ev();
extern void _ZN7S4767C2D0Ev();
extern void _ZN7S4767C32v3Ev();
extern void _ZN7S4767C32v4Ev();
extern void _ZN7S4767C32v5Ev();
extern void _ZN7S4767C22v6Ev();
extern void _ZN7S4767C22v7Ev();
static  VTBL_ENTRY vtc_S4767C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4767C2[0]),
  (VTBL_ENTRY)&_ZN7S4767C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4767C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4767C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4767C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4767C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4767C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4767C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4767C2[];
extern  VTBL_ENTRY _ZTV7S4767C2[];
Class_Descriptor cd_S4767C2 = {  "S4767C2", // class name
  bases_S4767C2, 1,
  &(vtc_S4767C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4767C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4767C2),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  S4767C1  : S4767C2 {
  ::S2366C7_nt s4767c1f0;
  int s4767c1f1[2];
  char s4767c1f2[2];
  virtual  ~S4767C1(); // _ZN7S4767C1D1Ev
  virtual void  v1(); // _ZN7S4767C12v1Ev
  virtual void  v2(); // _ZN7S4767C12v2Ev
  S4767C1(); // tgen
};
//SIG(1 S4767C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC6{ m FC7{ Fl[4]}} Fi[2] Fc[2]}


 S4767C1 ::~S4767C1(){ note_dtor("S4767C1", this);}
void  S4767C1 ::v1(){vfunc_called(this, "_ZN7S4767C12v1Ev");}
void  S4767C1 ::v2(){vfunc_called(this, "_ZN7S4767C12v2Ev");}
S4767C1 ::S4767C1(){ note_ctor("S4767C1", this);} // tgen

static void Test_S4767C1()
{
  extern Class_Descriptor cd_S4767C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S4767C1, buf);
    S4767C1 *dp, &lv = *(dp=new (buf) S4767C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S4767C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4767C1)");
    check_base_class_offset(lv, (S4767C3*)(S4767C2*), 0, "S4767C1");
    check_base_class_offset(lv, (S4767C2*), 0, "S4767C1");
    check_field_offset(lv, s4767c1f0, ABISELECT(48,32), "S4767C1.s4767c1f0");
    check_field_offset(lv, s4767c1f1, ABISELECT(80,48), "S4767C1.s4767c1f1");
    check_field_offset(lv, s4767c1f2, ABISELECT(88,56), "S4767C1.s4767c1f2");
    test_class_info(&lv, &cd_S4767C1);
    dp->~S4767C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4767C1(Test_S4767C1, "S4767C1", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S4767C1C1Ev();
extern void _ZN7S4767C1D1Ev();
Name_Map name_map_S4767C1[] = {
  NSPAIR(_ZN7S4767C1C1Ev),
  NSPAIR(_ZN7S4767C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4767C3;
extern VTBL_ENTRY _ZTI7S4767C3[];
extern  VTBL_ENTRY _ZTV7S4767C3[];
extern Class_Descriptor cd_S4767C2;
extern VTBL_ENTRY _ZTI7S4767C2[];
extern  VTBL_ENTRY _ZTV7S4767C2[];
static Base_Class bases_S4767C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4767C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4767C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4767C1[];
extern void _ZN7S4767C1D1Ev();
extern void _ZN7S4767C1D0Ev();
extern void _ZN7S4767C32v3Ev();
extern void _ZN7S4767C32v4Ev();
extern void _ZN7S4767C32v5Ev();
extern void _ZN7S4767C22v6Ev();
extern void _ZN7S4767C22v7Ev();
extern void _ZN7S4767C12v1Ev();
extern void _ZN7S4767C12v2Ev();
static  VTBL_ENTRY vtc_S4767C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4767C1[0]),
  (VTBL_ENTRY)&_ZN7S4767C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4767C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4767C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4767C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4767C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4767C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4767C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4767C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4767C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4767C1[];
extern  VTBL_ENTRY _ZTV7S4767C1[];
Class_Descriptor cd_S4767C1 = {  "S4767C1", // class name
  bases_S4767C1, 2,
  &(vtc_S4767C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S4767C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4767C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4368C3  {
  ::S4473C12_nt s4368c3f0;
  int s4368c3f1[2];
  char s4368c3f2;
  virtual  ~S4368C3(); // _ZN7S4368C3D1Ev
  virtual void  v2(); // _ZN7S4368C32v2Ev
  virtual void  v3(); // _ZN7S4368C32v3Ev
  virtual void  v4(); // _ZN7S4368C32v4Ev
  S4368C3(); // tgen
};
//SIG(-1 S4368C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4368C3 ::~S4368C3(){ note_dtor("S4368C3", this);}
void  S4368C3 ::v2(){vfunc_called(this, "_ZN7S4368C32v2Ev");}
void  S4368C3 ::v3(){vfunc_called(this, "_ZN7S4368C32v3Ev");}
void  S4368C3 ::v4(){vfunc_called(this, "_ZN7S4368C32v4Ev");}
S4368C3 ::S4368C3(){ note_ctor("S4368C3", this);} // tgen

static void Test_S4368C3()
{
  extern Class_Descriptor cd_S4368C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4368C3, buf);
    S4368C3 *dp, &lv = *(dp=new (buf) S4368C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4368C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4368C3)");
    check_field_offset(lv, s4368c3f0, ABISELECT(8,4), "S4368C3.s4368c3f0");
    check_field_offset(lv, s4368c3f1, ABISELECT(24,16), "S4368C3.s4368c3f1");
    check_field_offset(lv, s4368c3f2, ABISELECT(32,24), "S4368C3.s4368c3f2");
    test_class_info(&lv, &cd_S4368C3);
    dp->~S4368C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4368C3(Test_S4368C3, "S4368C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4368C3C1Ev();
extern void _ZN7S4368C3D1Ev();
Name_Map name_map_S4368C3[] = {
  NSPAIR(_ZN7S4368C3C1Ev),
  NSPAIR(_ZN7S4368C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4368C3[];
extern void _ZN7S4368C3D1Ev();
extern void _ZN7S4368C3D0Ev();
extern void _ZN7S4368C32v2Ev();
extern void _ZN7S4368C32v3Ev();
extern void _ZN7S4368C32v4Ev();
static  VTBL_ENTRY vtc_S4368C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4368C3[0]),
  (VTBL_ENTRY)&_ZN7S4368C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4368C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4368C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4368C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4368C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4368C3[];
extern  VTBL_ENTRY _ZTV7S4368C3[];
Class_Descriptor cd_S4368C3 = {  "S4368C3", // class name
  0,0,//no base classes
  &(vtc_S4368C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4368C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4368C3),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  S4368C2  : S4368C3 {
  void *s4368c2f0;
  virtual void  v5(); // _ZN7S4368C22v5Ev
  virtual void  v6(); // _ZN7S4368C22v6Ev
  ~S4368C2(); // tgen
  S4368C2(); // tgen
};
//SIG(-1 S4368C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4368C2 ::v5(){vfunc_called(this, "_ZN7S4368C22v5Ev");}
void  S4368C2 ::v6(){vfunc_called(this, "_ZN7S4368C22v6Ev");}
S4368C2 ::~S4368C2(){ note_dtor("S4368C2", this);} // tgen
S4368C2 ::S4368C2(){ note_ctor("S4368C2", this);} // tgen

static void Test_S4368C2()
{
  extern Class_Descriptor cd_S4368C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4368C2, buf);
    S4368C2 *dp, &lv = *(dp=new (buf) S4368C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4368C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4368C2)");
    check_base_class_offset(lv, (S4368C3*), 0, "S4368C2");
    check_field_offset(lv, s4368c2f0, ABISELECT(40,28), "S4368C2.s4368c2f0");
    test_class_info(&lv, &cd_S4368C2);
    dp->~S4368C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4368C2(Test_S4368C2, "S4368C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4368C2C1Ev();
extern void _ZN7S4368C2D1Ev();
Name_Map name_map_S4368C2[] = {
  NSPAIR(_ZN7S4368C2C1Ev),
  NSPAIR(_ZN7S4368C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4368C3;
extern VTBL_ENTRY _ZTI7S4368C3[];
extern  VTBL_ENTRY _ZTV7S4368C3[];
static Base_Class bases_S4368C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4368C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4368C2[];
extern void _ZN7S4368C2D1Ev();
extern void _ZN7S4368C2D0Ev();
extern void _ZN7S4368C32v2Ev();
extern void _ZN7S4368C32v3Ev();
extern void _ZN7S4368C32v4Ev();
extern void _ZN7S4368C22v5Ev();
extern void _ZN7S4368C22v6Ev();
static  VTBL_ENTRY vtc_S4368C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4368C2[0]),
  (VTBL_ENTRY)&_ZN7S4368C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4368C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4368C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4368C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4368C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4368C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4368C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4368C2[];
extern  VTBL_ENTRY _ZTV7S4368C2[];
Class_Descriptor cd_S4368C2 = {  "S4368C2", // class name
  bases_S4368C2, 1,
  &(vtc_S4368C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4368C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4368C2),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  S4368C6_nt  {
  char s4368c6f0[128];
  __tsi64 s4368c6f1[2];
  char s4368c6f2[3];
};
//SIG(-1 S4368C6_nt) C1{ Fc[128] FL[2] Fc[3]}



//skip512 S4368C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4368C1  : S4368C2 {
  ::S4473C12_nt s4368c1f0;
  ::S4368C6_nt s4368c1f1;
  void *s4368c1f2;
  char s4368c1f3;
  virtual void  v1(); // _ZN7S4368C12v1Ev
  ~S4368C1(); // tgen
  S4368C1(); // tgen
};
//SIG(1 S4368C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 FC4 FC6{ Fc[128] FL[2] Fc[3]} Fp Fc}


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

static void Test_S4368C1()
{
  extern Class_Descriptor cd_S4368C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,51)];
    init_test(&cd_S4368C1, buf);
    S4368C1 *dp, &lv = *(dp=new (buf) S4368C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,200), "sizeof(S4368C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4368C1)");
    check_base_class_offset(lv, (S4368C3*)(S4368C2*), 0, "S4368C1");
    check_base_class_offset(lv, (S4368C2*), 0, "S4368C1");
    check_field_offset(lv, s4368c1f0, ABISELECT(48,32), "S4368C1.s4368c1f0");
    check_field_offset(lv, s4368c1f1, ABISELECT(64,44), "S4368C1.s4368c1f1");
    check_field_offset(lv, s4368c1f2, ABISELECT(216,192), "S4368C1.s4368c1f2");
    check_field_offset(lv, s4368c1f3, ABISELECT(224,196), "S4368C1.s4368c1f3");
    test_class_info(&lv, &cd_S4368C1);
    dp->~S4368C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4368C1(Test_S4368C1, "S4368C1", ABISELECT(232,200));

#else // __cplusplus

extern void _ZN7S4368C1C1Ev();
extern void _ZN7S4368C1D1Ev();
Name_Map name_map_S4368C1[] = {
  NSPAIR(_ZN7S4368C1C1Ev),
  NSPAIR(_ZN7S4368C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4368C3;
extern VTBL_ENTRY _ZTI7S4368C3[];
extern  VTBL_ENTRY _ZTV7S4368C3[];
extern Class_Descriptor cd_S4368C2;
extern VTBL_ENTRY _ZTI7S4368C2[];
extern  VTBL_ENTRY _ZTV7S4368C2[];
static Base_Class bases_S4368C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4368C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4368C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4368C1[];
extern void _ZN7S4368C1D1Ev();
extern void _ZN7S4368C1D0Ev();
extern void _ZN7S4368C32v2Ev();
extern void _ZN7S4368C32v3Ev();
extern void _ZN7S4368C32v4Ev();
extern void _ZN7S4368C22v5Ev();
extern void _ZN7S4368C22v6Ev();
extern void _ZN7S4368C12v1Ev();
static  VTBL_ENTRY vtc_S4368C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4368C1[0]),
  (VTBL_ENTRY)&_ZN7S4368C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4368C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4368C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4368C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4368C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4368C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4368C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4368C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4368C1[];
extern  VTBL_ENTRY _ZTV7S4368C1[];
Class_Descriptor cd_S4368C1 = {  "S4368C1", // class name
  bases_S4368C1, 2,
  &(vtc_S4368C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,200), // object size
  NSPAIRA(_ZTI7S4368C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4368C1),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  S4777C3  {
  ::S4473C12_nt s4777c3f0;
  int s4777c3f1[2];
  char s4777c3f2;
  virtual  ~S4777C3(); // _ZN7S4777C3D1Ev
  virtual void  v3(); // _ZN7S4777C32v3Ev
  virtual void  v4(); // _ZN7S4777C32v4Ev
  virtual void  v5(); // _ZN7S4777C32v5Ev
  S4777C3(); // tgen
};
//SIG(-1 S4777C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4777C3 ::~S4777C3(){ note_dtor("S4777C3", this);}
void  S4777C3 ::v3(){vfunc_called(this, "_ZN7S4777C32v3Ev");}
void  S4777C3 ::v4(){vfunc_called(this, "_ZN7S4777C32v4Ev");}
void  S4777C3 ::v5(){vfunc_called(this, "_ZN7S4777C32v5Ev");}
S4777C3 ::S4777C3(){ note_ctor("S4777C3", this);} // tgen

static void Test_S4777C3()
{
  extern Class_Descriptor cd_S4777C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4777C3, buf);
    S4777C3 *dp, &lv = *(dp=new (buf) S4777C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4777C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4777C3)");
    check_field_offset(lv, s4777c3f0, ABISELECT(8,4), "S4777C3.s4777c3f0");
    check_field_offset(lv, s4777c3f1, ABISELECT(24,16), "S4777C3.s4777c3f1");
    check_field_offset(lv, s4777c3f2, ABISELECT(32,24), "S4777C3.s4777c3f2");
    test_class_info(&lv, &cd_S4777C3);
    dp->~S4777C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4777C3(Test_S4777C3, "S4777C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4777C3C1Ev();
extern void _ZN7S4777C3D1Ev();
Name_Map name_map_S4777C3[] = {
  NSPAIR(_ZN7S4777C3C1Ev),
  NSPAIR(_ZN7S4777C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4777C3[];
extern void _ZN7S4777C3D1Ev();
extern void _ZN7S4777C3D0Ev();
extern void _ZN7S4777C32v3Ev();
extern void _ZN7S4777C32v4Ev();
extern void _ZN7S4777C32v5Ev();
static  VTBL_ENTRY vtc_S4777C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4777C3[0]),
  (VTBL_ENTRY)&_ZN7S4777C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4777C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4777C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4777C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4777C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4777C3[];
extern  VTBL_ENTRY _ZTV7S4777C3[];
Class_Descriptor cd_S4777C3 = {  "S4777C3", // class name
  0,0,//no base classes
  &(vtc_S4777C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4777C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4777C3),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  S4777C2  : S4777C3 {
  void *s4777c2f0;
  virtual void  v6(); // _ZN7S4777C22v6Ev
  virtual void  v7(); // _ZN7S4777C22v7Ev
  ~S4777C2(); // tgen
  S4777C2(); // tgen
};
//SIG(-1 S4777C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4777C2 ::v6(){vfunc_called(this, "_ZN7S4777C22v6Ev");}
void  S4777C2 ::v7(){vfunc_called(this, "_ZN7S4777C22v7Ev");}
S4777C2 ::~S4777C2(){ note_dtor("S4777C2", this);} // tgen
S4777C2 ::S4777C2(){ note_ctor("S4777C2", this);} // tgen

static void Test_S4777C2()
{
  extern Class_Descriptor cd_S4777C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4777C2, buf);
    S4777C2 *dp, &lv = *(dp=new (buf) S4777C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4777C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4777C2)");
    check_base_class_offset(lv, (S4777C3*), 0, "S4777C2");
    check_field_offset(lv, s4777c2f0, ABISELECT(40,28), "S4777C2.s4777c2f0");
    test_class_info(&lv, &cd_S4777C2);
    dp->~S4777C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4777C2(Test_S4777C2, "S4777C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4777C2C1Ev();
extern void _ZN7S4777C2D1Ev();
Name_Map name_map_S4777C2[] = {
  NSPAIR(_ZN7S4777C2C1Ev),
  NSPAIR(_ZN7S4777C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4777C3;
extern VTBL_ENTRY _ZTI7S4777C3[];
extern  VTBL_ENTRY _ZTV7S4777C3[];
static Base_Class bases_S4777C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4777C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4777C2[];
extern void _ZN7S4777C2D1Ev();
extern void _ZN7S4777C2D0Ev();
extern void _ZN7S4777C32v3Ev();
extern void _ZN7S4777C32v4Ev();
extern void _ZN7S4777C32v5Ev();
extern void _ZN7S4777C22v6Ev();
extern void _ZN7S4777C22v7Ev();
static  VTBL_ENTRY vtc_S4777C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4777C2[0]),
  (VTBL_ENTRY)&_ZN7S4777C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4777C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4777C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4777C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4777C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4777C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4777C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4777C2[];
extern  VTBL_ENTRY _ZTV7S4777C2[];
Class_Descriptor cd_S4777C2 = {  "S4777C2", // class name
  bases_S4777C2, 1,
  &(vtc_S4777C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4777C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4777C2),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  S4777C1  : S4777C2 {
  ::S2366C19 s4777c1f0;
  ::S2366C19 s4777c1f1;
  ::S5075C8_nt s4777c1f2;
  virtual  ~S4777C1(); // _ZN7S4777C1D1Ev
  virtual void  v1(); // _ZN7S4777C12v1Ev
  virtual void  v2(); // _ZN7S4777C12v2Ev
  S4777C1(); // tgen
};
//SIG(1 S4777C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC6{ m Fp} FC6 FC7{ m Fp[2]}}


 S4777C1 ::~S4777C1(){ note_dtor("S4777C1", this);}
void  S4777C1 ::v1(){vfunc_called(this, "_ZN7S4777C12v1Ev");}
void  S4777C1 ::v2(){vfunc_called(this, "_ZN7S4777C12v2Ev");}
S4777C1 ::S4777C1(){ note_ctor("S4777C1", this);} // tgen

static void Test_S4777C1()
{
  extern Class_Descriptor cd_S4777C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S4777C1, buf);
    S4777C1 *dp, &lv = *(dp=new (buf) S4777C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S4777C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4777C1)");
    check_base_class_offset(lv, (S4777C3*)(S4777C2*), 0, "S4777C1");
    check_base_class_offset(lv, (S4777C2*), 0, "S4777C1");
    check_field_offset(lv, s4777c1f0, ABISELECT(48,32), "S4777C1.s4777c1f0");
    check_field_offset(lv, s4777c1f1, ABISELECT(56,36), "S4777C1.s4777c1f1");
    check_field_offset(lv, s4777c1f2, ABISELECT(64,40), "S4777C1.s4777c1f2");
    test_class_info(&lv, &cd_S4777C1);
    dp->~S4777C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4777C1(Test_S4777C1, "S4777C1", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S4777C1C1Ev();
extern void _ZN7S4777C1D1Ev();
Name_Map name_map_S4777C1[] = {
  NSPAIR(_ZN7S4777C1C1Ev),
  NSPAIR(_ZN7S4777C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4777C3;
extern VTBL_ENTRY _ZTI7S4777C3[];
extern  VTBL_ENTRY _ZTV7S4777C3[];
extern Class_Descriptor cd_S4777C2;
extern VTBL_ENTRY _ZTI7S4777C2[];
extern  VTBL_ENTRY _ZTV7S4777C2[];
static Base_Class bases_S4777C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4777C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4777C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4777C1[];
extern void _ZN7S4777C1D1Ev();
extern void _ZN7S4777C1D0Ev();
extern void _ZN7S4777C32v3Ev();
extern void _ZN7S4777C32v4Ev();
extern void _ZN7S4777C32v5Ev();
extern void _ZN7S4777C22v6Ev();
extern void _ZN7S4777C22v7Ev();
extern void _ZN7S4777C12v1Ev();
extern void _ZN7S4777C12v2Ev();
static  VTBL_ENTRY vtc_S4777C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4777C1[0]),
  (VTBL_ENTRY)&_ZN7S4777C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4777C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4777C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4777C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4777C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4777C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4777C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4777C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4777C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4777C1[];
extern  VTBL_ENTRY _ZTV7S4777C1[];
Class_Descriptor cd_S4777C1 = {  "S4777C1", // class name
  bases_S4777C1, 2,
  &(vtc_S4777C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S4777C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4777C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4381C3  {
  ::S4473C12_nt s4381c3f0;
  int s4381c3f1[2];
  char s4381c3f2;
  virtual  ~S4381C3(); // _ZN7S4381C3D1Ev
  virtual void  v2(); // _ZN7S4381C32v2Ev
  virtual void  v3(); // _ZN7S4381C32v3Ev
  virtual void  v4(); // _ZN7S4381C32v4Ev
  S4381C3(); // tgen
};
//SIG(-1 S4381C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4381C3 ::~S4381C3(){ note_dtor("S4381C3", this);}
void  S4381C3 ::v2(){vfunc_called(this, "_ZN7S4381C32v2Ev");}
void  S4381C3 ::v3(){vfunc_called(this, "_ZN7S4381C32v3Ev");}
void  S4381C3 ::v4(){vfunc_called(this, "_ZN7S4381C32v4Ev");}
S4381C3 ::S4381C3(){ note_ctor("S4381C3", this);} // tgen

static void Test_S4381C3()
{
  extern Class_Descriptor cd_S4381C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4381C3, buf);
    S4381C3 *dp, &lv = *(dp=new (buf) S4381C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4381C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4381C3)");
    check_field_offset(lv, s4381c3f0, ABISELECT(8,4), "S4381C3.s4381c3f0");
    check_field_offset(lv, s4381c3f1, ABISELECT(24,16), "S4381C3.s4381c3f1");
    check_field_offset(lv, s4381c3f2, ABISELECT(32,24), "S4381C3.s4381c3f2");
    test_class_info(&lv, &cd_S4381C3);
    dp->~S4381C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4381C3(Test_S4381C3, "S4381C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4381C3C1Ev();
extern void _ZN7S4381C3D1Ev();
Name_Map name_map_S4381C3[] = {
  NSPAIR(_ZN7S4381C3C1Ev),
  NSPAIR(_ZN7S4381C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4381C3[];
extern void _ZN7S4381C3D1Ev();
extern void _ZN7S4381C3D0Ev();
extern void _ZN7S4381C32v2Ev();
extern void _ZN7S4381C32v3Ev();
extern void _ZN7S4381C32v4Ev();
static  VTBL_ENTRY vtc_S4381C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4381C3[0]),
  (VTBL_ENTRY)&_ZN7S4381C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4381C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4381C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4381C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4381C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4381C3[];
extern  VTBL_ENTRY _ZTV7S4381C3[];
Class_Descriptor cd_S4381C3 = {  "S4381C3", // class name
  0,0,//no base classes
  &(vtc_S4381C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4381C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4381C3),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  S4381C2  : S4381C3 {
  void *s4381c2f0;
  virtual void  v5(); // _ZN7S4381C22v5Ev
  virtual void  v6(); // _ZN7S4381C22v6Ev
  ~S4381C2(); // tgen
  S4381C2(); // tgen
};
//SIG(-1 S4381C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4381C2 ::v5(){vfunc_called(this, "_ZN7S4381C22v5Ev");}
void  S4381C2 ::v6(){vfunc_called(this, "_ZN7S4381C22v6Ev");}
S4381C2 ::~S4381C2(){ note_dtor("S4381C2", this);} // tgen
S4381C2 ::S4381C2(){ note_ctor("S4381C2", this);} // tgen

static void Test_S4381C2()
{
  extern Class_Descriptor cd_S4381C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4381C2, buf);
    S4381C2 *dp, &lv = *(dp=new (buf) S4381C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4381C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4381C2)");
    check_base_class_offset(lv, (S4381C3*), 0, "S4381C2");
    check_field_offset(lv, s4381c2f0, ABISELECT(40,28), "S4381C2.s4381c2f0");
    test_class_info(&lv, &cd_S4381C2);
    dp->~S4381C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4381C2(Test_S4381C2, "S4381C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4381C2C1Ev();
extern void _ZN7S4381C2D1Ev();
Name_Map name_map_S4381C2[] = {
  NSPAIR(_ZN7S4381C2C1Ev),
  NSPAIR(_ZN7S4381C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4381C3;
extern VTBL_ENTRY _ZTI7S4381C3[];
extern  VTBL_ENTRY _ZTV7S4381C3[];
static Base_Class bases_S4381C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4381C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4381C2[];
extern void _ZN7S4381C2D1Ev();
extern void _ZN7S4381C2D0Ev();
extern void _ZN7S4381C32v2Ev();
extern void _ZN7S4381C32v3Ev();
extern void _ZN7S4381C32v4Ev();
extern void _ZN7S4381C22v5Ev();
extern void _ZN7S4381C22v6Ev();
static  VTBL_ENTRY vtc_S4381C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4381C2[0]),
  (VTBL_ENTRY)&_ZN7S4381C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4381C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4381C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4381C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4381C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4381C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4381C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4381C2[];
extern  VTBL_ENTRY _ZTV7S4381C2[];
Class_Descriptor cd_S4381C2 = {  "S4381C2", // class name
  bases_S4381C2, 1,
  &(vtc_S4381C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4381C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4381C2),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  S4381C1  : S4381C2 {
  ::S2173C14 s4381c1f0;
  ::S4473C12_nt s4381c1f1;
  int s4381c1f2[2];
  virtual void  v1(); // _ZN7S4381C12v1Ev
  ~S4381C1(); // tgen
  S4381C1(); // tgen
};
//SIG(1 S4381C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 FC6{ m Fp Fi[2] FC7{ m}} FC4 Fi[2]}


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

static void Test_S4381C1()
{
  extern Class_Descriptor cd_S4381C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,18)];
    init_test(&cd_S4381C1, buf);
    S4381C1 *dp, &lv = *(dp=new (buf) S4381C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S4381C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4381C1)");
    check_base_class_offset(lv, (S4381C3*)(S4381C2*), 0, "S4381C1");
    check_base_class_offset(lv, (S4381C2*), 0, "S4381C1");
    check_field_offset(lv, s4381c1f0, ABISELECT(48,32), "S4381C1.s4381c1f0");
    check_field_offset(lv, s4381c1f1, ABISELECT(72,48), "S4381C1.s4381c1f1");
    check_field_offset(lv, s4381c1f2, ABISELECT(88,60), "S4381C1.s4381c1f2");
    test_class_info(&lv, &cd_S4381C1);
    dp->~S4381C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4381C1(Test_S4381C1, "S4381C1", ABISELECT(96,68));

#else // __cplusplus

extern void _ZN7S4381C1C1Ev();
extern void _ZN7S4381C1D1Ev();
Name_Map name_map_S4381C1[] = {
  NSPAIR(_ZN7S4381C1C1Ev),
  NSPAIR(_ZN7S4381C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4381C3;
extern VTBL_ENTRY _ZTI7S4381C3[];
extern  VTBL_ENTRY _ZTV7S4381C3[];
extern Class_Descriptor cd_S4381C2;
extern VTBL_ENTRY _ZTI7S4381C2[];
extern  VTBL_ENTRY _ZTV7S4381C2[];
static Base_Class bases_S4381C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4381C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4381C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4381C1[];
extern void _ZN7S4381C1D1Ev();
extern void _ZN7S4381C1D0Ev();
extern void _ZN7S4381C32v2Ev();
extern void _ZN7S4381C32v3Ev();
extern void _ZN7S4381C32v4Ev();
extern void _ZN7S4381C22v5Ev();
extern void _ZN7S4381C22v6Ev();
extern void _ZN7S4381C12v1Ev();
static  VTBL_ENTRY vtc_S4381C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4381C1[0]),
  (VTBL_ENTRY)&_ZN7S4381C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4381C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4381C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4381C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4381C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4381C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4381C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4381C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4381C1[];
extern  VTBL_ENTRY _ZTV7S4381C1[];
Class_Descriptor cd_S4381C1 = {  "S4381C1", // class name
  bases_S4381C1, 2,
  &(vtc_S4381C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,68), // object size
  NSPAIRA(_ZTI7S4381C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4381C1),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  S4380C3  {
  ::S4473C12_nt s4380c3f0;
  int s4380c3f1[2];
  char s4380c3f2;
  virtual  ~S4380C3(); // _ZN7S4380C3D1Ev
  virtual void  v2(); // _ZN7S4380C32v2Ev
  virtual void  v3(); // _ZN7S4380C32v3Ev
  virtual void  v4(); // _ZN7S4380C32v4Ev
  S4380C3(); // tgen
};
//SIG(-1 S4380C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4380C3 ::~S4380C3(){ note_dtor("S4380C3", this);}
void  S4380C3 ::v2(){vfunc_called(this, "_ZN7S4380C32v2Ev");}
void  S4380C3 ::v3(){vfunc_called(this, "_ZN7S4380C32v3Ev");}
void  S4380C3 ::v4(){vfunc_called(this, "_ZN7S4380C32v4Ev");}
S4380C3 ::S4380C3(){ note_ctor("S4380C3", this);} // tgen

static void Test_S4380C3()
{
  extern Class_Descriptor cd_S4380C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4380C3, buf);
    S4380C3 *dp, &lv = *(dp=new (buf) S4380C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4380C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4380C3)");
    check_field_offset(lv, s4380c3f0, ABISELECT(8,4), "S4380C3.s4380c3f0");
    check_field_offset(lv, s4380c3f1, ABISELECT(24,16), "S4380C3.s4380c3f1");
    check_field_offset(lv, s4380c3f2, ABISELECT(32,24), "S4380C3.s4380c3f2");
    test_class_info(&lv, &cd_S4380C3);
    dp->~S4380C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4380C3(Test_S4380C3, "S4380C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4380C3C1Ev();
extern void _ZN7S4380C3D1Ev();
Name_Map name_map_S4380C3[] = {
  NSPAIR(_ZN7S4380C3C1Ev),
  NSPAIR(_ZN7S4380C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4380C3[];
extern void _ZN7S4380C3D1Ev();
extern void _ZN7S4380C3D0Ev();
extern void _ZN7S4380C32v2Ev();
extern void _ZN7S4380C32v3Ev();
extern void _ZN7S4380C32v4Ev();
static  VTBL_ENTRY vtc_S4380C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4380C3[0]),
  (VTBL_ENTRY)&_ZN7S4380C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4380C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4380C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4380C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4380C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4380C3[];
extern  VTBL_ENTRY _ZTV7S4380C3[];
Class_Descriptor cd_S4380C3 = {  "S4380C3", // class name
  0,0,//no base classes
  &(vtc_S4380C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4380C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4380C3),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  S4380C2  : S4380C3 {
  void *s4380c2f0;
  virtual void  v5(); // _ZN7S4380C22v5Ev
  virtual void  v6(); // _ZN7S4380C22v6Ev
  ~S4380C2(); // tgen
  S4380C2(); // tgen
};
//SIG(-1 S4380C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4380C2 ::v5(){vfunc_called(this, "_ZN7S4380C22v5Ev");}
void  S4380C2 ::v6(){vfunc_called(this, "_ZN7S4380C22v6Ev");}
S4380C2 ::~S4380C2(){ note_dtor("S4380C2", this);} // tgen
S4380C2 ::S4380C2(){ note_ctor("S4380C2", this);} // tgen

static void Test_S4380C2()
{
  extern Class_Descriptor cd_S4380C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4380C2, buf);
    S4380C2 *dp, &lv = *(dp=new (buf) S4380C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4380C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4380C2)");
    check_base_class_offset(lv, (S4380C3*), 0, "S4380C2");
    check_field_offset(lv, s4380c2f0, ABISELECT(40,28), "S4380C2.s4380c2f0");
    test_class_info(&lv, &cd_S4380C2);
    dp->~S4380C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4380C2(Test_S4380C2, "S4380C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4380C2C1Ev();
extern void _ZN7S4380C2D1Ev();
Name_Map name_map_S4380C2[] = {
  NSPAIR(_ZN7S4380C2C1Ev),
  NSPAIR(_ZN7S4380C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4380C3;
extern VTBL_ENTRY _ZTI7S4380C3[];
extern  VTBL_ENTRY _ZTV7S4380C3[];
static Base_Class bases_S4380C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4380C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4380C2[];
extern void _ZN7S4380C2D1Ev();
extern void _ZN7S4380C2D0Ev();
extern void _ZN7S4380C32v2Ev();
extern void _ZN7S4380C32v3Ev();
extern void _ZN7S4380C32v4Ev();
extern void _ZN7S4380C22v5Ev();
extern void _ZN7S4380C22v6Ev();
static  VTBL_ENTRY vtc_S4380C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4380C2[0]),
  (VTBL_ENTRY)&_ZN7S4380C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4380C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4380C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4380C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4380C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4380C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4380C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4380C2[];
extern  VTBL_ENTRY _ZTV7S4380C2[];
Class_Descriptor cd_S4380C2 = {  "S4380C2", // class name
  bases_S4380C2, 1,
  &(vtc_S4380C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4380C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4380C2),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  S4380C1  : S4380C2 {
  ::S2173C14 s4380c1f0;
  ::S4473C12_nt s4380c1f1;
  ::S4473C12_nt s4380c1f2;
  virtual void  v1(); // _ZN7S4380C12v1Ev
  ~S4380C1(); // tgen
  S4380C1(); // tgen
};
//SIG(1 S4380C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 FC6{ m Fp Fi[2] FC7{ m}} FC4 FC4}


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

static void Test_S4380C1()
{
  extern Class_Descriptor cd_S4380C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,19)];
    init_test(&cd_S4380C1, buf);
    S4380C1 *dp, &lv = *(dp=new (buf) S4380C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,72), "sizeof(S4380C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4380C1)");
    check_base_class_offset(lv, (S4380C3*)(S4380C2*), 0, "S4380C1");
    check_base_class_offset(lv, (S4380C2*), 0, "S4380C1");
    check_field_offset(lv, s4380c1f0, ABISELECT(48,32), "S4380C1.s4380c1f0");
    check_field_offset(lv, s4380c1f1, ABISELECT(72,48), "S4380C1.s4380c1f1");
    check_field_offset(lv, s4380c1f2, ABISELECT(88,60), "S4380C1.s4380c1f2");
    test_class_info(&lv, &cd_S4380C1);
    dp->~S4380C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4380C1(Test_S4380C1, "S4380C1", ABISELECT(104,72));

#else // __cplusplus

extern void _ZN7S4380C1C1Ev();
extern void _ZN7S4380C1D1Ev();
Name_Map name_map_S4380C1[] = {
  NSPAIR(_ZN7S4380C1C1Ev),
  NSPAIR(_ZN7S4380C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4380C3;
extern VTBL_ENTRY _ZTI7S4380C3[];
extern  VTBL_ENTRY _ZTV7S4380C3[];
extern Class_Descriptor cd_S4380C2;
extern VTBL_ENTRY _ZTI7S4380C2[];
extern  VTBL_ENTRY _ZTV7S4380C2[];
static Base_Class bases_S4380C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4380C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4380C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4380C1[];
extern void _ZN7S4380C1D1Ev();
extern void _ZN7S4380C1D0Ev();
extern void _ZN7S4380C32v2Ev();
extern void _ZN7S4380C32v3Ev();
extern void _ZN7S4380C32v4Ev();
extern void _ZN7S4380C22v5Ev();
extern void _ZN7S4380C22v6Ev();
extern void _ZN7S4380C12v1Ev();
static  VTBL_ENTRY vtc_S4380C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4380C1[0]),
  (VTBL_ENTRY)&_ZN7S4380C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4380C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4380C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4380C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4380C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4380C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4380C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4380C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4380C1[];
extern  VTBL_ENTRY _ZTV7S4380C1[];
Class_Descriptor cd_S4380C1 = {  "S4380C1", // class name
  bases_S4380C1, 2,
  &(vtc_S4380C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,72), // object size
  NSPAIRA(_ZTI7S4380C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4380C1),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  S2075C4  {
  ::S4473C12_nt s2075c4f0;
  int s2075c4f1[2];
  char s2075c4f2;
  virtual  ~S2075C4(); // _ZN7S2075C4D1Ev
  virtual void  v2(); // _ZN7S2075C42v2Ev
  virtual void  v3(); // _ZN7S2075C42v3Ev
  virtual void  v4(); // _ZN7S2075C42v4Ev
  S2075C4(); // tgen
};
//SIG(-1 S2075C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2075C4 ::~S2075C4(){ note_dtor("S2075C4", this);}
void  S2075C4 ::v2(){vfunc_called(this, "_ZN7S2075C42v2Ev");}
void  S2075C4 ::v3(){vfunc_called(this, "_ZN7S2075C42v3Ev");}
void  S2075C4 ::v4(){vfunc_called(this, "_ZN7S2075C42v4Ev");}
S2075C4 ::S2075C4(){ note_ctor("S2075C4", this);} // tgen

static void Test_S2075C4()
{
  extern Class_Descriptor cd_S2075C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2075C4, buf);
    S2075C4 *dp, &lv = *(dp=new (buf) S2075C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2075C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2075C4)");
    check_field_offset(lv, s2075c4f0, ABISELECT(8,4), "S2075C4.s2075c4f0");
    check_field_offset(lv, s2075c4f1, ABISELECT(24,16), "S2075C4.s2075c4f1");
    check_field_offset(lv, s2075c4f2, ABISELECT(32,24), "S2075C4.s2075c4f2");
    test_class_info(&lv, &cd_S2075C4);
    dp->~S2075C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2075C4(Test_S2075C4, "S2075C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2075C4C1Ev();
extern void _ZN7S2075C4D1Ev();
Name_Map name_map_S2075C4[] = {
  NSPAIR(_ZN7S2075C4C1Ev),
  NSPAIR(_ZN7S2075C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2075C4[];
extern void _ZN7S2075C4D1Ev();
extern void _ZN7S2075C4D0Ev();
extern void _ZN7S2075C42v2Ev();
extern void _ZN7S2075C42v3Ev();
extern void _ZN7S2075C42v4Ev();
static  VTBL_ENTRY vtc_S2075C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2075C4[0]),
  (VTBL_ENTRY)&_ZN7S2075C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2075C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2075C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2075C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2075C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S2075C4[];
extern  VTBL_ENTRY _ZTV7S2075C4[];
Class_Descriptor cd_S2075C4 = {  "S2075C4", // class name
  0,0,//no base classes
  &(vtc_S2075C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2075C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2075C4),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  S2075C3  : S2075C4 {
  void *s2075c3f0;
  virtual void  v5(); // _ZN7S2075C32v5Ev
  virtual void  v6(); // _ZN7S2075C32v6Ev
  ~S2075C3(); // tgen
  S2075C3(); // tgen
};
//SIG(-1 S2075C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2075C3 ::v5(){vfunc_called(this, "_ZN7S2075C32v5Ev");}
void  S2075C3 ::v6(){vfunc_called(this, "_ZN7S2075C32v6Ev");}
S2075C3 ::~S2075C3(){ note_dtor("S2075C3", this);} // tgen
S2075C3 ::S2075C3(){ note_ctor("S2075C3", this);} // tgen

static void Test_S2075C3()
{
  extern Class_Descriptor cd_S2075C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2075C3, buf);
    S2075C3 *dp, &lv = *(dp=new (buf) S2075C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2075C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2075C3)");
    check_base_class_offset(lv, (S2075C4*), 0, "S2075C3");
    check_field_offset(lv, s2075c3f0, ABISELECT(40,28), "S2075C3.s2075c3f0");
    test_class_info(&lv, &cd_S2075C3);
    dp->~S2075C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2075C3(Test_S2075C3, "S2075C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2075C3C1Ev();
extern void _ZN7S2075C3D1Ev();
Name_Map name_map_S2075C3[] = {
  NSPAIR(_ZN7S2075C3C1Ev),
  NSPAIR(_ZN7S2075C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2075C4;
extern VTBL_ENTRY _ZTI7S2075C4[];
extern  VTBL_ENTRY _ZTV7S2075C4[];
static Base_Class bases_S2075C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2075C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2075C3[];
extern void _ZN7S2075C3D1Ev();
extern void _ZN7S2075C3D0Ev();
extern void _ZN7S2075C42v2Ev();
extern void _ZN7S2075C42v3Ev();
extern void _ZN7S2075C42v4Ev();
extern void _ZN7S2075C32v5Ev();
extern void _ZN7S2075C32v6Ev();
static  VTBL_ENTRY vtc_S2075C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2075C3[0]),
  (VTBL_ENTRY)&_ZN7S2075C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2075C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2075C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2075C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2075C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2075C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2075C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2075C3[];
extern  VTBL_ENTRY _ZTV7S2075C3[];
Class_Descriptor cd_S2075C3 = {  "S2075C3", // class name
  bases_S2075C3, 1,
  &(vtc_S2075C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2075C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2075C3),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  S2075C2  : S2075C3 {
  int s2075c2f0;
  void *s2075c2f1;
  ::S2366C19 s2075c2f2;
  int s2075c2f3;
  virtual void  v7(); // _ZN7S2075C22v7Ev
  ~S2075C2(); // tgen
  S2075C2(); // tgen
};
//SIG(-1 S2075C2) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 Fi Fp FC6{ m Fp} Fi}


void  S2075C2 ::v7(){vfunc_called(this, "_ZN7S2075C22v7Ev");}
S2075C2 ::~S2075C2(){ note_dtor("S2075C2", this);} // tgen
S2075C2 ::S2075C2(){ note_ctor("S2075C2", this);} // tgen

static void Test_S2075C2()
{
  extern Class_Descriptor cd_S2075C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S2075C2, buf);
    S2075C2 *dp, &lv = *(dp=new (buf) S2075C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S2075C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2075C2)");
    check_base_class_offset(lv, (S2075C4*)(S2075C3*), 0, "S2075C2");
    check_base_class_offset(lv, (S2075C3*), 0, "S2075C2");
    check_field_offset(lv, s2075c2f0, ABISELECT(48,32), "S2075C2.s2075c2f0");
    check_field_offset(lv, s2075c2f1, ABISELECT(56,36), "S2075C2.s2075c2f1");
    check_field_offset(lv, s2075c2f2, ABISELECT(64,40), "S2075C2.s2075c2f2");
    check_field_offset(lv, s2075c2f3, ABISELECT(72,44), "S2075C2.s2075c2f3");
    test_class_info(&lv, &cd_S2075C2);
    dp->~S2075C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2075C2(Test_S2075C2, "S2075C2", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S2075C2C1Ev();
extern void _ZN7S2075C2D1Ev();
Name_Map name_map_S2075C2[] = {
  NSPAIR(_ZN7S2075C2C1Ev),
  NSPAIR(_ZN7S2075C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2075C4;
extern VTBL_ENTRY _ZTI7S2075C4[];
extern  VTBL_ENTRY _ZTV7S2075C4[];
extern Class_Descriptor cd_S2075C3;
extern VTBL_ENTRY _ZTI7S2075C3[];
extern  VTBL_ENTRY _ZTV7S2075C3[];
static Base_Class bases_S2075C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2075C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2075C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2075C2[];
extern void _ZN7S2075C2D1Ev();
extern void _ZN7S2075C2D0Ev();
extern void _ZN7S2075C42v2Ev();
extern void _ZN7S2075C42v3Ev();
extern void _ZN7S2075C42v4Ev();
extern void _ZN7S2075C32v5Ev();
extern void _ZN7S2075C32v6Ev();
extern void _ZN7S2075C22v7Ev();
static  VTBL_ENTRY vtc_S2075C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2075C2[0]),
  (VTBL_ENTRY)&_ZN7S2075C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2075C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2075C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2075C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2075C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2075C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2075C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2075C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S2075C2[];
extern  VTBL_ENTRY _ZTV7S2075C2[];
Class_Descriptor cd_S2075C2 = {  "S2075C2", // class name
  bases_S2075C2, 2,
  &(vtc_S2075C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S2075C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2075C2),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  S2075C1  : S2075C2 {
  __tsi64 s2075c1f0;
  virtual void  v1(); // _ZN7S2075C12v1Ev
  ~S2075C1(); // tgen
  S2075C1(); // tgen
};
//SIG(1 S2075C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v5 v6 Fp} v7 Fi Fp FC7{ m Fp} Fi} v1 FL}


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

static void Test_S2075C1()
{
  extern Class_Descriptor cd_S2075C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S2075C1, buf);
    S2075C1 *dp, &lv = *(dp=new (buf) S2075C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S2075C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2075C1)");
    check_base_class_offset(lv, (S2075C4*)(S2075C3*)(S2075C2*), 0, "S2075C1");
    check_base_class_offset(lv, (S2075C3*)(S2075C2*), 0, "S2075C1");
    check_base_class_offset(lv, (S2075C2*), 0, "S2075C1");
    check_field_offset(lv, s2075c1f0, ABISELECT(80,48), "S2075C1.s2075c1f0");
    test_class_info(&lv, &cd_S2075C1);
    dp->~S2075C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2075C1(Test_S2075C1, "S2075C1", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S2075C1C1Ev();
extern void _ZN7S2075C1D1Ev();
Name_Map name_map_S2075C1[] = {
  NSPAIR(_ZN7S2075C1C1Ev),
  NSPAIR(_ZN7S2075C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2075C4;
extern VTBL_ENTRY _ZTI7S2075C4[];
extern  VTBL_ENTRY _ZTV7S2075C4[];
extern Class_Descriptor cd_S2075C3;
extern VTBL_ENTRY _ZTI7S2075C3[];
extern  VTBL_ENTRY _ZTV7S2075C3[];
extern Class_Descriptor cd_S2075C2;
extern VTBL_ENTRY _ZTI7S2075C2[];
extern  VTBL_ENTRY _ZTV7S2075C2[];
static Base_Class bases_S2075C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2075C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2075C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2075C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2075C1[];
extern void _ZN7S2075C1D1Ev();
extern void _ZN7S2075C1D0Ev();
extern void _ZN7S2075C42v2Ev();
extern void _ZN7S2075C42v3Ev();
extern void _ZN7S2075C42v4Ev();
extern void _ZN7S2075C32v5Ev();
extern void _ZN7S2075C32v6Ev();
extern void _ZN7S2075C22v7Ev();
extern void _ZN7S2075C12v1Ev();
static  VTBL_ENTRY vtc_S2075C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2075C1[0]),
  (VTBL_ENTRY)&_ZN7S2075C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2075C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2075C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2075C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2075C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2075C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2075C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2075C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2075C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S2075C1[];
extern  VTBL_ENTRY _ZTV7S2075C1[];
Class_Descriptor cd_S2075C1 = {  "S2075C1", // class name
  bases_S2075C1, 3,
  &(vtc_S2075C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S2075C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2075C1),11, //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  S17901C1  {
  void *s17901c1f0[2];
  ::S4467C12 s17901c1f1;
  void  mf17901c1(); // _ZN8S17901C19mf17901c1Ev
};
//SIG(1 S17901C1) C1{ m Fp[2] FC2{ FC3{ m Fp Fi FC4{ m}} FC5{ m FC6{ vd m FL Fc} FC6} FC3 FC7{ m Fp Fi FC4 FC8{ m}}}}


void  S17901C1 ::mf17901c1(){}

static void Test_S17901C1()
{
  {
    init_simple_test("S17901C1");
    S17901C1 lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S17901C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17901C1)");
    check_field_offset(lv, s17901c1f0, 0, "S17901C1.s17901c1f0");
    check_field_offset(lv, s17901c1f1, ABISELECT(16,8), "S17901C1.s17901c1f1");
  }
}
static Arrange_To_Call_Me vS17901C1(Test_S17901C1, "S17901C1", ABISELECT(112,76));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2076C4  {
  ::S4473C12_nt s2076c4f0;
  int s2076c4f1[2];
  char s2076c4f2;
  virtual  ~S2076C4(); // _ZN7S2076C4D1Ev
  virtual void  v2(); // _ZN7S2076C42v2Ev
  virtual void  v3(); // _ZN7S2076C42v3Ev
  virtual void  v4(); // _ZN7S2076C42v4Ev
  S2076C4(); // tgen
};
//SIG(-1 S2076C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2076C4 ::~S2076C4(){ note_dtor("S2076C4", this);}
void  S2076C4 ::v2(){vfunc_called(this, "_ZN7S2076C42v2Ev");}
void  S2076C4 ::v3(){vfunc_called(this, "_ZN7S2076C42v3Ev");}
void  S2076C4 ::v4(){vfunc_called(this, "_ZN7S2076C42v4Ev");}
S2076C4 ::S2076C4(){ note_ctor("S2076C4", this);} // tgen

static void Test_S2076C4()
{
  extern Class_Descriptor cd_S2076C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2076C4, buf);
    S2076C4 *dp, &lv = *(dp=new (buf) S2076C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2076C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2076C4)");
    check_field_offset(lv, s2076c4f0, ABISELECT(8,4), "S2076C4.s2076c4f0");
    check_field_offset(lv, s2076c4f1, ABISELECT(24,16), "S2076C4.s2076c4f1");
    check_field_offset(lv, s2076c4f2, ABISELECT(32,24), "S2076C4.s2076c4f2");
    test_class_info(&lv, &cd_S2076C4);
    dp->~S2076C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2076C4(Test_S2076C4, "S2076C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2076C4C1Ev();
extern void _ZN7S2076C4D1Ev();
Name_Map name_map_S2076C4[] = {
  NSPAIR(_ZN7S2076C4C1Ev),
  NSPAIR(_ZN7S2076C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2076C4[];
extern void _ZN7S2076C4D1Ev();
extern void _ZN7S2076C4D0Ev();
extern void _ZN7S2076C42v2Ev();
extern void _ZN7S2076C42v3Ev();
extern void _ZN7S2076C42v4Ev();
static  VTBL_ENTRY vtc_S2076C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2076C4[0]),
  (VTBL_ENTRY)&_ZN7S2076C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2076C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2076C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2076C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2076C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S2076C4[];
extern  VTBL_ENTRY _ZTV7S2076C4[];
Class_Descriptor cd_S2076C4 = {  "S2076C4", // class name
  0,0,//no base classes
  &(vtc_S2076C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2076C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2076C4),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  S2076C3  : S2076C4 {
  void *s2076c3f0;
  virtual void  v5(); // _ZN7S2076C32v5Ev
  virtual void  v6(); // _ZN7S2076C32v6Ev
  ~S2076C3(); // tgen
  S2076C3(); // tgen
};
//SIG(-1 S2076C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2076C3 ::v5(){vfunc_called(this, "_ZN7S2076C32v5Ev");}
void  S2076C3 ::v6(){vfunc_called(this, "_ZN7S2076C32v6Ev");}
S2076C3 ::~S2076C3(){ note_dtor("S2076C3", this);} // tgen
S2076C3 ::S2076C3(){ note_ctor("S2076C3", this);} // tgen

static void Test_S2076C3()
{
  extern Class_Descriptor cd_S2076C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2076C3, buf);
    S2076C3 *dp, &lv = *(dp=new (buf) S2076C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2076C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2076C3)");
    check_base_class_offset(lv, (S2076C4*), 0, "S2076C3");
    check_field_offset(lv, s2076c3f0, ABISELECT(40,28), "S2076C3.s2076c3f0");
    test_class_info(&lv, &cd_S2076C3);
    dp->~S2076C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2076C3(Test_S2076C3, "S2076C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2076C3C1Ev();
extern void _ZN7S2076C3D1Ev();
Name_Map name_map_S2076C3[] = {
  NSPAIR(_ZN7S2076C3C1Ev),
  NSPAIR(_ZN7S2076C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2076C4;
extern VTBL_ENTRY _ZTI7S2076C4[];
extern  VTBL_ENTRY _ZTV7S2076C4[];
static Base_Class bases_S2076C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2076C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2076C3[];
extern void _ZN7S2076C3D1Ev();
extern void _ZN7S2076C3D0Ev();
extern void _ZN7S2076C42v2Ev();
extern void _ZN7S2076C42v3Ev();
extern void _ZN7S2076C42v4Ev();
extern void _ZN7S2076C32v5Ev();
extern void _ZN7S2076C32v6Ev();
static  VTBL_ENTRY vtc_S2076C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2076C3[0]),
  (VTBL_ENTRY)&_ZN7S2076C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2076C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2076C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2076C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2076C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2076C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2076C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2076C3[];
extern  VTBL_ENTRY _ZTV7S2076C3[];
Class_Descriptor cd_S2076C3 = {  "S2076C3", // class name
  bases_S2076C3, 1,
  &(vtc_S2076C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2076C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2076C3),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  S2076C2  : S2076C3 {
  int s2076c2f0;
  void *s2076c2f1;
  ::S2366C19 s2076c2f2;
  int s2076c2f3;
  virtual void  v7(); // _ZN7S2076C22v7Ev
  ~S2076C2(); // tgen
  S2076C2(); // tgen
};
//SIG(-1 S2076C2) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 Fi Fp FC6{ m Fp} Fi}


void  S2076C2 ::v7(){vfunc_called(this, "_ZN7S2076C22v7Ev");}
S2076C2 ::~S2076C2(){ note_dtor("S2076C2", this);} // tgen
S2076C2 ::S2076C2(){ note_ctor("S2076C2", this);} // tgen

static void Test_S2076C2()
{
  extern Class_Descriptor cd_S2076C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S2076C2, buf);
    S2076C2 *dp, &lv = *(dp=new (buf) S2076C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S2076C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2076C2)");
    check_base_class_offset(lv, (S2076C4*)(S2076C3*), 0, "S2076C2");
    check_base_class_offset(lv, (S2076C3*), 0, "S2076C2");
    check_field_offset(lv, s2076c2f0, ABISELECT(48,32), "S2076C2.s2076c2f0");
    check_field_offset(lv, s2076c2f1, ABISELECT(56,36), "S2076C2.s2076c2f1");
    check_field_offset(lv, s2076c2f2, ABISELECT(64,40), "S2076C2.s2076c2f2");
    check_field_offset(lv, s2076c2f3, ABISELECT(72,44), "S2076C2.s2076c2f3");
    test_class_info(&lv, &cd_S2076C2);
    dp->~S2076C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2076C2(Test_S2076C2, "S2076C2", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S2076C2C1Ev();
extern void _ZN7S2076C2D1Ev();
Name_Map name_map_S2076C2[] = {
  NSPAIR(_ZN7S2076C2C1Ev),
  NSPAIR(_ZN7S2076C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2076C4;
extern VTBL_ENTRY _ZTI7S2076C4[];
extern  VTBL_ENTRY _ZTV7S2076C4[];
extern Class_Descriptor cd_S2076C3;
extern VTBL_ENTRY _ZTI7S2076C3[];
extern  VTBL_ENTRY _ZTV7S2076C3[];
static Base_Class bases_S2076C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2076C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2076C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2076C2[];
extern void _ZN7S2076C2D1Ev();
extern void _ZN7S2076C2D0Ev();
extern void _ZN7S2076C42v2Ev();
extern void _ZN7S2076C42v3Ev();
extern void _ZN7S2076C42v4Ev();
extern void _ZN7S2076C32v5Ev();
extern void _ZN7S2076C32v6Ev();
extern void _ZN7S2076C22v7Ev();
static  VTBL_ENTRY vtc_S2076C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2076C2[0]),
  (VTBL_ENTRY)&_ZN7S2076C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2076C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2076C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2076C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2076C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2076C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2076C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2076C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S2076C2[];
extern  VTBL_ENTRY _ZTV7S2076C2[];
Class_Descriptor cd_S2076C2 = {  "S2076C2", // class name
  bases_S2076C2, 2,
  &(vtc_S2076C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S2076C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2076C2),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  S2076C1  : S2076C2 {
  virtual void  v1(); // _ZN7S2076C12v1Ev
  ~S2076C1(); // tgen
  S2076C1(); // tgen
};
//SIG(1 S2076C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v5 v6 Fp} v7 Fi Fp FC7{ m Fp} Fi} v1}


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

static void Test_S2076C1()
{
  extern Class_Descriptor cd_S2076C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S2076C1, buf);
    S2076C1 *dp, &lv = *(dp=new (buf) S2076C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S2076C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2076C1)");
    check_base_class_offset(lv, (S2076C4*)(S2076C3*)(S2076C2*), 0, "S2076C1");
    check_base_class_offset(lv, (S2076C3*)(S2076C2*), 0, "S2076C1");
    check_base_class_offset(lv, (S2076C2*), 0, "S2076C1");
    test_class_info(&lv, &cd_S2076C1);
    dp->~S2076C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2076C1(Test_S2076C1, "S2076C1", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S2076C1C1Ev();
extern void _ZN7S2076C1D1Ev();
Name_Map name_map_S2076C1[] = {
  NSPAIR(_ZN7S2076C1C1Ev),
  NSPAIR(_ZN7S2076C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2076C4;
extern VTBL_ENTRY _ZTI7S2076C4[];
extern  VTBL_ENTRY _ZTV7S2076C4[];
extern Class_Descriptor cd_S2076C3;
extern VTBL_ENTRY _ZTI7S2076C3[];
extern  VTBL_ENTRY _ZTV7S2076C3[];
extern Class_Descriptor cd_S2076C2;
extern VTBL_ENTRY _ZTI7S2076C2[];
extern  VTBL_ENTRY _ZTV7S2076C2[];
static Base_Class bases_S2076C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2076C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2076C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2076C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2076C1[];
extern void _ZN7S2076C1D1Ev();
extern void _ZN7S2076C1D0Ev();
extern void _ZN7S2076C42v2Ev();
extern void _ZN7S2076C42v3Ev();
extern void _ZN7S2076C42v4Ev();
extern void _ZN7S2076C32v5Ev();
extern void _ZN7S2076C32v6Ev();
extern void _ZN7S2076C22v7Ev();
extern void _ZN7S2076C12v1Ev();
static  VTBL_ENTRY vtc_S2076C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2076C1[0]),
  (VTBL_ENTRY)&_ZN7S2076C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2076C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2076C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2076C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2076C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2076C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2076C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2076C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2076C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S2076C1[];
extern  VTBL_ENTRY _ZTV7S2076C1[];
Class_Descriptor cd_S2076C1 = {  "S2076C1", // class name
  bases_S2076C1, 3,
  &(vtc_S2076C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S2076C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2076C1),11, //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  S4364C3  {
  ::S4473C12_nt s4364c3f0;
  int s4364c3f1[2];
  char s4364c3f2;
  virtual  ~S4364C3(); // _ZN7S4364C3D1Ev
  virtual void  v2(); // _ZN7S4364C32v2Ev
  virtual void  v3(); // _ZN7S4364C32v3Ev
  virtual void  v4(); // _ZN7S4364C32v4Ev
  S4364C3(); // tgen
};
//SIG(-1 S4364C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4364C3 ::~S4364C3(){ note_dtor("S4364C3", this);}
void  S4364C3 ::v2(){vfunc_called(this, "_ZN7S4364C32v2Ev");}
void  S4364C3 ::v3(){vfunc_called(this, "_ZN7S4364C32v3Ev");}
void  S4364C3 ::v4(){vfunc_called(this, "_ZN7S4364C32v4Ev");}
S4364C3 ::S4364C3(){ note_ctor("S4364C3", this);} // tgen

static void Test_S4364C3()
{
  extern Class_Descriptor cd_S4364C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4364C3, buf);
    S4364C3 *dp, &lv = *(dp=new (buf) S4364C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4364C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4364C3)");
    check_field_offset(lv, s4364c3f0, ABISELECT(8,4), "S4364C3.s4364c3f0");
    check_field_offset(lv, s4364c3f1, ABISELECT(24,16), "S4364C3.s4364c3f1");
    check_field_offset(lv, s4364c3f2, ABISELECT(32,24), "S4364C3.s4364c3f2");
    test_class_info(&lv, &cd_S4364C3);
    dp->~S4364C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4364C3(Test_S4364C3, "S4364C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4364C3C1Ev();
extern void _ZN7S4364C3D1Ev();
Name_Map name_map_S4364C3[] = {
  NSPAIR(_ZN7S4364C3C1Ev),
  NSPAIR(_ZN7S4364C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4364C3[];
extern void _ZN7S4364C3D1Ev();
extern void _ZN7S4364C3D0Ev();
extern void _ZN7S4364C32v2Ev();
extern void _ZN7S4364C32v3Ev();
extern void _ZN7S4364C32v4Ev();
static  VTBL_ENTRY vtc_S4364C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4364C3[0]),
  (VTBL_ENTRY)&_ZN7S4364C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4364C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4364C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4364C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4364C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4364C3[];
extern  VTBL_ENTRY _ZTV7S4364C3[];
Class_Descriptor cd_S4364C3 = {  "S4364C3", // class name
  0,0,//no base classes
  &(vtc_S4364C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4364C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4364C3),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  S4364C2  : S4364C3 {
  void *s4364c2f0;
  virtual void  v5(); // _ZN7S4364C22v5Ev
  virtual void  v6(); // _ZN7S4364C22v6Ev
  ~S4364C2(); // tgen
  S4364C2(); // tgen
};
//SIG(-1 S4364C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4364C2 ::v5(){vfunc_called(this, "_ZN7S4364C22v5Ev");}
void  S4364C2 ::v6(){vfunc_called(this, "_ZN7S4364C22v6Ev");}
S4364C2 ::~S4364C2(){ note_dtor("S4364C2", this);} // tgen
S4364C2 ::S4364C2(){ note_ctor("S4364C2", this);} // tgen

static void Test_S4364C2()
{
  extern Class_Descriptor cd_S4364C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4364C2, buf);
    S4364C2 *dp, &lv = *(dp=new (buf) S4364C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4364C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4364C2)");
    check_base_class_offset(lv, (S4364C3*), 0, "S4364C2");
    check_field_offset(lv, s4364c2f0, ABISELECT(40,28), "S4364C2.s4364c2f0");
    test_class_info(&lv, &cd_S4364C2);
    dp->~S4364C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4364C2(Test_S4364C2, "S4364C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4364C2C1Ev();
extern void _ZN7S4364C2D1Ev();
Name_Map name_map_S4364C2[] = {
  NSPAIR(_ZN7S4364C2C1Ev),
  NSPAIR(_ZN7S4364C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4364C3;
extern VTBL_ENTRY _ZTI7S4364C3[];
extern  VTBL_ENTRY _ZTV7S4364C3[];
static Base_Class bases_S4364C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4364C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4364C2[];
extern void _ZN7S4364C2D1Ev();
extern void _ZN7S4364C2D0Ev();
extern void _ZN7S4364C32v2Ev();
extern void _ZN7S4364C32v3Ev();
extern void _ZN7S4364C32v4Ev();
extern void _ZN7S4364C22v5Ev();
extern void _ZN7S4364C22v6Ev();
static  VTBL_ENTRY vtc_S4364C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4364C2[0]),
  (VTBL_ENTRY)&_ZN7S4364C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4364C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4364C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4364C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4364C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4364C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4364C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4364C2[];
extern  VTBL_ENTRY _ZTV7S4364C2[];
Class_Descriptor cd_S4364C2 = {  "S4364C2", // class name
  bases_S4364C2, 1,
  &(vtc_S4364C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4364C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4364C2),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  S4364C1  : S4364C2 {
  ::S4473C12_nt s4364c1f0;
  ::S4473C12_nt s4364c1f1;
  int s4364c1f2;
  ::S2366C19 s4364c1f3;
  void *s4364c1f4;
  virtual void  v1(); // _ZN7S4364C12v1Ev
  ~S4364C1(); // tgen
  S4364C1(); // tgen
};
//SIG(1 S4364C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 FC4 FC4 Fi FC6{ m Fp} Fp}


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

static void Test_S4364C1()
{
  extern Class_Descriptor cd_S4364C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4364C1, buf);
    S4364C1 *dp, &lv = *(dp=new (buf) S4364C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4364C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4364C1)");
    check_base_class_offset(lv, (S4364C3*)(S4364C2*), 0, "S4364C1");
    check_base_class_offset(lv, (S4364C2*), 0, "S4364C1");
    check_field_offset(lv, s4364c1f0, ABISELECT(48,32), "S4364C1.s4364c1f0");
    check_field_offset(lv, s4364c1f1, ABISELECT(64,44), "S4364C1.s4364c1f1");
    check_field_offset(lv, s4364c1f2, ABISELECT(80,56), "S4364C1.s4364c1f2");
    check_field_offset(lv, s4364c1f3, ABISELECT(88,60), "S4364C1.s4364c1f3");
    check_field_offset(lv, s4364c1f4, ABISELECT(96,64), "S4364C1.s4364c1f4");
    test_class_info(&lv, &cd_S4364C1);
    dp->~S4364C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4364C1(Test_S4364C1, "S4364C1", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4364C1C1Ev();
extern void _ZN7S4364C1D1Ev();
Name_Map name_map_S4364C1[] = {
  NSPAIR(_ZN7S4364C1C1Ev),
  NSPAIR(_ZN7S4364C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4364C3;
extern VTBL_ENTRY _ZTI7S4364C3[];
extern  VTBL_ENTRY _ZTV7S4364C3[];
extern Class_Descriptor cd_S4364C2;
extern VTBL_ENTRY _ZTI7S4364C2[];
extern  VTBL_ENTRY _ZTV7S4364C2[];
static Base_Class bases_S4364C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4364C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4364C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4364C1[];
extern void _ZN7S4364C1D1Ev();
extern void _ZN7S4364C1D0Ev();
extern void _ZN7S4364C32v2Ev();
extern void _ZN7S4364C32v3Ev();
extern void _ZN7S4364C32v4Ev();
extern void _ZN7S4364C22v5Ev();
extern void _ZN7S4364C22v6Ev();
extern void _ZN7S4364C12v1Ev();
static  VTBL_ENTRY vtc_S4364C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4364C1[0]),
  (VTBL_ENTRY)&_ZN7S4364C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4364C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4364C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4364C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4364C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4364C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4364C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4364C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4364C1[];
extern  VTBL_ENTRY _ZTV7S4364C1[];
Class_Descriptor cd_S4364C1 = {  "S4364C1", // class name
  bases_S4364C1, 2,
  &(vtc_S4364C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4364C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4364C1),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  S5092C3  {
  ::S4473C12_nt s5092c3f0;
  int s5092c3f1[2];
  char s5092c3f2;
  virtual  ~S5092C3(); // _ZN7S5092C3D1Ev
  virtual void  v4(); // _ZN7S5092C32v4Ev
  virtual void  v5(); // _ZN7S5092C32v5Ev
  virtual void  v6(); // _ZN7S5092C32v6Ev
  S5092C3(); // tgen
};
//SIG(-1 S5092C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5092C3 ::~S5092C3(){ note_dtor("S5092C3", this);}
void  S5092C3 ::v4(){vfunc_called(this, "_ZN7S5092C32v4Ev");}
void  S5092C3 ::v5(){vfunc_called(this, "_ZN7S5092C32v5Ev");}
void  S5092C3 ::v6(){vfunc_called(this, "_ZN7S5092C32v6Ev");}
S5092C3 ::S5092C3(){ note_ctor("S5092C3", this);} // tgen

static void Test_S5092C3()
{
  extern Class_Descriptor cd_S5092C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5092C3, buf);
    S5092C3 *dp, &lv = *(dp=new (buf) S5092C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5092C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5092C3)");
    check_field_offset(lv, s5092c3f0, ABISELECT(8,4), "S5092C3.s5092c3f0");
    check_field_offset(lv, s5092c3f1, ABISELECT(24,16), "S5092C3.s5092c3f1");
    check_field_offset(lv, s5092c3f2, ABISELECT(32,24), "S5092C3.s5092c3f2");
    test_class_info(&lv, &cd_S5092C3);
    dp->~S5092C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5092C3(Test_S5092C3, "S5092C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5092C3C1Ev();
extern void _ZN7S5092C3D1Ev();
Name_Map name_map_S5092C3[] = {
  NSPAIR(_ZN7S5092C3C1Ev),
  NSPAIR(_ZN7S5092C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5092C3[];
extern void _ZN7S5092C3D1Ev();
extern void _ZN7S5092C3D0Ev();
extern void _ZN7S5092C32v4Ev();
extern void _ZN7S5092C32v5Ev();
extern void _ZN7S5092C32v6Ev();
static  VTBL_ENTRY vtc_S5092C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5092C3[0]),
  (VTBL_ENTRY)&_ZN7S5092C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5092C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5092C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5092C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5092C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5092C3[];
extern  VTBL_ENTRY _ZTV7S5092C3[];
Class_Descriptor cd_S5092C3 = {  "S5092C3", // class name
  0,0,//no base classes
  &(vtc_S5092C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5092C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5092C3),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  S5092C2  : S5092C3 {
  void *s5092c2f0;
  virtual void  v7(); // _ZN7S5092C22v7Ev
  virtual void  v8(); // _ZN7S5092C22v8Ev
  ~S5092C2(); // tgen
  S5092C2(); // tgen
};
//SIG(-1 S5092C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5092C2 ::v7(){vfunc_called(this, "_ZN7S5092C22v7Ev");}
void  S5092C2 ::v8(){vfunc_called(this, "_ZN7S5092C22v8Ev");}
S5092C2 ::~S5092C2(){ note_dtor("S5092C2", this);} // tgen
S5092C2 ::S5092C2(){ note_ctor("S5092C2", this);} // tgen

static void Test_S5092C2()
{
  extern Class_Descriptor cd_S5092C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5092C2, buf);
    S5092C2 *dp, &lv = *(dp=new (buf) S5092C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5092C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5092C2)");
    check_base_class_offset(lv, (S5092C3*), 0, "S5092C2");
    check_field_offset(lv, s5092c2f0, ABISELECT(40,28), "S5092C2.s5092c2f0");
    test_class_info(&lv, &cd_S5092C2);
    dp->~S5092C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5092C2(Test_S5092C2, "S5092C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5092C2C1Ev();
extern void _ZN7S5092C2D1Ev();
Name_Map name_map_S5092C2[] = {
  NSPAIR(_ZN7S5092C2C1Ev),
  NSPAIR(_ZN7S5092C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5092C3;
extern VTBL_ENTRY _ZTI7S5092C3[];
extern  VTBL_ENTRY _ZTV7S5092C3[];
static Base_Class bases_S5092C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5092C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5092C2[];
extern void _ZN7S5092C2D1Ev();
extern void _ZN7S5092C2D0Ev();
extern void _ZN7S5092C32v4Ev();
extern void _ZN7S5092C32v5Ev();
extern void _ZN7S5092C32v6Ev();
extern void _ZN7S5092C22v7Ev();
extern void _ZN7S5092C22v8Ev();
static  VTBL_ENTRY vtc_S5092C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5092C2[0]),
  (VTBL_ENTRY)&_ZN7S5092C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5092C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5092C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5092C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5092C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5092C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5092C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5092C2[];
extern  VTBL_ENTRY _ZTV7S5092C2[];
Class_Descriptor cd_S5092C2 = {  "S5092C2", // class name
  bases_S5092C2, 1,
  &(vtc_S5092C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5092C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5092C2),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  S5092C1  : S5092C2 {
  void *s5092c1f0[5];
  int s5092c1f1[3];
  virtual  ~S5092C1(); // _ZN7S5092C1D1Ev
  virtual void  v1(); // _ZN7S5092C12v1Ev
  virtual void  v2(); // _ZN7S5092C12v2Ev
  virtual void  v3(); // _ZN7S5092C12v3Ev
  S5092C1(); // tgen
};
//SIG(1 S5092C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} vd v1 v2 v3 Fp[5] Fi[3]}


 S5092C1 ::~S5092C1(){ note_dtor("S5092C1", this);}
void  S5092C1 ::v1(){vfunc_called(this, "_ZN7S5092C12v1Ev");}
void  S5092C1 ::v2(){vfunc_called(this, "_ZN7S5092C12v2Ev");}
void  S5092C1 ::v3(){vfunc_called(this, "_ZN7S5092C12v3Ev");}
S5092C1 ::S5092C1(){ note_ctor("S5092C1", this);} // tgen

static void Test_S5092C1()
{
  extern Class_Descriptor cd_S5092C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S5092C1, buf);
    S5092C1 *dp, &lv = *(dp=new (buf) S5092C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S5092C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5092C1)");
    check_base_class_offset(lv, (S5092C3*)(S5092C2*), 0, "S5092C1");
    check_base_class_offset(lv, (S5092C2*), 0, "S5092C1");
    check_field_offset(lv, s5092c1f0, ABISELECT(48,32), "S5092C1.s5092c1f0");
    check_field_offset(lv, s5092c1f1, ABISELECT(88,52), "S5092C1.s5092c1f1");
    test_class_info(&lv, &cd_S5092C1);
    dp->~S5092C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5092C1(Test_S5092C1, "S5092C1", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S5092C1C1Ev();
extern void _ZN7S5092C1D1Ev();
Name_Map name_map_S5092C1[] = {
  NSPAIR(_ZN7S5092C1C1Ev),
  NSPAIR(_ZN7S5092C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5092C3;
extern VTBL_ENTRY _ZTI7S5092C3[];
extern  VTBL_ENTRY _ZTV7S5092C3[];
extern Class_Descriptor cd_S5092C2;
extern VTBL_ENTRY _ZTI7S5092C2[];
extern  VTBL_ENTRY _ZTV7S5092C2[];
static Base_Class bases_S5092C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5092C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5092C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5092C1[];
extern void _ZN7S5092C1D1Ev();
extern void _ZN7S5092C1D0Ev();
extern void _ZN7S5092C32v4Ev();
extern void _ZN7S5092C32v5Ev();
extern void _ZN7S5092C32v6Ev();
extern void _ZN7S5092C22v7Ev();
extern void _ZN7S5092C22v8Ev();
extern void _ZN7S5092C12v1Ev();
extern void _ZN7S5092C12v2Ev();
extern void _ZN7S5092C12v3Ev();
static  VTBL_ENTRY vtc_S5092C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5092C1[0]),
  (VTBL_ENTRY)&_ZN7S5092C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5092C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5092C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5092C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5092C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5092C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5092C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5092C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5092C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5092C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5092C1[];
extern  VTBL_ENTRY _ZTV7S5092C1[];
Class_Descriptor cd_S5092C1 = {  "S5092C1", // class name
  bases_S5092C1, 2,
  &(vtc_S5092C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S5092C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5092C1),12, //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  S4751C3  {
  ::S4473C12_nt s4751c3f0;
  int s4751c3f1[2];
  char s4751c3f2;
  virtual  ~S4751C3(); // _ZN7S4751C3D1Ev
  virtual void  v3(); // _ZN7S4751C32v3Ev
  virtual void  v4(); // _ZN7S4751C32v4Ev
  virtual void  v5(); // _ZN7S4751C32v5Ev
  S4751C3(); // tgen
};
//SIG(-1 S4751C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4751C3 ::~S4751C3(){ note_dtor("S4751C3", this);}
void  S4751C3 ::v3(){vfunc_called(this, "_ZN7S4751C32v3Ev");}
void  S4751C3 ::v4(){vfunc_called(this, "_ZN7S4751C32v4Ev");}
void  S4751C3 ::v5(){vfunc_called(this, "_ZN7S4751C32v5Ev");}
S4751C3 ::S4751C3(){ note_ctor("S4751C3", this);} // tgen

static void Test_S4751C3()
{
  extern Class_Descriptor cd_S4751C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4751C3, buf);
    S4751C3 *dp, &lv = *(dp=new (buf) S4751C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4751C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4751C3)");
    check_field_offset(lv, s4751c3f0, ABISELECT(8,4), "S4751C3.s4751c3f0");
    check_field_offset(lv, s4751c3f1, ABISELECT(24,16), "S4751C3.s4751c3f1");
    check_field_offset(lv, s4751c3f2, ABISELECT(32,24), "S4751C3.s4751c3f2");
    test_class_info(&lv, &cd_S4751C3);
    dp->~S4751C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4751C3(Test_S4751C3, "S4751C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4751C3C1Ev();
extern void _ZN7S4751C3D1Ev();
Name_Map name_map_S4751C3[] = {
  NSPAIR(_ZN7S4751C3C1Ev),
  NSPAIR(_ZN7S4751C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4751C3[];
extern void _ZN7S4751C3D1Ev();
extern void _ZN7S4751C3D0Ev();
extern void _ZN7S4751C32v3Ev();
extern void _ZN7S4751C32v4Ev();
extern void _ZN7S4751C32v5Ev();
static  VTBL_ENTRY vtc_S4751C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4751C3[0]),
  (VTBL_ENTRY)&_ZN7S4751C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4751C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4751C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4751C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4751C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4751C3[];
extern  VTBL_ENTRY _ZTV7S4751C3[];
Class_Descriptor cd_S4751C3 = {  "S4751C3", // class name
  0,0,//no base classes
  &(vtc_S4751C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4751C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4751C3),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  S4751C2  : S4751C3 {
  void *s4751c2f0;
  virtual void  v6(); // _ZN7S4751C22v6Ev
  virtual void  v7(); // _ZN7S4751C22v7Ev
  ~S4751C2(); // tgen
  S4751C2(); // tgen
};
//SIG(-1 S4751C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4751C2 ::v6(){vfunc_called(this, "_ZN7S4751C22v6Ev");}
void  S4751C2 ::v7(){vfunc_called(this, "_ZN7S4751C22v7Ev");}
S4751C2 ::~S4751C2(){ note_dtor("S4751C2", this);} // tgen
S4751C2 ::S4751C2(){ note_ctor("S4751C2", this);} // tgen

static void Test_S4751C2()
{
  extern Class_Descriptor cd_S4751C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4751C2, buf);
    S4751C2 *dp, &lv = *(dp=new (buf) S4751C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4751C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4751C2)");
    check_base_class_offset(lv, (S4751C3*), 0, "S4751C2");
    check_field_offset(lv, s4751c2f0, ABISELECT(40,28), "S4751C2.s4751c2f0");
    test_class_info(&lv, &cd_S4751C2);
    dp->~S4751C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4751C2(Test_S4751C2, "S4751C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4751C2C1Ev();
extern void _ZN7S4751C2D1Ev();
Name_Map name_map_S4751C2[] = {
  NSPAIR(_ZN7S4751C2C1Ev),
  NSPAIR(_ZN7S4751C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4751C3;
extern VTBL_ENTRY _ZTI7S4751C3[];
extern  VTBL_ENTRY _ZTV7S4751C3[];
static Base_Class bases_S4751C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4751C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4751C2[];
extern void _ZN7S4751C2D1Ev();
extern void _ZN7S4751C2D0Ev();
extern void _ZN7S4751C32v3Ev();
extern void _ZN7S4751C32v4Ev();
extern void _ZN7S4751C32v5Ev();
extern void _ZN7S4751C22v6Ev();
extern void _ZN7S4751C22v7Ev();
static  VTBL_ENTRY vtc_S4751C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4751C2[0]),
  (VTBL_ENTRY)&_ZN7S4751C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4751C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4751C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4751C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4751C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4751C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4751C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4751C2[];
extern  VTBL_ENTRY _ZTV7S4751C2[];
Class_Descriptor cd_S4751C2 = {  "S4751C2", // class name
  bases_S4751C2, 1,
  &(vtc_S4751C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4751C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4751C2),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  S4751C1  : S4751C2 {
  ::S4473C12_nt s4751c1f0;
  ::S2366C19 s4751c1f1;
  virtual  ~S4751C1(); // _ZN7S4751C1D1Ev
  virtual void  v1(); // _ZN7S4751C12v1Ev
  virtual void  v2(); // _ZN7S4751C12v2Ev
  S4751C1(); // tgen
};
//SIG(1 S4751C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC4 FC6{ m Fp}}


 S4751C1 ::~S4751C1(){ note_dtor("S4751C1", this);}
void  S4751C1 ::v1(){vfunc_called(this, "_ZN7S4751C12v1Ev");}
void  S4751C1 ::v2(){vfunc_called(this, "_ZN7S4751C12v2Ev");}
S4751C1 ::S4751C1(){ note_ctor("S4751C1", this);} // tgen

static void Test_S4751C1()
{
  extern Class_Descriptor cd_S4751C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4751C1, buf);
    S4751C1 *dp, &lv = *(dp=new (buf) S4751C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4751C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4751C1)");
    check_base_class_offset(lv, (S4751C3*)(S4751C2*), 0, "S4751C1");
    check_base_class_offset(lv, (S4751C2*), 0, "S4751C1");
    check_field_offset(lv, s4751c1f0, ABISELECT(48,32), "S4751C1.s4751c1f0");
    check_field_offset(lv, s4751c1f1, ABISELECT(64,44), "S4751C1.s4751c1f1");
    test_class_info(&lv, &cd_S4751C1);
    dp->~S4751C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4751C1(Test_S4751C1, "S4751C1", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4751C1C1Ev();
extern void _ZN7S4751C1D1Ev();
Name_Map name_map_S4751C1[] = {
  NSPAIR(_ZN7S4751C1C1Ev),
  NSPAIR(_ZN7S4751C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4751C3;
extern VTBL_ENTRY _ZTI7S4751C3[];
extern  VTBL_ENTRY _ZTV7S4751C3[];
extern Class_Descriptor cd_S4751C2;
extern VTBL_ENTRY _ZTI7S4751C2[];
extern  VTBL_ENTRY _ZTV7S4751C2[];
static Base_Class bases_S4751C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4751C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4751C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4751C1[];
extern void _ZN7S4751C1D1Ev();
extern void _ZN7S4751C1D0Ev();
extern void _ZN7S4751C32v3Ev();
extern void _ZN7S4751C32v4Ev();
extern void _ZN7S4751C32v5Ev();
extern void _ZN7S4751C22v6Ev();
extern void _ZN7S4751C22v7Ev();
extern void _ZN7S4751C12v1Ev();
extern void _ZN7S4751C12v2Ev();
static  VTBL_ENTRY vtc_S4751C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4751C1[0]),
  (VTBL_ENTRY)&_ZN7S4751C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4751C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4751C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4751C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4751C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4751C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4751C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4751C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4751C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4751C1[];
extern  VTBL_ENTRY _ZTV7S4751C1[];
Class_Descriptor cd_S4751C1 = {  "S4751C1", // class name
  bases_S4751C1, 2,
  &(vtc_S4751C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4751C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4751C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4800C3  {
  ::S4473C12_nt s4800c3f0;
  int s4800c3f1[2];
  char s4800c3f2;
  virtual  ~S4800C3(); // _ZN7S4800C3D1Ev
  virtual void  v3(); // _ZN7S4800C32v3Ev
  virtual void  v4(); // _ZN7S4800C32v4Ev
  virtual void  v5(); // _ZN7S4800C32v5Ev
  S4800C3(); // tgen
};
//SIG(-1 S4800C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4800C3 ::~S4800C3(){ note_dtor("S4800C3", this);}
void  S4800C3 ::v3(){vfunc_called(this, "_ZN7S4800C32v3Ev");}
void  S4800C3 ::v4(){vfunc_called(this, "_ZN7S4800C32v4Ev");}
void  S4800C3 ::v5(){vfunc_called(this, "_ZN7S4800C32v5Ev");}
S4800C3 ::S4800C3(){ note_ctor("S4800C3", this);} // tgen

static void Test_S4800C3()
{
  extern Class_Descriptor cd_S4800C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4800C3, buf);
    S4800C3 *dp, &lv = *(dp=new (buf) S4800C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4800C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4800C3)");
    check_field_offset(lv, s4800c3f0, ABISELECT(8,4), "S4800C3.s4800c3f0");
    check_field_offset(lv, s4800c3f1, ABISELECT(24,16), "S4800C3.s4800c3f1");
    check_field_offset(lv, s4800c3f2, ABISELECT(32,24), "S4800C3.s4800c3f2");
    test_class_info(&lv, &cd_S4800C3);
    dp->~S4800C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4800C3(Test_S4800C3, "S4800C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4800C3C1Ev();
extern void _ZN7S4800C3D1Ev();
Name_Map name_map_S4800C3[] = {
  NSPAIR(_ZN7S4800C3C1Ev),
  NSPAIR(_ZN7S4800C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4800C3[];
extern void _ZN7S4800C3D1Ev();
extern void _ZN7S4800C3D0Ev();
extern void _ZN7S4800C32v3Ev();
extern void _ZN7S4800C32v4Ev();
extern void _ZN7S4800C32v5Ev();
static  VTBL_ENTRY vtc_S4800C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4800C3[0]),
  (VTBL_ENTRY)&_ZN7S4800C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4800C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4800C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4800C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4800C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4800C3[];
extern  VTBL_ENTRY _ZTV7S4800C3[];
Class_Descriptor cd_S4800C3 = {  "S4800C3", // class name
  0,0,//no base classes
  &(vtc_S4800C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4800C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4800C3),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  S4800C2  : S4800C3 {
  void *s4800c2f0;
  virtual void  v6(); // _ZN7S4800C22v6Ev
  virtual void  v7(); // _ZN7S4800C22v7Ev
  ~S4800C2(); // tgen
  S4800C2(); // tgen
};
//SIG(-1 S4800C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4800C2 ::v6(){vfunc_called(this, "_ZN7S4800C22v6Ev");}
void  S4800C2 ::v7(){vfunc_called(this, "_ZN7S4800C22v7Ev");}
S4800C2 ::~S4800C2(){ note_dtor("S4800C2", this);} // tgen
S4800C2 ::S4800C2(){ note_ctor("S4800C2", this);} // tgen

static void Test_S4800C2()
{
  extern Class_Descriptor cd_S4800C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4800C2, buf);
    S4800C2 *dp, &lv = *(dp=new (buf) S4800C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4800C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4800C2)");
    check_base_class_offset(lv, (S4800C3*), 0, "S4800C2");
    check_field_offset(lv, s4800c2f0, ABISELECT(40,28), "S4800C2.s4800c2f0");
    test_class_info(&lv, &cd_S4800C2);
    dp->~S4800C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4800C2(Test_S4800C2, "S4800C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4800C2C1Ev();
extern void _ZN7S4800C2D1Ev();
Name_Map name_map_S4800C2[] = {
  NSPAIR(_ZN7S4800C2C1Ev),
  NSPAIR(_ZN7S4800C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4800C3;
extern VTBL_ENTRY _ZTI7S4800C3[];
extern  VTBL_ENTRY _ZTV7S4800C3[];
static Base_Class bases_S4800C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4800C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4800C2[];
extern void _ZN7S4800C2D1Ev();
extern void _ZN7S4800C2D0Ev();
extern void _ZN7S4800C32v3Ev();
extern void _ZN7S4800C32v4Ev();
extern void _ZN7S4800C32v5Ev();
extern void _ZN7S4800C22v6Ev();
extern void _ZN7S4800C22v7Ev();
static  VTBL_ENTRY vtc_S4800C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4800C2[0]),
  (VTBL_ENTRY)&_ZN7S4800C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4800C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4800C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4800C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4800C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4800C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4800C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4800C2[];
extern  VTBL_ENTRY _ZTV7S4800C2[];
Class_Descriptor cd_S4800C2 = {  "S4800C2", // class name
  bases_S4800C2, 1,
  &(vtc_S4800C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4800C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4800C2),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  S4800C1  : S4800C2 {
  void *s4800c1f0[2];
  int s4800c1f1[3];
  virtual  ~S4800C1(); // _ZN7S4800C1D1Ev
  virtual void  v1(); // _ZN7S4800C12v1Ev
  virtual void  v2(); // _ZN7S4800C12v2Ev
  S4800C1(); // tgen
};
//SIG(1 S4800C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 Fp[2] Fi[3]}


 S4800C1 ::~S4800C1(){ note_dtor("S4800C1", this);}
void  S4800C1 ::v1(){vfunc_called(this, "_ZN7S4800C12v1Ev");}
void  S4800C1 ::v2(){vfunc_called(this, "_ZN7S4800C12v2Ev");}
S4800C1 ::S4800C1(){ note_ctor("S4800C1", this);} // tgen

static void Test_S4800C1()
{
  extern Class_Descriptor cd_S4800C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S4800C1, buf);
    S4800C1 *dp, &lv = *(dp=new (buf) S4800C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S4800C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4800C1)");
    check_base_class_offset(lv, (S4800C3*)(S4800C2*), 0, "S4800C1");
    check_base_class_offset(lv, (S4800C2*), 0, "S4800C1");
    check_field_offset(lv, s4800c1f0, ABISELECT(48,32), "S4800C1.s4800c1f0");
    check_field_offset(lv, s4800c1f1, ABISELECT(64,40), "S4800C1.s4800c1f1");
    test_class_info(&lv, &cd_S4800C1);
    dp->~S4800C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4800C1(Test_S4800C1, "S4800C1", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S4800C1C1Ev();
extern void _ZN7S4800C1D1Ev();
Name_Map name_map_S4800C1[] = {
  NSPAIR(_ZN7S4800C1C1Ev),
  NSPAIR(_ZN7S4800C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4800C3;
extern VTBL_ENTRY _ZTI7S4800C3[];
extern  VTBL_ENTRY _ZTV7S4800C3[];
extern Class_Descriptor cd_S4800C2;
extern VTBL_ENTRY _ZTI7S4800C2[];
extern  VTBL_ENTRY _ZTV7S4800C2[];
static Base_Class bases_S4800C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4800C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4800C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4800C1[];
extern void _ZN7S4800C1D1Ev();
extern void _ZN7S4800C1D0Ev();
extern void _ZN7S4800C32v3Ev();
extern void _ZN7S4800C32v4Ev();
extern void _ZN7S4800C32v5Ev();
extern void _ZN7S4800C22v6Ev();
extern void _ZN7S4800C22v7Ev();
extern void _ZN7S4800C12v1Ev();
extern void _ZN7S4800C12v2Ev();
static  VTBL_ENTRY vtc_S4800C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4800C1[0]),
  (VTBL_ENTRY)&_ZN7S4800C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4800C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4800C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4800C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4800C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4800C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4800C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4800C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4800C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4800C1[];
extern  VTBL_ENTRY _ZTV7S4800C1[];
Class_Descriptor cd_S4800C1 = {  "S4800C1", // class name
  bases_S4800C1, 2,
  &(vtc_S4800C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S4800C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4800C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4370C3  {
  ::S4473C12_nt s4370c3f0;
  int s4370c3f1[2];
  char s4370c3f2;
  virtual  ~S4370C3(); // _ZN7S4370C3D1Ev
  virtual void  v2(); // _ZN7S4370C32v2Ev
  virtual void  v3(); // _ZN7S4370C32v3Ev
  virtual void  v4(); // _ZN7S4370C32v4Ev
  S4370C3(); // tgen
};
//SIG(-1 S4370C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4370C3 ::~S4370C3(){ note_dtor("S4370C3", this);}
void  S4370C3 ::v2(){vfunc_called(this, "_ZN7S4370C32v2Ev");}
void  S4370C3 ::v3(){vfunc_called(this, "_ZN7S4370C32v3Ev");}
void  S4370C3 ::v4(){vfunc_called(this, "_ZN7S4370C32v4Ev");}
S4370C3 ::S4370C3(){ note_ctor("S4370C3", this);} // tgen

static void Test_S4370C3()
{
  extern Class_Descriptor cd_S4370C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4370C3, buf);
    S4370C3 *dp, &lv = *(dp=new (buf) S4370C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4370C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4370C3)");
    check_field_offset(lv, s4370c3f0, ABISELECT(8,4), "S4370C3.s4370c3f0");
    check_field_offset(lv, s4370c3f1, ABISELECT(24,16), "S4370C3.s4370c3f1");
    check_field_offset(lv, s4370c3f2, ABISELECT(32,24), "S4370C3.s4370c3f2");
    test_class_info(&lv, &cd_S4370C3);
    dp->~S4370C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4370C3(Test_S4370C3, "S4370C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4370C3C1Ev();
extern void _ZN7S4370C3D1Ev();
Name_Map name_map_S4370C3[] = {
  NSPAIR(_ZN7S4370C3C1Ev),
  NSPAIR(_ZN7S4370C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4370C3[];
extern void _ZN7S4370C3D1Ev();
extern void _ZN7S4370C3D0Ev();
extern void _ZN7S4370C32v2Ev();
extern void _ZN7S4370C32v3Ev();
extern void _ZN7S4370C32v4Ev();
static  VTBL_ENTRY vtc_S4370C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4370C3[0]),
  (VTBL_ENTRY)&_ZN7S4370C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4370C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4370C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4370C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4370C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4370C3[];
extern  VTBL_ENTRY _ZTV7S4370C3[];
Class_Descriptor cd_S4370C3 = {  "S4370C3", // class name
  0,0,//no base classes
  &(vtc_S4370C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4370C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4370C3),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  S4370C2  : S4370C3 {
  void *s4370c2f0;
  virtual void  v5(); // _ZN7S4370C22v5Ev
  virtual void  v6(); // _ZN7S4370C22v6Ev
  ~S4370C2(); // tgen
  S4370C2(); // tgen
};
//SIG(-1 S4370C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4370C2 ::v5(){vfunc_called(this, "_ZN7S4370C22v5Ev");}
void  S4370C2 ::v6(){vfunc_called(this, "_ZN7S4370C22v6Ev");}
S4370C2 ::~S4370C2(){ note_dtor("S4370C2", this);} // tgen
S4370C2 ::S4370C2(){ note_ctor("S4370C2", this);} // tgen

static void Test_S4370C2()
{
  extern Class_Descriptor cd_S4370C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4370C2, buf);
    S4370C2 *dp, &lv = *(dp=new (buf) S4370C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4370C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4370C2)");
    check_base_class_offset(lv, (S4370C3*), 0, "S4370C2");
    check_field_offset(lv, s4370c2f0, ABISELECT(40,28), "S4370C2.s4370c2f0");
    test_class_info(&lv, &cd_S4370C2);
    dp->~S4370C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4370C2(Test_S4370C2, "S4370C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4370C2C1Ev();
extern void _ZN7S4370C2D1Ev();
Name_Map name_map_S4370C2[] = {
  NSPAIR(_ZN7S4370C2C1Ev),
  NSPAIR(_ZN7S4370C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4370C3;
extern VTBL_ENTRY _ZTI7S4370C3[];
extern  VTBL_ENTRY _ZTV7S4370C3[];
static Base_Class bases_S4370C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4370C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4370C2[];
extern void _ZN7S4370C2D1Ev();
extern void _ZN7S4370C2D0Ev();
extern void _ZN7S4370C32v2Ev();
extern void _ZN7S4370C32v3Ev();
extern void _ZN7S4370C32v4Ev();
extern void _ZN7S4370C22v5Ev();
extern void _ZN7S4370C22v6Ev();
static  VTBL_ENTRY vtc_S4370C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4370C2[0]),
  (VTBL_ENTRY)&_ZN7S4370C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4370C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4370C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4370C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4370C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4370C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4370C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4370C2[];
extern  VTBL_ENTRY _ZTV7S4370C2[];
Class_Descriptor cd_S4370C2 = {  "S4370C2", // class name
  bases_S4370C2, 1,
  &(vtc_S4370C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4370C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4370C2),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  S4370C1  : S4370C2 {
  ::S4473C12_nt s4370c1f0;
  ::S5075C8_nt s4370c1f1;
  virtual void  v1(); // _ZN7S4370C12v1Ev
  ~S4370C1(); // tgen
  S4370C1(); // tgen
};
//SIG(1 S4370C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 FC4 FC6{ m Fp[2]}}


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

static void Test_S4370C1()
{
  extern Class_Descriptor cd_S4370C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S4370C1, buf);
    S4370C1 *dp, &lv = *(dp=new (buf) S4370C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S4370C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4370C1)");
    check_base_class_offset(lv, (S4370C3*)(S4370C2*), 0, "S4370C1");
    check_base_class_offset(lv, (S4370C2*), 0, "S4370C1");
    check_field_offset(lv, s4370c1f0, ABISELECT(48,32), "S4370C1.s4370c1f0");
    check_field_offset(lv, s4370c1f1, ABISELECT(64,44), "S4370C1.s4370c1f1");
    test_class_info(&lv, &cd_S4370C1);
    dp->~S4370C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4370C1(Test_S4370C1, "S4370C1", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S4370C1C1Ev();
extern void _ZN7S4370C1D1Ev();
Name_Map name_map_S4370C1[] = {
  NSPAIR(_ZN7S4370C1C1Ev),
  NSPAIR(_ZN7S4370C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4370C3;
extern VTBL_ENTRY _ZTI7S4370C3[];
extern  VTBL_ENTRY _ZTV7S4370C3[];
extern Class_Descriptor cd_S4370C2;
extern VTBL_ENTRY _ZTI7S4370C2[];
extern  VTBL_ENTRY _ZTV7S4370C2[];
static Base_Class bases_S4370C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4370C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4370C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4370C1[];
extern void _ZN7S4370C1D1Ev();
extern void _ZN7S4370C1D0Ev();
extern void _ZN7S4370C32v2Ev();
extern void _ZN7S4370C32v3Ev();
extern void _ZN7S4370C32v4Ev();
extern void _ZN7S4370C22v5Ev();
extern void _ZN7S4370C22v6Ev();
extern void _ZN7S4370C12v1Ev();
static  VTBL_ENTRY vtc_S4370C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4370C1[0]),
  (VTBL_ENTRY)&_ZN7S4370C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4370C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4370C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4370C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4370C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4370C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4370C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4370C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4370C1[];
extern  VTBL_ENTRY _ZTV7S4370C1[];
Class_Descriptor cd_S4370C1 = {  "S4370C1", // class name
  bases_S4370C1, 2,
  &(vtc_S4370C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S4370C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4370C1),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  S4779C3  {
  ::S4473C12_nt s4779c3f0;
  int s4779c3f1[2];
  char s4779c3f2;
  virtual  ~S4779C3(); // _ZN7S4779C3D1Ev
  virtual void  v3(); // _ZN7S4779C32v3Ev
  virtual void  v4(); // _ZN7S4779C32v4Ev
  virtual void  v5(); // _ZN7S4779C32v5Ev
  S4779C3(); // tgen
};
//SIG(-1 S4779C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4779C3 ::~S4779C3(){ note_dtor("S4779C3", this);}
void  S4779C3 ::v3(){vfunc_called(this, "_ZN7S4779C32v3Ev");}
void  S4779C3 ::v4(){vfunc_called(this, "_ZN7S4779C32v4Ev");}
void  S4779C3 ::v5(){vfunc_called(this, "_ZN7S4779C32v5Ev");}
S4779C3 ::S4779C3(){ note_ctor("S4779C3", this);} // tgen

static void Test_S4779C3()
{
  extern Class_Descriptor cd_S4779C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4779C3, buf);
    S4779C3 *dp, &lv = *(dp=new (buf) S4779C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4779C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4779C3)");
    check_field_offset(lv, s4779c3f0, ABISELECT(8,4), "S4779C3.s4779c3f0");
    check_field_offset(lv, s4779c3f1, ABISELECT(24,16), "S4779C3.s4779c3f1");
    check_field_offset(lv, s4779c3f2, ABISELECT(32,24), "S4779C3.s4779c3f2");
    test_class_info(&lv, &cd_S4779C3);
    dp->~S4779C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4779C3(Test_S4779C3, "S4779C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4779C3C1Ev();
extern void _ZN7S4779C3D1Ev();
Name_Map name_map_S4779C3[] = {
  NSPAIR(_ZN7S4779C3C1Ev),
  NSPAIR(_ZN7S4779C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4779C3[];
extern void _ZN7S4779C3D1Ev();
extern void _ZN7S4779C3D0Ev();
extern void _ZN7S4779C32v3Ev();
extern void _ZN7S4779C32v4Ev();
extern void _ZN7S4779C32v5Ev();
static  VTBL_ENTRY vtc_S4779C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4779C3[0]),
  (VTBL_ENTRY)&_ZN7S4779C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4779C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4779C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4779C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4779C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4779C3[];
extern  VTBL_ENTRY _ZTV7S4779C3[];
Class_Descriptor cd_S4779C3 = {  "S4779C3", // class name
  0,0,//no base classes
  &(vtc_S4779C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4779C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4779C3),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  S4779C2  : S4779C3 {
  void *s4779c2f0;
  virtual void  v6(); // _ZN7S4779C22v6Ev
  virtual void  v7(); // _ZN7S4779C22v7Ev
  ~S4779C2(); // tgen
  S4779C2(); // tgen
};
//SIG(-1 S4779C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4779C2 ::v6(){vfunc_called(this, "_ZN7S4779C22v6Ev");}
void  S4779C2 ::v7(){vfunc_called(this, "_ZN7S4779C22v7Ev");}
S4779C2 ::~S4779C2(){ note_dtor("S4779C2", this);} // tgen
S4779C2 ::S4779C2(){ note_ctor("S4779C2", this);} // tgen

static void Test_S4779C2()
{
  extern Class_Descriptor cd_S4779C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4779C2, buf);
    S4779C2 *dp, &lv = *(dp=new (buf) S4779C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4779C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4779C2)");
    check_base_class_offset(lv, (S4779C3*), 0, "S4779C2");
    check_field_offset(lv, s4779c2f0, ABISELECT(40,28), "S4779C2.s4779c2f0");
    test_class_info(&lv, &cd_S4779C2);
    dp->~S4779C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4779C2(Test_S4779C2, "S4779C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4779C2C1Ev();
extern void _ZN7S4779C2D1Ev();
Name_Map name_map_S4779C2[] = {
  NSPAIR(_ZN7S4779C2C1Ev),
  NSPAIR(_ZN7S4779C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4779C3;
extern VTBL_ENTRY _ZTI7S4779C3[];
extern  VTBL_ENTRY _ZTV7S4779C3[];
static Base_Class bases_S4779C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4779C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4779C2[];
extern void _ZN7S4779C2D1Ev();
extern void _ZN7S4779C2D0Ev();
extern void _ZN7S4779C32v3Ev();
extern void _ZN7S4779C32v4Ev();
extern void _ZN7S4779C32v5Ev();
extern void _ZN7S4779C22v6Ev();
extern void _ZN7S4779C22v7Ev();
static  VTBL_ENTRY vtc_S4779C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4779C2[0]),
  (VTBL_ENTRY)&_ZN7S4779C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4779C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4779C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4779C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4779C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4779C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4779C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4779C2[];
extern  VTBL_ENTRY _ZTV7S4779C2[];
Class_Descriptor cd_S4779C2 = {  "S4779C2", // class name
  bases_S4779C2, 1,
  &(vtc_S4779C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4779C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4779C2),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  S4779C1  : S4779C2 {
  ::S2366C19 s4779c1f0;
  virtual  ~S4779C1(); // _ZN7S4779C1D1Ev
  virtual void  v1(); // _ZN7S4779C12v1Ev
  virtual void  v2(); // _ZN7S4779C12v2Ev
  S4779C1(); // tgen
};
//SIG(1 S4779C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC6{ m Fp}}


 S4779C1 ::~S4779C1(){ note_dtor("S4779C1", this);}
void  S4779C1 ::v1(){vfunc_called(this, "_ZN7S4779C12v1Ev");}
void  S4779C1 ::v2(){vfunc_called(this, "_ZN7S4779C12v2Ev");}
S4779C1 ::S4779C1(){ note_ctor("S4779C1", this);} // tgen

static void Test_S4779C1()
{
  extern Class_Descriptor cd_S4779C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S4779C1, buf);
    S4779C1 *dp, &lv = *(dp=new (buf) S4779C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S4779C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4779C1)");
    check_base_class_offset(lv, (S4779C3*)(S4779C2*), 0, "S4779C1");
    check_base_class_offset(lv, (S4779C2*), 0, "S4779C1");
    check_field_offset(lv, s4779c1f0, ABISELECT(48,32), "S4779C1.s4779c1f0");
    test_class_info(&lv, &cd_S4779C1);
    dp->~S4779C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4779C1(Test_S4779C1, "S4779C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S4779C1C1Ev();
extern void _ZN7S4779C1D1Ev();
Name_Map name_map_S4779C1[] = {
  NSPAIR(_ZN7S4779C1C1Ev),
  NSPAIR(_ZN7S4779C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4779C3;
extern VTBL_ENTRY _ZTI7S4779C3[];
extern  VTBL_ENTRY _ZTV7S4779C3[];
extern Class_Descriptor cd_S4779C2;
extern VTBL_ENTRY _ZTI7S4779C2[];
extern  VTBL_ENTRY _ZTV7S4779C2[];
static Base_Class bases_S4779C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4779C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4779C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4779C1[];
extern void _ZN7S4779C1D1Ev();
extern void _ZN7S4779C1D0Ev();
extern void _ZN7S4779C32v3Ev();
extern void _ZN7S4779C32v4Ev();
extern void _ZN7S4779C32v5Ev();
extern void _ZN7S4779C22v6Ev();
extern void _ZN7S4779C22v7Ev();
extern void _ZN7S4779C12v1Ev();
extern void _ZN7S4779C12v2Ev();
static  VTBL_ENTRY vtc_S4779C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4779C1[0]),
  (VTBL_ENTRY)&_ZN7S4779C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4779C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4779C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4779C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4779C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4779C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4779C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4779C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4779C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4779C1[];
extern  VTBL_ENTRY _ZTV7S4779C1[];
Class_Descriptor cd_S4779C1 = {  "S4779C1", // class name
  bases_S4779C1, 2,
  &(vtc_S4779C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S4779C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4779C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5077C3  {
  ::S4473C12_nt s5077c3f0;
  int s5077c3f1[2];
  char s5077c3f2;
  virtual  ~S5077C3(); // _ZN7S5077C3D1Ev
  virtual void  v4(); // _ZN7S5077C32v4Ev
  virtual void  v5(); // _ZN7S5077C32v5Ev
  virtual void  v6(); // _ZN7S5077C32v6Ev
  S5077C3(); // tgen
};
//SIG(-1 S5077C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5077C3 ::~S5077C3(){ note_dtor("S5077C3", this);}
void  S5077C3 ::v4(){vfunc_called(this, "_ZN7S5077C32v4Ev");}
void  S5077C3 ::v5(){vfunc_called(this, "_ZN7S5077C32v5Ev");}
void  S5077C3 ::v6(){vfunc_called(this, "_ZN7S5077C32v6Ev");}
S5077C3 ::S5077C3(){ note_ctor("S5077C3", this);} // tgen

static void Test_S5077C3()
{
  extern Class_Descriptor cd_S5077C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5077C3, buf);
    S5077C3 *dp, &lv = *(dp=new (buf) S5077C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5077C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5077C3)");
    check_field_offset(lv, s5077c3f0, ABISELECT(8,4), "S5077C3.s5077c3f0");
    check_field_offset(lv, s5077c3f1, ABISELECT(24,16), "S5077C3.s5077c3f1");
    check_field_offset(lv, s5077c3f2, ABISELECT(32,24), "S5077C3.s5077c3f2");
    test_class_info(&lv, &cd_S5077C3);
    dp->~S5077C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5077C3(Test_S5077C3, "S5077C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5077C3C1Ev();
extern void _ZN7S5077C3D1Ev();
Name_Map name_map_S5077C3[] = {
  NSPAIR(_ZN7S5077C3C1Ev),
  NSPAIR(_ZN7S5077C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5077C3[];
extern void _ZN7S5077C3D1Ev();
extern void _ZN7S5077C3D0Ev();
extern void _ZN7S5077C32v4Ev();
extern void _ZN7S5077C32v5Ev();
extern void _ZN7S5077C32v6Ev();
static  VTBL_ENTRY vtc_S5077C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5077C3[0]),
  (VTBL_ENTRY)&_ZN7S5077C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5077C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5077C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5077C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5077C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5077C3[];
extern  VTBL_ENTRY _ZTV7S5077C3[];
Class_Descriptor cd_S5077C3 = {  "S5077C3", // class name
  0,0,//no base classes
  &(vtc_S5077C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5077C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5077C3),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  S5077C2  : S5077C3 {
  void *s5077c2f0;
  virtual void  v7(); // _ZN7S5077C22v7Ev
  virtual void  v8(); // _ZN7S5077C22v8Ev
  ~S5077C2(); // tgen
  S5077C2(); // tgen
};
//SIG(-1 S5077C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5077C2 ::v7(){vfunc_called(this, "_ZN7S5077C22v7Ev");}
void  S5077C2 ::v8(){vfunc_called(this, "_ZN7S5077C22v8Ev");}
S5077C2 ::~S5077C2(){ note_dtor("S5077C2", this);} // tgen
S5077C2 ::S5077C2(){ note_ctor("S5077C2", this);} // tgen

static void Test_S5077C2()
{
  extern Class_Descriptor cd_S5077C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5077C2, buf);
    S5077C2 *dp, &lv = *(dp=new (buf) S5077C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5077C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5077C2)");
    check_base_class_offset(lv, (S5077C3*), 0, "S5077C2");
    check_field_offset(lv, s5077c2f0, ABISELECT(40,28), "S5077C2.s5077c2f0");
    test_class_info(&lv, &cd_S5077C2);
    dp->~S5077C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5077C2(Test_S5077C2, "S5077C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5077C2C1Ev();
extern void _ZN7S5077C2D1Ev();
Name_Map name_map_S5077C2[] = {
  NSPAIR(_ZN7S5077C2C1Ev),
  NSPAIR(_ZN7S5077C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5077C3;
extern VTBL_ENTRY _ZTI7S5077C3[];
extern  VTBL_ENTRY _ZTV7S5077C3[];
static Base_Class bases_S5077C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5077C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5077C2[];
extern void _ZN7S5077C2D1Ev();
extern void _ZN7S5077C2D0Ev();
extern void _ZN7S5077C32v4Ev();
extern void _ZN7S5077C32v5Ev();
extern void _ZN7S5077C32v6Ev();
extern void _ZN7S5077C22v7Ev();
extern void _ZN7S5077C22v8Ev();
static  VTBL_ENTRY vtc_S5077C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5077C2[0]),
  (VTBL_ENTRY)&_ZN7S5077C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5077C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5077C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5077C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5077C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5077C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5077C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5077C2[];
extern  VTBL_ENTRY _ZTV7S5077C2[];
Class_Descriptor cd_S5077C2 = {  "S5077C2", // class name
  bases_S5077C2, 1,
  &(vtc_S5077C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5077C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5077C2),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  S5077C1  : S5077C2 {
  ::S4473C12_nt s5077c1f0;
  virtual  ~S5077C1(); // _ZN7S5077C1D1Ev
  virtual void  v1(); // _ZN7S5077C12v1Ev
  virtual void  v2(); // _ZN7S5077C12v2Ev
  virtual void  v3(); // _ZN7S5077C12v3Ev
  S5077C1(); // tgen
};
//SIG(1 S5077C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} vd v1 v2 v3 FC4}


 S5077C1 ::~S5077C1(){ note_dtor("S5077C1", this);}
void  S5077C1 ::v1(){vfunc_called(this, "_ZN7S5077C12v1Ev");}
void  S5077C1 ::v2(){vfunc_called(this, "_ZN7S5077C12v2Ev");}
void  S5077C1 ::v3(){vfunc_called(this, "_ZN7S5077C12v3Ev");}
S5077C1 ::S5077C1(){ note_ctor("S5077C1", this);} // tgen

static void Test_S5077C1()
{
  extern Class_Descriptor cd_S5077C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S5077C1, buf);
    S5077C1 *dp, &lv = *(dp=new (buf) S5077C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S5077C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5077C1)");
    check_base_class_offset(lv, (S5077C3*)(S5077C2*), 0, "S5077C1");
    check_base_class_offset(lv, (S5077C2*), 0, "S5077C1");
    check_field_offset(lv, s5077c1f0, ABISELECT(48,32), "S5077C1.s5077c1f0");
    test_class_info(&lv, &cd_S5077C1);
    dp->~S5077C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5077C1(Test_S5077C1, "S5077C1", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S5077C1C1Ev();
extern void _ZN7S5077C1D1Ev();
Name_Map name_map_S5077C1[] = {
  NSPAIR(_ZN7S5077C1C1Ev),
  NSPAIR(_ZN7S5077C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5077C3;
extern VTBL_ENTRY _ZTI7S5077C3[];
extern  VTBL_ENTRY _ZTV7S5077C3[];
extern Class_Descriptor cd_S5077C2;
extern VTBL_ENTRY _ZTI7S5077C2[];
extern  VTBL_ENTRY _ZTV7S5077C2[];
static Base_Class bases_S5077C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5077C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5077C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5077C1[];
extern void _ZN7S5077C1D1Ev();
extern void _ZN7S5077C1D0Ev();
extern void _ZN7S5077C32v4Ev();
extern void _ZN7S5077C32v5Ev();
extern void _ZN7S5077C32v6Ev();
extern void _ZN7S5077C22v7Ev();
extern void _ZN7S5077C22v8Ev();
extern void _ZN7S5077C12v1Ev();
extern void _ZN7S5077C12v2Ev();
extern void _ZN7S5077C12v3Ev();
static  VTBL_ENTRY vtc_S5077C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5077C1[0]),
  (VTBL_ENTRY)&_ZN7S5077C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5077C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5077C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5077C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5077C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5077C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5077C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5077C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5077C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5077C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5077C1[];
extern  VTBL_ENTRY _ZTV7S5077C1[];
Class_Descriptor cd_S5077C1 = {  "S5077C1", // class name
  bases_S5077C1, 2,
  &(vtc_S5077C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S5077C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5077C1),12, //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  S2179C4  {
  ::S4473C12_nt s2179c4f0;
  int s2179c4f1[2];
  char s2179c4f2;
  virtual  ~S2179C4(); // _ZN7S2179C4D1Ev
  virtual void  v3(); // _ZN7S2179C42v3Ev
  virtual void  v4(); // _ZN7S2179C42v4Ev
  virtual void  v5(); // _ZN7S2179C42v5Ev
  S2179C4(); // tgen
};
//SIG(-1 S2179C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2179C4 ::~S2179C4(){ note_dtor("S2179C4", this);}
void  S2179C4 ::v3(){vfunc_called(this, "_ZN7S2179C42v3Ev");}
void  S2179C4 ::v4(){vfunc_called(this, "_ZN7S2179C42v4Ev");}
void  S2179C4 ::v5(){vfunc_called(this, "_ZN7S2179C42v5Ev");}
S2179C4 ::S2179C4(){ note_ctor("S2179C4", this);} // tgen

static void Test_S2179C4()
{
  extern Class_Descriptor cd_S2179C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2179C4, buf);
    S2179C4 *dp, &lv = *(dp=new (buf) S2179C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2179C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2179C4)");
    check_field_offset(lv, s2179c4f0, ABISELECT(8,4), "S2179C4.s2179c4f0");
    check_field_offset(lv, s2179c4f1, ABISELECT(24,16), "S2179C4.s2179c4f1");
    check_field_offset(lv, s2179c4f2, ABISELECT(32,24), "S2179C4.s2179c4f2");
    test_class_info(&lv, &cd_S2179C4);
    dp->~S2179C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2179C4(Test_S2179C4, "S2179C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2179C4C1Ev();
extern void _ZN7S2179C4D1Ev();
Name_Map name_map_S2179C4[] = {
  NSPAIR(_ZN7S2179C4C1Ev),
  NSPAIR(_ZN7S2179C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2179C4[];
extern void _ZN7S2179C4D1Ev();
extern void _ZN7S2179C4D0Ev();
extern void _ZN7S2179C42v3Ev();
extern void _ZN7S2179C42v4Ev();
extern void _ZN7S2179C42v5Ev();
static  VTBL_ENTRY vtc_S2179C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2179C4[0]),
  (VTBL_ENTRY)&_ZN7S2179C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2179C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2179C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2179C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2179C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2179C4[];
extern  VTBL_ENTRY _ZTV7S2179C4[];
Class_Descriptor cd_S2179C4 = {  "S2179C4", // class name
  0,0,//no base classes
  &(vtc_S2179C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2179C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2179C4),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  S2179C3  : S2179C4 {
  void *s2179c3f0;
  virtual void  v6(); // _ZN7S2179C32v6Ev
  virtual void  v7(); // _ZN7S2179C32v7Ev
  ~S2179C3(); // tgen
  S2179C3(); // tgen
};
//SIG(-1 S2179C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2179C3 ::v6(){vfunc_called(this, "_ZN7S2179C32v6Ev");}
void  S2179C3 ::v7(){vfunc_called(this, "_ZN7S2179C32v7Ev");}
S2179C3 ::~S2179C3(){ note_dtor("S2179C3", this);} // tgen
S2179C3 ::S2179C3(){ note_ctor("S2179C3", this);} // tgen

static void Test_S2179C3()
{
  extern Class_Descriptor cd_S2179C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2179C3, buf);
    S2179C3 *dp, &lv = *(dp=new (buf) S2179C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2179C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2179C3)");
    check_base_class_offset(lv, (S2179C4*), 0, "S2179C3");
    check_field_offset(lv, s2179c3f0, ABISELECT(40,28), "S2179C3.s2179c3f0");
    test_class_info(&lv, &cd_S2179C3);
    dp->~S2179C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2179C3(Test_S2179C3, "S2179C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2179C3C1Ev();
extern void _ZN7S2179C3D1Ev();
Name_Map name_map_S2179C3[] = {
  NSPAIR(_ZN7S2179C3C1Ev),
  NSPAIR(_ZN7S2179C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2179C4;
extern VTBL_ENTRY _ZTI7S2179C4[];
extern  VTBL_ENTRY _ZTV7S2179C4[];
static Base_Class bases_S2179C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2179C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2179C3[];
extern void _ZN7S2179C3D1Ev();
extern void _ZN7S2179C3D0Ev();
extern void _ZN7S2179C42v3Ev();
extern void _ZN7S2179C42v4Ev();
extern void _ZN7S2179C42v5Ev();
extern void _ZN7S2179C32v6Ev();
extern void _ZN7S2179C32v7Ev();
static  VTBL_ENTRY vtc_S2179C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2179C3[0]),
  (VTBL_ENTRY)&_ZN7S2179C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2179C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2179C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2179C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2179C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2179C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2179C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S2179C3[];
extern  VTBL_ENTRY _ZTV7S2179C3[];
Class_Descriptor cd_S2179C3 = {  "S2179C3", // class name
  bases_S2179C3, 1,
  &(vtc_S2179C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2179C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2179C3),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  S2179C2  : S2179C3 {
  virtual  ~S2179C2(); // _ZN7S2179C2D1Ev
  S2179C2(); // tgen
};
//SIG(-1 S2179C2) C1{ BC2{ BC3{ vd v1 v2 v3 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v4 v5 Fp} vd}


 S2179C2 ::~S2179C2(){ note_dtor("S2179C2", this);}
S2179C2 ::S2179C2(){ note_ctor("S2179C2", this);} // tgen

static void Test_S2179C2()
{
  extern Class_Descriptor cd_S2179C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2179C2, buf);
    S2179C2 *dp, &lv = *(dp=new (buf) S2179C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2179C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2179C2)");
    check_base_class_offset(lv, (S2179C4*)(S2179C3*), 0, "S2179C2");
    check_base_class_offset(lv, (S2179C3*), 0, "S2179C2");
    test_class_info(&lv, &cd_S2179C2);
    dp->~S2179C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2179C2(Test_S2179C2, "S2179C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2179C2C1Ev();
extern void _ZN7S2179C2D1Ev();
Name_Map name_map_S2179C2[] = {
  NSPAIR(_ZN7S2179C2C1Ev),
  NSPAIR(_ZN7S2179C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2179C4;
extern VTBL_ENTRY _ZTI7S2179C4[];
extern  VTBL_ENTRY _ZTV7S2179C4[];
extern Class_Descriptor cd_S2179C3;
extern VTBL_ENTRY _ZTI7S2179C3[];
extern  VTBL_ENTRY _ZTV7S2179C3[];
static Base_Class bases_S2179C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2179C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2179C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2179C2[];
extern void _ZN7S2179C2D1Ev();
extern void _ZN7S2179C2D0Ev();
extern void _ZN7S2179C42v3Ev();
extern void _ZN7S2179C42v4Ev();
extern void _ZN7S2179C42v5Ev();
extern void _ZN7S2179C32v6Ev();
extern void _ZN7S2179C32v7Ev();
static  VTBL_ENTRY vtc_S2179C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2179C2[0]),
  (VTBL_ENTRY)&_ZN7S2179C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2179C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2179C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2179C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2179C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2179C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2179C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S2179C2[];
extern  VTBL_ENTRY _ZTV7S2179C2[];
Class_Descriptor cd_S2179C2 = {  "S2179C2", // class name
  bases_S2179C2, 2,
  &(vtc_S2179C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2179C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2179C2),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  S2179C1  : S2179C2 {
  virtual  ~S2179C1(); // _ZN7S2179C1D1Ev
  virtual void  v1(); // _ZN7S2179C12v1Ev
  virtual void  v2(); // _ZN7S2179C12v2Ev
  S2179C1(); // tgen
};
//SIG(1 S2179C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v6 v7 Fp} vd} vd v1 v2}


 S2179C1 ::~S2179C1(){ note_dtor("S2179C1", this);}
void  S2179C1 ::v1(){vfunc_called(this, "_ZN7S2179C12v1Ev");}
void  S2179C1 ::v2(){vfunc_called(this, "_ZN7S2179C12v2Ev");}
S2179C1 ::S2179C1(){ note_ctor("S2179C1", this);} // tgen

static void Test_S2179C1()
{
  extern Class_Descriptor cd_S2179C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2179C1, buf);
    S2179C1 *dp, &lv = *(dp=new (buf) S2179C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2179C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2179C1)");
    check_base_class_offset(lv, (S2179C4*)(S2179C3*)(S2179C2*), 0, "S2179C1");
    check_base_class_offset(lv, (S2179C3*)(S2179C2*), 0, "S2179C1");
    check_base_class_offset(lv, (S2179C2*), 0, "S2179C1");
    test_class_info(&lv, &cd_S2179C1);
    dp->~S2179C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2179C1(Test_S2179C1, "S2179C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2179C1C1Ev();
extern void _ZN7S2179C1D1Ev();
Name_Map name_map_S2179C1[] = {
  NSPAIR(_ZN7S2179C1C1Ev),
  NSPAIR(_ZN7S2179C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2179C4;
extern VTBL_ENTRY _ZTI7S2179C4[];
extern  VTBL_ENTRY _ZTV7S2179C4[];
extern Class_Descriptor cd_S2179C3;
extern VTBL_ENTRY _ZTI7S2179C3[];
extern  VTBL_ENTRY _ZTV7S2179C3[];
extern Class_Descriptor cd_S2179C2;
extern VTBL_ENTRY _ZTI7S2179C2[];
extern  VTBL_ENTRY _ZTV7S2179C2[];
static Base_Class bases_S2179C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2179C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2179C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2179C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2179C1[];
extern void _ZN7S2179C1D1Ev();
extern void _ZN7S2179C1D0Ev();
extern void _ZN7S2179C42v3Ev();
extern void _ZN7S2179C42v4Ev();
extern void _ZN7S2179C42v5Ev();
extern void _ZN7S2179C32v6Ev();
extern void _ZN7S2179C32v7Ev();
extern void _ZN7S2179C12v1Ev();
extern void _ZN7S2179C12v2Ev();
static  VTBL_ENTRY vtc_S2179C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2179C1[0]),
  (VTBL_ENTRY)&_ZN7S2179C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2179C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2179C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2179C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2179C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2179C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2179C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2179C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2179C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2179C1[];
extern  VTBL_ENTRY _ZTV7S2179C1[];
Class_Descriptor cd_S2179C1 = {  "S2179C1", // class name
  bases_S2179C1, 3,
  &(vtc_S2179C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2179C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2179C1),11, //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  S4802C3  {
  ::S4473C12_nt s4802c3f0;
  int s4802c3f1[2];
  char s4802c3f2;
  virtual  ~S4802C3(); // _ZN7S4802C3D1Ev
  virtual void  v3(); // _ZN7S4802C32v3Ev
  virtual void  v4(); // _ZN7S4802C32v4Ev
  virtual void  v5(); // _ZN7S4802C32v5Ev
  S4802C3(); // tgen
};
//SIG(-1 S4802C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4802C3 ::~S4802C3(){ note_dtor("S4802C3", this);}
void  S4802C3 ::v3(){vfunc_called(this, "_ZN7S4802C32v3Ev");}
void  S4802C3 ::v4(){vfunc_called(this, "_ZN7S4802C32v4Ev");}
void  S4802C3 ::v5(){vfunc_called(this, "_ZN7S4802C32v5Ev");}
S4802C3 ::S4802C3(){ note_ctor("S4802C3", this);} // tgen

static void Test_S4802C3()
{
  extern Class_Descriptor cd_S4802C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4802C3, buf);
    S4802C3 *dp, &lv = *(dp=new (buf) S4802C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4802C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4802C3)");
    check_field_offset(lv, s4802c3f0, ABISELECT(8,4), "S4802C3.s4802c3f0");
    check_field_offset(lv, s4802c3f1, ABISELECT(24,16), "S4802C3.s4802c3f1");
    check_field_offset(lv, s4802c3f2, ABISELECT(32,24), "S4802C3.s4802c3f2");
    test_class_info(&lv, &cd_S4802C3);
    dp->~S4802C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4802C3(Test_S4802C3, "S4802C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4802C3C1Ev();
extern void _ZN7S4802C3D1Ev();
Name_Map name_map_S4802C3[] = {
  NSPAIR(_ZN7S4802C3C1Ev),
  NSPAIR(_ZN7S4802C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4802C3[];
extern void _ZN7S4802C3D1Ev();
extern void _ZN7S4802C3D0Ev();
extern void _ZN7S4802C32v3Ev();
extern void _ZN7S4802C32v4Ev();
extern void _ZN7S4802C32v5Ev();
static  VTBL_ENTRY vtc_S4802C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4802C3[0]),
  (VTBL_ENTRY)&_ZN7S4802C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4802C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4802C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4802C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4802C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4802C3[];
extern  VTBL_ENTRY _ZTV7S4802C3[];
Class_Descriptor cd_S4802C3 = {  "S4802C3", // class name
  0,0,//no base classes
  &(vtc_S4802C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4802C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4802C3),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  S4802C2  : S4802C3 {
  void *s4802c2f0;
  virtual void  v6(); // _ZN7S4802C22v6Ev
  virtual void  v7(); // _ZN7S4802C22v7Ev
  ~S4802C2(); // tgen
  S4802C2(); // tgen
};
//SIG(-1 S4802C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4802C2 ::v6(){vfunc_called(this, "_ZN7S4802C22v6Ev");}
void  S4802C2 ::v7(){vfunc_called(this, "_ZN7S4802C22v7Ev");}
S4802C2 ::~S4802C2(){ note_dtor("S4802C2", this);} // tgen
S4802C2 ::S4802C2(){ note_ctor("S4802C2", this);} // tgen

static void Test_S4802C2()
{
  extern Class_Descriptor cd_S4802C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4802C2, buf);
    S4802C2 *dp, &lv = *(dp=new (buf) S4802C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4802C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4802C2)");
    check_base_class_offset(lv, (S4802C3*), 0, "S4802C2");
    check_field_offset(lv, s4802c2f0, ABISELECT(40,28), "S4802C2.s4802c2f0");
    test_class_info(&lv, &cd_S4802C2);
    dp->~S4802C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4802C2(Test_S4802C2, "S4802C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4802C2C1Ev();
extern void _ZN7S4802C2D1Ev();
Name_Map name_map_S4802C2[] = {
  NSPAIR(_ZN7S4802C2C1Ev),
  NSPAIR(_ZN7S4802C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4802C3;
extern VTBL_ENTRY _ZTI7S4802C3[];
extern  VTBL_ENTRY _ZTV7S4802C3[];
static Base_Class bases_S4802C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4802C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4802C2[];
extern void _ZN7S4802C2D1Ev();
extern void _ZN7S4802C2D0Ev();
extern void _ZN7S4802C32v3Ev();
extern void _ZN7S4802C32v4Ev();
extern void _ZN7S4802C32v5Ev();
extern void _ZN7S4802C22v6Ev();
extern void _ZN7S4802C22v7Ev();
static  VTBL_ENTRY vtc_S4802C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4802C2[0]),
  (VTBL_ENTRY)&_ZN7S4802C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4802C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4802C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4802C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4802C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4802C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4802C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4802C2[];
extern  VTBL_ENTRY _ZTV7S4802C2[];
Class_Descriptor cd_S4802C2 = {  "S4802C2", // class name
  bases_S4802C2, 1,
  &(vtc_S4802C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4802C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4802C2),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  S4802C1  : S4802C2 {
  void *s4802c1f0[2];
  virtual  ~S4802C1(); // _ZN7S4802C1D1Ev
  virtual void  v1(); // _ZN7S4802C12v1Ev
  virtual void  v2(); // _ZN7S4802C12v2Ev
  S4802C1(); // tgen
};
//SIG(1 S4802C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 Fp[2]}


 S4802C1 ::~S4802C1(){ note_dtor("S4802C1", this);}
void  S4802C1 ::v1(){vfunc_called(this, "_ZN7S4802C12v1Ev");}
void  S4802C1 ::v2(){vfunc_called(this, "_ZN7S4802C12v2Ev");}
S4802C1 ::S4802C1(){ note_ctor("S4802C1", this);} // tgen

static void Test_S4802C1()
{
  extern Class_Descriptor cd_S4802C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S4802C1, buf);
    S4802C1 *dp, &lv = *(dp=new (buf) S4802C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S4802C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4802C1)");
    check_base_class_offset(lv, (S4802C3*)(S4802C2*), 0, "S4802C1");
    check_base_class_offset(lv, (S4802C2*), 0, "S4802C1");
    check_field_offset(lv, s4802c1f0, ABISELECT(48,32), "S4802C1.s4802c1f0");
    test_class_info(&lv, &cd_S4802C1);
    dp->~S4802C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4802C1(Test_S4802C1, "S4802C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S4802C1C1Ev();
extern void _ZN7S4802C1D1Ev();
Name_Map name_map_S4802C1[] = {
  NSPAIR(_ZN7S4802C1C1Ev),
  NSPAIR(_ZN7S4802C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4802C3;
extern VTBL_ENTRY _ZTI7S4802C3[];
extern  VTBL_ENTRY _ZTV7S4802C3[];
extern Class_Descriptor cd_S4802C2;
extern VTBL_ENTRY _ZTI7S4802C2[];
extern  VTBL_ENTRY _ZTV7S4802C2[];
static Base_Class bases_S4802C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4802C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4802C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4802C1[];
extern void _ZN7S4802C1D1Ev();
extern void _ZN7S4802C1D0Ev();
extern void _ZN7S4802C32v3Ev();
extern void _ZN7S4802C32v4Ev();
extern void _ZN7S4802C32v5Ev();
extern void _ZN7S4802C22v6Ev();
extern void _ZN7S4802C22v7Ev();
extern void _ZN7S4802C12v1Ev();
extern void _ZN7S4802C12v2Ev();
static  VTBL_ENTRY vtc_S4802C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4802C1[0]),
  (VTBL_ENTRY)&_ZN7S4802C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4802C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4802C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4802C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4802C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4802C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4802C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4802C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4802C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4802C1[];
extern  VTBL_ENTRY _ZTV7S4802C1[];
Class_Descriptor cd_S4802C1 = {  "S4802C1", // class name
  bases_S4802C1, 2,
  &(vtc_S4802C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S4802C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4802C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4359C3  {
  ::S4473C12_nt s4359c3f0;
  int s4359c3f1[2];
  char s4359c3f2;
  virtual  ~S4359C3(); // _ZN7S4359C3D1Ev
  virtual void  v2(); // _ZN7S4359C32v2Ev
  virtual void  v3(); // _ZN7S4359C32v3Ev
  virtual void  v4(); // _ZN7S4359C32v4Ev
  S4359C3(); // tgen
};
//SIG(-1 S4359C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4359C3 ::~S4359C3(){ note_dtor("S4359C3", this);}
void  S4359C3 ::v2(){vfunc_called(this, "_ZN7S4359C32v2Ev");}
void  S4359C3 ::v3(){vfunc_called(this, "_ZN7S4359C32v3Ev");}
void  S4359C3 ::v4(){vfunc_called(this, "_ZN7S4359C32v4Ev");}
S4359C3 ::S4359C3(){ note_ctor("S4359C3", this);} // tgen

static void Test_S4359C3()
{
  extern Class_Descriptor cd_S4359C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4359C3, buf);
    S4359C3 *dp, &lv = *(dp=new (buf) S4359C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4359C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4359C3)");
    check_field_offset(lv, s4359c3f0, ABISELECT(8,4), "S4359C3.s4359c3f0");
    check_field_offset(lv, s4359c3f1, ABISELECT(24,16), "S4359C3.s4359c3f1");
    check_field_offset(lv, s4359c3f2, ABISELECT(32,24), "S4359C3.s4359c3f2");
    test_class_info(&lv, &cd_S4359C3);
    dp->~S4359C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4359C3(Test_S4359C3, "S4359C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4359C3C1Ev();
extern void _ZN7S4359C3D1Ev();
Name_Map name_map_S4359C3[] = {
  NSPAIR(_ZN7S4359C3C1Ev),
  NSPAIR(_ZN7S4359C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4359C3[];
extern void _ZN7S4359C3D1Ev();
extern void _ZN7S4359C3D0Ev();
extern void _ZN7S4359C32v2Ev();
extern void _ZN7S4359C32v3Ev();
extern void _ZN7S4359C32v4Ev();
static  VTBL_ENTRY vtc_S4359C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4359C3[0]),
  (VTBL_ENTRY)&_ZN7S4359C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4359C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4359C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4359C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4359C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4359C3[];
extern  VTBL_ENTRY _ZTV7S4359C3[];
Class_Descriptor cd_S4359C3 = {  "S4359C3", // class name
  0,0,//no base classes
  &(vtc_S4359C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4359C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4359C3),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  S4359C2  : S4359C3 {
  void *s4359c2f0;
  virtual void  v5(); // _ZN7S4359C22v5Ev
  virtual void  v6(); // _ZN7S4359C22v6Ev
  ~S4359C2(); // tgen
  S4359C2(); // tgen
};
//SIG(-1 S4359C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4359C2 ::v5(){vfunc_called(this, "_ZN7S4359C22v5Ev");}
void  S4359C2 ::v6(){vfunc_called(this, "_ZN7S4359C22v6Ev");}
S4359C2 ::~S4359C2(){ note_dtor("S4359C2", this);} // tgen
S4359C2 ::S4359C2(){ note_ctor("S4359C2", this);} // tgen

static void Test_S4359C2()
{
  extern Class_Descriptor cd_S4359C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4359C2, buf);
    S4359C2 *dp, &lv = *(dp=new (buf) S4359C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4359C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4359C2)");
    check_base_class_offset(lv, (S4359C3*), 0, "S4359C2");
    check_field_offset(lv, s4359c2f0, ABISELECT(40,28), "S4359C2.s4359c2f0");
    test_class_info(&lv, &cd_S4359C2);
    dp->~S4359C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4359C2(Test_S4359C2, "S4359C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4359C2C1Ev();
extern void _ZN7S4359C2D1Ev();
Name_Map name_map_S4359C2[] = {
  NSPAIR(_ZN7S4359C2C1Ev),
  NSPAIR(_ZN7S4359C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4359C3;
extern VTBL_ENTRY _ZTI7S4359C3[];
extern  VTBL_ENTRY _ZTV7S4359C3[];
static Base_Class bases_S4359C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4359C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4359C2[];
extern void _ZN7S4359C2D1Ev();
extern void _ZN7S4359C2D0Ev();
extern void _ZN7S4359C32v2Ev();
extern void _ZN7S4359C32v3Ev();
extern void _ZN7S4359C32v4Ev();
extern void _ZN7S4359C22v5Ev();
extern void _ZN7S4359C22v6Ev();
static  VTBL_ENTRY vtc_S4359C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4359C2[0]),
  (VTBL_ENTRY)&_ZN7S4359C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4359C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4359C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4359C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4359C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4359C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4359C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4359C2[];
extern  VTBL_ENTRY _ZTV7S4359C2[];
Class_Descriptor cd_S4359C2 = {  "S4359C2", // class name
  bases_S4359C2, 1,
  &(vtc_S4359C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4359C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4359C2),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  S4359C1  : S4359C2 {
  char s4359c1f0;
  int s4359c1f1;
  ::S4473C12_nt s4359c1f2;
  virtual void  v1(); // _ZN7S4359C12v1Ev
  ~S4359C1(); // tgen
  S4359C1(); // tgen
};
//SIG(1 S4359C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 Fc Fi FC4}


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

static void Test_S4359C1()
{
  extern Class_Descriptor cd_S4359C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4359C1, buf);
    S4359C1 *dp, &lv = *(dp=new (buf) S4359C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4359C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4359C1)");
    check_base_class_offset(lv, (S4359C3*)(S4359C2*), 0, "S4359C1");
    check_base_class_offset(lv, (S4359C2*), 0, "S4359C1");
    check_field_offset(lv, s4359c1f0, ABISELECT(48,32), "S4359C1.s4359c1f0");
    check_field_offset(lv, s4359c1f1, ABISELECT(52,36), "S4359C1.s4359c1f1");
    check_field_offset(lv, s4359c1f2, ABISELECT(56,40), "S4359C1.s4359c1f2");
    test_class_info(&lv, &cd_S4359C1);
    dp->~S4359C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4359C1(Test_S4359C1, "S4359C1", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4359C1C1Ev();
extern void _ZN7S4359C1D1Ev();
Name_Map name_map_S4359C1[] = {
  NSPAIR(_ZN7S4359C1C1Ev),
  NSPAIR(_ZN7S4359C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4359C3;
extern VTBL_ENTRY _ZTI7S4359C3[];
extern  VTBL_ENTRY _ZTV7S4359C3[];
extern Class_Descriptor cd_S4359C2;
extern VTBL_ENTRY _ZTI7S4359C2[];
extern  VTBL_ENTRY _ZTV7S4359C2[];
static Base_Class bases_S4359C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4359C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4359C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4359C1[];
extern void _ZN7S4359C1D1Ev();
extern void _ZN7S4359C1D0Ev();
extern void _ZN7S4359C32v2Ev();
extern void _ZN7S4359C32v3Ev();
extern void _ZN7S4359C32v4Ev();
extern void _ZN7S4359C22v5Ev();
extern void _ZN7S4359C22v6Ev();
extern void _ZN7S4359C12v1Ev();
static  VTBL_ENTRY vtc_S4359C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4359C1[0]),
  (VTBL_ENTRY)&_ZN7S4359C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4359C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4359C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4359C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4359C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4359C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4359C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4359C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4359C1[];
extern  VTBL_ENTRY _ZTV7S4359C1[];
Class_Descriptor cd_S4359C1 = {  "S4359C1", // class name
  bases_S4359C1, 2,
  &(vtc_S4359C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4359C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4359C1),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  S4808C3  {
  ::S4473C12_nt s4808c3f0;
  int s4808c3f1[2];
  char s4808c3f2;
  virtual  ~S4808C3(); // _ZN7S4808C3D1Ev
  virtual void  v3(); // _ZN7S4808C32v3Ev
  virtual void  v4(); // _ZN7S4808C32v4Ev
  virtual void  v5(); // _ZN7S4808C32v5Ev
  S4808C3(); // tgen
};
//SIG(-1 S4808C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4808C3 ::~S4808C3(){ note_dtor("S4808C3", this);}
void  S4808C3 ::v3(){vfunc_called(this, "_ZN7S4808C32v3Ev");}
void  S4808C3 ::v4(){vfunc_called(this, "_ZN7S4808C32v4Ev");}
void  S4808C3 ::v5(){vfunc_called(this, "_ZN7S4808C32v5Ev");}
S4808C3 ::S4808C3(){ note_ctor("S4808C3", this);} // tgen

static void Test_S4808C3()
{
  extern Class_Descriptor cd_S4808C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4808C3, buf);
    S4808C3 *dp, &lv = *(dp=new (buf) S4808C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4808C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4808C3)");
    check_field_offset(lv, s4808c3f0, ABISELECT(8,4), "S4808C3.s4808c3f0");
    check_field_offset(lv, s4808c3f1, ABISELECT(24,16), "S4808C3.s4808c3f1");
    check_field_offset(lv, s4808c3f2, ABISELECT(32,24), "S4808C3.s4808c3f2");
    test_class_info(&lv, &cd_S4808C3);
    dp->~S4808C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4808C3(Test_S4808C3, "S4808C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4808C3C1Ev();
extern void _ZN7S4808C3D1Ev();
Name_Map name_map_S4808C3[] = {
  NSPAIR(_ZN7S4808C3C1Ev),
  NSPAIR(_ZN7S4808C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4808C3[];
extern void _ZN7S4808C3D1Ev();
extern void _ZN7S4808C3D0Ev();
extern void _ZN7S4808C32v3Ev();
extern void _ZN7S4808C32v4Ev();
extern void _ZN7S4808C32v5Ev();
static  VTBL_ENTRY vtc_S4808C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4808C3[0]),
  (VTBL_ENTRY)&_ZN7S4808C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4808C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4808C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4808C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4808C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4808C3[];
extern  VTBL_ENTRY _ZTV7S4808C3[];
Class_Descriptor cd_S4808C3 = {  "S4808C3", // class name
  0,0,//no base classes
  &(vtc_S4808C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4808C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4808C3),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  S4808C2  : S4808C3 {
  void *s4808c2f0;
  virtual void  v6(); // _ZN7S4808C22v6Ev
  virtual void  v7(); // _ZN7S4808C22v7Ev
  ~S4808C2(); // tgen
  S4808C2(); // tgen
};
//SIG(-1 S4808C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4808C2 ::v6(){vfunc_called(this, "_ZN7S4808C22v6Ev");}
void  S4808C2 ::v7(){vfunc_called(this, "_ZN7S4808C22v7Ev");}
S4808C2 ::~S4808C2(){ note_dtor("S4808C2", this);} // tgen
S4808C2 ::S4808C2(){ note_ctor("S4808C2", this);} // tgen

static void Test_S4808C2()
{
  extern Class_Descriptor cd_S4808C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4808C2, buf);
    S4808C2 *dp, &lv = *(dp=new (buf) S4808C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4808C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4808C2)");
    check_base_class_offset(lv, (S4808C3*), 0, "S4808C2");
    check_field_offset(lv, s4808c2f0, ABISELECT(40,28), "S4808C2.s4808c2f0");
    test_class_info(&lv, &cd_S4808C2);
    dp->~S4808C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4808C2(Test_S4808C2, "S4808C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4808C2C1Ev();
extern void _ZN7S4808C2D1Ev();
Name_Map name_map_S4808C2[] = {
  NSPAIR(_ZN7S4808C2C1Ev),
  NSPAIR(_ZN7S4808C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4808C3;
extern VTBL_ENTRY _ZTI7S4808C3[];
extern  VTBL_ENTRY _ZTV7S4808C3[];
static Base_Class bases_S4808C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4808C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4808C2[];
extern void _ZN7S4808C2D1Ev();
extern void _ZN7S4808C2D0Ev();
extern void _ZN7S4808C32v3Ev();
extern void _ZN7S4808C32v4Ev();
extern void _ZN7S4808C32v5Ev();
extern void _ZN7S4808C22v6Ev();
extern void _ZN7S4808C22v7Ev();
static  VTBL_ENTRY vtc_S4808C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4808C2[0]),
  (VTBL_ENTRY)&_ZN7S4808C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4808C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4808C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4808C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4808C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4808C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4808C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4808C2[];
extern  VTBL_ENTRY _ZTV7S4808C2[];
Class_Descriptor cd_S4808C2 = {  "S4808C2", // class name
  bases_S4808C2, 1,
  &(vtc_S4808C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4808C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4808C2),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  S4808C1  : S4808C2 {
  void *s4808c1f0;
  virtual  ~S4808C1(); // _ZN7S4808C1D1Ev
  virtual void  v1(); // _ZN7S4808C12v1Ev
  virtual void  v2(); // _ZN7S4808C12v2Ev
  S4808C1(); // tgen
};
//SIG(1 S4808C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 Fp}


 S4808C1 ::~S4808C1(){ note_dtor("S4808C1", this);}
void  S4808C1 ::v1(){vfunc_called(this, "_ZN7S4808C12v1Ev");}
void  S4808C1 ::v2(){vfunc_called(this, "_ZN7S4808C12v2Ev");}
S4808C1 ::S4808C1(){ note_ctor("S4808C1", this);} // tgen

static void Test_S4808C1()
{
  extern Class_Descriptor cd_S4808C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S4808C1, buf);
    S4808C1 *dp, &lv = *(dp=new (buf) S4808C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S4808C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4808C1)");
    check_base_class_offset(lv, (S4808C3*)(S4808C2*), 0, "S4808C1");
    check_base_class_offset(lv, (S4808C2*), 0, "S4808C1");
    check_field_offset(lv, s4808c1f0, ABISELECT(48,32), "S4808C1.s4808c1f0");
    test_class_info(&lv, &cd_S4808C1);
    dp->~S4808C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4808C1(Test_S4808C1, "S4808C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S4808C1C1Ev();
extern void _ZN7S4808C1D1Ev();
Name_Map name_map_S4808C1[] = {
  NSPAIR(_ZN7S4808C1C1Ev),
  NSPAIR(_ZN7S4808C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4808C3;
extern VTBL_ENTRY _ZTI7S4808C3[];
extern  VTBL_ENTRY _ZTV7S4808C3[];
extern Class_Descriptor cd_S4808C2;
extern VTBL_ENTRY _ZTI7S4808C2[];
extern  VTBL_ENTRY _ZTV7S4808C2[];
static Base_Class bases_S4808C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4808C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4808C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4808C1[];
extern void _ZN7S4808C1D1Ev();
extern void _ZN7S4808C1D0Ev();
extern void _ZN7S4808C32v3Ev();
extern void _ZN7S4808C32v4Ev();
extern void _ZN7S4808C32v5Ev();
extern void _ZN7S4808C22v6Ev();
extern void _ZN7S4808C22v7Ev();
extern void _ZN7S4808C12v1Ev();
extern void _ZN7S4808C12v2Ev();
static  VTBL_ENTRY vtc_S4808C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4808C1[0]),
  (VTBL_ENTRY)&_ZN7S4808C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4808C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4808C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4808C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4808C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4808C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4808C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4808C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4808C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4808C1[];
extern  VTBL_ENTRY _ZTV7S4808C1[];
Class_Descriptor cd_S4808C1 = {  "S4808C1", // class name
  bases_S4808C1, 2,
  &(vtc_S4808C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S4808C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4808C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4740C3  {
  ::S4473C12_nt s4740c3f0;
  int s4740c3f1[2];
  char s4740c3f2;
  virtual  ~S4740C3(); // _ZN7S4740C3D1Ev
  virtual void  v3(); // _ZN7S4740C32v3Ev
  virtual void  v4(); // _ZN7S4740C32v4Ev
  virtual void  v5(); // _ZN7S4740C32v5Ev
  S4740C3(); // tgen
};
//SIG(-1 S4740C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4740C3 ::~S4740C3(){ note_dtor("S4740C3", this);}
void  S4740C3 ::v3(){vfunc_called(this, "_ZN7S4740C32v3Ev");}
void  S4740C3 ::v4(){vfunc_called(this, "_ZN7S4740C32v4Ev");}
void  S4740C3 ::v5(){vfunc_called(this, "_ZN7S4740C32v5Ev");}
S4740C3 ::S4740C3(){ note_ctor("S4740C3", this);} // tgen

static void Test_S4740C3()
{
  extern Class_Descriptor cd_S4740C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4740C3, buf);
    S4740C3 *dp, &lv = *(dp=new (buf) S4740C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4740C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4740C3)");
    check_field_offset(lv, s4740c3f0, ABISELECT(8,4), "S4740C3.s4740c3f0");
    check_field_offset(lv, s4740c3f1, ABISELECT(24,16), "S4740C3.s4740c3f1");
    check_field_offset(lv, s4740c3f2, ABISELECT(32,24), "S4740C3.s4740c3f2");
    test_class_info(&lv, &cd_S4740C3);
    dp->~S4740C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4740C3(Test_S4740C3, "S4740C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4740C3C1Ev();
extern void _ZN7S4740C3D1Ev();
Name_Map name_map_S4740C3[] = {
  NSPAIR(_ZN7S4740C3C1Ev),
  NSPAIR(_ZN7S4740C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4740C3[];
extern void _ZN7S4740C3D1Ev();
extern void _ZN7S4740C3D0Ev();
extern void _ZN7S4740C32v3Ev();
extern void _ZN7S4740C32v4Ev();
extern void _ZN7S4740C32v5Ev();
static  VTBL_ENTRY vtc_S4740C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4740C3[0]),
  (VTBL_ENTRY)&_ZN7S4740C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4740C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4740C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4740C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4740C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4740C3[];
extern  VTBL_ENTRY _ZTV7S4740C3[];
Class_Descriptor cd_S4740C3 = {  "S4740C3", // class name
  0,0,//no base classes
  &(vtc_S4740C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4740C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4740C3),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  S4740C2  : S4740C3 {
  void *s4740c2f0;
  virtual void  v6(); // _ZN7S4740C22v6Ev
  virtual void  v7(); // _ZN7S4740C22v7Ev
  ~S4740C2(); // tgen
  S4740C2(); // tgen
};
//SIG(-1 S4740C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4740C2 ::v6(){vfunc_called(this, "_ZN7S4740C22v6Ev");}
void  S4740C2 ::v7(){vfunc_called(this, "_ZN7S4740C22v7Ev");}
S4740C2 ::~S4740C2(){ note_dtor("S4740C2", this);} // tgen
S4740C2 ::S4740C2(){ note_ctor("S4740C2", this);} // tgen

static void Test_S4740C2()
{
  extern Class_Descriptor cd_S4740C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4740C2, buf);
    S4740C2 *dp, &lv = *(dp=new (buf) S4740C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4740C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4740C2)");
    check_base_class_offset(lv, (S4740C3*), 0, "S4740C2");
    check_field_offset(lv, s4740c2f0, ABISELECT(40,28), "S4740C2.s4740c2f0");
    test_class_info(&lv, &cd_S4740C2);
    dp->~S4740C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4740C2(Test_S4740C2, "S4740C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4740C2C1Ev();
extern void _ZN7S4740C2D1Ev();
Name_Map name_map_S4740C2[] = {
  NSPAIR(_ZN7S4740C2C1Ev),
  NSPAIR(_ZN7S4740C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4740C3;
extern VTBL_ENTRY _ZTI7S4740C3[];
extern  VTBL_ENTRY _ZTV7S4740C3[];
static Base_Class bases_S4740C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4740C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4740C2[];
extern void _ZN7S4740C2D1Ev();
extern void _ZN7S4740C2D0Ev();
extern void _ZN7S4740C32v3Ev();
extern void _ZN7S4740C32v4Ev();
extern void _ZN7S4740C32v5Ev();
extern void _ZN7S4740C22v6Ev();
extern void _ZN7S4740C22v7Ev();
static  VTBL_ENTRY vtc_S4740C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4740C2[0]),
  (VTBL_ENTRY)&_ZN7S4740C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4740C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4740C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4740C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4740C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4740C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4740C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4740C2[];
extern  VTBL_ENTRY _ZTV7S4740C2[];
Class_Descriptor cd_S4740C2 = {  "S4740C2", // class name
  bases_S4740C2, 1,
  &(vtc_S4740C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4740C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4740C2),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  S4740C1  : S4740C2 {
  int s4740c1f0[3];
  virtual void  v1(); // _ZN7S4740C12v1Ev
  virtual void  v2(); // _ZN7S4740C12v2Ev
  ~S4740C1(); // tgen
  S4740C1(); // tgen
};
//SIG(1 S4740C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} v1 v2 Fi[3]}


void  S4740C1 ::v1(){vfunc_called(this, "_ZN7S4740C12v1Ev");}
void  S4740C1 ::v2(){vfunc_called(this, "_ZN7S4740C12v2Ev");}
S4740C1 ::~S4740C1(){ note_dtor("S4740C1", this);} // tgen
S4740C1 ::S4740C1(){ note_ctor("S4740C1", this);} // tgen

static void Test_S4740C1()
{
  extern Class_Descriptor cd_S4740C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S4740C1, buf);
    S4740C1 *dp, &lv = *(dp=new (buf) S4740C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S4740C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4740C1)");
    check_base_class_offset(lv, (S4740C3*)(S4740C2*), 0, "S4740C1");
    check_base_class_offset(lv, (S4740C2*), 0, "S4740C1");
    check_field_offset(lv, s4740c1f0, ABISELECT(48,32), "S4740C1.s4740c1f0");
    test_class_info(&lv, &cd_S4740C1);
    dp->~S4740C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4740C1(Test_S4740C1, "S4740C1", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S4740C1C1Ev();
extern void _ZN7S4740C1D1Ev();
Name_Map name_map_S4740C1[] = {
  NSPAIR(_ZN7S4740C1C1Ev),
  NSPAIR(_ZN7S4740C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4740C3;
extern VTBL_ENTRY _ZTI7S4740C3[];
extern  VTBL_ENTRY _ZTV7S4740C3[];
extern Class_Descriptor cd_S4740C2;
extern VTBL_ENTRY _ZTI7S4740C2[];
extern  VTBL_ENTRY _ZTV7S4740C2[];
static Base_Class bases_S4740C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4740C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4740C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4740C1[];
extern void _ZN7S4740C1D1Ev();
extern void _ZN7S4740C1D0Ev();
extern void _ZN7S4740C32v3Ev();
extern void _ZN7S4740C32v4Ev();
extern void _ZN7S4740C32v5Ev();
extern void _ZN7S4740C22v6Ev();
extern void _ZN7S4740C22v7Ev();
extern void _ZN7S4740C12v1Ev();
extern void _ZN7S4740C12v2Ev();
static  VTBL_ENTRY vtc_S4740C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4740C1[0]),
  (VTBL_ENTRY)&_ZN7S4740C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4740C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4740C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4740C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4740C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4740C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4740C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4740C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4740C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4740C1[];
extern  VTBL_ENTRY _ZTV7S4740C1[];
Class_Descriptor cd_S4740C1 = {  "S4740C1", // class name
  bases_S4740C1, 2,
  &(vtc_S4740C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S4740C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4740C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4809C3  {
  ::S4473C12_nt s4809c3f0;
  int s4809c3f1[2];
  char s4809c3f2;
  virtual  ~S4809C3(); // _ZN7S4809C3D1Ev
  virtual void  v3(); // _ZN7S4809C32v3Ev
  virtual void  v4(); // _ZN7S4809C32v4Ev
  virtual void  v5(); // _ZN7S4809C32v5Ev
  S4809C3(); // tgen
};
//SIG(-1 S4809C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4809C3 ::~S4809C3(){ note_dtor("S4809C3", this);}
void  S4809C3 ::v3(){vfunc_called(this, "_ZN7S4809C32v3Ev");}
void  S4809C3 ::v4(){vfunc_called(this, "_ZN7S4809C32v4Ev");}
void  S4809C3 ::v5(){vfunc_called(this, "_ZN7S4809C32v5Ev");}
S4809C3 ::S4809C3(){ note_ctor("S4809C3", this);} // tgen

static void Test_S4809C3()
{
  extern Class_Descriptor cd_S4809C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4809C3, buf);
    S4809C3 *dp, &lv = *(dp=new (buf) S4809C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4809C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4809C3)");
    check_field_offset(lv, s4809c3f0, ABISELECT(8,4), "S4809C3.s4809c3f0");
    check_field_offset(lv, s4809c3f1, ABISELECT(24,16), "S4809C3.s4809c3f1");
    check_field_offset(lv, s4809c3f2, ABISELECT(32,24), "S4809C3.s4809c3f2");
    test_class_info(&lv, &cd_S4809C3);
    dp->~S4809C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4809C3(Test_S4809C3, "S4809C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4809C3C1Ev();
extern void _ZN7S4809C3D1Ev();
Name_Map name_map_S4809C3[] = {
  NSPAIR(_ZN7S4809C3C1Ev),
  NSPAIR(_ZN7S4809C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4809C3[];
extern void _ZN7S4809C3D1Ev();
extern void _ZN7S4809C3D0Ev();
extern void _ZN7S4809C32v3Ev();
extern void _ZN7S4809C32v4Ev();
extern void _ZN7S4809C32v5Ev();
static  VTBL_ENTRY vtc_S4809C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4809C3[0]),
  (VTBL_ENTRY)&_ZN7S4809C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4809C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4809C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4809C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4809C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4809C3[];
extern  VTBL_ENTRY _ZTV7S4809C3[];
Class_Descriptor cd_S4809C3 = {  "S4809C3", // class name
  0,0,//no base classes
  &(vtc_S4809C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4809C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4809C3),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  S4809C2  : S4809C3 {
  void *s4809c2f0;
  virtual void  v6(); // _ZN7S4809C22v6Ev
  virtual void  v7(); // _ZN7S4809C22v7Ev
  ~S4809C2(); // tgen
  S4809C2(); // tgen
};
//SIG(-1 S4809C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4809C2 ::v6(){vfunc_called(this, "_ZN7S4809C22v6Ev");}
void  S4809C2 ::v7(){vfunc_called(this, "_ZN7S4809C22v7Ev");}
S4809C2 ::~S4809C2(){ note_dtor("S4809C2", this);} // tgen
S4809C2 ::S4809C2(){ note_ctor("S4809C2", this);} // tgen

static void Test_S4809C2()
{
  extern Class_Descriptor cd_S4809C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4809C2, buf);
    S4809C2 *dp, &lv = *(dp=new (buf) S4809C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4809C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4809C2)");
    check_base_class_offset(lv, (S4809C3*), 0, "S4809C2");
    check_field_offset(lv, s4809c2f0, ABISELECT(40,28), "S4809C2.s4809c2f0");
    test_class_info(&lv, &cd_S4809C2);
    dp->~S4809C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4809C2(Test_S4809C2, "S4809C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4809C2C1Ev();
extern void _ZN7S4809C2D1Ev();
Name_Map name_map_S4809C2[] = {
  NSPAIR(_ZN7S4809C2C1Ev),
  NSPAIR(_ZN7S4809C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4809C3;
extern VTBL_ENTRY _ZTI7S4809C3[];
extern  VTBL_ENTRY _ZTV7S4809C3[];
static Base_Class bases_S4809C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4809C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4809C2[];
extern void _ZN7S4809C2D1Ev();
extern void _ZN7S4809C2D0Ev();
extern void _ZN7S4809C32v3Ev();
extern void _ZN7S4809C32v4Ev();
extern void _ZN7S4809C32v5Ev();
extern void _ZN7S4809C22v6Ev();
extern void _ZN7S4809C22v7Ev();
static  VTBL_ENTRY vtc_S4809C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4809C2[0]),
  (VTBL_ENTRY)&_ZN7S4809C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4809C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4809C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4809C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4809C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4809C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4809C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4809C2[];
extern  VTBL_ENTRY _ZTV7S4809C2[];
Class_Descriptor cd_S4809C2 = {  "S4809C2", // class name
  bases_S4809C2, 1,
  &(vtc_S4809C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4809C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4809C2),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  S4809C1  : S4809C2 {
  virtual  ~S4809C1(); // _ZN7S4809C1D1Ev
  virtual void  v1(); // _ZN7S4809C12v1Ev
  virtual void  v2(); // _ZN7S4809C12v2Ev
  S4809C1(); // tgen
};
//SIG(1 S4809C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2}


 S4809C1 ::~S4809C1(){ note_dtor("S4809C1", this);}
void  S4809C1 ::v1(){vfunc_called(this, "_ZN7S4809C12v1Ev");}
void  S4809C1 ::v2(){vfunc_called(this, "_ZN7S4809C12v2Ev");}
S4809C1 ::S4809C1(){ note_ctor("S4809C1", this);} // tgen

static void Test_S4809C1()
{
  extern Class_Descriptor cd_S4809C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4809C1, buf);
    S4809C1 *dp, &lv = *(dp=new (buf) S4809C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4809C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4809C1)");
    check_base_class_offset(lv, (S4809C3*)(S4809C2*), 0, "S4809C1");
    check_base_class_offset(lv, (S4809C2*), 0, "S4809C1");
    test_class_info(&lv, &cd_S4809C1);
    dp->~S4809C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4809C1(Test_S4809C1, "S4809C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4809C1C1Ev();
extern void _ZN7S4809C1D1Ev();
Name_Map name_map_S4809C1[] = {
  NSPAIR(_ZN7S4809C1C1Ev),
  NSPAIR(_ZN7S4809C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4809C3;
extern VTBL_ENTRY _ZTI7S4809C3[];
extern  VTBL_ENTRY _ZTV7S4809C3[];
extern Class_Descriptor cd_S4809C2;
extern VTBL_ENTRY _ZTI7S4809C2[];
extern  VTBL_ENTRY _ZTV7S4809C2[];
static Base_Class bases_S4809C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4809C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4809C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4809C1[];
extern void _ZN7S4809C1D1Ev();
extern void _ZN7S4809C1D0Ev();
extern void _ZN7S4809C32v3Ev();
extern void _ZN7S4809C32v4Ev();
extern void _ZN7S4809C32v5Ev();
extern void _ZN7S4809C22v6Ev();
extern void _ZN7S4809C22v7Ev();
extern void _ZN7S4809C12v1Ev();
extern void _ZN7S4809C12v2Ev();
static  VTBL_ENTRY vtc_S4809C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4809C1[0]),
  (VTBL_ENTRY)&_ZN7S4809C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4809C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4809C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4809C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4809C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4809C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4809C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4809C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4809C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4809C1[];
extern  VTBL_ENTRY _ZTV7S4809C1[];
Class_Descriptor cd_S4809C1 = {  "S4809C1", // class name
  bases_S4809C1, 2,
  &(vtc_S4809C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4809C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4809C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4741C3  {
  ::S4473C12_nt s4741c3f0;
  int s4741c3f1[2];
  char s4741c3f2;
  virtual  ~S4741C3(); // _ZN7S4741C3D1Ev
  virtual void  v3(); // _ZN7S4741C32v3Ev
  virtual void  v4(); // _ZN7S4741C32v4Ev
  virtual void  v5(); // _ZN7S4741C32v5Ev
  S4741C3(); // tgen
};
//SIG(-1 S4741C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4741C3 ::~S4741C3(){ note_dtor("S4741C3", this);}
void  S4741C3 ::v3(){vfunc_called(this, "_ZN7S4741C32v3Ev");}
void  S4741C3 ::v4(){vfunc_called(this, "_ZN7S4741C32v4Ev");}
void  S4741C3 ::v5(){vfunc_called(this, "_ZN7S4741C32v5Ev");}
S4741C3 ::S4741C3(){ note_ctor("S4741C3", this);} // tgen

static void Test_S4741C3()
{
  extern Class_Descriptor cd_S4741C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4741C3, buf);
    S4741C3 *dp, &lv = *(dp=new (buf) S4741C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4741C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4741C3)");
    check_field_offset(lv, s4741c3f0, ABISELECT(8,4), "S4741C3.s4741c3f0");
    check_field_offset(lv, s4741c3f1, ABISELECT(24,16), "S4741C3.s4741c3f1");
    check_field_offset(lv, s4741c3f2, ABISELECT(32,24), "S4741C3.s4741c3f2");
    test_class_info(&lv, &cd_S4741C3);
    dp->~S4741C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4741C3(Test_S4741C3, "S4741C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4741C3C1Ev();
extern void _ZN7S4741C3D1Ev();
Name_Map name_map_S4741C3[] = {
  NSPAIR(_ZN7S4741C3C1Ev),
  NSPAIR(_ZN7S4741C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4741C3[];
extern void _ZN7S4741C3D1Ev();
extern void _ZN7S4741C3D0Ev();
extern void _ZN7S4741C32v3Ev();
extern void _ZN7S4741C32v4Ev();
extern void _ZN7S4741C32v5Ev();
static  VTBL_ENTRY vtc_S4741C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4741C3[0]),
  (VTBL_ENTRY)&_ZN7S4741C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4741C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4741C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4741C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4741C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4741C3[];
extern  VTBL_ENTRY _ZTV7S4741C3[];
Class_Descriptor cd_S4741C3 = {  "S4741C3", // class name
  0,0,//no base classes
  &(vtc_S4741C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4741C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4741C3),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  S4741C2  : S4741C3 {
  void *s4741c2f0;
  virtual void  v6(); // _ZN7S4741C22v6Ev
  virtual void  v7(); // _ZN7S4741C22v7Ev
  ~S4741C2(); // tgen
  S4741C2(); // tgen
};
//SIG(-1 S4741C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4741C2 ::v6(){vfunc_called(this, "_ZN7S4741C22v6Ev");}
void  S4741C2 ::v7(){vfunc_called(this, "_ZN7S4741C22v7Ev");}
S4741C2 ::~S4741C2(){ note_dtor("S4741C2", this);} // tgen
S4741C2 ::S4741C2(){ note_ctor("S4741C2", this);} // tgen

static void Test_S4741C2()
{
  extern Class_Descriptor cd_S4741C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4741C2, buf);
    S4741C2 *dp, &lv = *(dp=new (buf) S4741C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4741C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4741C2)");
    check_base_class_offset(lv, (S4741C3*), 0, "S4741C2");
    check_field_offset(lv, s4741c2f0, ABISELECT(40,28), "S4741C2.s4741c2f0");
    test_class_info(&lv, &cd_S4741C2);
    dp->~S4741C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4741C2(Test_S4741C2, "S4741C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4741C2C1Ev();
extern void _ZN7S4741C2D1Ev();
Name_Map name_map_S4741C2[] = {
  NSPAIR(_ZN7S4741C2C1Ev),
  NSPAIR(_ZN7S4741C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4741C3;
extern VTBL_ENTRY _ZTI7S4741C3[];
extern  VTBL_ENTRY _ZTV7S4741C3[];
static Base_Class bases_S4741C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4741C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4741C2[];
extern void _ZN7S4741C2D1Ev();
extern void _ZN7S4741C2D0Ev();
extern void _ZN7S4741C32v3Ev();
extern void _ZN7S4741C32v4Ev();
extern void _ZN7S4741C32v5Ev();
extern void _ZN7S4741C22v6Ev();
extern void _ZN7S4741C22v7Ev();
static  VTBL_ENTRY vtc_S4741C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4741C2[0]),
  (VTBL_ENTRY)&_ZN7S4741C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4741C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4741C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4741C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4741C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4741C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4741C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4741C2[];
extern  VTBL_ENTRY _ZTV7S4741C2[];
Class_Descriptor cd_S4741C2 = {  "S4741C2", // class name
  bases_S4741C2, 1,
  &(vtc_S4741C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4741C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4741C2),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  S4741C1  : S4741C2 {
  int s4741c1f0;
  virtual void  v1(); // _ZN7S4741C12v1Ev
  virtual void  v2(); // _ZN7S4741C12v2Ev
  ~S4741C1(); // tgen
  S4741C1(); // tgen
};
//SIG(1 S4741C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} v1 v2 Fi}


void  S4741C1 ::v1(){vfunc_called(this, "_ZN7S4741C12v1Ev");}
void  S4741C1 ::v2(){vfunc_called(this, "_ZN7S4741C12v2Ev");}
S4741C1 ::~S4741C1(){ note_dtor("S4741C1", this);} // tgen
S4741C1 ::S4741C1(){ note_ctor("S4741C1", this);} // tgen

static void Test_S4741C1()
{
  extern Class_Descriptor cd_S4741C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S4741C1, buf);
    S4741C1 *dp, &lv = *(dp=new (buf) S4741C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S4741C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4741C1)");
    check_base_class_offset(lv, (S4741C3*)(S4741C2*), 0, "S4741C1");
    check_base_class_offset(lv, (S4741C2*), 0, "S4741C1");
    check_field_offset(lv, s4741c1f0, ABISELECT(48,32), "S4741C1.s4741c1f0");
    test_class_info(&lv, &cd_S4741C1);
    dp->~S4741C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4741C1(Test_S4741C1, "S4741C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S4741C1C1Ev();
extern void _ZN7S4741C1D1Ev();
Name_Map name_map_S4741C1[] = {
  NSPAIR(_ZN7S4741C1C1Ev),
  NSPAIR(_ZN7S4741C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4741C3;
extern VTBL_ENTRY _ZTI7S4741C3[];
extern  VTBL_ENTRY _ZTV7S4741C3[];
extern Class_Descriptor cd_S4741C2;
extern VTBL_ENTRY _ZTI7S4741C2[];
extern  VTBL_ENTRY _ZTV7S4741C2[];
static Base_Class bases_S4741C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4741C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4741C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4741C1[];
extern void _ZN7S4741C1D1Ev();
extern void _ZN7S4741C1D0Ev();
extern void _ZN7S4741C32v3Ev();
extern void _ZN7S4741C32v4Ev();
extern void _ZN7S4741C32v5Ev();
extern void _ZN7S4741C22v6Ev();
extern void _ZN7S4741C22v7Ev();
extern void _ZN7S4741C12v1Ev();
extern void _ZN7S4741C12v2Ev();
static  VTBL_ENTRY vtc_S4741C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4741C1[0]),
  (VTBL_ENTRY)&_ZN7S4741C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4741C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4741C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4741C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4741C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4741C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4741C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4741C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4741C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4741C1[];
extern  VTBL_ENTRY _ZTV7S4741C1[];
Class_Descriptor cd_S4741C1 = {  "S4741C1", // class name
  bases_S4741C1, 2,
  &(vtc_S4741C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S4741C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4741C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4374C3  {
  ::S4473C12_nt s4374c3f0;
  int s4374c3f1[2];
  char s4374c3f2;
  virtual  ~S4374C3(); // _ZN7S4374C3D1Ev
  virtual void  v2(); // _ZN7S4374C32v2Ev
  virtual void  v3(); // _ZN7S4374C32v3Ev
  virtual void  v4(); // _ZN7S4374C32v4Ev
  S4374C3(); // tgen
};
//SIG(-1 S4374C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4374C3 ::~S4374C3(){ note_dtor("S4374C3", this);}
void  S4374C3 ::v2(){vfunc_called(this, "_ZN7S4374C32v2Ev");}
void  S4374C3 ::v3(){vfunc_called(this, "_ZN7S4374C32v3Ev");}
void  S4374C3 ::v4(){vfunc_called(this, "_ZN7S4374C32v4Ev");}
S4374C3 ::S4374C3(){ note_ctor("S4374C3", this);} // tgen

static void Test_S4374C3()
{
  extern Class_Descriptor cd_S4374C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4374C3, buf);
    S4374C3 *dp, &lv = *(dp=new (buf) S4374C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4374C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4374C3)");
    check_field_offset(lv, s4374c3f0, ABISELECT(8,4), "S4374C3.s4374c3f0");
    check_field_offset(lv, s4374c3f1, ABISELECT(24,16), "S4374C3.s4374c3f1");
    check_field_offset(lv, s4374c3f2, ABISELECT(32,24), "S4374C3.s4374c3f2");
    test_class_info(&lv, &cd_S4374C3);
    dp->~S4374C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4374C3(Test_S4374C3, "S4374C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4374C3C1Ev();
extern void _ZN7S4374C3D1Ev();
Name_Map name_map_S4374C3[] = {
  NSPAIR(_ZN7S4374C3C1Ev),
  NSPAIR(_ZN7S4374C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4374C3[];
extern void _ZN7S4374C3D1Ev();
extern void _ZN7S4374C3D0Ev();
extern void _ZN7S4374C32v2Ev();
extern void _ZN7S4374C32v3Ev();
extern void _ZN7S4374C32v4Ev();
static  VTBL_ENTRY vtc_S4374C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4374C3[0]),
  (VTBL_ENTRY)&_ZN7S4374C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4374C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4374C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4374C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4374C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4374C3[];
extern  VTBL_ENTRY _ZTV7S4374C3[];
Class_Descriptor cd_S4374C3 = {  "S4374C3", // class name
  0,0,//no base classes
  &(vtc_S4374C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4374C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4374C3),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  S4374C2  : S4374C3 {
  void *s4374c2f0;
  virtual void  v5(); // _ZN7S4374C22v5Ev
  virtual void  v6(); // _ZN7S4374C22v6Ev
  ~S4374C2(); // tgen
  S4374C2(); // tgen
};
//SIG(-1 S4374C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4374C2 ::v5(){vfunc_called(this, "_ZN7S4374C22v5Ev");}
void  S4374C2 ::v6(){vfunc_called(this, "_ZN7S4374C22v6Ev");}
S4374C2 ::~S4374C2(){ note_dtor("S4374C2", this);} // tgen
S4374C2 ::S4374C2(){ note_ctor("S4374C2", this);} // tgen

static void Test_S4374C2()
{
  extern Class_Descriptor cd_S4374C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4374C2, buf);
    S4374C2 *dp, &lv = *(dp=new (buf) S4374C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4374C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4374C2)");
    check_base_class_offset(lv, (S4374C3*), 0, "S4374C2");
    check_field_offset(lv, s4374c2f0, ABISELECT(40,28), "S4374C2.s4374c2f0");
    test_class_info(&lv, &cd_S4374C2);
    dp->~S4374C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4374C2(Test_S4374C2, "S4374C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4374C2C1Ev();
extern void _ZN7S4374C2D1Ev();
Name_Map name_map_S4374C2[] = {
  NSPAIR(_ZN7S4374C2C1Ev),
  NSPAIR(_ZN7S4374C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4374C3;
extern VTBL_ENTRY _ZTI7S4374C3[];
extern  VTBL_ENTRY _ZTV7S4374C3[];
static Base_Class bases_S4374C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4374C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4374C2[];
extern void _ZN7S4374C2D1Ev();
extern void _ZN7S4374C2D0Ev();
extern void _ZN7S4374C32v2Ev();
extern void _ZN7S4374C32v3Ev();
extern void _ZN7S4374C32v4Ev();
extern void _ZN7S4374C22v5Ev();
extern void _ZN7S4374C22v6Ev();
static  VTBL_ENTRY vtc_S4374C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4374C2[0]),
  (VTBL_ENTRY)&_ZN7S4374C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4374C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4374C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4374C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4374C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4374C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4374C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4374C2[];
extern  VTBL_ENTRY _ZTV7S4374C2[];
Class_Descriptor cd_S4374C2 = {  "S4374C2", // class name
  bases_S4374C2, 1,
  &(vtc_S4374C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4374C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4374C2),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  S4374C1  : S4374C2 {
  ::S4473C12_nt s4374c1f0;
  virtual void  v1(); // _ZN7S4374C12v1Ev
  ~S4374C1(); // tgen
  S4374C1(); // tgen
};
//SIG(1 S4374C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 FC4}


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

static void Test_S4374C1()
{
  extern Class_Descriptor cd_S4374C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S4374C1, buf);
    S4374C1 *dp, &lv = *(dp=new (buf) S4374C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S4374C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4374C1)");
    check_base_class_offset(lv, (S4374C3*)(S4374C2*), 0, "S4374C1");
    check_base_class_offset(lv, (S4374C2*), 0, "S4374C1");
    check_field_offset(lv, s4374c1f0, ABISELECT(48,32), "S4374C1.s4374c1f0");
    test_class_info(&lv, &cd_S4374C1);
    dp->~S4374C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4374C1(Test_S4374C1, "S4374C1", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S4374C1C1Ev();
extern void _ZN7S4374C1D1Ev();
Name_Map name_map_S4374C1[] = {
  NSPAIR(_ZN7S4374C1C1Ev),
  NSPAIR(_ZN7S4374C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4374C3;
extern VTBL_ENTRY _ZTI7S4374C3[];
extern  VTBL_ENTRY _ZTV7S4374C3[];
extern Class_Descriptor cd_S4374C2;
extern VTBL_ENTRY _ZTI7S4374C2[];
extern  VTBL_ENTRY _ZTV7S4374C2[];
static Base_Class bases_S4374C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4374C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4374C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4374C1[];
extern void _ZN7S4374C1D1Ev();
extern void _ZN7S4374C1D0Ev();
extern void _ZN7S4374C32v2Ev();
extern void _ZN7S4374C32v3Ev();
extern void _ZN7S4374C32v4Ev();
extern void _ZN7S4374C22v5Ev();
extern void _ZN7S4374C22v6Ev();
extern void _ZN7S4374C12v1Ev();
static  VTBL_ENTRY vtc_S4374C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4374C1[0]),
  (VTBL_ENTRY)&_ZN7S4374C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4374C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4374C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4374C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4374C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4374C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4374C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4374C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4374C1[];
extern  VTBL_ENTRY _ZTV7S4374C1[];
Class_Descriptor cd_S4374C1 = {  "S4374C1", // class name
  bases_S4374C1, 2,
  &(vtc_S4374C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S4374C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4374C1),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  S4404C3  {
  ::S4473C12_nt s4404c3f0;
  int s4404c3f1[2];
  char s4404c3f2;
  virtual  ~S4404C3(); // _ZN7S4404C3D1Ev
  virtual void  v2(); // _ZN7S4404C32v2Ev
  virtual void  v3(); // _ZN7S4404C32v3Ev
  virtual void  v4(); // _ZN7S4404C32v4Ev
  S4404C3(); // tgen
};
//SIG(-1 S4404C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4404C3 ::~S4404C3(){ note_dtor("S4404C3", this);}
void  S4404C3 ::v2(){vfunc_called(this, "_ZN7S4404C32v2Ev");}
void  S4404C3 ::v3(){vfunc_called(this, "_ZN7S4404C32v3Ev");}
void  S4404C3 ::v4(){vfunc_called(this, "_ZN7S4404C32v4Ev");}
S4404C3 ::S4404C3(){ note_ctor("S4404C3", this);} // tgen

static void Test_S4404C3()
{
  extern Class_Descriptor cd_S4404C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4404C3, buf);
    S4404C3 *dp, &lv = *(dp=new (buf) S4404C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4404C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4404C3)");
    check_field_offset(lv, s4404c3f0, ABISELECT(8,4), "S4404C3.s4404c3f0");
    check_field_offset(lv, s4404c3f1, ABISELECT(24,16), "S4404C3.s4404c3f1");
    check_field_offset(lv, s4404c3f2, ABISELECT(32,24), "S4404C3.s4404c3f2");
    test_class_info(&lv, &cd_S4404C3);
    dp->~S4404C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4404C3(Test_S4404C3, "S4404C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4404C3C1Ev();
extern void _ZN7S4404C3D1Ev();
Name_Map name_map_S4404C3[] = {
  NSPAIR(_ZN7S4404C3C1Ev),
  NSPAIR(_ZN7S4404C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4404C3[];
extern void _ZN7S4404C3D1Ev();
extern void _ZN7S4404C3D0Ev();
extern void _ZN7S4404C32v2Ev();
extern void _ZN7S4404C32v3Ev();
extern void _ZN7S4404C32v4Ev();
static  VTBL_ENTRY vtc_S4404C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4404C3[0]),
  (VTBL_ENTRY)&_ZN7S4404C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4404C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4404C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4404C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4404C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4404C3[];
extern  VTBL_ENTRY _ZTV7S4404C3[];
Class_Descriptor cd_S4404C3 = {  "S4404C3", // class name
  0,0,//no base classes
  &(vtc_S4404C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4404C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4404C3),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  S4404C2  : S4404C3 {
  void *s4404c2f0;
  virtual void  v5(); // _ZN7S4404C22v5Ev
  virtual void  v6(); // _ZN7S4404C22v6Ev
  ~S4404C2(); // tgen
  S4404C2(); // tgen
};
//SIG(-1 S4404C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4404C2 ::v5(){vfunc_called(this, "_ZN7S4404C22v5Ev");}
void  S4404C2 ::v6(){vfunc_called(this, "_ZN7S4404C22v6Ev");}
S4404C2 ::~S4404C2(){ note_dtor("S4404C2", this);} // tgen
S4404C2 ::S4404C2(){ note_ctor("S4404C2", this);} // tgen

static void Test_S4404C2()
{
  extern Class_Descriptor cd_S4404C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4404C2, buf);
    S4404C2 *dp, &lv = *(dp=new (buf) S4404C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4404C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4404C2)");
    check_base_class_offset(lv, (S4404C3*), 0, "S4404C2");
    check_field_offset(lv, s4404c2f0, ABISELECT(40,28), "S4404C2.s4404c2f0");
    test_class_info(&lv, &cd_S4404C2);
    dp->~S4404C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4404C2(Test_S4404C2, "S4404C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4404C2C1Ev();
extern void _ZN7S4404C2D1Ev();
Name_Map name_map_S4404C2[] = {
  NSPAIR(_ZN7S4404C2C1Ev),
  NSPAIR(_ZN7S4404C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4404C3;
extern VTBL_ENTRY _ZTI7S4404C3[];
extern  VTBL_ENTRY _ZTV7S4404C3[];
static Base_Class bases_S4404C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4404C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4404C2[];
extern void _ZN7S4404C2D1Ev();
extern void _ZN7S4404C2D0Ev();
extern void _ZN7S4404C32v2Ev();
extern void _ZN7S4404C32v3Ev();
extern void _ZN7S4404C32v4Ev();
extern void _ZN7S4404C22v5Ev();
extern void _ZN7S4404C22v6Ev();
static  VTBL_ENTRY vtc_S4404C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4404C2[0]),
  (VTBL_ENTRY)&_ZN7S4404C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4404C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4404C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4404C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4404C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4404C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4404C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4404C2[];
extern  VTBL_ENTRY _ZTV7S4404C2[];
Class_Descriptor cd_S4404C2 = {  "S4404C2", // class name
  bases_S4404C2, 1,
  &(vtc_S4404C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4404C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4404C2),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  S4404C1  : S4404C2 {
  virtual  ~S4404C1(); // _ZN7S4404C1D1Ev
  virtual void  v1(); // _ZN7S4404C12v1Ev
  S4404C1(); // tgen
};
//SIG(1 S4404C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1}


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

static void Test_S4404C1()
{
  extern Class_Descriptor cd_S4404C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4404C1, buf);
    S4404C1 *dp, &lv = *(dp=new (buf) S4404C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4404C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4404C1)");
    check_base_class_offset(lv, (S4404C3*)(S4404C2*), 0, "S4404C1");
    check_base_class_offset(lv, (S4404C2*), 0, "S4404C1");
    test_class_info(&lv, &cd_S4404C1);
    dp->~S4404C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4404C1(Test_S4404C1, "S4404C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4404C1C1Ev();
extern void _ZN7S4404C1D1Ev();
Name_Map name_map_S4404C1[] = {
  NSPAIR(_ZN7S4404C1C1Ev),
  NSPAIR(_ZN7S4404C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4404C3;
extern VTBL_ENTRY _ZTI7S4404C3[];
extern  VTBL_ENTRY _ZTV7S4404C3[];
extern Class_Descriptor cd_S4404C2;
extern VTBL_ENTRY _ZTI7S4404C2[];
extern  VTBL_ENTRY _ZTV7S4404C2[];
static Base_Class bases_S4404C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4404C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4404C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4404C1[];
extern void _ZN7S4404C1D1Ev();
extern void _ZN7S4404C1D0Ev();
extern void _ZN7S4404C32v2Ev();
extern void _ZN7S4404C32v3Ev();
extern void _ZN7S4404C32v4Ev();
extern void _ZN7S4404C22v5Ev();
extern void _ZN7S4404C22v6Ev();
extern void _ZN7S4404C12v1Ev();
static  VTBL_ENTRY vtc_S4404C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4404C1[0]),
  (VTBL_ENTRY)&_ZN7S4404C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4404C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4404C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4404C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4404C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4404C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4404C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4404C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4404C1[];
extern  VTBL_ENTRY _ZTV7S4404C1[];
Class_Descriptor cd_S4404C1 = {  "S4404C1", // class name
  bases_S4404C1, 2,
  &(vtc_S4404C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4404C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4404C1),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  S4393C3  {
  ::S4473C12_nt s4393c3f0;
  int s4393c3f1[2];
  char s4393c3f2;
  virtual  ~S4393C3(); // _ZN7S4393C3D1Ev
  virtual void  v2(); // _ZN7S4393C32v2Ev
  virtual void  v3(); // _ZN7S4393C32v3Ev
  virtual void  v4(); // _ZN7S4393C32v4Ev
  S4393C3(); // tgen
};
//SIG(-1 S4393C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4393C3 ::~S4393C3(){ note_dtor("S4393C3", this);}
void  S4393C3 ::v2(){vfunc_called(this, "_ZN7S4393C32v2Ev");}
void  S4393C3 ::v3(){vfunc_called(this, "_ZN7S4393C32v3Ev");}
void  S4393C3 ::v4(){vfunc_called(this, "_ZN7S4393C32v4Ev");}
S4393C3 ::S4393C3(){ note_ctor("S4393C3", this);} // tgen

static void Test_S4393C3()
{
  extern Class_Descriptor cd_S4393C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4393C3, buf);
    S4393C3 *dp, &lv = *(dp=new (buf) S4393C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4393C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4393C3)");
    check_field_offset(lv, s4393c3f0, ABISELECT(8,4), "S4393C3.s4393c3f0");
    check_field_offset(lv, s4393c3f1, ABISELECT(24,16), "S4393C3.s4393c3f1");
    check_field_offset(lv, s4393c3f2, ABISELECT(32,24), "S4393C3.s4393c3f2");
    test_class_info(&lv, &cd_S4393C3);
    dp->~S4393C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4393C3(Test_S4393C3, "S4393C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4393C3C1Ev();
extern void _ZN7S4393C3D1Ev();
Name_Map name_map_S4393C3[] = {
  NSPAIR(_ZN7S4393C3C1Ev),
  NSPAIR(_ZN7S4393C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4393C3[];
extern void _ZN7S4393C3D1Ev();
extern void _ZN7S4393C3D0Ev();
extern void _ZN7S4393C32v2Ev();
extern void _ZN7S4393C32v3Ev();
extern void _ZN7S4393C32v4Ev();
static  VTBL_ENTRY vtc_S4393C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4393C3[0]),
  (VTBL_ENTRY)&_ZN7S4393C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4393C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4393C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4393C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4393C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4393C3[];
extern  VTBL_ENTRY _ZTV7S4393C3[];
Class_Descriptor cd_S4393C3 = {  "S4393C3", // class name
  0,0,//no base classes
  &(vtc_S4393C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4393C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4393C3),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  S4393C2  : S4393C3 {
  void *s4393c2f0;
  virtual void  v5(); // _ZN7S4393C22v5Ev
  virtual void  v6(); // _ZN7S4393C22v6Ev
  ~S4393C2(); // tgen
  S4393C2(); // tgen
};
//SIG(-1 S4393C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4393C2 ::v5(){vfunc_called(this, "_ZN7S4393C22v5Ev");}
void  S4393C2 ::v6(){vfunc_called(this, "_ZN7S4393C22v6Ev");}
S4393C2 ::~S4393C2(){ note_dtor("S4393C2", this);} // tgen
S4393C2 ::S4393C2(){ note_ctor("S4393C2", this);} // tgen

static void Test_S4393C2()
{
  extern Class_Descriptor cd_S4393C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4393C2, buf);
    S4393C2 *dp, &lv = *(dp=new (buf) S4393C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4393C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4393C2)");
    check_base_class_offset(lv, (S4393C3*), 0, "S4393C2");
    check_field_offset(lv, s4393c2f0, ABISELECT(40,28), "S4393C2.s4393c2f0");
    test_class_info(&lv, &cd_S4393C2);
    dp->~S4393C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4393C2(Test_S4393C2, "S4393C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4393C2C1Ev();
extern void _ZN7S4393C2D1Ev();
Name_Map name_map_S4393C2[] = {
  NSPAIR(_ZN7S4393C2C1Ev),
  NSPAIR(_ZN7S4393C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4393C3;
extern VTBL_ENTRY _ZTI7S4393C3[];
extern  VTBL_ENTRY _ZTV7S4393C3[];
static Base_Class bases_S4393C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4393C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4393C2[];
extern void _ZN7S4393C2D1Ev();
extern void _ZN7S4393C2D0Ev();
extern void _ZN7S4393C32v2Ev();
extern void _ZN7S4393C32v3Ev();
extern void _ZN7S4393C32v4Ev();
extern void _ZN7S4393C22v5Ev();
extern void _ZN7S4393C22v6Ev();
static  VTBL_ENTRY vtc_S4393C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4393C2[0]),
  (VTBL_ENTRY)&_ZN7S4393C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4393C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4393C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4393C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4393C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4393C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4393C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4393C2[];
extern  VTBL_ENTRY _ZTV7S4393C2[];
Class_Descriptor cd_S4393C2 = {  "S4393C2", // class name
  bases_S4393C2, 1,
  &(vtc_S4393C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4393C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4393C2),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  S4393C1  : S4393C2 {
  __tsi64 s4393c1f0;
  virtual void  v1(); // _ZN7S4393C12v1Ev
  ~S4393C1(); // tgen
  S4393C1(); // tgen
};
//SIG(1 S4393C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 FL}


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

static void Test_S4393C1()
{
  extern Class_Descriptor cd_S4393C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S4393C1, buf);
    S4393C1 *dp, &lv = *(dp=new (buf) S4393C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S4393C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4393C1)");
    check_base_class_offset(lv, (S4393C3*)(S4393C2*), 0, "S4393C1");
    check_base_class_offset(lv, (S4393C2*), 0, "S4393C1");
    check_field_offset(lv, s4393c1f0, ABISELECT(48,32), "S4393C1.s4393c1f0");
    test_class_info(&lv, &cd_S4393C1);
    dp->~S4393C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4393C1(Test_S4393C1, "S4393C1", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN7S4393C1C1Ev();
extern void _ZN7S4393C1D1Ev();
Name_Map name_map_S4393C1[] = {
  NSPAIR(_ZN7S4393C1C1Ev),
  NSPAIR(_ZN7S4393C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4393C3;
extern VTBL_ENTRY _ZTI7S4393C3[];
extern  VTBL_ENTRY _ZTV7S4393C3[];
extern Class_Descriptor cd_S4393C2;
extern VTBL_ENTRY _ZTI7S4393C2[];
extern  VTBL_ENTRY _ZTV7S4393C2[];
static Base_Class bases_S4393C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4393C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4393C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4393C1[];
extern void _ZN7S4393C1D1Ev();
extern void _ZN7S4393C1D0Ev();
extern void _ZN7S4393C32v2Ev();
extern void _ZN7S4393C32v3Ev();
extern void _ZN7S4393C32v4Ev();
extern void _ZN7S4393C22v5Ev();
extern void _ZN7S4393C22v6Ev();
extern void _ZN7S4393C12v1Ev();
static  VTBL_ENTRY vtc_S4393C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4393C1[0]),
  (VTBL_ENTRY)&_ZN7S4393C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4393C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4393C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4393C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4393C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4393C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4393C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4393C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4393C1[];
extern  VTBL_ENTRY _ZTV7S4393C1[];
Class_Descriptor cd_S4393C1 = {  "S4393C1", // class name
  bases_S4393C1, 2,
  &(vtc_S4393C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI7S4393C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4393C1),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  S4395C3  {
  ::S4473C12_nt s4395c3f0;
  int s4395c3f1[2];
  char s4395c3f2;
  virtual  ~S4395C3(); // _ZN7S4395C3D1Ev
  virtual void  v2(); // _ZN7S4395C32v2Ev
  virtual void  v3(); // _ZN7S4395C32v3Ev
  virtual void  v4(); // _ZN7S4395C32v4Ev
  S4395C3(); // tgen
};
//SIG(-1 S4395C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4395C3 ::~S4395C3(){ note_dtor("S4395C3", this);}
void  S4395C3 ::v2(){vfunc_called(this, "_ZN7S4395C32v2Ev");}
void  S4395C3 ::v3(){vfunc_called(this, "_ZN7S4395C32v3Ev");}
void  S4395C3 ::v4(){vfunc_called(this, "_ZN7S4395C32v4Ev");}
S4395C3 ::S4395C3(){ note_ctor("S4395C3", this);} // tgen

static void Test_S4395C3()
{
  extern Class_Descriptor cd_S4395C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4395C3, buf);
    S4395C3 *dp, &lv = *(dp=new (buf) S4395C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4395C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4395C3)");
    check_field_offset(lv, s4395c3f0, ABISELECT(8,4), "S4395C3.s4395c3f0");
    check_field_offset(lv, s4395c3f1, ABISELECT(24,16), "S4395C3.s4395c3f1");
    check_field_offset(lv, s4395c3f2, ABISELECT(32,24), "S4395C3.s4395c3f2");
    test_class_info(&lv, &cd_S4395C3);
    dp->~S4395C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4395C3(Test_S4395C3, "S4395C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4395C3C1Ev();
extern void _ZN7S4395C3D1Ev();
Name_Map name_map_S4395C3[] = {
  NSPAIR(_ZN7S4395C3C1Ev),
  NSPAIR(_ZN7S4395C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4395C3[];
extern void _ZN7S4395C3D1Ev();
extern void _ZN7S4395C3D0Ev();
extern void _ZN7S4395C32v2Ev();
extern void _ZN7S4395C32v3Ev();
extern void _ZN7S4395C32v4Ev();
static  VTBL_ENTRY vtc_S4395C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4395C3[0]),
  (VTBL_ENTRY)&_ZN7S4395C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4395C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4395C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4395C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4395C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4395C3[];
extern  VTBL_ENTRY _ZTV7S4395C3[];
Class_Descriptor cd_S4395C3 = {  "S4395C3", // class name
  0,0,//no base classes
  &(vtc_S4395C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4395C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4395C3),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  S4395C2  : S4395C3 {
  void *s4395c2f0;
  virtual void  v5(); // _ZN7S4395C22v5Ev
  virtual void  v6(); // _ZN7S4395C22v6Ev
  ~S4395C2(); // tgen
  S4395C2(); // tgen
};
//SIG(-1 S4395C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4395C2 ::v5(){vfunc_called(this, "_ZN7S4395C22v5Ev");}
void  S4395C2 ::v6(){vfunc_called(this, "_ZN7S4395C22v6Ev");}
S4395C2 ::~S4395C2(){ note_dtor("S4395C2", this);} // tgen
S4395C2 ::S4395C2(){ note_ctor("S4395C2", this);} // tgen

static void Test_S4395C2()
{
  extern Class_Descriptor cd_S4395C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4395C2, buf);
    S4395C2 *dp, &lv = *(dp=new (buf) S4395C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4395C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4395C2)");
    check_base_class_offset(lv, (S4395C3*), 0, "S4395C2");
    check_field_offset(lv, s4395c2f0, ABISELECT(40,28), "S4395C2.s4395c2f0");
    test_class_info(&lv, &cd_S4395C2);
    dp->~S4395C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4395C2(Test_S4395C2, "S4395C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4395C2C1Ev();
extern void _ZN7S4395C2D1Ev();
Name_Map name_map_S4395C2[] = {
  NSPAIR(_ZN7S4395C2C1Ev),
  NSPAIR(_ZN7S4395C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4395C3;
extern VTBL_ENTRY _ZTI7S4395C3[];
extern  VTBL_ENTRY _ZTV7S4395C3[];
static Base_Class bases_S4395C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4395C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4395C2[];
extern void _ZN7S4395C2D1Ev();
extern void _ZN7S4395C2D0Ev();
extern void _ZN7S4395C32v2Ev();
extern void _ZN7S4395C32v3Ev();
extern void _ZN7S4395C32v4Ev();
extern void _ZN7S4395C22v5Ev();
extern void _ZN7S4395C22v6Ev();
static  VTBL_ENTRY vtc_S4395C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4395C2[0]),
  (VTBL_ENTRY)&_ZN7S4395C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4395C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4395C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4395C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4395C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4395C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4395C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4395C2[];
extern  VTBL_ENTRY _ZTV7S4395C2[];
Class_Descriptor cd_S4395C2 = {  "S4395C2", // class name
  bases_S4395C2, 1,
  &(vtc_S4395C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4395C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4395C2),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  S4395C1  : S4395C2 {
  virtual void  v1(); // _ZN7S4395C12v1Ev
  ~S4395C1(); // tgen
  S4395C1(); // tgen
};
//SIG(1 S4395C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1}


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

static void Test_S4395C1()
{
  extern Class_Descriptor cd_S4395C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4395C1, buf);
    S4395C1 *dp, &lv = *(dp=new (buf) S4395C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4395C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4395C1)");
    check_base_class_offset(lv, (S4395C3*)(S4395C2*), 0, "S4395C1");
    check_base_class_offset(lv, (S4395C2*), 0, "S4395C1");
    test_class_info(&lv, &cd_S4395C1);
    dp->~S4395C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4395C1(Test_S4395C1, "S4395C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4395C1C1Ev();
extern void _ZN7S4395C1D1Ev();
Name_Map name_map_S4395C1[] = {
  NSPAIR(_ZN7S4395C1C1Ev),
  NSPAIR(_ZN7S4395C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4395C3;
extern VTBL_ENTRY _ZTI7S4395C3[];
extern  VTBL_ENTRY _ZTV7S4395C3[];
extern Class_Descriptor cd_S4395C2;
extern VTBL_ENTRY _ZTI7S4395C2[];
extern  VTBL_ENTRY _ZTV7S4395C2[];
static Base_Class bases_S4395C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4395C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4395C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4395C1[];
extern void _ZN7S4395C1D1Ev();
extern void _ZN7S4395C1D0Ev();
extern void _ZN7S4395C32v2Ev();
extern void _ZN7S4395C32v3Ev();
extern void _ZN7S4395C32v4Ev();
extern void _ZN7S4395C22v5Ev();
extern void _ZN7S4395C22v6Ev();
extern void _ZN7S4395C12v1Ev();
static  VTBL_ENTRY vtc_S4395C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4395C1[0]),
  (VTBL_ENTRY)&_ZN7S4395C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4395C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4395C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4395C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4395C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4395C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4395C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4395C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4395C1[];
extern  VTBL_ENTRY _ZTV7S4395C1[];
Class_Descriptor cd_S4395C1 = {  "S4395C1", // class name
  bases_S4395C1, 2,
  &(vtc_S4395C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4395C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4395C1),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  S4140C3  {
  ::S4473C12_nt s4140c3f0;
  int s4140c3f1[2];
  char s4140c3f2;
  virtual  ~S4140C3(); // _ZN7S4140C3D1Ev
  virtual void  v1(); // _ZN7S4140C32v1Ev
  virtual void  v2(); // _ZN7S4140C32v2Ev
  virtual void  v3(); // _ZN7S4140C32v3Ev
  S4140C3(); // tgen
};
//SIG(-1 S4140C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4140C3 ::~S4140C3(){ note_dtor("S4140C3", this);}
void  S4140C3 ::v1(){vfunc_called(this, "_ZN7S4140C32v1Ev");}
void  S4140C3 ::v2(){vfunc_called(this, "_ZN7S4140C32v2Ev");}
void  S4140C3 ::v3(){vfunc_called(this, "_ZN7S4140C32v3Ev");}
S4140C3 ::S4140C3(){ note_ctor("S4140C3", this);} // tgen

static void Test_S4140C3()
{
  extern Class_Descriptor cd_S4140C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4140C3, buf);
    S4140C3 *dp, &lv = *(dp=new (buf) S4140C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4140C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4140C3)");
    check_field_offset(lv, s4140c3f0, ABISELECT(8,4), "S4140C3.s4140c3f0");
    check_field_offset(lv, s4140c3f1, ABISELECT(24,16), "S4140C3.s4140c3f1");
    check_field_offset(lv, s4140c3f2, ABISELECT(32,24), "S4140C3.s4140c3f2");
    test_class_info(&lv, &cd_S4140C3);
    dp->~S4140C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4140C3(Test_S4140C3, "S4140C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4140C3C1Ev();
extern void _ZN7S4140C3D1Ev();
Name_Map name_map_S4140C3[] = {
  NSPAIR(_ZN7S4140C3C1Ev),
  NSPAIR(_ZN7S4140C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4140C3[];
extern void _ZN7S4140C3D1Ev();
extern void _ZN7S4140C3D0Ev();
extern void _ZN7S4140C32v1Ev();
extern void _ZN7S4140C32v2Ev();
extern void _ZN7S4140C32v3Ev();
static  VTBL_ENTRY vtc_S4140C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4140C3[0]),
  (VTBL_ENTRY)&_ZN7S4140C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4140C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4140C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4140C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4140C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S4140C3[];
extern  VTBL_ENTRY _ZTV7S4140C3[];
Class_Descriptor cd_S4140C3 = {  "S4140C3", // class name
  0,0,//no base classes
  &(vtc_S4140C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4140C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4140C3),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  S4140C2  : S4140C3 {
  void *s4140c2f0;
  virtual void  v4(); // _ZN7S4140C22v4Ev
  virtual void  v5(); // _ZN7S4140C22v5Ev
  ~S4140C2(); // tgen
  S4140C2(); // tgen
};
//SIG(-1 S4140C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4140C2 ::v4(){vfunc_called(this, "_ZN7S4140C22v4Ev");}
void  S4140C2 ::v5(){vfunc_called(this, "_ZN7S4140C22v5Ev");}
S4140C2 ::~S4140C2(){ note_dtor("S4140C2", this);} // tgen
S4140C2 ::S4140C2(){ note_ctor("S4140C2", this);} // tgen

static void Test_S4140C2()
{
  extern Class_Descriptor cd_S4140C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4140C2, buf);
    S4140C2 *dp, &lv = *(dp=new (buf) S4140C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4140C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4140C2)");
    check_base_class_offset(lv, (S4140C3*), 0, "S4140C2");
    check_field_offset(lv, s4140c2f0, ABISELECT(40,28), "S4140C2.s4140c2f0");
    test_class_info(&lv, &cd_S4140C2);
    dp->~S4140C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4140C2(Test_S4140C2, "S4140C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4140C2C1Ev();
extern void _ZN7S4140C2D1Ev();
Name_Map name_map_S4140C2[] = {
  NSPAIR(_ZN7S4140C2C1Ev),
  NSPAIR(_ZN7S4140C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4140C3;
extern VTBL_ENTRY _ZTI7S4140C3[];
extern  VTBL_ENTRY _ZTV7S4140C3[];
static Base_Class bases_S4140C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4140C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4140C2[];
extern void _ZN7S4140C2D1Ev();
extern void _ZN7S4140C2D0Ev();
extern void _ZN7S4140C32v1Ev();
extern void _ZN7S4140C32v2Ev();
extern void _ZN7S4140C32v3Ev();
extern void _ZN7S4140C22v4Ev();
extern void _ZN7S4140C22v5Ev();
static  VTBL_ENTRY vtc_S4140C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4140C2[0]),
  (VTBL_ENTRY)&_ZN7S4140C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4140C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4140C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4140C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4140C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4140C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4140C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4140C2[];
extern  VTBL_ENTRY _ZTV7S4140C2[];
Class_Descriptor cd_S4140C2 = {  "S4140C2", // class name
  bases_S4140C2, 1,
  &(vtc_S4140C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4140C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4140C2),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  S4140C1  : S4140C2 {
  ~S4140C1(); // tgen
  S4140C1(); // tgen
};
//SIG(1 S4140C1) C1{ BC2{ BC3{ vd v1 v2 v3 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v4 v5 Fp}}


S4140C1 ::~S4140C1(){ note_dtor("S4140C1", this);} // tgen
S4140C1 ::S4140C1(){ note_ctor("S4140C1", this);} // tgen

static void Test_S4140C1()
{
  extern Class_Descriptor cd_S4140C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4140C1, buf);
    S4140C1 *dp, &lv = *(dp=new (buf) S4140C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4140C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4140C1)");
    check_base_class_offset(lv, (S4140C3*)(S4140C2*), 0, "S4140C1");
    check_base_class_offset(lv, (S4140C2*), 0, "S4140C1");
    test_class_info(&lv, &cd_S4140C1);
    dp->~S4140C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4140C1(Test_S4140C1, "S4140C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4140C1C1Ev();
extern void _ZN7S4140C1D1Ev();
Name_Map name_map_S4140C1[] = {
  NSPAIR(_ZN7S4140C1C1Ev),
  NSPAIR(_ZN7S4140C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4140C3;
extern VTBL_ENTRY _ZTI7S4140C3[];
extern  VTBL_ENTRY _ZTV7S4140C3[];
extern Class_Descriptor cd_S4140C2;
extern VTBL_ENTRY _ZTI7S4140C2[];
extern  VTBL_ENTRY _ZTV7S4140C2[];
static Base_Class bases_S4140C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4140C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4140C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4140C1[];
extern void _ZN7S4140C1D1Ev();
extern void _ZN7S4140C1D0Ev();
extern void _ZN7S4140C32v1Ev();
extern void _ZN7S4140C32v2Ev();
extern void _ZN7S4140C32v3Ev();
extern void _ZN7S4140C22v4Ev();
extern void _ZN7S4140C22v5Ev();
static  VTBL_ENTRY vtc_S4140C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4140C1[0]),
  (VTBL_ENTRY)&_ZN7S4140C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4140C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4140C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4140C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4140C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4140C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4140C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4140C1[];
extern  VTBL_ENTRY _ZTV7S4140C1[];
Class_Descriptor cd_S4140C1 = {  "S4140C1", // class name
  bases_S4140C1, 2,
  &(vtc_S4140C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4140C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4140C1),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  S9412C2  {
  ::S4473C12_nt s9412c2f0;
  int s9412c2f1[2];
  char s9412c2f2;
  virtual  ~S9412C2(); // _ZN7S9412C2D1Ev
  virtual void  v3(); // _ZN7S9412C22v3Ev
  virtual void  v4(); // _ZN7S9412C22v4Ev
  virtual void  v5(); // _ZN7S9412C22v5Ev
  S9412C2(); // tgen
};
//SIG(-1 S9412C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9412C2 ::~S9412C2(){ note_dtor("S9412C2", this);}
void  S9412C2 ::v3(){vfunc_called(this, "_ZN7S9412C22v3Ev");}
void  S9412C2 ::v4(){vfunc_called(this, "_ZN7S9412C22v4Ev");}
void  S9412C2 ::v5(){vfunc_called(this, "_ZN7S9412C22v5Ev");}
S9412C2 ::S9412C2(){ note_ctor("S9412C2", this);} // tgen

static void Test_S9412C2()
{
  extern Class_Descriptor cd_S9412C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9412C2, buf);
    S9412C2 *dp, &lv = *(dp=new (buf) S9412C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9412C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9412C2)");
    check_field_offset(lv, s9412c2f0, ABISELECT(8,4), "S9412C2.s9412c2f0");
    check_field_offset(lv, s9412c2f1, ABISELECT(24,16), "S9412C2.s9412c2f1");
    check_field_offset(lv, s9412c2f2, ABISELECT(32,24), "S9412C2.s9412c2f2");
    test_class_info(&lv, &cd_S9412C2);
    dp->~S9412C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9412C2(Test_S9412C2, "S9412C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9412C2C1Ev();
extern void _ZN7S9412C2D1Ev();
Name_Map name_map_S9412C2[] = {
  NSPAIR(_ZN7S9412C2C1Ev),
  NSPAIR(_ZN7S9412C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9412C2[];
extern void _ZN7S9412C2D1Ev();
extern void _ZN7S9412C2D0Ev();
extern void _ZN7S9412C22v3Ev();
extern void _ZN7S9412C22v4Ev();
extern void _ZN7S9412C22v5Ev();
static  VTBL_ENTRY vtc_S9412C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9412C2[0]),
  (VTBL_ENTRY)&_ZN7S9412C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9412C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9412C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9412C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9412C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9412C2[];
extern  VTBL_ENTRY _ZTV7S9412C2[];
Class_Descriptor cd_S9412C2 = {  "S9412C2", // class name
  0,0,//no base classes
  &(vtc_S9412C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9412C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9412C2),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  S9412C1  : S9412C2 {
  void *s9412c1f0;
  virtual  ~S9412C1(); // _ZN7S9412C1D1Ev
  virtual void  v1(); // _ZN7S9412C12v1Ev
  virtual void  v2(); // _ZN7S9412C12v2Ev
  S9412C1(); // tgen
};
//SIG(1 S9412C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp}


 S9412C1 ::~S9412C1(){ note_dtor("S9412C1", this);}
void  S9412C1 ::v1(){vfunc_called(this, "_ZN7S9412C12v1Ev");}
void  S9412C1 ::v2(){vfunc_called(this, "_ZN7S9412C12v2Ev");}
S9412C1 ::S9412C1(){ note_ctor("S9412C1", this);} // tgen

static void Test_S9412C1()
{
  extern Class_Descriptor cd_S9412C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S9412C1, buf);
    S9412C1 *dp, &lv = *(dp=new (buf) S9412C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S9412C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9412C1)");
    check_base_class_offset(lv, (S9412C2*), 0, "S9412C1");
    check_field_offset(lv, s9412c1f0, ABISELECT(40,28), "S9412C1.s9412c1f0");
    test_class_info(&lv, &cd_S9412C1);
    dp->~S9412C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9412C1(Test_S9412C1, "S9412C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S9412C1C1Ev();
extern void _ZN7S9412C1D1Ev();
Name_Map name_map_S9412C1[] = {
  NSPAIR(_ZN7S9412C1C1Ev),
  NSPAIR(_ZN7S9412C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9412C2;
extern VTBL_ENTRY _ZTI7S9412C2[];
extern  VTBL_ENTRY _ZTV7S9412C2[];
static Base_Class bases_S9412C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9412C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9412C1[];
extern void _ZN7S9412C1D1Ev();
extern void _ZN7S9412C1D0Ev();
extern void _ZN7S9412C22v3Ev();
extern void _ZN7S9412C22v4Ev();
extern void _ZN7S9412C22v5Ev();
extern void _ZN7S9412C12v1Ev();
extern void _ZN7S9412C12v2Ev();
static  VTBL_ENTRY vtc_S9412C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9412C1[0]),
  (VTBL_ENTRY)&_ZN7S9412C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9412C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9412C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9412C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9412C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9412C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9412C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9412C1[];
extern  VTBL_ENTRY _ZTV7S9412C1[];
Class_Descriptor cd_S9412C1 = {  "S9412C1", // class name
  bases_S9412C1, 1,
  &(vtc_S9412C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S9412C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9412C1),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  S9213C2  {
  ::S4473C12_nt s9213c2f0;
  int s9213c2f1[2];
  char s9213c2f2;
  virtual  ~S9213C2(); // _ZN7S9213C2D1Ev
  virtual void  v3(); // _ZN7S9213C22v3Ev
  virtual void  v4(); // _ZN7S9213C22v4Ev
  virtual void  v5(); // _ZN7S9213C22v5Ev
  S9213C2(); // tgen
};
//SIG(-1 S9213C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9213C2 ::~S9213C2(){ note_dtor("S9213C2", this);}
void  S9213C2 ::v3(){vfunc_called(this, "_ZN7S9213C22v3Ev");}
void  S9213C2 ::v4(){vfunc_called(this, "_ZN7S9213C22v4Ev");}
void  S9213C2 ::v5(){vfunc_called(this, "_ZN7S9213C22v5Ev");}
S9213C2 ::S9213C2(){ note_ctor("S9213C2", this);} // tgen

static void Test_S9213C2()
{
  extern Class_Descriptor cd_S9213C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9213C2, buf);
    S9213C2 *dp, &lv = *(dp=new (buf) S9213C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9213C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9213C2)");
    check_field_offset(lv, s9213c2f0, ABISELECT(8,4), "S9213C2.s9213c2f0");
    check_field_offset(lv, s9213c2f1, ABISELECT(24,16), "S9213C2.s9213c2f1");
    check_field_offset(lv, s9213c2f2, ABISELECT(32,24), "S9213C2.s9213c2f2");
    test_class_info(&lv, &cd_S9213C2);
    dp->~S9213C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9213C2(Test_S9213C2, "S9213C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9213C2C1Ev();
extern void _ZN7S9213C2D1Ev();
Name_Map name_map_S9213C2[] = {
  NSPAIR(_ZN7S9213C2C1Ev),
  NSPAIR(_ZN7S9213C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9213C2[];
extern void _ZN7S9213C2D1Ev();
extern void _ZN7S9213C2D0Ev();
extern void _ZN7S9213C22v3Ev();
extern void _ZN7S9213C22v4Ev();
extern void _ZN7S9213C22v5Ev();
static  VTBL_ENTRY vtc_S9213C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9213C2[0]),
  (VTBL_ENTRY)&_ZN7S9213C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9213C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9213C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9213C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9213C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9213C2[];
extern  VTBL_ENTRY _ZTV7S9213C2[];
Class_Descriptor cd_S9213C2 = {  "S9213C2", // class name
  0,0,//no base classes
  &(vtc_S9213C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9213C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9213C2),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  S9213C1  : S9213C2 {
  ::S4473C12_nt s9213c1f0;
  virtual void  v1(); // _ZN7S9213C12v1Ev
  virtual void  v2(); // _ZN7S9213C12v2Ev
  ~S9213C1(); // tgen
  S9213C1(); // tgen
};
//SIG(1 S9213C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 FC3}


void  S9213C1 ::v1(){vfunc_called(this, "_ZN7S9213C12v1Ev");}
void  S9213C1 ::v2(){vfunc_called(this, "_ZN7S9213C12v2Ev");}
S9213C1 ::~S9213C1(){ note_dtor("S9213C1", this);} // tgen
S9213C1 ::S9213C1(){ note_ctor("S9213C1", this);} // tgen

static void Test_S9213C1()
{
  extern Class_Descriptor cd_S9213C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S9213C1, buf);
    S9213C1 *dp, &lv = *(dp=new (buf) S9213C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S9213C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9213C1)");
    check_base_class_offset(lv, (S9213C2*), 0, "S9213C1");
    check_field_offset(lv, s9213c1f0, ABISELECT(40,28), "S9213C1.s9213c1f0");
    test_class_info(&lv, &cd_S9213C1);
    dp->~S9213C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9213C1(Test_S9213C1, "S9213C1", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN7S9213C1C1Ev();
extern void _ZN7S9213C1D1Ev();
Name_Map name_map_S9213C1[] = {
  NSPAIR(_ZN7S9213C1C1Ev),
  NSPAIR(_ZN7S9213C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9213C2;
extern VTBL_ENTRY _ZTI7S9213C2[];
extern  VTBL_ENTRY _ZTV7S9213C2[];
static Base_Class bases_S9213C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9213C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9213C1[];
extern void _ZN7S9213C1D1Ev();
extern void _ZN7S9213C1D0Ev();
extern void _ZN7S9213C22v3Ev();
extern void _ZN7S9213C22v4Ev();
extern void _ZN7S9213C22v5Ev();
extern void _ZN7S9213C12v1Ev();
extern void _ZN7S9213C12v2Ev();
static  VTBL_ENTRY vtc_S9213C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9213C1[0]),
  (VTBL_ENTRY)&_ZN7S9213C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9213C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9213C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9213C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9213C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9213C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9213C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9213C1[];
extern  VTBL_ENTRY _ZTV7S9213C1[];
Class_Descriptor cd_S9213C1 = {  "S9213C1", // class name
  bases_S9213C1, 1,
  &(vtc_S9213C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI7S9213C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9213C1),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  S9223C2  {
  ::S4473C12_nt s9223c2f0;
  int s9223c2f1[2];
  char s9223c2f2;
  virtual  ~S9223C2(); // _ZN7S9223C2D1Ev
  virtual void  v3(); // _ZN7S9223C22v3Ev
  virtual void  v4(); // _ZN7S9223C22v4Ev
  virtual void  v5(); // _ZN7S9223C22v5Ev
  S9223C2(); // tgen
};
//SIG(-1 S9223C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9223C2 ::~S9223C2(){ note_dtor("S9223C2", this);}
void  S9223C2 ::v3(){vfunc_called(this, "_ZN7S9223C22v3Ev");}
void  S9223C2 ::v4(){vfunc_called(this, "_ZN7S9223C22v4Ev");}
void  S9223C2 ::v5(){vfunc_called(this, "_ZN7S9223C22v5Ev");}
S9223C2 ::S9223C2(){ note_ctor("S9223C2", this);} // tgen

static void Test_S9223C2()
{
  extern Class_Descriptor cd_S9223C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9223C2, buf);
    S9223C2 *dp, &lv = *(dp=new (buf) S9223C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9223C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9223C2)");
    check_field_offset(lv, s9223c2f0, ABISELECT(8,4), "S9223C2.s9223c2f0");
    check_field_offset(lv, s9223c2f1, ABISELECT(24,16), "S9223C2.s9223c2f1");
    check_field_offset(lv, s9223c2f2, ABISELECT(32,24), "S9223C2.s9223c2f2");
    test_class_info(&lv, &cd_S9223C2);
    dp->~S9223C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9223C2(Test_S9223C2, "S9223C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9223C2C1Ev();
extern void _ZN7S9223C2D1Ev();
Name_Map name_map_S9223C2[] = {
  NSPAIR(_ZN7S9223C2C1Ev),
  NSPAIR(_ZN7S9223C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9223C2[];
extern void _ZN7S9223C2D1Ev();
extern void _ZN7S9223C2D0Ev();
extern void _ZN7S9223C22v3Ev();
extern void _ZN7S9223C22v4Ev();
extern void _ZN7S9223C22v5Ev();
static  VTBL_ENTRY vtc_S9223C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9223C2[0]),
  (VTBL_ENTRY)&_ZN7S9223C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9223C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9223C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9223C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9223C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9223C2[];
extern  VTBL_ENTRY _ZTV7S9223C2[];
Class_Descriptor cd_S9223C2 = {  "S9223C2", // class name
  0,0,//no base classes
  &(vtc_S9223C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9223C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9223C2),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  S9223C1  : S9223C2 {
  int s9223c1f0;
  virtual void  v1(); // _ZN7S9223C12v1Ev
  virtual void  v2(); // _ZN7S9223C12v2Ev
  ~S9223C1(); // tgen
  S9223C1(); // tgen
};
//SIG(1 S9223C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fi}


void  S9223C1 ::v1(){vfunc_called(this, "_ZN7S9223C12v1Ev");}
void  S9223C1 ::v2(){vfunc_called(this, "_ZN7S9223C12v2Ev");}
S9223C1 ::~S9223C1(){ note_dtor("S9223C1", this);} // tgen
S9223C1 ::S9223C1(){ note_ctor("S9223C1", this);} // tgen

static void Test_S9223C1()
{
  extern Class_Descriptor cd_S9223C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S9223C1, buf);
    S9223C1 *dp, &lv = *(dp=new (buf) S9223C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S9223C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9223C1)");
    check_base_class_offset(lv, (S9223C2*), 0, "S9223C1");
    check_field_offset(lv, s9223c1f0, ABISELECT(36,28), "S9223C1.s9223c1f0");
    test_class_info(&lv, &cd_S9223C1);
    dp->~S9223C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9223C1(Test_S9223C1, "S9223C1", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN7S9223C1C1Ev();
extern void _ZN7S9223C1D1Ev();
Name_Map name_map_S9223C1[] = {
  NSPAIR(_ZN7S9223C1C1Ev),
  NSPAIR(_ZN7S9223C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9223C2;
extern VTBL_ENTRY _ZTI7S9223C2[];
extern  VTBL_ENTRY _ZTV7S9223C2[];
static Base_Class bases_S9223C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9223C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9223C1[];
extern void _ZN7S9223C1D1Ev();
extern void _ZN7S9223C1D0Ev();
extern void _ZN7S9223C22v3Ev();
extern void _ZN7S9223C22v4Ev();
extern void _ZN7S9223C22v5Ev();
extern void _ZN7S9223C12v1Ev();
extern void _ZN7S9223C12v2Ev();
static  VTBL_ENTRY vtc_S9223C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9223C1[0]),
  (VTBL_ENTRY)&_ZN7S9223C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9223C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9223C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9223C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9223C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9223C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9223C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9223C1[];
extern  VTBL_ENTRY _ZTV7S9223C1[];
Class_Descriptor cd_S9223C1 = {  "S9223C1", // class name
  bases_S9223C1, 1,
  &(vtc_S9223C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI7S9223C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9223C1),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  S9240C2  {
  ::S4473C12_nt s9240c2f0;
  int s9240c2f1[2];
  char s9240c2f2;
  virtual  ~S9240C2(); // _ZN7S9240C2D1Ev
  virtual void  v3(); // _ZN7S9240C22v3Ev
  virtual void  v4(); // _ZN7S9240C22v4Ev
  virtual void  v5(); // _ZN7S9240C22v5Ev
  S9240C2(); // tgen
};
//SIG(-1 S9240C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9240C2 ::~S9240C2(){ note_dtor("S9240C2", this);}
void  S9240C2 ::v3(){vfunc_called(this, "_ZN7S9240C22v3Ev");}
void  S9240C2 ::v4(){vfunc_called(this, "_ZN7S9240C22v4Ev");}
void  S9240C2 ::v5(){vfunc_called(this, "_ZN7S9240C22v5Ev");}
S9240C2 ::S9240C2(){ note_ctor("S9240C2", this);} // tgen

static void Test_S9240C2()
{
  extern Class_Descriptor cd_S9240C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9240C2, buf);
    S9240C2 *dp, &lv = *(dp=new (buf) S9240C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9240C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9240C2)");
    check_field_offset(lv, s9240c2f0, ABISELECT(8,4), "S9240C2.s9240c2f0");
    check_field_offset(lv, s9240c2f1, ABISELECT(24,16), "S9240C2.s9240c2f1");
    check_field_offset(lv, s9240c2f2, ABISELECT(32,24), "S9240C2.s9240c2f2");
    test_class_info(&lv, &cd_S9240C2);
    dp->~S9240C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9240C2(Test_S9240C2, "S9240C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9240C2C1Ev();
extern void _ZN7S9240C2D1Ev();
Name_Map name_map_S9240C2[] = {
  NSPAIR(_ZN7S9240C2C1Ev),
  NSPAIR(_ZN7S9240C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9240C2[];
extern void _ZN7S9240C2D1Ev();
extern void _ZN7S9240C2D0Ev();
extern void _ZN7S9240C22v3Ev();
extern void _ZN7S9240C22v4Ev();
extern void _ZN7S9240C22v5Ev();
static  VTBL_ENTRY vtc_S9240C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9240C2[0]),
  (VTBL_ENTRY)&_ZN7S9240C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9240C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9240C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9240C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9240C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9240C2[];
extern  VTBL_ENTRY _ZTV7S9240C2[];
Class_Descriptor cd_S9240C2 = {  "S9240C2", // class name
  0,0,//no base classes
  &(vtc_S9240C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9240C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9240C2),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  S9240C1  : S9240C2 {
  virtual void  v1(); // _ZN7S9240C12v1Ev
  virtual void  v2(); // _ZN7S9240C12v2Ev
  ~S9240C1(); // tgen
  S9240C1(); // tgen
};
//SIG(1 S9240C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2}


void  S9240C1 ::v1(){vfunc_called(this, "_ZN7S9240C12v1Ev");}
void  S9240C1 ::v2(){vfunc_called(this, "_ZN7S9240C12v2Ev");}
S9240C1 ::~S9240C1(){ note_dtor("S9240C1", this);} // tgen
S9240C1 ::S9240C1(){ note_ctor("S9240C1", this);} // tgen

static void Test_S9240C1()
{
  extern Class_Descriptor cd_S9240C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9240C1, buf);
    S9240C1 *dp, &lv = *(dp=new (buf) S9240C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9240C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9240C1)");
    check_base_class_offset(lv, (S9240C2*), 0, "S9240C1");
    test_class_info(&lv, &cd_S9240C1);
    dp->~S9240C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9240C1(Test_S9240C1, "S9240C1", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9240C1C1Ev();
extern void _ZN7S9240C1D1Ev();
Name_Map name_map_S9240C1[] = {
  NSPAIR(_ZN7S9240C1C1Ev),
  NSPAIR(_ZN7S9240C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9240C2;
extern VTBL_ENTRY _ZTI7S9240C2[];
extern  VTBL_ENTRY _ZTV7S9240C2[];
static Base_Class bases_S9240C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9240C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9240C1[];
extern void _ZN7S9240C1D1Ev();
extern void _ZN7S9240C1D0Ev();
extern void _ZN7S9240C22v3Ev();
extern void _ZN7S9240C22v4Ev();
extern void _ZN7S9240C22v5Ev();
extern void _ZN7S9240C12v1Ev();
extern void _ZN7S9240C12v2Ev();
static  VTBL_ENTRY vtc_S9240C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9240C1[0]),
  (VTBL_ENTRY)&_ZN7S9240C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9240C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9240C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9240C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9240C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9240C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9240C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9240C1[];
extern  VTBL_ENTRY _ZTV7S9240C1[];
Class_Descriptor cd_S9240C1 = {  "S9240C1", // class name
  bases_S9240C1, 1,
  &(vtc_S9240C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9240C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9240C1),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  S6922C2  {
  virtual void  v5(); // _ZN7S6922C22v5Ev
  virtual void  v6(); // _ZN7S6922C22v6Ev
  virtual void  v7(); // _ZN7S6922C22v7Ev
  virtual void  v8(); // _ZN7S6922C22v8Ev
  virtual void  v9(); // _ZN7S6922C22v9Ev
  virtual void  v10(); // _ZN7S6922C23v10Ev
  ~S6922C2(); // tgen
  S6922C2(); // tgen
};
//SIG(-1 S6922C2) C1{ v1 v2 v3 v4 v5 v6}


void  S6922C2 ::v5(){vfunc_called(this, "_ZN7S6922C22v5Ev");}
void  S6922C2 ::v6(){vfunc_called(this, "_ZN7S6922C22v6Ev");}
void  S6922C2 ::v7(){vfunc_called(this, "_ZN7S6922C22v7Ev");}
void  S6922C2 ::v8(){vfunc_called(this, "_ZN7S6922C22v8Ev");}
void  S6922C2 ::v9(){vfunc_called(this, "_ZN7S6922C22v9Ev");}
void  S6922C2 ::v10(){vfunc_called(this, "_ZN7S6922C23v10Ev");}
S6922C2 ::~S6922C2(){ note_dtor("S6922C2", this);} // tgen
S6922C2 ::S6922C2(){ note_ctor("S6922C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6922C2C1Ev();
extern void _ZN7S6922C2D1Ev();
Name_Map name_map_S6922C2[] = {
  NSPAIR(_ZN7S6922C2C1Ev),
  NSPAIR(_ZN7S6922C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6922C2[];
extern void _ZN7S6922C22v5Ev();
extern void _ZN7S6922C22v6Ev();
extern void _ZN7S6922C22v7Ev();
extern void _ZN7S6922C22v8Ev();
extern void _ZN7S6922C22v9Ev();
extern void _ZN7S6922C23v10Ev();
static  VTBL_ENTRY vtc_S6922C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6922C2[0]),
  (VTBL_ENTRY)&_ZN7S6922C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6922C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6922C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6922C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6922C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6922C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S6922C2[];
extern  VTBL_ENTRY _ZTV7S6922C2[];
Class_Descriptor cd_S6922C2 = {  "S6922C2", // class name
  0,0,//no base classes
  &(vtc_S6922C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6922C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6922C2),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  S6922C1  : S6922C2 {
  void *s6922c1f0;
  __tsi64 s6922c1f1;
  virtual  ~S6922C1(); // _ZN7S6922C1D1Ev
  virtual void  v1(); // _ZN7S6922C12v1Ev
  virtual void  v2(); // _ZN7S6922C12v2Ev
  virtual void  v3(); // _ZN7S6922C12v3Ev
  virtual void  v4(); // _ZN7S6922C12v4Ev
  S6922C1(); // tgen
};
//SIG(1 S6922C1) C1{ BC2{ v5 v6 v7 v8 v9 v10} vd v1 v2 v3 v4 Fp FL}


 S6922C1 ::~S6922C1(){ note_dtor("S6922C1", this);}
void  S6922C1 ::v1(){vfunc_called(this, "_ZN7S6922C12v1Ev");}
void  S6922C1 ::v2(){vfunc_called(this, "_ZN7S6922C12v2Ev");}
void  S6922C1 ::v3(){vfunc_called(this, "_ZN7S6922C12v3Ev");}
void  S6922C1 ::v4(){vfunc_called(this, "_ZN7S6922C12v4Ev");}
S6922C1 ::S6922C1(){ note_ctor("S6922C1", this);} // tgen

static void Test_S6922C1()
{
  extern Class_Descriptor cd_S6922C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S6922C1, buf);
    S6922C1 *dp, &lv = *(dp=new (buf) S6922C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S6922C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6922C1)");
    check_base_class_offset(lv, (S6922C2*), 0, "S6922C1");
    check_field_offset(lv, s6922c1f0, ABISELECT(8,4), "S6922C1.s6922c1f0");
    check_field_offset(lv, s6922c1f1, ABISELECT(16,8), "S6922C1.s6922c1f1");
    test_class_info(&lv, &cd_S6922C1);
    dp->~S6922C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6922C1(Test_S6922C1, "S6922C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S6922C1C1Ev();
extern void _ZN7S6922C1D1Ev();
Name_Map name_map_S6922C1[] = {
  NSPAIR(_ZN7S6922C1C1Ev),
  NSPAIR(_ZN7S6922C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6922C2;
extern VTBL_ENTRY _ZTI7S6922C2[];
extern  VTBL_ENTRY _ZTV7S6922C2[];
static Base_Class bases_S6922C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6922C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6922C1[];
extern void _ZN7S6922C22v5Ev();
extern void _ZN7S6922C22v6Ev();
extern void _ZN7S6922C22v7Ev();
extern void _ZN7S6922C22v8Ev();
extern void _ZN7S6922C22v9Ev();
extern void _ZN7S6922C23v10Ev();
extern void _ZN7S6922C1D1Ev();
extern void _ZN7S6922C1D0Ev();
extern void _ZN7S6922C12v1Ev();
extern void _ZN7S6922C12v2Ev();
extern void _ZN7S6922C12v3Ev();
extern void _ZN7S6922C12v4Ev();
static  VTBL_ENTRY vtc_S6922C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6922C1[0]),
  (VTBL_ENTRY)&_ZN7S6922C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6922C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6922C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6922C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6922C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6922C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6922C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6922C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6922C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6922C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6922C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6922C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S6922C1[];
extern  VTBL_ENTRY _ZTV7S6922C1[];
Class_Descriptor cd_S6922C1 = {  "S6922C1", // class name
  bases_S6922C1, 1,
  &(vtc_S6922C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S6922C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6922C1),14, //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  S20268C2  {
  virtual void  v5(); // _ZN8S20268C22v5Ev
  virtual void  v6(); // _ZN8S20268C22v6Ev
  virtual void  v7(); // _ZN8S20268C22v7Ev
  virtual void  v8(); // _ZN8S20268C22v8Ev
  virtual void  v9(); // _ZN8S20268C22v9Ev
  virtual void  v10(); // _ZN8S20268C23v10Ev
  ~S20268C2(); // tgen
  S20268C2(); // tgen
};
//SIG(-1 S20268C2) C1{ v1 v2 v3 v4 v5 v6}


void  S20268C2 ::v5(){vfunc_called(this, "_ZN8S20268C22v5Ev");}
void  S20268C2 ::v6(){vfunc_called(this, "_ZN8S20268C22v6Ev");}
void  S20268C2 ::v7(){vfunc_called(this, "_ZN8S20268C22v7Ev");}
void  S20268C2 ::v8(){vfunc_called(this, "_ZN8S20268C22v8Ev");}
void  S20268C2 ::v9(){vfunc_called(this, "_ZN8S20268C22v9Ev");}
void  S20268C2 ::v10(){vfunc_called(this, "_ZN8S20268C23v10Ev");}
S20268C2 ::~S20268C2(){ note_dtor("S20268C2", this);} // tgen
S20268C2 ::S20268C2(){ note_ctor("S20268C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20268C2C1Ev();
extern void _ZN8S20268C2D1Ev();
Name_Map name_map_S20268C2[] = {
  NSPAIR(_ZN8S20268C2C1Ev),
  NSPAIR(_ZN8S20268C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20268C2[];
extern void _ZN8S20268C22v5Ev();
extern void _ZN8S20268C22v6Ev();
extern void _ZN8S20268C22v7Ev();
extern void _ZN8S20268C22v8Ev();
extern void _ZN8S20268C22v9Ev();
extern void _ZN8S20268C23v10Ev();
static  VTBL_ENTRY vtc_S20268C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20268C2[0]),
  (VTBL_ENTRY)&_ZN8S20268C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20268C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20268C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20268C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20268C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20268C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S20268C2[];
extern  VTBL_ENTRY _ZTV8S20268C2[];
Class_Descriptor cd_S20268C2 = {  "S20268C2", // class name
  0,0,//no base classes
  &(vtc_S20268C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20268C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20268C2),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  S20268C1  : virtual S20268C2 {
  char s20268c1f0:8;
  virtual void  v1(); // _ZN8S20268C12v1Ev
  virtual void  v2(); // _ZN8S20268C12v2Ev
  virtual void  v3(); // _ZN8S20268C12v3Ev
  virtual void  v4(); // _ZN8S20268C12v4Ev
  ~S20268C1(); // tgen
  S20268C1(); // tgen
};
//SIG(1 S20268C1) C1{ VBC2{ v5 v6 v7 v8 v9 v10} v1 v2 v3 v4 Fc:8}


void  S20268C1 ::v1(){vfunc_called(this, "_ZN8S20268C12v1Ev");}
void  S20268C1 ::v2(){vfunc_called(this, "_ZN8S20268C12v2Ev");}
void  S20268C1 ::v3(){vfunc_called(this, "_ZN8S20268C12v3Ev");}
void  S20268C1 ::v4(){vfunc_called(this, "_ZN8S20268C12v4Ev");}
S20268C1 ::~S20268C1(){ note_dtor("S20268C1", this);} // tgen
S20268C1 ::S20268C1(){ note_ctor("S20268C1", this);} // tgen

static void Test_S20268C1()
{
  extern Class_Descriptor cd_S20268C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20268C1, buf);
    S20268C1 *dp, &lv = *(dp=new (buf) S20268C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20268C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20268C1)");
    check_base_class_offset(lv, (S20268C2*), 0, "S20268C1");
    set_bf_and_test(lv, s20268c1f0, ABISELECT(8,4), 0, 8, 1, "S20268C1");
    set_bf_and_test(lv, s20268c1f0, ABISELECT(8,4), 0, 8, hide_sll(1LL<<7), "S20268C1");
    test_class_info(&lv, &cd_S20268C1);
    dp->~S20268C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20268C1(Test_S20268C1, "S20268C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20268C1C1Ev();
extern void _ZN8S20268C1D1Ev();
Name_Map name_map_S20268C1[] = {
  NSPAIR(_ZN8S20268C1C1Ev),
  NSPAIR(_ZN8S20268C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20268C2;
extern VTBL_ENTRY _ZTI8S20268C2[];
extern  VTBL_ENTRY _ZTV8S20268C2[];
static Base_Class bases_S20268C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20268C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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 _ZTI8S20268C1[];
extern void _ZN8S20268C22v5Ev();
extern void _ZN8S20268C22v6Ev();
extern void _ZN8S20268C22v7Ev();
extern void _ZN8S20268C22v8Ev();
extern void _ZN8S20268C22v9Ev();
extern void _ZN8S20268C23v10Ev();
extern void _ZN8S20268C12v1Ev();
extern void _ZN8S20268C12v2Ev();
extern void _ZN8S20268C12v3Ev();
extern void _ZN8S20268C12v4Ev();
static  VTBL_ENTRY vtc_S20268C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20268C1[0]),
  (VTBL_ENTRY)&_ZN8S20268C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20268C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20268C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20268C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20268C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20268C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20268C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20268C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20268C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20268C12v4Ev,
};
extern VTBL_ENTRY _ZTV8S20268C1[];
static  VTT_ENTRY vtt_S20268C1[] = {
  {&(_ZTV8S20268C1[9]),  9,19},
  {&(_ZTV8S20268C1[9]),  9,19},
};
extern VTBL_ENTRY _ZTI8S20268C1[];
extern  VTBL_ENTRY _ZTV8S20268C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20268C1[];
Class_Descriptor cd_S20268C1 = {  "S20268C1", // class name
  bases_S20268C1, 1,
  &(vtc_S20268C1[0]), // expected_vtbl_contents
  &(vtt_S20268C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20268C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20268C1),19, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20268C1),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  S19966C2  {
  long double s19966c2f0;
  __tsi64 s19966c2f1[9];
  virtual  ~S19966C2(); // _ZN8S19966C2D1Ev
  virtual void  v1(); // _ZN8S19966C22v1Ev
  virtual void  v2(); // _ZN8S19966C22v2Ev
  S19966C2(); // tgen
};
//SIG(-1 S19966C2) C1{ vd v1 v2 FD FL[9]}


 S19966C2 ::~S19966C2(){ note_dtor("S19966C2", this);}
void  S19966C2 ::v1(){vfunc_called(this, "_ZN8S19966C22v1Ev");}
void  S19966C2 ::v2(){vfunc_called(this, "_ZN8S19966C22v2Ev");}
S19966C2 ::S19966C2(){ note_ctor("S19966C2", this);} // tgen

static void Test_S19966C2()
{
  extern Class_Descriptor cd_S19966C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,23)];
    init_test(&cd_S19966C2, buf);
    S19966C2 *dp, &lv = *(dp=new (buf) S19966C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,88), "sizeof(S19966C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19966C2)");
    check_field_offset(lv, s19966c2f0, ABISELECT(16,4), "S19966C2.s19966c2f0");
    check_field_offset(lv, s19966c2f1, ABISELECT(32,16), "S19966C2.s19966c2f1");
    test_class_info(&lv, &cd_S19966C2);
    dp->~S19966C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19966C2(Test_S19966C2, "S19966C2", ABISELECT(112,88));

#else // __cplusplus

extern void _ZN8S19966C2C1Ev();
extern void _ZN8S19966C2D1Ev();
Name_Map name_map_S19966C2[] = {
  NSPAIR(_ZN8S19966C2C1Ev),
  NSPAIR(_ZN8S19966C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19966C2[];
extern void _ZN8S19966C2D1Ev();
extern void _ZN8S19966C2D0Ev();
extern void _ZN8S19966C22v1Ev();
extern void _ZN8S19966C22v2Ev();
static  VTBL_ENTRY vtc_S19966C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19966C2[0]),
  (VTBL_ENTRY)&_ZN8S19966C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19966C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19966C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19966C22v2Ev,
};
extern VTBL_ENTRY _ZTI8S19966C2[];
extern  VTBL_ENTRY _ZTV8S19966C2[];
Class_Descriptor cd_S19966C2 = {  "S19966C2", // class name
  0,0,//no base classes
  &(vtc_S19966C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,88), // object size
  NSPAIRA(_ZTI8S19966C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19966C2),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  S19966C1  : virtual S19966C2 {
  char s19966c1f0;
  ::S19966C2 s19966c1f1;
  __tsi64 s19966c1f2;
  virtual  ~S19966C1(); // _ZN8S19966C1D2Ev
  S19966C1(); // tgen
};
//SIG(1 S19966C1) C1{ VBC2{ vd v1 v2 FD FL[9]} vd Fc FC2 FL}


 S19966C1 ::~S19966C1(){ note_dtor("S19966C1", this);}
S19966C1 ::S19966C1(){ note_ctor("S19966C1", this);} // tgen

static void Test_S19966C1()
{
  extern Class_Descriptor cd_S19966C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,49)];
    init_test(&cd_S19966C1, buf);
    S19966C1 *dp, &lv = *(dp=new (buf) S19966C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,192), "sizeof(S19966C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19966C1)");
    check_base_class_offset(lv, (S19966C2*), ABISELECT(144,104), "S19966C1");
    check_field_offset(lv, s19966c1f0, ABISELECT(8,4), "S19966C1.s19966c1f0");
    check_field_offset(lv, s19966c1f1, ABISELECT(16,8), "S19966C1.s19966c1f1");
    check_field_offset(lv, s19966c1f2, ABISELECT(128,96), "S19966C1.s19966c1f2");
    test_class_info(&lv, &cd_S19966C1);
    dp->~S19966C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19966C1(Test_S19966C1, "S19966C1", ABISELECT(256,192));

#else // __cplusplus

extern void _ZN8S19966C1C1Ev();
extern void _ZN8S19966C1D2Ev();
Name_Map name_map_S19966C1[] = {
  NSPAIR(_ZN8S19966C1C1Ev),
  NSPAIR(_ZN8S19966C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19966C2;
extern VTBL_ENTRY _ZTI8S19966C2[];
extern  VTBL_ENTRY _ZTV8S19966C2[];
static Base_Class bases_S19966C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19966C2,    ABISELECT(144,104), //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 _ZTI8S19966C1[];
extern void _ZN8S19966C1D1Ev();
extern void _ZN8S19966C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19966C1D1Ev,_ZTv0_n12_N8S19966C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S19966C1D1Ev,_ZThn104_N8S19966C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19966C1D0Ev,_ZTv0_n12_N8S19966C1D0Ev)();
extern void ABISELECT(_ZThn144_N8S19966C1D0Ev,_ZThn104_N8S19966C1D0Ev)() __attribute__((weak));
extern void _ZN8S19966C22v1Ev();
extern void _ZN8S19966C22v2Ev();
static  VTBL_ENTRY vtc_S19966C1[] = {
  ABISELECT(144,104),
  0,
  (VTBL_ENTRY)&(_ZTI8S19966C1[0]),
  (VTBL_ENTRY)&_ZN8S19966C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19966C1D0Ev,
  0,
  0,
  ABISELECT(-144,-104),
  ABISELECT(-144,-104),
  (VTBL_ENTRY)&(_ZTI8S19966C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19966C1D1Ev,_ZTv0_n12_N8S19966C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19966C1D0Ev,_ZTv0_n12_N8S19966C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19966C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19966C22v2Ev,
};
extern VTBL_ENTRY _ZTV8S19966C1[];
static  VTT_ENTRY vtt_S19966C1[] = {
  {&(_ZTV8S19966C1[3]),  3,14},
  {&(_ZTV8S19966C1[10]),  10,14},
};
extern VTBL_ENTRY _ZTI8S19966C1[];
extern  VTBL_ENTRY _ZTV8S19966C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19966C1[];
static VTBL_ENTRY alt_thunk_names59[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19966C1D0Ev,_ZTv0_n12_N8S19966C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19966C1D0Ev,_ZThn104_N8S19966C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19966C1D1Ev,_ZTv0_n12_N8S19966C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19966C1D1Ev,_ZThn104_N8S19966C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19966C1 = {  "S19966C1", // class name
  bases_S19966C1, 1,
  &(vtc_S19966C1[0]), // expected_vtbl_contents
  &(vtt_S19966C1[0]), // expected_vtt_contents
  ABISELECT(256,192), // object size
  NSPAIRA(_ZTI8S19966C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19966C1),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19966C1),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names59,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7542C3  {
  int s7542c3f0;
  virtual void  v2(); // _ZN7S7542C32v2Ev
  ~S7542C3(); // tgen
  S7542C3(); // tgen
};
//SIG(-1 S7542C3) C1{ v1 Fi}


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

static void Test_S7542C3()
{
  extern Class_Descriptor cd_S7542C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7542C3, buf);
    S7542C3 *dp, &lv = *(dp=new (buf) S7542C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7542C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7542C3)");
    check_field_offset(lv, s7542c3f0, ABISELECT(8,4), "S7542C3.s7542c3f0");
    test_class_info(&lv, &cd_S7542C3);
    dp->~S7542C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7542C3(Test_S7542C3, "S7542C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7542C3C1Ev();
extern void _ZN7S7542C3D1Ev();
Name_Map name_map_S7542C3[] = {
  NSPAIR(_ZN7S7542C3C1Ev),
  NSPAIR(_ZN7S7542C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7542C3[];
extern void _ZN7S7542C32v2Ev();
static  VTBL_ENTRY vtc_S7542C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7542C3[0]),
  (VTBL_ENTRY)&_ZN7S7542C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S7542C3[];
extern  VTBL_ENTRY _ZTV7S7542C3[];
Class_Descriptor cd_S7542C3 = {  "S7542C3", // class name
  0,0,//no base classes
  &(vtc_S7542C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7542C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7542C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7542C2  : virtual S7542C3 {
  int s7542c2f0;
  ~S7542C2(); // tgen
  S7542C2(); // tgen
};
//SIG(-1 S7542C2) C1{ VBC2{ v1 Fi} Fi}


S7542C2 ::~S7542C2(){ note_dtor("S7542C2", this);} // tgen
S7542C2 ::S7542C2(){ note_ctor("S7542C2", this);} // tgen

static void Test_S7542C2()
{
  extern Class_Descriptor cd_S7542C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7542C2, buf);
    S7542C2 *dp, &lv = *(dp=new (buf) S7542C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7542C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7542C2)");
    check_base_class_offset(lv, (S7542C3*), ABISELECT(16,8), "S7542C2");
    check_field_offset(lv, s7542c2f0, ABISELECT(8,4), "S7542C2.s7542c2f0");
    test_class_info(&lv, &cd_S7542C2);
    dp->~S7542C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7542C2(Test_S7542C2, "S7542C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7542C2C1Ev();
extern void _ZN7S7542C2D1Ev();
Name_Map name_map_S7542C2[] = {
  NSPAIR(_ZN7S7542C2C1Ev),
  NSPAIR(_ZN7S7542C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7542C3;
extern VTBL_ENTRY _ZTI7S7542C3[];
extern  VTBL_ENTRY _ZTV7S7542C3[];
static Base_Class bases_S7542C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7542C3,    ABISELECT(16,8), //bcp->offset
    3, //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 _ZTI7S7542C2[];
extern void _ZN7S7542C32v2Ev();
static  VTBL_ENTRY vtc_S7542C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7542C2[0]),
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7542C2[0]),
  (VTBL_ENTRY)&_ZN7S7542C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7542C2[];
static  VTT_ENTRY vtt_S7542C2[] = {
  {&(_ZTV7S7542C2[3]),  3,7},
  {&(_ZTV7S7542C2[6]),  6,7},
};
extern VTBL_ENTRY _ZTI7S7542C2[];
extern  VTBL_ENTRY _ZTV7S7542C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7542C2[];
Class_Descriptor cd_S7542C2 = {  "S7542C2", // class name
  bases_S7542C2, 1,
  &(vtc_S7542C2[0]), // expected_vtbl_contents
  &(vtt_S7542C2[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7542C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7542C2),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7542C2),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  S7542C4  : virtual S7542C3 {
  int s7542c4f0;
  ~S7542C4(); // tgen
  S7542C4(); // tgen
};
//SIG(-1 S7542C4) C1{ VBC2{ v1 Fi} Fi}


S7542C4 ::~S7542C4(){ note_dtor("S7542C4", this);} // tgen
S7542C4 ::S7542C4(){ note_ctor("S7542C4", this);} // tgen

static void Test_S7542C4()
{
  extern Class_Descriptor cd_S7542C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7542C4, buf);
    S7542C4 *dp, &lv = *(dp=new (buf) S7542C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7542C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7542C4)");
    check_base_class_offset(lv, (S7542C3*), ABISELECT(16,8), "S7542C4");
    check_field_offset(lv, s7542c4f0, ABISELECT(8,4), "S7542C4.s7542c4f0");
    test_class_info(&lv, &cd_S7542C4);
    dp->~S7542C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7542C4(Test_S7542C4, "S7542C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7542C4C1Ev();
extern void _ZN7S7542C4D1Ev();
Name_Map name_map_S7542C4[] = {
  NSPAIR(_ZN7S7542C4C1Ev),
  NSPAIR(_ZN7S7542C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7542C3;
extern VTBL_ENTRY _ZTI7S7542C3[];
extern  VTBL_ENTRY _ZTV7S7542C3[];
static Base_Class bases_S7542C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7542C3,    ABISELECT(16,8), //bcp->offset
    3, //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 _ZTI7S7542C4[];
extern void _ZN7S7542C32v2Ev();
static  VTBL_ENTRY vtc_S7542C4[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7542C4[0]),
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7542C4[0]),
  (VTBL_ENTRY)&_ZN7S7542C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7542C4[];
static  VTT_ENTRY vtt_S7542C4[] = {
  {&(_ZTV7S7542C4[3]),  3,7},
  {&(_ZTV7S7542C4[6]),  6,7},
};
extern VTBL_ENTRY _ZTI7S7542C4[];
extern  VTBL_ENTRY _ZTV7S7542C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7542C4[];
Class_Descriptor cd_S7542C4 = {  "S7542C4", // class name
  bases_S7542C4, 1,
  &(vtc_S7542C4[0]), // expected_vtbl_contents
  &(vtt_S7542C4[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7542C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7542C4),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7542C4),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  S7542C1  : S7542C2 , S7542C4 {
  int s7542c1f0;
  virtual void  v1(); // _ZN7S7542C12v1Ev
  ~S7542C1(); // tgen
  S7542C1(); // tgen
};
//SIG(1 S7542C1) C1{ BC2{ VBC3{ v2 Fi} Fi} BC4{ VBC3 Fi} v1 Fi}


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

static void Test_S7542C1()
{
  extern Class_Descriptor cd_S7542C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S7542C1, buf);
    S7542C1 *dp, &lv = *(dp=new (buf) S7542C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S7542C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7542C1)");
    check_base_class_offset(lv, (S7542C3*)(S7542C2*), ABISELECT(32,20), "S7542C1");
    check_base_class_offset(lv, (S7542C3*)(S7542C4*), ABISELECT(32,20), "S7542C1");
    check_base_class_offset(lv, (S7542C2*), 0, "S7542C1");
    check_base_class_offset(lv, (S7542C4*), ABISELECT(16,8), "S7542C1");
    check_field_offset(lv, s7542c1f0, ABISELECT(28,16), "S7542C1.s7542c1f0");
    test_class_info(&lv, &cd_S7542C1);
    dp->~S7542C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7542C1(Test_S7542C1, "S7542C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S7542C1C1Ev();
extern void _ZN7S7542C1D1Ev();
Name_Map name_map_S7542C1[] = {
  NSPAIR(_ZN7S7542C1C1Ev),
  NSPAIR(_ZN7S7542C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7542C3;
extern VTBL_ENTRY _ZTI7S7542C3[];
extern  VTBL_ENTRY _ZTV7S7542C3[];
extern Class_Descriptor cd_S7542C2;
extern VTBL_ENTRY _ZTI7S7542C2[];
extern  VTBL_ENTRY _ZTV7S7542C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7542C2[];
extern Class_Descriptor cd_S7542C4;
extern VTBL_ENTRY _ZTI7S7542C4[];
extern  VTBL_ENTRY _ZTV7S7542C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7542C4[];
static Base_Class bases_S7542C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7542C3,    ABISELECT(32,20), //bcp->offset
    7, //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
    1, //immediately_derived
  0, 1},
  {&cd_S7542C2,    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_S7542C4,    ABISELECT(16,8), //bcp->offset
    4, //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7542C1[];
extern void _ZN7S7542C12v1Ev();
extern void _ZN7S7542C32v2Ev();
static  VTBL_ENTRY vtc_S7542C1[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7542C1[0]),
  (VTBL_ENTRY)&_ZN7S7542C12v1Ev,
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7542C1[0]),
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7542C1[0]),
  (VTBL_ENTRY)&_ZN7S7542C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7542C1[];
static  VTBL_ENTRY _tg__ZTV7S7542C2__7S7542C1[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7542C2[0]),
};
extern void _ZN7S7542C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7542C3__7S7542C2__7S7542C1[] = {
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7542C2[0]),
  (VTBL_ENTRY)&_ZN7S7542C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7542C4__7S7542C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7542C4[0]),
};
extern void _ZN7S7542C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7542C3__7S7542C4__7S7542C1[] = {
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7542C4[0]),
  (VTBL_ENTRY)&_ZN7S7542C32v2Ev,
};
static  VTT_ENTRY vtt_S7542C1[] = {
  {&(_ZTV7S7542C1[3]),  3,11},
  {&(_tg__ZTV7S7542C2__7S7542C1[3]),  3,3},
  {&(_tg__ZTV7S7542C3__7S7542C2__7S7542C1[3]),  3,4},
  {&(_tg__ZTV7S7542C4__7S7542C1[3]),  3,3},
  {&(_tg__ZTV7S7542C3__7S7542C4__7S7542C1[3]),  3,4},
  {&(_ZTV7S7542C1[10]),  10,11},
  {&(_ZTV7S7542C1[7]),  7,11},
};
extern VTBL_ENTRY _ZTI7S7542C1[];
extern  VTBL_ENTRY _ZTV7S7542C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7542C1[];
Class_Descriptor cd_S7542C1 = {  "S7542C1", // class name
  bases_S7542C1, 3,
  &(vtc_S7542C1[0]), // expected_vtbl_contents
  &(vtt_S7542C1[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S7542C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7542C1),11, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7542C1),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7503C3  {
  int s7503c3f0;
  virtual void  v1(); // _ZN7S7503C32v1Ev
  ~S7503C3(); // tgen
  S7503C3(); // tgen
};
//SIG(-1 S7503C3) C1{ v1 Fi}


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

static void Test_S7503C3()
{
  extern Class_Descriptor cd_S7503C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7503C3, buf);
    S7503C3 *dp, &lv = *(dp=new (buf) S7503C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7503C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7503C3)");
    check_field_offset(lv, s7503c3f0, ABISELECT(8,4), "S7503C3.s7503c3f0");
    test_class_info(&lv, &cd_S7503C3);
    dp->~S7503C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7503C3(Test_S7503C3, "S7503C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7503C3C1Ev();
extern void _ZN7S7503C3D1Ev();
Name_Map name_map_S7503C3[] = {
  NSPAIR(_ZN7S7503C3C1Ev),
  NSPAIR(_ZN7S7503C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7503C3[];
extern void _ZN7S7503C32v1Ev();
static  VTBL_ENTRY vtc_S7503C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7503C3[0]),
  (VTBL_ENTRY)&_ZN7S7503C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S7503C3[];
extern  VTBL_ENTRY _ZTV7S7503C3[];
Class_Descriptor cd_S7503C3 = {  "S7503C3", // class name
  0,0,//no base classes
  &(vtc_S7503C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7503C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7503C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7503C2  : virtual S7503C3 {
  ::S7503C3 s7503c2f0;
  virtual void  v2(); // _ZN7S7503C22v2Ev
  ~S7503C2(); // tgen
  S7503C2(); // tgen
};
//SIG(-1 S7503C2) C1{ VBC2{ v2 Fi} v1 FC2}


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

static void Test_S7503C2()
{
  extern Class_Descriptor cd_S7503C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7503C2, buf);
    S7503C2 *dp, &lv = *(dp=new (buf) S7503C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7503C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7503C2)");
    check_base_class_offset(lv, (S7503C3*), ABISELECT(24,12), "S7503C2");
    check_field_offset(lv, s7503c2f0, ABISELECT(8,4), "S7503C2.s7503c2f0");
    test_class_info(&lv, &cd_S7503C2);
    dp->~S7503C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7503C2(Test_S7503C2, "S7503C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7503C2C1Ev();
extern void _ZN7S7503C2D1Ev();
Name_Map name_map_S7503C2[] = {
  NSPAIR(_ZN7S7503C2C1Ev),
  NSPAIR(_ZN7S7503C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7503C3;
extern VTBL_ENTRY _ZTI7S7503C3[];
extern  VTBL_ENTRY _ZTV7S7503C3[];
static Base_Class bases_S7503C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7503C3,    ABISELECT(24,12), //bcp->offset
    4, //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 _ZTI7S7503C2[];
extern void _ZN7S7503C22v2Ev();
extern void _ZN7S7503C32v1Ev();
static  VTBL_ENTRY vtc_S7503C2[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7503C2[0]),
  (VTBL_ENTRY)&_ZN7S7503C22v2Ev,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7503C2[0]),
  (VTBL_ENTRY)&_ZN7S7503C32v1Ev,
};
extern VTBL_ENTRY _ZTV7S7503C2[];
static  VTT_ENTRY vtt_S7503C2[] = {
  {&(_ZTV7S7503C2[3]),  3,8},
  {&(_ZTV7S7503C2[7]),  7,8},
};
extern VTBL_ENTRY _ZTI7S7503C2[];
extern  VTBL_ENTRY _ZTV7S7503C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7503C2[];
Class_Descriptor cd_S7503C2 = {  "S7503C2", // class name
  bases_S7503C2, 1,
  &(vtc_S7503C2[0]), // expected_vtbl_contents
  &(vtt_S7503C2[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7503C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7503C2),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7503C2),2, //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  S7503C4  : virtual S7503C3 {
  ::S7503C3 s7503c4f0;
  ~S7503C4(); // tgen
  S7503C4(); // tgen
};
//SIG(-1 S7503C4) C1{ VBC2{ v1 Fi} FC2}


S7503C4 ::~S7503C4(){ note_dtor("S7503C4", this);} // tgen
S7503C4 ::S7503C4(){ note_ctor("S7503C4", this);} // tgen

static void Test_S7503C4()
{
  extern Class_Descriptor cd_S7503C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7503C4, buf);
    S7503C4 *dp, &lv = *(dp=new (buf) S7503C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7503C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7503C4)");
    check_base_class_offset(lv, (S7503C3*), ABISELECT(24,12), "S7503C4");
    check_field_offset(lv, s7503c4f0, ABISELECT(8,4), "S7503C4.s7503c4f0");
    test_class_info(&lv, &cd_S7503C4);
    dp->~S7503C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7503C4(Test_S7503C4, "S7503C4", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7503C4C1Ev();
extern void _ZN7S7503C4D1Ev();
Name_Map name_map_S7503C4[] = {
  NSPAIR(_ZN7S7503C4C1Ev),
  NSPAIR(_ZN7S7503C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7503C3;
extern VTBL_ENTRY _ZTI7S7503C3[];
extern  VTBL_ENTRY _ZTV7S7503C3[];
static Base_Class bases_S7503C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7503C3,    ABISELECT(24,12), //bcp->offset
    3, //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 _ZTI7S7503C4[];
extern void _ZN7S7503C32v1Ev();
static  VTBL_ENTRY vtc_S7503C4[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7503C4[0]),
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7503C4[0]),
  (VTBL_ENTRY)&_ZN7S7503C32v1Ev,
};
extern VTBL_ENTRY _ZTV7S7503C4[];
static  VTT_ENTRY vtt_S7503C4[] = {
  {&(_ZTV7S7503C4[3]),  3,7},
  {&(_ZTV7S7503C4[6]),  6,7},
};
extern VTBL_ENTRY _ZTI7S7503C4[];
extern  VTBL_ENTRY _ZTV7S7503C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7503C4[];
Class_Descriptor cd_S7503C4 = {  "S7503C4", // class name
  bases_S7503C4, 1,
  &(vtc_S7503C4[0]), // expected_vtbl_contents
  &(vtt_S7503C4[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7503C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7503C4),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7503C4),2, //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  S7503C1  : S7503C2 , S7503C4 {
  ~S7503C1(); // tgen
  S7503C1(); // tgen
};
//SIG(1 S7503C1) C1{ BC2{ VBC3{ v1 Fi} v2 FC3} BC4{ VBC3 FC3}}


S7503C1 ::~S7503C1(){ note_dtor("S7503C1", this);} // tgen
S7503C1 ::S7503C1(){ note_ctor("S7503C1", this);} // tgen

static void Test_S7503C1()
{
  extern Class_Descriptor cd_S7503C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S7503C1, buf);
    S7503C1 *dp, &lv = *(dp=new (buf) S7503C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7503C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7503C1)");
    check_base_class_offset(lv, (S7503C3*)(S7503C2*), ABISELECT(48,24), "S7503C1");
    check_base_class_offset(lv, (S7503C3*)(S7503C4*), ABISELECT(48,24), "S7503C1");
    check_base_class_offset(lv, (S7503C2*), 0, "S7503C1");
    check_base_class_offset(lv, (S7503C4*), ABISELECT(24,12), "S7503C1");
    test_class_info(&lv, &cd_S7503C1);
    dp->~S7503C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7503C1(Test_S7503C1, "S7503C1", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S7503C1C1Ev();
extern void _ZN7S7503C1D1Ev();
Name_Map name_map_S7503C1[] = {
  NSPAIR(_ZN7S7503C1C1Ev),
  NSPAIR(_ZN7S7503C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7503C3;
extern VTBL_ENTRY _ZTI7S7503C3[];
extern  VTBL_ENTRY _ZTV7S7503C3[];
extern Class_Descriptor cd_S7503C2;
extern VTBL_ENTRY _ZTI7S7503C2[];
extern  VTBL_ENTRY _ZTV7S7503C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7503C2[];
extern Class_Descriptor cd_S7503C4;
extern VTBL_ENTRY _ZTI7S7503C4[];
extern  VTBL_ENTRY _ZTV7S7503C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7503C4[];
static Base_Class bases_S7503C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7503C3,    ABISELECT(48,24), //bcp->offset
    7, //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
    1, //immediately_derived
  0, 1},
  {&cd_S7503C2,    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_S7503C4,    ABISELECT(24,12), //bcp->offset
    4, //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7503C1[];
extern void _ZN7S7503C22v2Ev();
extern void _ZN7S7503C32v1Ev();
static  VTBL_ENTRY vtc_S7503C1[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7503C1[0]),
  (VTBL_ENTRY)&_ZN7S7503C22v2Ev,
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7503C1[0]),
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7503C1[0]),
  (VTBL_ENTRY)&_ZN7S7503C32v1Ev,
};
extern VTBL_ENTRY _ZTV7S7503C1[];
extern void _ZN7S7503C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7503C2__7S7503C1[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7503C2[0]),
  (VTBL_ENTRY)&_ZN7S7503C22v2Ev,
};
extern void _ZN7S7503C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7503C3__7S7503C2__7S7503C1[] = {
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7503C2[0]),
  (VTBL_ENTRY)&_ZN7S7503C32v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7503C4__7S7503C1[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7503C4[0]),
};
extern void _ZN7S7503C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7503C3__7S7503C4__7S7503C1[] = {
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7503C4[0]),
  (VTBL_ENTRY)&_ZN7S7503C32v1Ev,
};
static  VTT_ENTRY vtt_S7503C1[] = {
  {&(_ZTV7S7503C1[3]),  3,11},
  {&(_tg__ZTV7S7503C2__7S7503C1[3]),  3,4},
  {&(_tg__ZTV7S7503C3__7S7503C2__7S7503C1[3]),  3,4},
  {&(_tg__ZTV7S7503C4__7S7503C1[3]),  3,3},
  {&(_tg__ZTV7S7503C3__7S7503C4__7S7503C1[3]),  3,4},
  {&(_ZTV7S7503C1[10]),  10,11},
  {&(_ZTV7S7503C1[7]),  7,11},
};
extern VTBL_ENTRY _ZTI7S7503C1[];
extern  VTBL_ENTRY _ZTV7S7503C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7503C1[];
Class_Descriptor cd_S7503C1 = {  "S7503C1", // class name
  bases_S7503C1, 3,
  &(vtc_S7503C1[0]), // expected_vtbl_contents
  &(vtt_S7503C1[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S7503C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7503C1),11, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7503C1),7, //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  S16646C3_nt  {
  void *s16646c3f0;
  int s16646c3f1;
  void  mf16646c3(); // _ZN11S16646C3_nt9mf16646c3Ev
};
//SIG(-1 S16646C3_nt) C1{ m Fp Fi}


void  S16646C3_nt ::mf16646c3(){}

//skip512 S16646C3_nt

#else // __cplusplus

Class_Descriptor cd_S16646C3_nt = {  "S16646C3_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  S16646C2  : S16646C3_nt {
  ::S5082C10_nt s16646c2f0;
};
//SIG(-1 S16646C2) C1{ BC2{ m Fp Fi} FC3{ Fc[20]}}



static void Test_S16646C2()
{
  extern Class_Descriptor cd_S16646C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S16646C2, buf);
    S16646C2 &lv = *(new (buf) S16646C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S16646C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16646C2)");
    check_base_class_offset(lv, (S16646C3_nt*), 0, "S16646C2");
    check_field_offset(lv, s16646c2f0, ABISELECT(16,8), "S16646C2.s16646c2f0");
    test_class_info(&lv, &cd_S16646C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS16646C2(Test_S16646C2, "S16646C2", ABISELECT(40,28));

#else // __cplusplus

extern Class_Descriptor cd_S16646C3_nt;
static Base_Class bases_S16646C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16646C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S16646C2 = {  "S16646C2", // class name
  bases_S16646C2, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(40,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  S16646C1  {
  int s16646c1f0;
  ::S16646C2 s16646c1f1;
  void  mf16646c1(); // _ZN8S16646C19mf16646c1Ev
};
//SIG(1 S16646C1) C1{ m Fi FC2{ BC3{ m Fp Fi} FC4{ Fc[20]}}}


void  S16646C1 ::mf16646c1(){}

static void Test_S16646C1()
{
  {
    init_simple_test("S16646C1");
    S16646C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S16646C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16646C1)");
    check_field_offset(lv, s16646c1f0, 0, "S16646C1.s16646c1f0");
    check_field_offset(lv, s16646c1f1, ABISELECT(8,4), "S16646C1.s16646c1f1");
  }
}
static Arrange_To_Call_Me vS16646C1(Test_S16646C1, "S16646C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16962C1  {
  int s16962c1f0;
  void *s16962c1f1[2];
  ::S2173C14 s16962c1f2;
  void  mf16962c1(); // _ZN8S16962C19mf16962c1Ev
};
//SIG(1 S16962C1) C1{ m Fi Fp[2] FC2{ m Fp Fi[2] FC3{ m}}}


void  S16962C1 ::mf16962c1(){}

static void Test_S16962C1()
{
  {
    init_simple_test("S16962C1");
    S16962C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S16962C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16962C1)");
    check_field_offset(lv, s16962c1f0, 0, "S16962C1.s16962c1f0");
    check_field_offset(lv, s16962c1f1, ABISELECT(8,4), "S16962C1.s16962c1f1");
    check_field_offset(lv, s16962c1f2, ABISELECT(24,12), "S16962C1.s16962c1f2");
  }
}
static Arrange_To_Call_Me vS16962C1(Test_S16962C1, "S16962C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19701C2  {
  int s19701c2f0;
  void *s19701c2f1;
  long double s19701c2f2;
  void *s19701c2f3[7];
  void  mf19701c2(); // _ZN8S19701C29mf19701c2Ev
};
//SIG(-1 S19701C2) C1{ m Fi Fp FD Fp[7]}


void  S19701C2 ::mf19701c2(){}

static void Test_S19701C2()
{
  {
    init_simple_test("S19701C2");
    S19701C2 lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S19701C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19701C2)");
    check_field_offset(lv, s19701c2f0, 0, "S19701C2.s19701c2f0");
    check_field_offset(lv, s19701c2f1, ABISELECT(8,4), "S19701C2.s19701c2f1");
    check_field_offset(lv, s19701c2f2, ABISELECT(16,8), "S19701C2.s19701c2f2");
    check_field_offset(lv, s19701c2f3, ABISELECT(32,20), "S19701C2.s19701c2f3");
  }
}
static Arrange_To_Call_Me vS19701C2(Test_S19701C2, "S19701C2", ABISELECT(96,48));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S19701C2[];
VTBL_ENTRY *P__ZTI8S19701C2 = _ZTI8S19701C2; 
Class_Descriptor cd_S19701C2 = {  "S19701C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S19701C2),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  S19701C1  : virtual S19701C2 {
  ::S19701C2 s19701c1f0;
  ::S19701C2 s19701c1f1;
  virtual  ~S19701C1(); // _ZN8S19701C1D2Ev
  S19701C1(); // tgen
};
//SIG(1 S19701C1) C1{ VBC2{ m Fi Fp FD Fp[7]} vd FC2 FC2}


 S19701C1 ::~S19701C1(){ note_dtor("S19701C1", this);}
S19701C1 ::S19701C1(){ note_ctor("S19701C1", this);} // tgen

static void Test_S19701C1()
{
  extern Class_Descriptor cd_S19701C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,38)];
    init_test(&cd_S19701C1, buf);
    S19701C1 *dp, &lv = *(dp=new (buf) S19701C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,148), "sizeof(S19701C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19701C1)");
    check_base_class_offset(lv, (S19701C2*), ABISELECT(208,100), "S19701C1");
    check_field_offset(lv, s19701c1f0, ABISELECT(16,4), "S19701C1.s19701c1f0");
    check_field_offset(lv, s19701c1f1, ABISELECT(112,52), "S19701C1.s19701c1f1");
    test_class_info(&lv, &cd_S19701C1);
    dp->~S19701C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19701C1(Test_S19701C1, "S19701C1", ABISELECT(304,148));

#else // __cplusplus

extern void _ZN8S19701C1C1Ev();
extern void _ZN8S19701C1D2Ev();
Name_Map name_map_S19701C1[] = {
  NSPAIR(_ZN8S19701C1C1Ev),
  NSPAIR(_ZN8S19701C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19701C2;
extern VTBL_ENTRY _ZTI8S19701C2[];
static Base_Class bases_S19701C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19701C2,    ABISELECT(208,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19701C1[];
extern void _ZN8S19701C1D1Ev();
extern void _ZN8S19701C1D0Ev();
static  VTBL_ENTRY vtc_S19701C1[] = {
  ABISELECT(208,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19701C1[0]),
  (VTBL_ENTRY)&_ZN8S19701C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19701C1D0Ev,
};
extern VTBL_ENTRY _ZTV8S19701C1[];
static  VTT_ENTRY vtt_S19701C1[] = {
  {&(_ZTV8S19701C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19701C1[];
extern  VTBL_ENTRY _ZTV8S19701C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19701C1[];
Class_Descriptor cd_S19701C1 = {  "S19701C1", // class name
  bases_S19701C1, 1,
  &(vtc_S19701C1[0]), // expected_vtbl_contents
  &(vtt_S19701C1[0]), // expected_vtt_contents
  ABISELECT(304,148), // object size
  NSPAIRA(_ZTI8S19701C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19701C1),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19701C1),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  S17632C1  {
  void *s17632c1f0;
  ::S4473C12_nt s17632c1f1;
  __tsi64 s17632c1f2;
  int s17632c1f3[2];
  void  mf17632c1(); // _ZN8S17632C19mf17632c1Ev
};
//SIG(1 S17632C1) C1{ m Fp FC2{ m Fp Fi FC3{ m}} FL Fi[2]}


void  S17632C1 ::mf17632c1(){}

static void Test_S17632C1()
{
  {
    init_simple_test("S17632C1");
    S17632C1 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S17632C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17632C1)");
    check_field_offset(lv, s17632c1f0, 0, "S17632C1.s17632c1f0");
    check_field_offset(lv, s17632c1f1, ABISELECT(8,4), "S17632C1.s17632c1f1");
    check_field_offset(lv, s17632c1f2, ABISELECT(24,16), "S17632C1.s17632c1f2");
    check_field_offset(lv, s17632c1f3, ABISELECT(32,24), "S17632C1.s17632c1f3");
  }
}
static Arrange_To_Call_Me vS17632C1(Test_S17632C1, "S17632C1", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3053C3  {
  int s3053c3f0;
  virtual void  v2(); // _ZN7S3053C32v2Ev
  ~S3053C3(); // tgen
  S3053C3(); // tgen
};
//SIG(-1 S3053C3) C1{ v1 Fi}


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

static void Test_S3053C3()
{
  extern Class_Descriptor cd_S3053C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3053C3, buf);
    S3053C3 *dp, &lv = *(dp=new (buf) S3053C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3053C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3053C3)");
    check_field_offset(lv, s3053c3f0, ABISELECT(8,4), "S3053C3.s3053c3f0");
    test_class_info(&lv, &cd_S3053C3);
    dp->~S3053C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3053C3(Test_S3053C3, "S3053C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3053C3C1Ev();
extern void _ZN7S3053C3D1Ev();
Name_Map name_map_S3053C3[] = {
  NSPAIR(_ZN7S3053C3C1Ev),
  NSPAIR(_ZN7S3053C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3053C3[];
extern void _ZN7S3053C32v2Ev();
static  VTBL_ENTRY vtc_S3053C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3053C3[0]),
  (VTBL_ENTRY)&_ZN7S3053C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S3053C3[];
extern  VTBL_ENTRY _ZTV7S3053C3[];
Class_Descriptor cd_S3053C3 = {  "S3053C3", // class name
  0,0,//no base classes
  &(vtc_S3053C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3053C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3053C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3053C2  : S3053C3 {
  int s3053c2f0;
  ~S3053C2(); // tgen
  S3053C2(); // tgen
};
//SIG(-1 S3053C2) C1{ BC2{ v1 Fi} Fi}


S3053C2 ::~S3053C2(){ note_dtor("S3053C2", this);} // tgen
S3053C2 ::S3053C2(){ note_ctor("S3053C2", this);} // tgen

static void Test_S3053C2()
{
  extern Class_Descriptor cd_S3053C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3053C2, buf);
    S3053C2 *dp, &lv = *(dp=new (buf) S3053C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3053C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3053C2)");
    check_base_class_offset(lv, (S3053C3*), 0, "S3053C2");
    check_field_offset(lv, s3053c2f0, ABISELECT(12,8), "S3053C2.s3053c2f0");
    test_class_info(&lv, &cd_S3053C2);
    dp->~S3053C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3053C2(Test_S3053C2, "S3053C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S3053C2C1Ev();
extern void _ZN7S3053C2D1Ev();
Name_Map name_map_S3053C2[] = {
  NSPAIR(_ZN7S3053C2C1Ev),
  NSPAIR(_ZN7S3053C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3053C3;
extern VTBL_ENTRY _ZTI7S3053C3[];
extern  VTBL_ENTRY _ZTV7S3053C3[];
static Base_Class bases_S3053C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3053C3,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3053C2[];
extern void _ZN7S3053C32v2Ev();
static  VTBL_ENTRY vtc_S3053C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3053C2[0]),
  (VTBL_ENTRY)&_ZN7S3053C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S3053C2[];
extern  VTBL_ENTRY _ZTV7S3053C2[];
Class_Descriptor cd_S3053C2 = {  "S3053C2", // class name
  bases_S3053C2, 1,
  &(vtc_S3053C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S3053C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3053C2),3, //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  S3053C1  : S3053C2 , S1503C9_nt {
  int s3053c1f0;
  virtual void  v1(); // _ZN7S3053C12v1Ev
  ~S3053C1(); // tgen
  S3053C1(); // tgen
};
//SIG(1 S3053C1) C1{ BC2{ BC3{ v2 Fi} Fi} BC4{ m Fi} v1 Fi}


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

static void Test_S3053C1()
{
  extern Class_Descriptor cd_S3053C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S3053C1, buf);
    S3053C1 *dp, &lv = *(dp=new (buf) S3053C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S3053C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3053C1)");
    check_base_class_offset(lv, (S3053C3*)(S3053C2*), 0, "S3053C1");
    check_base_class_offset(lv, (S3053C2*), 0, "S3053C1");
    check_base_class_offset(lv, (S1503C9_nt*), ABISELECT(16,12), "S3053C1");
    check_field_offset(lv, s3053c1f0, ABISELECT(20,16), "S3053C1.s3053c1f0");
    test_class_info(&lv, &cd_S3053C1);
    dp->~S3053C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3053C1(Test_S3053C1, "S3053C1", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S3053C1C1Ev();
extern void _ZN7S3053C1D1Ev();
Name_Map name_map_S3053C1[] = {
  NSPAIR(_ZN7S3053C1C1Ev),
  NSPAIR(_ZN7S3053C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3053C3;
extern VTBL_ENTRY _ZTI7S3053C3[];
extern  VTBL_ENTRY _ZTV7S3053C3[];
extern Class_Descriptor cd_S3053C2;
extern VTBL_ENTRY _ZTI7S3053C2[];
extern  VTBL_ENTRY _ZTV7S3053C2[];
extern Class_Descriptor cd_S1503C9_nt;
extern VTBL_ENTRY _ZTI10S1503C9_nt[];
static Base_Class bases_S3053C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3053C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3053C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1503C9_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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3053C1[];
extern void _ZN7S3053C32v2Ev();
extern void _ZN7S3053C12v1Ev();
static  VTBL_ENTRY vtc_S3053C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3053C1[0]),
  (VTBL_ENTRY)&_ZN7S3053C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3053C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S3053C1[];
extern  VTBL_ENTRY _ZTV7S3053C1[];
Class_Descriptor cd_S3053C1 = {  "S3053C1", // class name
  bases_S3053C1, 3,
  &(vtc_S3053C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S3053C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3053C1),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  S8988C2_nt  {
  virtual  ~S8988C2_nt(); // _ZN10S8988C2_ntD1Ev
  virtual void  v2(); // _ZN10S8988C2_nt2v2Ev
  virtual void  v3(); // _ZN10S8988C2_nt2v3Ev
  virtual void  v4(); // _ZN10S8988C2_nt2v4Ev
  virtual void  v5(); // _ZN10S8988C2_nt2v5Ev
  S8988C2_nt(); // tgen
};
//SIG(-1 S8988C2_nt) C1{ vd v1 v2 v3 v4}


 S8988C2_nt ::~S8988C2_nt(){ note_dtor("S8988C2_nt", this);}
void  S8988C2_nt ::v2(){vfunc_called(this, "_ZN10S8988C2_nt2v2Ev");}
void  S8988C2_nt ::v3(){vfunc_called(this, "_ZN10S8988C2_nt2v3Ev");}
void  S8988C2_nt ::v4(){vfunc_called(this, "_ZN10S8988C2_nt2v4Ev");}
void  S8988C2_nt ::v5(){vfunc_called(this, "_ZN10S8988C2_nt2v5Ev");}
S8988C2_nt ::S8988C2_nt(){ note_ctor("S8988C2_nt", this);} // tgen

//skip512 S8988C2_nt

#else // __cplusplus

extern void _ZN10S8988C2_ntC1Ev();
extern void _ZN10S8988C2_ntD1Ev();
Name_Map name_map_S8988C2_nt[] = {
  NSPAIR(_ZN10S8988C2_ntC1Ev),
  NSPAIR(_ZN10S8988C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8988C2_nt[];
extern void _ZN10S8988C2_ntD1Ev();
extern void _ZN10S8988C2_ntD0Ev();
extern void _ZN10S8988C2_nt2v2Ev();
extern void _ZN10S8988C2_nt2v3Ev();
extern void _ZN10S8988C2_nt2v4Ev();
extern void _ZN10S8988C2_nt2v5Ev();
static  VTBL_ENTRY vtc_S8988C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8988C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8988C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8988C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8988C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S8988C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S8988C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S8988C2_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S8988C2_nt[];
VTBL_ENTRY *P__ZTI10S8988C2_nt = _ZTI10S8988C2_nt; 
extern  VTBL_ENTRY _ZTV10S8988C2_nt[];
Class_Descriptor cd_S8988C2_nt = {  "S8988C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8988C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S8988C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8988C2_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  S8988C1  : S8988C2_nt {
  void *s8988c1f0[2];
  int s8988c1f1;
  virtual void  v1(); // _ZN7S8988C12v1Ev
  ~S8988C1(); // tgen
  S8988C1(); // tgen
};
//SIG(1 S8988C1) C1{ BC2{ vd v2 v3 v4 v5} v1 Fp[2] Fi}


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

static void Test_S8988C1()
{
  extern Class_Descriptor cd_S8988C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S8988C1, buf);
    S8988C1 *dp, &lv = *(dp=new (buf) S8988C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S8988C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8988C1)");
    check_base_class_offset(lv, (S8988C2_nt*), 0, "S8988C1");
    check_field_offset(lv, s8988c1f0, ABISELECT(8,4), "S8988C1.s8988c1f0");
    check_field_offset(lv, s8988c1f1, ABISELECT(24,12), "S8988C1.s8988c1f1");
    test_class_info(&lv, &cd_S8988C1);
    dp->~S8988C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8988C1(Test_S8988C1, "S8988C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S8988C1C1Ev();
extern void _ZN7S8988C1D1Ev();
Name_Map name_map_S8988C1[] = {
  NSPAIR(_ZN7S8988C1C1Ev),
  NSPAIR(_ZN7S8988C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8988C2_nt;
extern VTBL_ENTRY _ZTI10S8988C2_nt[];
extern  VTBL_ENTRY _ZTV10S8988C2_nt[];
static Base_Class bases_S8988C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8988C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8988C1[];
extern void _ZN7S8988C1D1Ev();
extern void _ZN7S8988C1D0Ev();
extern void _ZN10S8988C2_nt2v2Ev();
extern void _ZN10S8988C2_nt2v3Ev();
extern void _ZN10S8988C2_nt2v4Ev();
extern void _ZN10S8988C2_nt2v5Ev();
extern void _ZN7S8988C12v1Ev();
static  VTBL_ENTRY vtc_S8988C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8988C1[0]),
  (VTBL_ENTRY)&_ZN7S8988C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8988C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8988C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S8988C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S8988C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S8988C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S8988C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8988C1[];
extern  VTBL_ENTRY _ZTV7S8988C1[];
Class_Descriptor cd_S8988C1 = {  "S8988C1", // class name
  bases_S8988C1, 1,
  &(vtc_S8988C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S8988C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8988C1),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  S10660C1  {
  char s10660c1f0[2];
  ::S4473C12_nt s10660c1f1;
  __tsi64 s10660c1f2;
  int s10660c1f3;
};
//SIG(1 S10660C1) C1{ Fc[2] FC2{ m Fp Fi FC3{ m}} FL Fi}



static void Test_S10660C1()
{
  {
    init_simple_test("S10660C1");
    S10660C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S10660C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10660C1)");
    check_field_offset(lv, s10660c1f0, 0, "S10660C1.s10660c1f0");
    check_field_offset(lv, s10660c1f1, ABISELECT(8,4), "S10660C1.s10660c1f1");
    check_field_offset(lv, s10660c1f2, ABISELECT(24,16), "S10660C1.s10660c1f2");
    check_field_offset(lv, s10660c1f3, ABISELECT(32,24), "S10660C1.s10660c1f3");
  }
}
static Arrange_To_Call_Me vS10660C1(Test_S10660C1, "S10660C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16298C1  {
  ::S4473C12_nt s16298c1f0;
  void *s16298c1f1[3];
  char s16298c1f2;
  void  mf16298c1(); // _ZN8S16298C19mf16298c1Ev
};
//SIG(1 S16298C1) C1{ m FC2{ m Fp Fi FC3{ m}} Fp[3] Fc}


void  S16298C1 ::mf16298c1(){}

static void Test_S16298C1()
{
  {
    init_simple_test("S16298C1");
    S16298C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S16298C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16298C1)");
    check_field_offset(lv, s16298c1f0, 0, "S16298C1.s16298c1f0");
    check_field_offset(lv, s16298c1f1, ABISELECT(16,12), "S16298C1.s16298c1f1");
    check_field_offset(lv, s16298c1f2, ABISELECT(40,24), "S16298C1.s16298c1f2");
  }
}
static Arrange_To_Call_Me vS16298C1(Test_S16298C1, "S16298C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17635C1  {
  void *s17635c1f0;
  ::S4473C12_nt s17635c1f1;
  void *s17635c1f2[7];
  void  mf17635c1(); // _ZN8S17635C19mf17635c1Ev
};
//SIG(1 S17635C1) C1{ m Fp FC2{ m Fp Fi FC3{ m}} Fp[7]}


void  S17635C1 ::mf17635c1(){}

static void Test_S17635C1()
{
  {
    init_simple_test("S17635C1");
    S17635C1 lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S17635C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17635C1)");
    check_field_offset(lv, s17635c1f0, 0, "S17635C1.s17635c1f0");
    check_field_offset(lv, s17635c1f1, ABISELECT(8,4), "S17635C1.s17635c1f1");
    check_field_offset(lv, s17635c1f2, ABISELECT(24,16), "S17635C1.s17635c1f2");
  }
}
static Arrange_To_Call_Me vS17635C1(Test_S17635C1, "S17635C1", ABISELECT(80,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16149C1  {
  ::S5306C7_nt s16149c1f0;
  void *s16149c1f1[2];
  short s16149c1f2;
  char s16149c1f3[2];
  void  mf16149c1(); // _ZN8S16149C19mf16149c1Ev
};
//SIG(1 S16149C1) C1{ m FC2{ m FL[4]} Fp[2] Fs Fc[2]}


void  S16149C1 ::mf16149c1(){}

static void Test_S16149C1()
{
  {
    init_simple_test("S16149C1");
    S16149C1 lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S16149C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16149C1)");
    check_field_offset(lv, s16149c1f0, 0, "S16149C1.s16149c1f0");
    check_field_offset(lv, s16149c1f1, 32, "S16149C1.s16149c1f1");
    check_field_offset(lv, s16149c1f2, ABISELECT(48,40), "S16149C1.s16149c1f2");
    check_field_offset(lv, s16149c1f3, ABISELECT(50,42), "S16149C1.s16149c1f3");
  }
}
static Arrange_To_Call_Me vS16149C1(Test_S16149C1, "S16149C1", ABISELECT(56,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3131C3  {
  int s3131c3f0;
  virtual void  v3(); // _ZN7S3131C32v3Ev
  ~S3131C3(); // tgen
  S3131C3(); // tgen
};
//SIG(-1 S3131C3) C1{ v1 Fi}


void  S3131C3 ::v3(){vfunc_called(this, "_ZN7S3131C32v3Ev");}
S3131C3 ::~S3131C3(){ note_dtor("S3131C3", this);} // tgen
S3131C3 ::S3131C3(){ note_ctor("S3131C3", this);} // tgen

static void Test_S3131C3()
{
  extern Class_Descriptor cd_S3131C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3131C3, buf);
    S3131C3 *dp, &lv = *(dp=new (buf) S3131C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3131C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3131C3)");
    check_field_offset(lv, s3131c3f0, ABISELECT(8,4), "S3131C3.s3131c3f0");
    test_class_info(&lv, &cd_S3131C3);
    dp->~S3131C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3131C3(Test_S3131C3, "S3131C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3131C3C1Ev();
extern void _ZN7S3131C3D1Ev();
Name_Map name_map_S3131C3[] = {
  NSPAIR(_ZN7S3131C3C1Ev),
  NSPAIR(_ZN7S3131C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3131C3[];
extern void _ZN7S3131C32v3Ev();
static  VTBL_ENTRY vtc_S3131C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3131C3[0]),
  (VTBL_ENTRY)&_ZN7S3131C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S3131C3[];
extern  VTBL_ENTRY _ZTV7S3131C3[];
Class_Descriptor cd_S3131C3 = {  "S3131C3", // class name
  0,0,//no base classes
  &(vtc_S3131C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3131C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3131C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3131C2  : S3131C3 {
  int s3131c2f0;
  virtual void  v4(); // _ZN7S3131C22v4Ev
  ~S3131C2(); // tgen
  S3131C2(); // tgen
};
//SIG(-1 S3131C2) C1{ BC2{ v2 Fi} v1 Fi}


void  S3131C2 ::v4(){vfunc_called(this, "_ZN7S3131C22v4Ev");}
S3131C2 ::~S3131C2(){ note_dtor("S3131C2", this);} // tgen
S3131C2 ::S3131C2(){ note_ctor("S3131C2", this);} // tgen

static void Test_S3131C2()
{
  extern Class_Descriptor cd_S3131C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3131C2, buf);
    S3131C2 *dp, &lv = *(dp=new (buf) S3131C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3131C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3131C2)");
    check_base_class_offset(lv, (S3131C3*), 0, "S3131C2");
    check_field_offset(lv, s3131c2f0, ABISELECT(12,8), "S3131C2.s3131c2f0");
    test_class_info(&lv, &cd_S3131C2);
    dp->~S3131C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3131C2(Test_S3131C2, "S3131C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S3131C2C1Ev();
extern void _ZN7S3131C2D1Ev();
Name_Map name_map_S3131C2[] = {
  NSPAIR(_ZN7S3131C2C1Ev),
  NSPAIR(_ZN7S3131C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3131C3;
extern VTBL_ENTRY _ZTI7S3131C3[];
extern  VTBL_ENTRY _ZTV7S3131C3[];
static Base_Class bases_S3131C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3131C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3131C2[];
extern void _ZN7S3131C32v3Ev();
extern void _ZN7S3131C22v4Ev();
static  VTBL_ENTRY vtc_S3131C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3131C2[0]),
  (VTBL_ENTRY)&_ZN7S3131C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3131C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S3131C2[];
extern  VTBL_ENTRY _ZTV7S3131C2[];
Class_Descriptor cd_S3131C2 = {  "S3131C2", // class name
  bases_S3131C2, 1,
  &(vtc_S3131C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S3131C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3131C2),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  S3131C1  : S3131C2 {
  int s3131c1f0;
  virtual void  v1(); // _ZN7S3131C12v1Ev
  virtual void  v2(); // _ZN7S3131C12v2Ev
  ~S3131C1(); // tgen
  S3131C1(); // tgen
};
//SIG(1 S3131C1) C1{ BC2{ BC3{ v3 Fi} v4 Fi} v1 v2 Fi}


void  S3131C1 ::v1(){vfunc_called(this, "_ZN7S3131C12v1Ev");}
void  S3131C1 ::v2(){vfunc_called(this, "_ZN7S3131C12v2Ev");}
S3131C1 ::~S3131C1(){ note_dtor("S3131C1", this);} // tgen
S3131C1 ::S3131C1(){ note_ctor("S3131C1", this);} // tgen

static void Test_S3131C1()
{
  extern Class_Descriptor cd_S3131C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3131C1, buf);
    S3131C1 *dp, &lv = *(dp=new (buf) S3131C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3131C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3131C1)");
    check_base_class_offset(lv, (S3131C3*)(S3131C2*), 0, "S3131C1");
    check_base_class_offset(lv, (S3131C2*), 0, "S3131C1");
    check_field_offset(lv, s3131c1f0, ABISELECT(16,12), "S3131C1.s3131c1f0");
    test_class_info(&lv, &cd_S3131C1);
    dp->~S3131C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3131C1(Test_S3131C1, "S3131C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3131C1C1Ev();
extern void _ZN7S3131C1D1Ev();
Name_Map name_map_S3131C1[] = {
  NSPAIR(_ZN7S3131C1C1Ev),
  NSPAIR(_ZN7S3131C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3131C3;
extern VTBL_ENTRY _ZTI7S3131C3[];
extern  VTBL_ENTRY _ZTV7S3131C3[];
extern Class_Descriptor cd_S3131C2;
extern VTBL_ENTRY _ZTI7S3131C2[];
extern  VTBL_ENTRY _ZTV7S3131C2[];
static Base_Class bases_S3131C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3131C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3131C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3131C1[];
extern void _ZN7S3131C32v3Ev();
extern void _ZN7S3131C22v4Ev();
extern void _ZN7S3131C12v1Ev();
extern void _ZN7S3131C12v2Ev();
static  VTBL_ENTRY vtc_S3131C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3131C1[0]),
  (VTBL_ENTRY)&_ZN7S3131C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3131C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3131C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3131C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S3131C1[];
extern  VTBL_ENTRY _ZTV7S3131C1[];
Class_Descriptor cd_S3131C1 = {  "S3131C1", // class name
  bases_S3131C1, 2,
  &(vtc_S3131C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3131C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3131C1),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  S8225C2_nt  {
  void *s8225c2f0;
  void  mf8225c2(); // _ZN10S8225C2_nt8mf8225c2Ev
  virtual  ~S8225C2_nt(); // _ZN10S8225C2_ntD1Ev
  S8225C2_nt(); // tgen
};
//SIG(-1 S8225C2_nt) C1{ vd m Fp}


void  S8225C2_nt ::mf8225c2(){}
 S8225C2_nt ::~S8225C2_nt(){ note_dtor("S8225C2_nt", this);}
S8225C2_nt ::S8225C2_nt(){ note_ctor("S8225C2_nt", this);} // tgen

//skip512 S8225C2_nt

#else // __cplusplus

extern void _ZN10S8225C2_ntC1Ev();
extern void _ZN10S8225C2_ntD1Ev();
Name_Map name_map_S8225C2_nt[] = {
  NSPAIR(_ZN10S8225C2_ntC1Ev),
  NSPAIR(_ZN10S8225C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8225C2_nt[];
extern void _ZN10S8225C2_ntD1Ev();
extern void _ZN10S8225C2_ntD0Ev();
static  VTBL_ENTRY vtc_S8225C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8225C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8225C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8225C2_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S8225C2_nt[];
VTBL_ENTRY *P__ZTI10S8225C2_nt = _ZTI10S8225C2_nt; 
extern  VTBL_ENTRY _ZTV10S8225C2_nt[];
Class_Descriptor cd_S8225C2_nt = {  "S8225C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8225C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S8225C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8225C2_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  S8225C1  : S8225C2_nt {
  void *s8225c1f0;
  int s8225c1f1;
  void *s8225c1f2[20];
  virtual  ~S8225C1(); // _ZN7S8225C1D1Ev
  S8225C1(); // tgen
};
//SIG(1 S8225C1) C1{ BC2{ vd m Fp} vd Fp Fi Fp[20]}


 S8225C1 ::~S8225C1(){ note_dtor("S8225C1", this);}
S8225C1 ::S8225C1(){ note_ctor("S8225C1", this);} // tgen

static void Test_S8225C1()
{
  extern Class_Descriptor cd_S8225C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[25];
    init_test(&cd_S8225C1, buf);
    S8225C1 *dp, &lv = *(dp=new (buf) S8225C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,96), "sizeof(S8225C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8225C1)");
    check_base_class_offset(lv, (S8225C2_nt*), 0, "S8225C1");
    check_field_offset(lv, s8225c1f0, ABISELECT(16,8), "S8225C1.s8225c1f0");
    check_field_offset(lv, s8225c1f1, ABISELECT(24,12), "S8225C1.s8225c1f1");
    check_field_offset(lv, s8225c1f2, ABISELECT(32,16), "S8225C1.s8225c1f2");
    test_class_info(&lv, &cd_S8225C1);
    dp->~S8225C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8225C1(Test_S8225C1, "S8225C1", ABISELECT(192,96));

#else // __cplusplus

extern void _ZN7S8225C1C1Ev();
extern void _ZN7S8225C1D1Ev();
Name_Map name_map_S8225C1[] = {
  NSPAIR(_ZN7S8225C1C1Ev),
  NSPAIR(_ZN7S8225C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8225C2_nt;
extern VTBL_ENTRY _ZTI10S8225C2_nt[];
extern  VTBL_ENTRY _ZTV10S8225C2_nt[];
static Base_Class bases_S8225C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8225C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8225C1[];
extern void _ZN7S8225C1D1Ev();
extern void _ZN7S8225C1D0Ev();
static  VTBL_ENTRY vtc_S8225C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8225C1[0]),
  (VTBL_ENTRY)&_ZN7S8225C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8225C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8225C1[];
extern  VTBL_ENTRY _ZTV7S8225C1[];
Class_Descriptor cd_S8225C1 = {  "S8225C1", // class name
  bases_S8225C1, 1,
  &(vtc_S8225C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,96), // object size
  NSPAIRA(_ZTI7S8225C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8225C1),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  S6798C2  {
  int s6798c2f0;
  virtual void  v4(); // _ZN7S6798C22v4Ev
  ~S6798C2(); // tgen
  S6798C2(); // tgen
};
//SIG(-1 S6798C2) C1{ v1 Fi}


void  S6798C2 ::v4(){vfunc_called(this, "_ZN7S6798C22v4Ev");}
S6798C2 ::~S6798C2(){ note_dtor("S6798C2", this);} // tgen
S6798C2 ::S6798C2(){ note_ctor("S6798C2", this);} // tgen

static void Test_S6798C2()
{
  extern Class_Descriptor cd_S6798C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6798C2, buf);
    S6798C2 *dp, &lv = *(dp=new (buf) S6798C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6798C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6798C2)");
    check_field_offset(lv, s6798c2f0, ABISELECT(8,4), "S6798C2.s6798c2f0");
    test_class_info(&lv, &cd_S6798C2);
    dp->~S6798C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6798C2(Test_S6798C2, "S6798C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6798C2C1Ev();
extern void _ZN7S6798C2D1Ev();
Name_Map name_map_S6798C2[] = {
  NSPAIR(_ZN7S6798C2C1Ev),
  NSPAIR(_ZN7S6798C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6798C2[];
extern void _ZN7S6798C22v4Ev();
static  VTBL_ENTRY vtc_S6798C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6798C2[0]),
  (VTBL_ENTRY)&_ZN7S6798C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S6798C2[];
extern  VTBL_ENTRY _ZTV7S6798C2[];
Class_Descriptor cd_S6798C2 = {  "S6798C2", // class name
  0,0,//no base classes
  &(vtc_S6798C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6798C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6798C2),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6798C1  : S6798C2 {
  void *s6798c1f0;
  char s6798c1f1;
  void *s6798c1f2;
  virtual void  v1(); // _ZN7S6798C12v1Ev
  virtual void  v2(); // _ZN7S6798C12v2Ev
  virtual void  v3(); // _ZN7S6798C12v3Ev
  ~S6798C1(); // tgen
  S6798C1(); // tgen
};
//SIG(1 S6798C1) C1{ BC2{ v4 Fi} v1 v2 v3 Fp Fc Fp}


void  S6798C1 ::v1(){vfunc_called(this, "_ZN7S6798C12v1Ev");}
void  S6798C1 ::v2(){vfunc_called(this, "_ZN7S6798C12v2Ev");}
void  S6798C1 ::v3(){vfunc_called(this, "_ZN7S6798C12v3Ev");}
S6798C1 ::~S6798C1(){ note_dtor("S6798C1", this);} // tgen
S6798C1 ::S6798C1(){ note_ctor("S6798C1", this);} // tgen

static void Test_S6798C1()
{
  extern Class_Descriptor cd_S6798C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S6798C1, buf);
    S6798C1 *dp, &lv = *(dp=new (buf) S6798C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S6798C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6798C1)");
    check_base_class_offset(lv, (S6798C2*), 0, "S6798C1");
    check_field_offset(lv, s6798c1f0, ABISELECT(16,8), "S6798C1.s6798c1f0");
    check_field_offset(lv, s6798c1f1, ABISELECT(24,12), "S6798C1.s6798c1f1");
    check_field_offset(lv, s6798c1f2, ABISELECT(32,16), "S6798C1.s6798c1f2");
    test_class_info(&lv, &cd_S6798C1);
    dp->~S6798C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6798C1(Test_S6798C1, "S6798C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S6798C1C1Ev();
extern void _ZN7S6798C1D1Ev();
Name_Map name_map_S6798C1[] = {
  NSPAIR(_ZN7S6798C1C1Ev),
  NSPAIR(_ZN7S6798C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6798C2;
extern VTBL_ENTRY _ZTI7S6798C2[];
extern  VTBL_ENTRY _ZTV7S6798C2[];
static Base_Class bases_S6798C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6798C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6798C1[];
extern void _ZN7S6798C22v4Ev();
extern void _ZN7S6798C12v1Ev();
extern void _ZN7S6798C12v2Ev();
extern void _ZN7S6798C12v3Ev();
static  VTBL_ENTRY vtc_S6798C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6798C1[0]),
  (VTBL_ENTRY)&_ZN7S6798C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6798C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6798C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6798C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S6798C1[];
extern  VTBL_ENTRY _ZTV7S6798C1[];
Class_Descriptor cd_S6798C1 = {  "S6798C1", // class name
  bases_S6798C1, 1,
  &(vtc_S6798C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S6798C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6798C1),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  S16806C1  {
  int s16806c1f0;
  ::S4473C12_nt s16806c1f1;
  __tsi64 s16806c1f2;
  void  mf16806c1(); // _ZN8S16806C19mf16806c1Ev
};
//SIG(1 S16806C1) C1{ m Fi FC2{ m Fp Fi FC3{ m}} FL}


void  S16806C1 ::mf16806c1(){}

static void Test_S16806C1()
{
  {
    init_simple_test("S16806C1");
    S16806C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S16806C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16806C1)");
    check_field_offset(lv, s16806c1f0, 0, "S16806C1.s16806c1f0");
    check_field_offset(lv, s16806c1f1, ABISELECT(8,4), "S16806C1.s16806c1f1");
    check_field_offset(lv, s16806c1f2, ABISELECT(24,16), "S16806C1.s16806c1f2");
  }
}
static Arrange_To_Call_Me vS16806C1(Test_S16806C1, "S16806C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12521C2_nt  {
  void *s12521c2f0[2];
};
//SIG(-1 S12521C2_nt) C1{ Fp[2]}



//skip512 S12521C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12521C3_nt  {
  int s12521c3f0;
};
//SIG(-1 S12521C3_nt) C1{ Fi}



//skip512 S12521C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12521C1  {
  int s12521c1f0;
  ::S12521C2_nt s12521c1f1;
  int s12521c1f2[2];
  ::S12521C3_nt s12521c1f3;
};
//SIG(1 S12521C1) C1{ Fi FC2{ Fp[2]} Fi[2] FC3{ Fi}}



static void Test_S12521C1()
{
  {
    init_simple_test("S12521C1");
    S12521C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S12521C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12521C1)");
    check_field_offset(lv, s12521c1f0, 0, "S12521C1.s12521c1f0");
    check_field_offset(lv, s12521c1f1, ABISELECT(8,4), "S12521C1.s12521c1f1");
    check_field_offset(lv, s12521c1f2, ABISELECT(24,12), "S12521C1.s12521c1f2");
    check_field_offset(lv, s12521c1f3, ABISELECT(32,20), "S12521C1.s12521c1f3");
  }
}
static Arrange_To_Call_Me vS12521C1(Test_S12521C1, "S12521C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13755C1  {
  __tsi64 s13755c1f0;
  int s13755c1f1;
  __tsi64 s13755c1f2;
  int s13755c1f3;
  __tsi64 s13755c1f4;
  int s13755c1f5[4];
  void *s13755c1f6;
  int s13755c1f7;
};
//SIG(1 S13755C1) C1{ FL Fi FL Fi FL Fi[4] Fp Fi}



static void Test_S13755C1()
{
  {
    init_simple_test("S13755C1");
    S13755C1 lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S13755C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13755C1)");
    check_field_offset(lv, s13755c1f0, 0, "S13755C1.s13755c1f0");
    check_field_offset(lv, s13755c1f1, 8, "S13755C1.s13755c1f1");
    check_field_offset(lv, s13755c1f2, ABISELECT(16,12), "S13755C1.s13755c1f2");
    check_field_offset(lv, s13755c1f3, ABISELECT(24,20), "S13755C1.s13755c1f3");
    check_field_offset(lv, s13755c1f4, ABISELECT(32,24), "S13755C1.s13755c1f4");
    check_field_offset(lv, s13755c1f5, ABISELECT(40,32), "S13755C1.s13755c1f5");
    check_field_offset(lv, s13755c1f6, ABISELECT(56,48), "S13755C1.s13755c1f6");
    check_field_offset(lv, s13755c1f7, ABISELECT(64,52), "S13755C1.s13755c1f7");
  }
}
static Arrange_To_Call_Me vS13755C1(Test_S13755C1, "S13755C1", ABISELECT(72,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20331C2  {
  virtual void  v6(); // _ZN8S20331C22v6Ev
  ~S20331C2(); // tgen
  S20331C2(); // tgen
};
//SIG(-1 S20331C2) C1{ v1}


void  S20331C2 ::v6(){vfunc_called(this, "_ZN8S20331C22v6Ev");}
S20331C2 ::~S20331C2(){ note_dtor("S20331C2", this);} // tgen
S20331C2 ::S20331C2(){ note_ctor("S20331C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20331C2C1Ev();
extern void _ZN8S20331C2D1Ev();
Name_Map name_map_S20331C2[] = {
  NSPAIR(_ZN8S20331C2C1Ev),
  NSPAIR(_ZN8S20331C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20331C2[];
extern void _ZN8S20331C22v6Ev();
static  VTBL_ENTRY vtc_S20331C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20331C2[0]),
  (VTBL_ENTRY)&_ZN8S20331C22v6Ev,
};
extern VTBL_ENTRY _ZTI8S20331C2[];
extern  VTBL_ENTRY _ZTV8S20331C2[];
Class_Descriptor cd_S20331C2 = {  "S20331C2", // class name
  0,0,//no base classes
  &(vtc_S20331C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20331C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20331C2),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20331C1  : virtual S20331C2 {
  void *s20331c1f0;
  virtual void  v1(); // _ZN8S20331C12v1Ev
  virtual void  v2(); // _ZN8S20331C12v2Ev
  virtual void  v3(); // _ZN8S20331C12v3Ev
  virtual void  v4(); // _ZN8S20331C12v4Ev
  virtual void  v5(); // _ZN8S20331C12v5Ev
  ~S20331C1(); // tgen
  S20331C1(); // tgen
};
//SIG(1 S20331C1) C1{ VBC2{ v6} v1 v2 v3 v4 v5 Fp}


void  S20331C1 ::v1(){vfunc_called(this, "_ZN8S20331C12v1Ev");}
void  S20331C1 ::v2(){vfunc_called(this, "_ZN8S20331C12v2Ev");}
void  S20331C1 ::v3(){vfunc_called(this, "_ZN8S20331C12v3Ev");}
void  S20331C1 ::v4(){vfunc_called(this, "_ZN8S20331C12v4Ev");}
void  S20331C1 ::v5(){vfunc_called(this, "_ZN8S20331C12v5Ev");}
S20331C1 ::~S20331C1(){ note_dtor("S20331C1", this);} // tgen
S20331C1 ::S20331C1(){ note_ctor("S20331C1", this);} // tgen

static void Test_S20331C1()
{
  extern Class_Descriptor cd_S20331C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20331C1, buf);
    S20331C1 *dp, &lv = *(dp=new (buf) S20331C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20331C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20331C1)");
    check_base_class_offset(lv, (S20331C2*), 0, "S20331C1");
    check_field_offset(lv, s20331c1f0, ABISELECT(8,4), "S20331C1.s20331c1f0");
    test_class_info(&lv, &cd_S20331C1);
    dp->~S20331C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20331C1(Test_S20331C1, "S20331C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20331C1C1Ev();
extern void _ZN8S20331C1D1Ev();
Name_Map name_map_S20331C1[] = {
  NSPAIR(_ZN8S20331C1C1Ev),
  NSPAIR(_ZN8S20331C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20331C2;
extern VTBL_ENTRY _ZTI8S20331C2[];
extern  VTBL_ENTRY _ZTV8S20331C2[];
static Base_Class bases_S20331C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20331C2,    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 _ZTI8S20331C1[];
extern void _ZN8S20331C22v6Ev();
extern void _ZN8S20331C12v1Ev();
extern void _ZN8S20331C12v2Ev();
extern void _ZN8S20331C12v3Ev();
extern void _ZN8S20331C12v4Ev();
extern void _ZN8S20331C12v5Ev();
static  VTBL_ENTRY vtc_S20331C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20331C1[0]),
  (VTBL_ENTRY)&_ZN8S20331C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20331C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20331C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20331C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20331C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20331C12v5Ev,
};
extern VTBL_ENTRY _ZTV8S20331C1[];
static  VTT_ENTRY vtt_S20331C1[] = {
  {&(_ZTV8S20331C1[4]),  4,10},
  {&(_ZTV8S20331C1[4]),  4,10},
};
extern VTBL_ENTRY _ZTI8S20331C1[];
extern  VTBL_ENTRY _ZTV8S20331C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20331C1[];
Class_Descriptor cd_S20331C1 = {  "S20331C1", // class name
  bases_S20331C1, 1,
  &(vtc_S20331C1[0]), // expected_vtbl_contents
  &(vtt_S20331C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20331C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20331C1),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20331C1),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  S3056C3  {
  int s3056c3f0;
  virtual void  v2(); // _ZN7S3056C32v2Ev
  ~S3056C3(); // tgen
  S3056C3(); // tgen
};
//SIG(-1 S3056C3) C1{ v1 Fi}


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

static void Test_S3056C3()
{
  extern Class_Descriptor cd_S3056C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3056C3, buf);
    S3056C3 *dp, &lv = *(dp=new (buf) S3056C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3056C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3056C3)");
    check_field_offset(lv, s3056c3f0, ABISELECT(8,4), "S3056C3.s3056c3f0");
    test_class_info(&lv, &cd_S3056C3);
    dp->~S3056C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3056C3(Test_S3056C3, "S3056C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3056C3C1Ev();
extern void _ZN7S3056C3D1Ev();
Name_Map name_map_S3056C3[] = {
  NSPAIR(_ZN7S3056C3C1Ev),
  NSPAIR(_ZN7S3056C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3056C3[];
extern void _ZN7S3056C32v2Ev();
static  VTBL_ENTRY vtc_S3056C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3056C3[0]),
  (VTBL_ENTRY)&_ZN7S3056C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S3056C3[];
extern  VTBL_ENTRY _ZTV7S3056C3[];
Class_Descriptor cd_S3056C3 = {  "S3056C3", // class name
  0,0,//no base classes
  &(vtc_S3056C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3056C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3056C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3056C2  : S3056C3 {
  int s3056c2f0;
  virtual void  v3(); // _ZN7S3056C22v3Ev
  ~S3056C2(); // tgen
  S3056C2(); // tgen
};
//SIG(-1 S3056C2) C1{ BC2{ v2 Fi} v1 Fi}


void  S3056C2 ::v3(){vfunc_called(this, "_ZN7S3056C22v3Ev");}
S3056C2 ::~S3056C2(){ note_dtor("S3056C2", this);} // tgen
S3056C2 ::S3056C2(){ note_ctor("S3056C2", this);} // tgen

static void Test_S3056C2()
{
  extern Class_Descriptor cd_S3056C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3056C2, buf);
    S3056C2 *dp, &lv = *(dp=new (buf) S3056C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3056C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3056C2)");
    check_base_class_offset(lv, (S3056C3*), 0, "S3056C2");
    check_field_offset(lv, s3056c2f0, ABISELECT(12,8), "S3056C2.s3056c2f0");
    test_class_info(&lv, &cd_S3056C2);
    dp->~S3056C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3056C2(Test_S3056C2, "S3056C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S3056C2C1Ev();
extern void _ZN7S3056C2D1Ev();
Name_Map name_map_S3056C2[] = {
  NSPAIR(_ZN7S3056C2C1Ev),
  NSPAIR(_ZN7S3056C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3056C3;
extern VTBL_ENTRY _ZTI7S3056C3[];
extern  VTBL_ENTRY _ZTV7S3056C3[];
static Base_Class bases_S3056C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3056C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3056C2[];
extern void _ZN7S3056C32v2Ev();
extern void _ZN7S3056C22v3Ev();
static  VTBL_ENTRY vtc_S3056C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3056C2[0]),
  (VTBL_ENTRY)&_ZN7S3056C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3056C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S3056C2[];
extern  VTBL_ENTRY _ZTV7S3056C2[];
Class_Descriptor cd_S3056C2 = {  "S3056C2", // class name
  bases_S3056C2, 1,
  &(vtc_S3056C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S3056C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3056C2),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  S3056C1  : S3056C2 {
  int s3056c1f0;
  virtual void  v1(); // _ZN7S3056C12v1Ev
  ~S3056C1(); // tgen
  S3056C1(); // tgen
};
//SIG(1 S3056C1) C1{ BC2{ BC3{ v2 Fi} v3 Fi} v1 Fi}


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

static void Test_S3056C1()
{
  extern Class_Descriptor cd_S3056C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3056C1, buf);
    S3056C1 *dp, &lv = *(dp=new (buf) S3056C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3056C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3056C1)");
    check_base_class_offset(lv, (S3056C3*)(S3056C2*), 0, "S3056C1");
    check_base_class_offset(lv, (S3056C2*), 0, "S3056C1");
    check_field_offset(lv, s3056c1f0, ABISELECT(16,12), "S3056C1.s3056c1f0");
    test_class_info(&lv, &cd_S3056C1);
    dp->~S3056C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3056C1(Test_S3056C1, "S3056C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3056C1C1Ev();
extern void _ZN7S3056C1D1Ev();
Name_Map name_map_S3056C1[] = {
  NSPAIR(_ZN7S3056C1C1Ev),
  NSPAIR(_ZN7S3056C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3056C3;
extern VTBL_ENTRY _ZTI7S3056C3[];
extern  VTBL_ENTRY _ZTV7S3056C3[];
extern Class_Descriptor cd_S3056C2;
extern VTBL_ENTRY _ZTI7S3056C2[];
extern  VTBL_ENTRY _ZTV7S3056C2[];
static Base_Class bases_S3056C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3056C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3056C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3056C1[];
extern void _ZN7S3056C32v2Ev();
extern void _ZN7S3056C22v3Ev();
extern void _ZN7S3056C12v1Ev();
static  VTBL_ENTRY vtc_S3056C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3056C1[0]),
  (VTBL_ENTRY)&_ZN7S3056C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3056C22v3Ev,
  (VTBL_ENTRY)&_ZN7S3056C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S3056C1[];
extern  VTBL_ENTRY _ZTV7S3056C1[];
Class_Descriptor cd_S3056C1 = {  "S3056C1", // class name
  bases_S3056C1, 2,
  &(vtc_S3056C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3056C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3056C1),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  S16036C1  {
  ::S1503C14_nt s16036c1f0;
  ::S1503C14_nt s16036c1f1;
  ::S2811C15_nt s16036c1f2;
  void  mf16036c1(); // _ZN8S16036C19mf16036c1Ev
};
//SIG(1 S16036C1) C1{ m FC2{ m Fi[3]} FC2 FC3{ m}}


void  S16036C1 ::mf16036c1(){}

static void Test_S16036C1()
{
  {
    init_simple_test("S16036C1");
    S16036C1 lv;
    check2(sizeof(lv), 28, "sizeof(S16036C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16036C1)");
    check_field_offset(lv, s16036c1f0, 0, "S16036C1.s16036c1f0");
    check_field_offset(lv, s16036c1f1, 12, "S16036C1.s16036c1f1");
    check_field_offset(lv, s16036c1f2, 24, "S16036C1.s16036c1f2");
  }
}
static Arrange_To_Call_Me vS16036C1(Test_S16036C1, "S16036C1", 28);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12780C1  {
  int s12780c1f0;
  void *s12780c1f1[3];
  int s12780c1f2[4];
  void *s12780c1f3[2];
  int s12780c1f4;
};
//SIG(1 S12780C1) C1{ Fi Fp[3] Fi[4] Fp[2] Fi}



static void Test_S12780C1()
{
  {
    init_simple_test("S12780C1");
    S12780C1 lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S12780C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12780C1)");
    check_field_offset(lv, s12780c1f0, 0, "S12780C1.s12780c1f0");
    check_field_offset(lv, s12780c1f1, ABISELECT(8,4), "S12780C1.s12780c1f1");
    check_field_offset(lv, s12780c1f2, ABISELECT(32,16), "S12780C1.s12780c1f2");
    check_field_offset(lv, s12780c1f3, ABISELECT(48,32), "S12780C1.s12780c1f3");
    check_field_offset(lv, s12780c1f4, ABISELECT(64,40), "S12780C1.s12780c1f4");
  }
}
static Arrange_To_Call_Me vS12780C1(Test_S12780C1, "S12780C1", ABISELECT(72,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14318C1  {
  void *s14318c1f0;
  int s14318c1f1[3];
  char s14318c1f2;
  short s14318c1f3[2];
  char s14318c1f4;
  void *s14318c1f5;
};
//SIG(1 S14318C1) C1{ Fp Fi[3] Fc Fs[2] Fc Fp}



static void Test_S14318C1()
{
  {
    init_simple_test("S14318C1");
    S14318C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S14318C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14318C1)");
    check_field_offset(lv, s14318c1f0, 0, "S14318C1.s14318c1f0");
    check_field_offset(lv, s14318c1f1, ABISELECT(8,4), "S14318C1.s14318c1f1");
    check_field_offset(lv, s14318c1f2, ABISELECT(20,16), "S14318C1.s14318c1f2");
    check_field_offset(lv, s14318c1f3, ABISELECT(22,18), "S14318C1.s14318c1f3");
    check_field_offset(lv, s14318c1f4, ABISELECT(26,22), "S14318C1.s14318c1f4");
    check_field_offset(lv, s14318c1f5, ABISELECT(32,24), "S14318C1.s14318c1f5");
  }
}
static Arrange_To_Call_Me vS14318C1(Test_S14318C1, "S14318C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18097C1  {
  void *s18097c1f0[2];
  int s18097c1f1[2];
  ::S2811C15_nt s18097c1f2;
  ::S2811C15_nt s18097c1f3;
  void  mf18097c1(); // _ZN8S18097C19mf18097c1Ev
};
//SIG(1 S18097C1) C1{ m Fp[2] Fi[2] FC2{ m} FC2}


void  S18097C1 ::mf18097c1(){}

static void Test_S18097C1()
{
  {
    init_simple_test("S18097C1");
    S18097C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S18097C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18097C1)");
    check_field_offset(lv, s18097c1f0, 0, "S18097C1.s18097c1f0");
    check_field_offset(lv, s18097c1f1, ABISELECT(16,8), "S18097C1.s18097c1f1");
    check_field_offset(lv, s18097c1f2, ABISELECT(24,16), "S18097C1.s18097c1f2");
    check_field_offset(lv, s18097c1f3, ABISELECT(25,17), "S18097C1.s18097c1f3");
  }
}
static Arrange_To_Call_Me vS18097C1(Test_S18097C1, "S18097C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3054C3  {
  int s3054c3f0;
  virtual void  v2(); // _ZN7S3054C32v2Ev
  ~S3054C3(); // tgen
  S3054C3(); // tgen
};
//SIG(-1 S3054C3) C1{ v1 Fi}


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

static void Test_S3054C3()
{
  extern Class_Descriptor cd_S3054C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3054C3, buf);
    S3054C3 *dp, &lv = *(dp=new (buf) S3054C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3054C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3054C3)");
    check_field_offset(lv, s3054c3f0, ABISELECT(8,4), "S3054C3.s3054c3f0");
    test_class_info(&lv, &cd_S3054C3);
    dp->~S3054C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3054C3(Test_S3054C3, "S3054C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3054C3C1Ev();
extern void _ZN7S3054C3D1Ev();
Name_Map name_map_S3054C3[] = {
  NSPAIR(_ZN7S3054C3C1Ev),
  NSPAIR(_ZN7S3054C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3054C3[];
extern void _ZN7S3054C32v2Ev();
static  VTBL_ENTRY vtc_S3054C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3054C3[0]),
  (VTBL_ENTRY)&_ZN7S3054C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S3054C3[];
extern  VTBL_ENTRY _ZTV7S3054C3[];
Class_Descriptor cd_S3054C3 = {  "S3054C3", // class name
  0,0,//no base classes
  &(vtc_S3054C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3054C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3054C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3054C2  : S3054C3 {
  int s3054c2f0;
  ~S3054C2(); // tgen
  S3054C2(); // tgen
};
//SIG(-1 S3054C2) C1{ BC2{ v1 Fi} Fi}


S3054C2 ::~S3054C2(){ note_dtor("S3054C2", this);} // tgen
S3054C2 ::S3054C2(){ note_ctor("S3054C2", this);} // tgen

static void Test_S3054C2()
{
  extern Class_Descriptor cd_S3054C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3054C2, buf);
    S3054C2 *dp, &lv = *(dp=new (buf) S3054C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3054C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3054C2)");
    check_base_class_offset(lv, (S3054C3*), 0, "S3054C2");
    check_field_offset(lv, s3054c2f0, ABISELECT(12,8), "S3054C2.s3054c2f0");
    test_class_info(&lv, &cd_S3054C2);
    dp->~S3054C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3054C2(Test_S3054C2, "S3054C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S3054C2C1Ev();
extern void _ZN7S3054C2D1Ev();
Name_Map name_map_S3054C2[] = {
  NSPAIR(_ZN7S3054C2C1Ev),
  NSPAIR(_ZN7S3054C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3054C3;
extern VTBL_ENTRY _ZTI7S3054C3[];
extern  VTBL_ENTRY _ZTV7S3054C3[];
static Base_Class bases_S3054C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3054C3,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3054C2[];
extern void _ZN7S3054C32v2Ev();
static  VTBL_ENTRY vtc_S3054C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3054C2[0]),
  (VTBL_ENTRY)&_ZN7S3054C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S3054C2[];
extern  VTBL_ENTRY _ZTV7S3054C2[];
Class_Descriptor cd_S3054C2 = {  "S3054C2", // class name
  bases_S3054C2, 1,
  &(vtc_S3054C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S3054C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3054C2),3, //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  S3054C1  : S3054C2 {
  int s3054c1f0;
  virtual void  v1(); // _ZN7S3054C12v1Ev
  ~S3054C1(); // tgen
  S3054C1(); // tgen
};
//SIG(1 S3054C1) C1{ BC2{ BC3{ v2 Fi} Fi} v1 Fi}


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

static void Test_S3054C1()
{
  extern Class_Descriptor cd_S3054C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3054C1, buf);
    S3054C1 *dp, &lv = *(dp=new (buf) S3054C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3054C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3054C1)");
    check_base_class_offset(lv, (S3054C3*)(S3054C2*), 0, "S3054C1");
    check_base_class_offset(lv, (S3054C2*), 0, "S3054C1");
    check_field_offset(lv, s3054c1f0, ABISELECT(16,12), "S3054C1.s3054c1f0");
    test_class_info(&lv, &cd_S3054C1);
    dp->~S3054C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3054C1(Test_S3054C1, "S3054C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3054C1C1Ev();
extern void _ZN7S3054C1D1Ev();
Name_Map name_map_S3054C1[] = {
  NSPAIR(_ZN7S3054C1C1Ev),
  NSPAIR(_ZN7S3054C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3054C3;
extern VTBL_ENTRY _ZTI7S3054C3[];
extern  VTBL_ENTRY _ZTV7S3054C3[];
extern Class_Descriptor cd_S3054C2;
extern VTBL_ENTRY _ZTI7S3054C2[];
extern  VTBL_ENTRY _ZTV7S3054C2[];
static Base_Class bases_S3054C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3054C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3054C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3054C1[];
extern void _ZN7S3054C32v2Ev();
extern void _ZN7S3054C12v1Ev();
static  VTBL_ENTRY vtc_S3054C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3054C1[0]),
  (VTBL_ENTRY)&_ZN7S3054C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3054C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S3054C1[];
extern  VTBL_ENTRY _ZTV7S3054C1[];
Class_Descriptor cd_S3054C1 = {  "S3054C1", // class name
  bases_S3054C1, 2,
  &(vtc_S3054C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3054C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3054C1),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  S17141C1  {
  int s17141c1f0[2];
  void *s17141c1f1;
  int s17141c1f2[3];
  void *s17141c1f3[2];
  void  mf17141c1(); // _ZN8S17141C19mf17141c1Ev
};
//SIG(1 S17141C1) C1{ m Fi[2] Fp Fi[3] Fp[2]}


void  S17141C1 ::mf17141c1(){}

static void Test_S17141C1()
{
  {
    init_simple_test("S17141C1");
    S17141C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S17141C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17141C1)");
    check_field_offset(lv, s17141c1f0, 0, "S17141C1.s17141c1f0");
    check_field_offset(lv, s17141c1f1, 8, "S17141C1.s17141c1f1");
    check_field_offset(lv, s17141c1f2, ABISELECT(16,12), "S17141C1.s17141c1f2");
    check_field_offset(lv, s17141c1f3, ABISELECT(32,24), "S17141C1.s17141c1f3");
  }
}
static Arrange_To_Call_Me vS17141C1(Test_S17141C1, "S17141C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11710C2  {
  long s11710c2f0;
  void *s11710c2f1[9];
};
//SIG(-1 S11710C2) C1{ Fl Fp[9]}



static void Test_S11710C2()
{
  {
    init_simple_test("S11710C2");
    S11710C2 lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S11710C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11710C2)");
    check_field_offset(lv, s11710c2f0, 0, "S11710C2.s11710c2f0");
    check_field_offset(lv, s11710c2f1, ABISELECT(8,4), "S11710C2.s11710c2f1");
  }
}
static Arrange_To_Call_Me vS11710C2(Test_S11710C2, "S11710C2", ABISELECT(80,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11710C1  {
  ::S11710C2 s11710c1f0;
  int s11710c1f1;
  void *s11710c1f2[2];
};
//SIG(1 S11710C1) C1{ FC2{ Fl Fp[9]} Fi Fp[2]}



static void Test_S11710C1()
{
  {
    init_simple_test("S11710C1");
    S11710C1 lv;
    check2(sizeof(lv), ABISELECT(104,52), "sizeof(S11710C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11710C1)");
    check_field_offset(lv, s11710c1f0, 0, "S11710C1.s11710c1f0");
    check_field_offset(lv, s11710c1f1, ABISELECT(80,40), "S11710C1.s11710c1f1");
    check_field_offset(lv, s11710c1f2, ABISELECT(88,44), "S11710C1.s11710c1f2");
  }
}
static Arrange_To_Call_Me vS11710C1(Test_S11710C1, "S11710C1", ABISELECT(104,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17787C1  {
  void *s17787c1f0;
  int s17787c1f1[2];
  ::S1503C9_nt s17787c1f2;
  void  mf17787c1(); // _ZN8S17787C19mf17787c1Ev
};
//SIG(1 S17787C1) C1{ m Fp Fi[2] FC2{ m Fi}}


void  S17787C1 ::mf17787c1(){}

static void Test_S17787C1()
{
  {
    init_simple_test("S17787C1");
    S17787C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S17787C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17787C1)");
    check_field_offset(lv, s17787c1f0, 0, "S17787C1.s17787c1f0");
    check_field_offset(lv, s17787c1f1, ABISELECT(8,4), "S17787C1.s17787c1f1");
    check_field_offset(lv, s17787c1f2, ABISELECT(16,12), "S17787C1.s17787c1f2");
  }
}
static Arrange_To_Call_Me vS17787C1(Test_S17787C1, "S17787C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17061C1  {
  int s17061c1f0[2];
  unsigned char s17061c1f1:1;
  unsigned char s17061c1f2:1;
  int s17061c1f3;
  void  mf17061c1(); // _ZN8S17061C19mf17061c1Ev
};
//SIG(1 S17061C1) C1{ m Fi[2] Fc:1 Fc:1 Fi}


void  S17061C1 ::mf17061c1(){}

static void Test_S17061C1()
{
  {
    init_simple_test("S17061C1");
    static S17061C1 lv;
    check2(sizeof(lv), 16, "sizeof(S17061C1)");
    check2(__alignof__(lv), 4, "__alignof__(S17061C1)");
    check_field_offset(lv, s17061c1f0, 0, "S17061C1.s17061c1f0");
    set_bf_and_test(lv, s17061c1f1, 8, 0, 1, 1, "S17061C1");
    set_bf_and_test(lv, s17061c1f2, 8, 1, 1, 1, "S17061C1");
    check_field_offset(lv, s17061c1f3, 12, "S17061C1.s17061c1f3");
  }
}
static Arrange_To_Call_Me vS17061C1(Test_S17061C1, "S17061C1", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18730C1  {
  __tsi64 s18730c1f0;
  int s18730c1f1;
  virtual void  v1(); // _ZN8S18730C12v1Ev
  virtual void  v2(); // _ZN8S18730C12v2Ev
  virtual void  v3(); // _ZN8S18730C12v3Ev
  virtual void  v4(); // _ZN8S18730C12v4Ev
  virtual void  v5(); // _ZN8S18730C12v5Ev
  ~S18730C1(); // tgen
  S18730C1(); // tgen
};
//SIG(1 S18730C1) C1{ v1 v2 v3 v4 v5 FL Fi}


void  S18730C1 ::v1(){vfunc_called(this, "_ZN8S18730C12v1Ev");}
void  S18730C1 ::v2(){vfunc_called(this, "_ZN8S18730C12v2Ev");}
void  S18730C1 ::v3(){vfunc_called(this, "_ZN8S18730C12v3Ev");}
void  S18730C1 ::v4(){vfunc_called(this, "_ZN8S18730C12v4Ev");}
void  S18730C1 ::v5(){vfunc_called(this, "_ZN8S18730C12v5Ev");}
S18730C1 ::~S18730C1(){ note_dtor("S18730C1", this);} // tgen
S18730C1 ::S18730C1(){ note_ctor("S18730C1", this);} // tgen

static void Test_S18730C1()
{
  extern Class_Descriptor cd_S18730C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S18730C1, buf);
    S18730C1 *dp, &lv = *(dp=new (buf) S18730C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S18730C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18730C1)");
    check_field_offset(lv, s18730c1f0, ABISELECT(8,4), "S18730C1.s18730c1f0");
    check_field_offset(lv, s18730c1f1, ABISELECT(16,12), "S18730C1.s18730c1f1");
    test_class_info(&lv, &cd_S18730C1);
    dp->~S18730C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18730C1(Test_S18730C1, "S18730C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S18730C1C1Ev();
extern void _ZN8S18730C1D1Ev();
Name_Map name_map_S18730C1[] = {
  NSPAIR(_ZN8S18730C1C1Ev),
  NSPAIR(_ZN8S18730C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18730C1[];
extern void _ZN8S18730C12v1Ev();
extern void _ZN8S18730C12v2Ev();
extern void _ZN8S18730C12v3Ev();
extern void _ZN8S18730C12v4Ev();
extern void _ZN8S18730C12v5Ev();
static  VTBL_ENTRY vtc_S18730C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18730C1[0]),
  (VTBL_ENTRY)&_ZN8S18730C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18730C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18730C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18730C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18730C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S18730C1[];
extern  VTBL_ENTRY _ZTV8S18730C1[];
Class_Descriptor cd_S18730C1 = {  "S18730C1", // class name
  0,0,//no base classes
  &(vtc_S18730C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S18730C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18730C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14686C1  {
  void *s14686c1f0[4];
  short s14686c1f1[2];
  long s14686c1f2;
  void *s14686c1f3[2];
};
//SIG(1 S14686C1) C1{ Fp[4] Fs[2] Fl Fp[2]}



static void Test_S14686C1()
{
  {
    init_simple_test("S14686C1");
    S14686C1 lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S14686C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14686C1)");
    check_field_offset(lv, s14686c1f0, 0, "S14686C1.s14686c1f0");
    check_field_offset(lv, s14686c1f1, ABISELECT(32,16), "S14686C1.s14686c1f1");
    check_field_offset(lv, s14686c1f2, ABISELECT(40,20), "S14686C1.s14686c1f2");
    check_field_offset(lv, s14686c1f3, ABISELECT(48,24), "S14686C1.s14686c1f3");
  }
}
static Arrange_To_Call_Me vS14686C1(Test_S14686C1, "S14686C1", ABISELECT(64,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15100C1  {
  char s15100c1f0;
  int s15100c1f1[2];
  void *s15100c1f2;
  int s15100c1f3[3];
  void  mf15100c1(); // _ZN8S15100C19mf15100c1Ev
};
//SIG(1 S15100C1) C1{ m Fc Fi[2] Fp Fi[3]}


void  S15100C1 ::mf15100c1(){}

static void Test_S15100C1()
{
  {
    init_simple_test("S15100C1");
    S15100C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S15100C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15100C1)");
    check_field_offset(lv, s15100c1f0, 0, "S15100C1.s15100c1f0");
    check_field_offset(lv, s15100c1f1, 4, "S15100C1.s15100c1f1");
    check_field_offset(lv, s15100c1f2, ABISELECT(16,12), "S15100C1.s15100c1f2");
    check_field_offset(lv, s15100c1f3, ABISELECT(24,16), "S15100C1.s15100c1f3");
  }
}
static Arrange_To_Call_Me vS15100C1(Test_S15100C1, "S15100C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3057C3  {
  int s3057c3f0;
  virtual void  v2(); // _ZN7S3057C32v2Ev
  ~S3057C3(); // tgen
  S3057C3(); // tgen
};
//SIG(-1 S3057C3) C1{ v1 Fi}


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

static void Test_S3057C3()
{
  extern Class_Descriptor cd_S3057C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3057C3, buf);
    S3057C3 *dp, &lv = *(dp=new (buf) S3057C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3057C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3057C3)");
    check_field_offset(lv, s3057c3f0, ABISELECT(8,4), "S3057C3.s3057c3f0");
    test_class_info(&lv, &cd_S3057C3);
    dp->~S3057C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3057C3(Test_S3057C3, "S3057C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3057C3C1Ev();
extern void _ZN7S3057C3D1Ev();
Name_Map name_map_S3057C3[] = {
  NSPAIR(_ZN7S3057C3C1Ev),
  NSPAIR(_ZN7S3057C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3057C3[];
extern void _ZN7S3057C32v2Ev();
static  VTBL_ENTRY vtc_S3057C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3057C3[0]),
  (VTBL_ENTRY)&_ZN7S3057C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S3057C3[];
extern  VTBL_ENTRY _ZTV7S3057C3[];
Class_Descriptor cd_S3057C3 = {  "S3057C3", // class name
  0,0,//no base classes
  &(vtc_S3057C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3057C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3057C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3057C2  : S3057C3 {
  virtual void  v3(); // _ZN7S3057C22v3Ev
  ~S3057C2(); // tgen
  S3057C2(); // tgen
};
//SIG(-1 S3057C2) C1{ BC2{ v2 Fi} v1}


void  S3057C2 ::v3(){vfunc_called(this, "_ZN7S3057C22v3Ev");}
S3057C2 ::~S3057C2(){ note_dtor("S3057C2", this);} // tgen
S3057C2 ::S3057C2(){ note_ctor("S3057C2", this);} // tgen

static void Test_S3057C2()
{
  extern Class_Descriptor cd_S3057C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3057C2, buf);
    S3057C2 *dp, &lv = *(dp=new (buf) S3057C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3057C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3057C2)");
    check_base_class_offset(lv, (S3057C3*), 0, "S3057C2");
    test_class_info(&lv, &cd_S3057C2);
    dp->~S3057C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3057C2(Test_S3057C2, "S3057C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3057C2C1Ev();
extern void _ZN7S3057C2D1Ev();
Name_Map name_map_S3057C2[] = {
  NSPAIR(_ZN7S3057C2C1Ev),
  NSPAIR(_ZN7S3057C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3057C3;
extern VTBL_ENTRY _ZTI7S3057C3[];
extern  VTBL_ENTRY _ZTV7S3057C3[];
static Base_Class bases_S3057C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3057C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3057C2[];
extern void _ZN7S3057C32v2Ev();
extern void _ZN7S3057C22v3Ev();
static  VTBL_ENTRY vtc_S3057C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3057C2[0]),
  (VTBL_ENTRY)&_ZN7S3057C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3057C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S3057C2[];
extern  VTBL_ENTRY _ZTV7S3057C2[];
Class_Descriptor cd_S3057C2 = {  "S3057C2", // class name
  bases_S3057C2, 1,
  &(vtc_S3057C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3057C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3057C2),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  S3057C1  : S3057C2 {
  virtual void  v1(); // _ZN7S3057C12v1Ev
  ~S3057C1(); // tgen
  S3057C1(); // tgen
};
//SIG(1 S3057C1) C1{ BC2{ BC3{ v2 Fi} v3} v1}


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

static void Test_S3057C1()
{
  extern Class_Descriptor cd_S3057C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3057C1, buf);
    S3057C1 *dp, &lv = *(dp=new (buf) S3057C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3057C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3057C1)");
    check_base_class_offset(lv, (S3057C3*)(S3057C2*), 0, "S3057C1");
    check_base_class_offset(lv, (S3057C2*), 0, "S3057C1");
    test_class_info(&lv, &cd_S3057C1);
    dp->~S3057C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3057C1(Test_S3057C1, "S3057C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3057C1C1Ev();
extern void _ZN7S3057C1D1Ev();
Name_Map name_map_S3057C1[] = {
  NSPAIR(_ZN7S3057C1C1Ev),
  NSPAIR(_ZN7S3057C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3057C3;
extern VTBL_ENTRY _ZTI7S3057C3[];
extern  VTBL_ENTRY _ZTV7S3057C3[];
extern Class_Descriptor cd_S3057C2;
extern VTBL_ENTRY _ZTI7S3057C2[];
extern  VTBL_ENTRY _ZTV7S3057C2[];
static Base_Class bases_S3057C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3057C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3057C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3057C1[];
extern void _ZN7S3057C32v2Ev();
extern void _ZN7S3057C22v3Ev();
extern void _ZN7S3057C12v1Ev();
static  VTBL_ENTRY vtc_S3057C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3057C1[0]),
  (VTBL_ENTRY)&_ZN7S3057C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3057C22v3Ev,
  (VTBL_ENTRY)&_ZN7S3057C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S3057C1[];
extern  VTBL_ENTRY _ZTV7S3057C1[];
Class_Descriptor cd_S3057C1 = {  "S3057C1", // class name
  bases_S3057C1, 2,
  &(vtc_S3057C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3057C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3057C1),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  S3055C3  {
  int s3055c3f0;
  virtual void  v2(); // _ZN7S3055C32v2Ev
  ~S3055C3(); // tgen
  S3055C3(); // tgen
};
//SIG(-1 S3055C3) C1{ v1 Fi}


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

static void Test_S3055C3()
{
  extern Class_Descriptor cd_S3055C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3055C3, buf);
    S3055C3 *dp, &lv = *(dp=new (buf) S3055C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3055C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3055C3)");
    check_field_offset(lv, s3055c3f0, ABISELECT(8,4), "S3055C3.s3055c3f0");
    test_class_info(&lv, &cd_S3055C3);
    dp->~S3055C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3055C3(Test_S3055C3, "S3055C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3055C3C1Ev();
extern void _ZN7S3055C3D1Ev();
Name_Map name_map_S3055C3[] = {
  NSPAIR(_ZN7S3055C3C1Ev),
  NSPAIR(_ZN7S3055C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3055C3[];
extern void _ZN7S3055C32v2Ev();
static  VTBL_ENTRY vtc_S3055C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3055C3[0]),
  (VTBL_ENTRY)&_ZN7S3055C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S3055C3[];
extern  VTBL_ENTRY _ZTV7S3055C3[];
Class_Descriptor cd_S3055C3 = {  "S3055C3", // class name
  0,0,//no base classes
  &(vtc_S3055C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3055C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3055C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3055C2  : S3055C3 {
  int s3055c2f0;
  ~S3055C2(); // tgen
  S3055C2(); // tgen
};
//SIG(-1 S3055C2) C1{ BC2{ v1 Fi} Fi}


S3055C2 ::~S3055C2(){ note_dtor("S3055C2", this);} // tgen
S3055C2 ::S3055C2(){ note_ctor("S3055C2", this);} // tgen

static void Test_S3055C2()
{
  extern Class_Descriptor cd_S3055C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3055C2, buf);
    S3055C2 *dp, &lv = *(dp=new (buf) S3055C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3055C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3055C2)");
    check_base_class_offset(lv, (S3055C3*), 0, "S3055C2");
    check_field_offset(lv, s3055c2f0, ABISELECT(12,8), "S3055C2.s3055c2f0");
    test_class_info(&lv, &cd_S3055C2);
    dp->~S3055C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3055C2(Test_S3055C2, "S3055C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S3055C2C1Ev();
extern void _ZN7S3055C2D1Ev();
Name_Map name_map_S3055C2[] = {
  NSPAIR(_ZN7S3055C2C1Ev),
  NSPAIR(_ZN7S3055C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3055C3;
extern VTBL_ENTRY _ZTI7S3055C3[];
extern  VTBL_ENTRY _ZTV7S3055C3[];
static Base_Class bases_S3055C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3055C3,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3055C2[];
extern void _ZN7S3055C32v2Ev();
static  VTBL_ENTRY vtc_S3055C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3055C2[0]),
  (VTBL_ENTRY)&_ZN7S3055C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S3055C2[];
extern  VTBL_ENTRY _ZTV7S3055C2[];
Class_Descriptor cd_S3055C2 = {  "S3055C2", // class name
  bases_S3055C2, 1,
  &(vtc_S3055C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S3055C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3055C2),3, //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  S3055C1  : S3055C2 {
  virtual void  v1(); // _ZN7S3055C12v1Ev
  ~S3055C1(); // tgen
  S3055C1(); // tgen
};
//SIG(1 S3055C1) C1{ BC2{ BC3{ v2 Fi} Fi} v1}


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

static void Test_S3055C1()
{
  extern Class_Descriptor cd_S3055C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3055C1, buf);
    S3055C1 *dp, &lv = *(dp=new (buf) S3055C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3055C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3055C1)");
    check_base_class_offset(lv, (S3055C3*)(S3055C2*), 0, "S3055C1");
    check_base_class_offset(lv, (S3055C2*), 0, "S3055C1");
    test_class_info(&lv, &cd_S3055C1);
    dp->~S3055C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3055C1(Test_S3055C1, "S3055C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S3055C1C1Ev();
extern void _ZN7S3055C1D1Ev();
Name_Map name_map_S3055C1[] = {
  NSPAIR(_ZN7S3055C1C1Ev),
  NSPAIR(_ZN7S3055C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3055C3;
extern VTBL_ENTRY _ZTI7S3055C3[];
extern  VTBL_ENTRY _ZTV7S3055C3[];
extern Class_Descriptor cd_S3055C2;
extern VTBL_ENTRY _ZTI7S3055C2[];
extern  VTBL_ENTRY _ZTV7S3055C2[];
static Base_Class bases_S3055C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3055C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3055C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3055C1[];
extern void _ZN7S3055C32v2Ev();
extern void _ZN7S3055C12v1Ev();
static  VTBL_ENTRY vtc_S3055C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3055C1[0]),
  (VTBL_ENTRY)&_ZN7S3055C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3055C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S3055C1[];
extern  VTBL_ENTRY _ZTV7S3055C1[];
Class_Descriptor cd_S3055C1 = {  "S3055C1", // class name
  bases_S3055C1, 2,
  &(vtc_S3055C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S3055C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3055C1),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  S20178C2  {
  int s20178c2f0;
  virtual void  v4(); // _ZN8S20178C22v4Ev
  ~S20178C2(); // tgen
  S20178C2(); // tgen
};
//SIG(-1 S20178C2) C1{ v1 Fi}


void  S20178C2 ::v4(){vfunc_called(this, "_ZN8S20178C22v4Ev");}
S20178C2 ::~S20178C2(){ note_dtor("S20178C2", this);} // tgen
S20178C2 ::S20178C2(){ note_ctor("S20178C2", this);} // tgen

static void Test_S20178C2()
{
  extern Class_Descriptor cd_S20178C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20178C2, buf);
    S20178C2 *dp, &lv = *(dp=new (buf) S20178C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20178C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20178C2)");
    check_field_offset(lv, s20178c2f0, ABISELECT(8,4), "S20178C2.s20178c2f0");
    test_class_info(&lv, &cd_S20178C2);
    dp->~S20178C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20178C2(Test_S20178C2, "S20178C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20178C2C1Ev();
extern void _ZN8S20178C2D1Ev();
Name_Map name_map_S20178C2[] = {
  NSPAIR(_ZN8S20178C2C1Ev),
  NSPAIR(_ZN8S20178C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20178C2[];
extern void _ZN8S20178C22v4Ev();
static  VTBL_ENTRY vtc_S20178C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20178C2[0]),
  (VTBL_ENTRY)&_ZN8S20178C22v4Ev,
};
extern VTBL_ENTRY _ZTI8S20178C2[];
extern  VTBL_ENTRY _ZTV8S20178C2[];
Class_Descriptor cd_S20178C2 = {  "S20178C2", // class name
  0,0,//no base classes
  &(vtc_S20178C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20178C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20178C2),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20178C1  : virtual S20178C2 {
  virtual void  v1(); // _ZN8S20178C12v1Ev
  virtual void  v2(); // _ZN8S20178C12v2Ev
  virtual void  v3(); // _ZN8S20178C12v3Ev
  ~S20178C1(); // tgen
  S20178C1(); // tgen
};
//SIG(1 S20178C1) C1{ VBC2{ v4 Fi} v1 v2 v3}


void  S20178C1 ::v1(){vfunc_called(this, "_ZN8S20178C12v1Ev");}
void  S20178C1 ::v2(){vfunc_called(this, "_ZN8S20178C12v2Ev");}
void  S20178C1 ::v3(){vfunc_called(this, "_ZN8S20178C12v3Ev");}
S20178C1 ::~S20178C1(){ note_dtor("S20178C1", this);} // tgen
S20178C1 ::S20178C1(){ note_ctor("S20178C1", this);} // tgen

static void Test_S20178C1()
{
  extern Class_Descriptor cd_S20178C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20178C1, buf);
    S20178C1 *dp, &lv = *(dp=new (buf) S20178C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20178C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20178C1)");
    check_base_class_offset(lv, (S20178C2*), ABISELECT(8,4), "S20178C1");
    test_class_info(&lv, &cd_S20178C1);
    dp->~S20178C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20178C1(Test_S20178C1, "S20178C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20178C1C1Ev();
extern void _ZN8S20178C1D1Ev();
Name_Map name_map_S20178C1[] = {
  NSPAIR(_ZN8S20178C1C1Ev),
  NSPAIR(_ZN8S20178C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20178C2;
extern VTBL_ENTRY _ZTI8S20178C2[];
extern  VTBL_ENTRY _ZTV8S20178C2[];
static Base_Class bases_S20178C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20178C2,    ABISELECT(8,4), //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20178C1[];
extern void _ZN8S20178C12v1Ev();
extern void _ZN8S20178C12v2Ev();
extern void _ZN8S20178C12v3Ev();
extern void _ZN8S20178C22v4Ev();
static  VTBL_ENTRY vtc_S20178C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20178C1[0]),
  (VTBL_ENTRY)&_ZN8S20178C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20178C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20178C12v3Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20178C1[0]),
  (VTBL_ENTRY)&_ZN8S20178C22v4Ev,
};
extern VTBL_ENTRY _ZTV8S20178C1[];
static  VTT_ENTRY vtt_S20178C1[] = {
  {&(_ZTV8S20178C1[3]),  3,10},
  {&(_ZTV8S20178C1[9]),  9,10},
};
extern VTBL_ENTRY _ZTI8S20178C1[];
extern  VTBL_ENTRY _ZTV8S20178C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20178C1[];
Class_Descriptor cd_S20178C1 = {  "S20178C1", // class name
  bases_S20178C1, 1,
  &(vtc_S20178C1[0]), // expected_vtbl_contents
  &(vtt_S20178C1[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20178C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20178C1),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20178C1),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  S14626C1  {
  void *s14626c1f0[3];
  int s14626c1f1[3];
  char s14626c1f2[2];
};
//SIG(1 S14626C1) C1{ Fp[3] Fi[3] Fc[2]}



static void Test_S14626C1()
{
  {
    init_simple_test("S14626C1");
    S14626C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S14626C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14626C1)");
    check_field_offset(lv, s14626c1f0, 0, "S14626C1.s14626c1f0");
    check_field_offset(lv, s14626c1f1, ABISELECT(24,12), "S14626C1.s14626c1f1");
    check_field_offset(lv, s14626c1f2, ABISELECT(36,24), "S14626C1.s14626c1f2");
  }
}
static Arrange_To_Call_Me vS14626C1(Test_S14626C1, "S14626C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12057C1  {
  ::S2366C14_nt s12057c1f0;
  int s12057c1f1[3];
};
//SIG(1 S12057C1) C1{ FC2{ m Fi[2]} Fi[3]}



static void Test_S12057C1()
{
  {
    init_simple_test("S12057C1");
    S12057C1 lv;
    check2(sizeof(lv), 20, "sizeof(S12057C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12057C1)");
    check_field_offset(lv, s12057c1f0, 0, "S12057C1.s12057c1f0");
    check_field_offset(lv, s12057c1f1, 8, "S12057C1.s12057c1f1");
  }
}
static Arrange_To_Call_Me vS12057C1(Test_S12057C1, "S12057C1", 20);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14156C1  {
  void *s14156c1f0;
  int s14156c1f1;
  char s14156c1f2[100];
  int s14156c1f3;
};
//SIG(1 S14156C1) C1{ Fp Fi Fc[100] Fi}



static void Test_S14156C1()
{
  {
    init_simple_test("S14156C1");
    S14156C1 lv;
    check2(sizeof(lv), ABISELECT(120,112), "sizeof(S14156C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14156C1)");
    check_field_offset(lv, s14156c1f0, 0, "S14156C1.s14156c1f0");
    check_field_offset(lv, s14156c1f1, ABISELECT(8,4), "S14156C1.s14156c1f1");
    check_field_offset(lv, s14156c1f2, ABISELECT(12,8), "S14156C1.s14156c1f2");
    check_field_offset(lv, s14156c1f3, ABISELECT(112,108), "S14156C1.s14156c1f3");
  }
}
static Arrange_To_Call_Me vS14156C1(Test_S14156C1, "S14156C1", ABISELECT(120,112));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13049C1  {
  int s13049c1f0[2];
  char s13049c1f1[512];
  int s13049c1f2;
};
//SIG(1 S13049C1) C1{ Fi[2] Fc[512] Fi}



static void Test_S13049C1()
{
  {
    init_simple_test("S13049C1");
    S13049C1 lv;
    check2(sizeof(lv), 524, "sizeof(S13049C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13049C1)");
    check_field_offset(lv, s13049c1f0, 0, "S13049C1.s13049c1f0");
    check_field_offset(lv, s13049c1f1, 8, "S13049C1.s13049c1f1");
    check_field_offset(lv, s13049c1f2, 520, "S13049C1.s13049c1f2");
  }
}
static Arrange_To_Call_Me vS13049C1(Test_S13049C1, "S13049C1", 524);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12253C1  {
  int s12253c1f0;
  char s12253c1f1[256];
  int s12253c1f2[3];
};
//SIG(1 S12253C1) C1{ Fi Fc[256] Fi[3]}



static void Test_S12253C1()
{
  {
    init_simple_test("S12253C1");
    S12253C1 lv;
    check2(sizeof(lv), 272, "sizeof(S12253C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12253C1)");
    check_field_offset(lv, s12253c1f0, 0, "S12253C1.s12253c1f0");
    check_field_offset(lv, s12253c1f1, 4, "S12253C1.s12253c1f1");
    check_field_offset(lv, s12253c1f2, 260, "S12253C1.s12253c1f2");
  }
}
static Arrange_To_Call_Me vS12253C1(Test_S12253C1, "S12253C1", 272);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14493C1  {
  void *s14493c1f0[2];
  ::S2366C19 s14493c1f1;
};
//SIG(1 S14493C1) C1{ Fp[2] FC2{ m Fp}}



static void Test_S14493C1()
{
  {
    init_simple_test("S14493C1");
    S14493C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S14493C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14493C1)");
    check_field_offset(lv, s14493c1f0, 0, "S14493C1.s14493c1f0");
    check_field_offset(lv, s14493c1f1, ABISELECT(16,8), "S14493C1.s14493c1f1");
  }
}
static Arrange_To_Call_Me vS14493C1(Test_S14493C1, "S14493C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6270C1  : S2811C15_nt , virtual S629C14 {
  long double s6270c1f0;
  ~S6270C1(); // tgen
  S6270C1(); // tgen
};
//SIG(1 S6270C1) C1{ BC2{ m} VBC3{ m} FD}


S6270C1 ::~S6270C1(){ note_dtor("S6270C1", this);} // tgen
S6270C1 ::S6270C1(){ note_ctor("S6270C1", this);} // tgen

static void Test_S6270C1()
{
  extern Class_Descriptor cd_S6270C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3,5)];
    init_test(&cd_S6270C1, buf);
    S6270C1 *dp, &lv = *(dp=new (buf) S6270C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S6270C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6270C1)");
    check_base_class_offset(lv, (S2811C15_nt*), 0, "S6270C1");
    check_base_class_offset(lv, (S629C14*), 0, "S6270C1");
    check_field_offset(lv, s6270c1f0, ABISELECT(16,4), "S6270C1.s6270c1f0");
    test_class_info(&lv, &cd_S6270C1);
    dp->~S6270C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6270C1(Test_S6270C1, "S6270C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S6270C1C1Ev();
extern void _ZN7S6270C1D1Ev();
Name_Map name_map_S6270C1[] = {
  NSPAIR(_ZN7S6270C1C1Ev),
  NSPAIR(_ZN7S6270C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2811C15_nt;
extern VTBL_ENTRY _ZTI11S2811C15_nt[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
static Base_Class bases_S6270C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2811C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S629C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S6270C1[];
static  VTBL_ENTRY vtc_S6270C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6270C1[0]),
};
extern VTBL_ENTRY _ZTV7S6270C1[];
static  VTT_ENTRY vtt_S6270C1[] = {
  {&(_ZTV7S6270C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6270C1[];
extern  VTBL_ENTRY _ZTV7S6270C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6270C1[];
Class_Descriptor cd_S6270C1 = {  "S6270C1", // class name
  bases_S6270C1, 2,
  &(vtc_S6270C1[0]), // expected_vtbl_contents
  &(vtt_S6270C1[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S6270C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6270C1),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6270C1),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  S6235C1  : S2811C15_nt {
  void *s6235c1f0;
  int s6235c1f1[5];
};
//SIG(1 S6235C1) C1{ BC2{ m} Fp Fi[5]}



static void Test_S6235C1()
{
  extern Class_Descriptor cd_S6235C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S6235C1, buf);
    S6235C1 &lv = *(new (buf) S6235C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S6235C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6235C1)");
    check_base_class_offset(lv, (S2811C15_nt*), 0, "S6235C1");
    check_field_offset(lv, s6235c1f0, 0, "S6235C1.s6235c1f0");
    check_field_offset(lv, s6235c1f1, ABISELECT(8,4), "S6235C1.s6235c1f1");
    test_class_info(&lv, &cd_S6235C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6235C1(Test_S6235C1, "S6235C1", ABISELECT(32,24));

#else // __cplusplus

extern Class_Descriptor cd_S2811C15_nt;
extern VTBL_ENTRY _ZTI11S2811C15_nt[];
static Base_Class bases_S6235C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2811C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S6235C1 = {  "S6235C1", // class name
  bases_S6235C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,24), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18637C1  {
  long s18637c1f0[8];
  virtual void  v1(); // _ZN8S18637C12v1Ev
  virtual void  v2(); // _ZN8S18637C12v2Ev
  virtual void  v3(); // _ZN8S18637C12v3Ev
  ~S18637C1(); // tgen
  S18637C1(); // tgen
};
//SIG(1 S18637C1) C1{ v1 v2 v3 Fl[8]}


void  S18637C1 ::v1(){vfunc_called(this, "_ZN8S18637C12v1Ev");}
void  S18637C1 ::v2(){vfunc_called(this, "_ZN8S18637C12v2Ev");}
void  S18637C1 ::v3(){vfunc_called(this, "_ZN8S18637C12v3Ev");}
S18637C1 ::~S18637C1(){ note_dtor("S18637C1", this);} // tgen
S18637C1 ::S18637C1(){ note_ctor("S18637C1", this);} // tgen

static void Test_S18637C1()
{
  extern Class_Descriptor cd_S18637C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S18637C1, buf);
    S18637C1 *dp, &lv = *(dp=new (buf) S18637C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S18637C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18637C1)");
    check_field_offset(lv, s18637c1f0, ABISELECT(8,4), "S18637C1.s18637c1f0");
    test_class_info(&lv, &cd_S18637C1);
    dp->~S18637C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18637C1(Test_S18637C1, "S18637C1", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S18637C1C1Ev();
extern void _ZN8S18637C1D1Ev();
Name_Map name_map_S18637C1[] = {
  NSPAIR(_ZN8S18637C1C1Ev),
  NSPAIR(_ZN8S18637C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18637C1[];
extern void _ZN8S18637C12v1Ev();
extern void _ZN8S18637C12v2Ev();
extern void _ZN8S18637C12v3Ev();
static  VTBL_ENTRY vtc_S18637C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18637C1[0]),
  (VTBL_ENTRY)&_ZN8S18637C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18637C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18637C12v3Ev,
};
extern VTBL_ENTRY _ZTI8S18637C1[];
extern  VTBL_ENTRY _ZTV8S18637C1[];
Class_Descriptor cd_S18637C1 = {  "S18637C1", // class name
  0,0,//no base classes
  &(vtc_S18637C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S18637C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18637C1),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  S17866C1  {
  void *s17866c1f0[2];
  char s17866c1f1[2];
  void  mf17866c1(); // _ZN8S17866C19mf17866c1Ev
};
//SIG(1 S17866C1) C1{ m Fp[2] Fc[2]}


void  S17866C1 ::mf17866c1(){}

static void Test_S17866C1()
{
  {
    init_simple_test("S17866C1");
    S17866C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S17866C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17866C1)");
    check_field_offset(lv, s17866c1f0, 0, "S17866C1.s17866c1f0");
    check_field_offset(lv, s17866c1f1, ABISELECT(16,8), "S17866C1.s17866c1f1");
  }
}
static Arrange_To_Call_Me vS17866C1(Test_S17866C1, "S17866C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17279C1  {
  int s17279c1f0[6];
  void *s17279c1f1[3];
  void  mf17279c1(); // _ZN8S17279C19mf17279c1Ev
};
//SIG(1 S17279C1) C1{ m Fi[6] Fp[3]}


void  S17279C1 ::mf17279c1(){}

static void Test_S17279C1()
{
  {
    init_simple_test("S17279C1");
    S17279C1 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S17279C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17279C1)");
    check_field_offset(lv, s17279c1f0, 0, "S17279C1.s17279c1f0");
    check_field_offset(lv, s17279c1f1, 24, "S17279C1.s17279c1f1");
  }
}
static Arrange_To_Call_Me vS17279C1(Test_S17279C1, "S17279C1", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17794C1  {
  void *s17794c1f0;
  int s17794c1f1[2];
  __tsi64 s17794c1f2;
  void  mf17794c1(); // _ZN8S17794C19mf17794c1Ev
};
//SIG(1 S17794C1) C1{ m Fp Fi[2] FL}


void  S17794C1 ::mf17794c1(){}

static void Test_S17794C1()
{
  {
    init_simple_test("S17794C1");
    S17794C1 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S17794C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17794C1)");
    check_field_offset(lv, s17794c1f0, 0, "S17794C1.s17794c1f0");
    check_field_offset(lv, s17794c1f1, ABISELECT(8,4), "S17794C1.s17794c1f1");
    check_field_offset(lv, s17794c1f2, ABISELECT(16,12), "S17794C1.s17794c1f2");
  }
}
static Arrange_To_Call_Me vS17794C1(Test_S17794C1, "S17794C1", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11800C2_nt  {
  long s11800c2f0;
};
//SIG(-1 S11800C2_nt) C1{ Fl}



//skip512 S11800C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11800C1  {
  ::S11800C2_nt s11800c1f0;
  int s11800c1f1[3];
};
//SIG(1 S11800C1) C1{ FC2{ Fl} Fi[3]}



static void Test_S11800C1()
{
  {
    init_simple_test("S11800C1");
    S11800C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S11800C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11800C1)");
    check_field_offset(lv, s11800c1f0, 0, "S11800C1.s11800c1f0");
    check_field_offset(lv, s11800c1f1, ABISELECT(8,4), "S11800C1.s11800c1f1");
  }
}
static Arrange_To_Call_Me vS11800C1(Test_S11800C1, "S11800C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21939C1  {
  void *s21939c1f0[5];
  virtual  ~S21939C1(); // _ZN8S21939C1D1Ev
  virtual void  v1(); // _ZN8S21939C12v1Ev
  S21939C1(); // tgen
};
//SIG(1 S21939C1) C1{ vd v1 Fp[5]}


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

static void Test_S21939C1()
{
  extern Class_Descriptor cd_S21939C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S21939C1, buf);
    S21939C1 *dp, &lv = *(dp=new (buf) S21939C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S21939C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21939C1)");
    check_field_offset(lv, s21939c1f0, ABISELECT(8,4), "S21939C1.s21939c1f0");
    test_class_info(&lv, &cd_S21939C1);
    dp->~S21939C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21939C1(Test_S21939C1, "S21939C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S21939C1C1Ev();
extern void _ZN8S21939C1D1Ev();
Name_Map name_map_S21939C1[] = {
  NSPAIR(_ZN8S21939C1C1Ev),
  NSPAIR(_ZN8S21939C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21939C1[];
extern void _ZN8S21939C1D1Ev();
extern void _ZN8S21939C1D0Ev();
extern void _ZN8S21939C12v1Ev();
static  VTBL_ENTRY vtc_S21939C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21939C1[0]),
  (VTBL_ENTRY)&_ZN8S21939C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21939C1D0Ev,
  (VTBL_ENTRY)&_ZN8S21939C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S21939C1[];
extern  VTBL_ENTRY _ZTV8S21939C1[];
Class_Descriptor cd_S21939C1 = {  "S21939C1", // class name
  0,0,//no base classes
  &(vtc_S21939C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S21939C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21939C1),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  S12747C1  {
  int s12747c1f0;
  void *s12747c1f1[2];
  char s12747c1f2;
};
//SIG(1 S12747C1) C1{ Fi Fp[2] Fc}



static void Test_S12747C1()
{
  {
    init_simple_test("S12747C1");
    S12747C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S12747C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12747C1)");
    check_field_offset(lv, s12747c1f0, 0, "S12747C1.s12747c1f0");
    check_field_offset(lv, s12747c1f1, ABISELECT(8,4), "S12747C1.s12747c1f1");
    check_field_offset(lv, s12747c1f2, ABISELECT(24,12), "S12747C1.s12747c1f2");
  }
}
static Arrange_To_Call_Me vS12747C1(Test_S12747C1, "S12747C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14160C1  {
  void *s14160c1f0;
  int s14160c1f1;
  char s14160c1f2[2];
};
//SIG(1 S14160C1) C1{ Fp Fi Fc[2]}



static void Test_S14160C1()
{
  {
    init_simple_test("S14160C1");
    S14160C1 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S14160C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14160C1)");
    check_field_offset(lv, s14160c1f0, 0, "S14160C1.s14160c1f0");
    check_field_offset(lv, s14160c1f1, ABISELECT(8,4), "S14160C1.s14160c1f1");
    check_field_offset(lv, s14160c1f2, ABISELECT(12,8), "S14160C1.s14160c1f2");
  }
}
static Arrange_To_Call_Me vS14160C1(Test_S14160C1, "S14160C1", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13377C1  {
  int s13377c1f0[3];
  void *s13377c1f1;
  __tsi64 s13377c1f2;
};
//SIG(1 S13377C1) C1{ Fi[3] Fp FL}



static void Test_S13377C1()
{
  {
    init_simple_test("S13377C1");
    S13377C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S13377C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13377C1)");
    check_field_offset(lv, s13377c1f0, 0, "S13377C1.s13377c1f0");
    check_field_offset(lv, s13377c1f1, ABISELECT(16,12), "S13377C1.s13377c1f1");
    check_field_offset(lv, s13377c1f2, ABISELECT(24,16), "S13377C1.s13377c1f2");
  }
}
static Arrange_To_Call_Me vS13377C1(Test_S13377C1, "S13377C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18331C1  {
  void *s18331c1f0[3];
  __tsi64 s18331c1f1;
  void  mf18331c1(); // _ZN8S18331C19mf18331c1Ev
};
//SIG(1 S18331C1) C1{ m Fp[3] FL}


void  S18331C1 ::mf18331c1(){}

static void Test_S18331C1()
{
  {
    init_simple_test("S18331C1");
    S18331C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S18331C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18331C1)");
    check_field_offset(lv, s18331c1f0, 0, "S18331C1.s18331c1f0");
    check_field_offset(lv, s18331c1f1, ABISELECT(24,12), "S18331C1.s18331c1f1");
  }
}
static Arrange_To_Call_Me vS18331C1(Test_S18331C1, "S18331C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6366C2  {
  int s6366c2f0;
  virtual void  v1(); // _ZN7S6366C22v1Ev
  ~S6366C2(); // tgen
  S6366C2(); // tgen
};
//SIG(-1 S6366C2) C1{ v1 Fi}


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

static void Test_S6366C2()
{
  extern Class_Descriptor cd_S6366C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6366C2, buf);
    S6366C2 *dp, &lv = *(dp=new (buf) S6366C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6366C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6366C2)");
    check_field_offset(lv, s6366c2f0, ABISELECT(8,4), "S6366C2.s6366c2f0");
    test_class_info(&lv, &cd_S6366C2);
    dp->~S6366C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6366C2(Test_S6366C2, "S6366C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6366C2C1Ev();
extern void _ZN7S6366C2D1Ev();
Name_Map name_map_S6366C2[] = {
  NSPAIR(_ZN7S6366C2C1Ev),
  NSPAIR(_ZN7S6366C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6366C2[];
extern void _ZN7S6366C22v1Ev();
static  VTBL_ENTRY vtc_S6366C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6366C2[0]),
  (VTBL_ENTRY)&_ZN7S6366C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S6366C2[];
extern  VTBL_ENTRY _ZTV7S6366C2[];
Class_Descriptor cd_S6366C2 = {  "S6366C2", // class name
  0,0,//no base classes
  &(vtc_S6366C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6366C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6366C2),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6366C1  : S6366C2 {
  ~S6366C1(); // tgen
  S6366C1(); // tgen
};
//SIG(1 S6366C1) C1{ BC2{ v1 Fi}}


S6366C1 ::~S6366C1(){ note_dtor("S6366C1", this);} // tgen
S6366C1 ::S6366C1(){ note_ctor("S6366C1", this);} // tgen

static void Test_S6366C1()
{
  extern Class_Descriptor cd_S6366C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6366C1, buf);
    S6366C1 *dp, &lv = *(dp=new (buf) S6366C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6366C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6366C1)");
    check_base_class_offset(lv, (S6366C2*), 0, "S6366C1");
    test_class_info(&lv, &cd_S6366C1);
    dp->~S6366C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6366C1(Test_S6366C1, "S6366C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6366C1C1Ev();
extern void _ZN7S6366C1D1Ev();
Name_Map name_map_S6366C1[] = {
  NSPAIR(_ZN7S6366C1C1Ev),
  NSPAIR(_ZN7S6366C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6366C2;
extern VTBL_ENTRY _ZTI7S6366C2[];
extern  VTBL_ENTRY _ZTV7S6366C2[];
static Base_Class bases_S6366C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6366C2,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6366C1[];
extern void _ZN7S6366C22v1Ev();
static  VTBL_ENTRY vtc_S6366C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6366C1[0]),
  (VTBL_ENTRY)&_ZN7S6366C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S6366C1[];
extern  VTBL_ENTRY _ZTV7S6366C1[];
Class_Descriptor cd_S6366C1 = {  "S6366C1", // class name
  bases_S6366C1, 1,
  &(vtc_S6366C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6366C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6366C1),3, //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  S12208C1  {
  int s12208c1f0;
  char s12208c1f1;
  int s12208c1f2;
};
//SIG(1 S12208C1) C1{ Fi Fc Fi}



static void Test_S12208C1()
{
  {
    init_simple_test("S12208C1");
    S12208C1 lv;
    check2(sizeof(lv), 12, "sizeof(S12208C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12208C1)");
    check_field_offset(lv, s12208c1f0, 0, "S12208C1.s12208c1f0");
    check_field_offset(lv, s12208c1f1, 4, "S12208C1.s12208c1f1");
    check_field_offset(lv, s12208c1f2, 8, "S12208C1.s12208c1f2");
  }
}
static Arrange_To_Call_Me vS12208C1(Test_S12208C1, "S12208C1", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12191C1  {
  ::S20677C6_nt s12191c1f0;
  void *s12191c1f1;
};
//SIG(1 S12191C1) C1{ FC2{} Fp}



static void Test_S12191C1()
{
  {
    init_simple_test("S12191C1");
    S12191C1 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S12191C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12191C1)");
    check_field_offset(lv, s12191c1f0, 0, "S12191C1.s12191c1f0");
    check_field_offset(lv, s12191c1f1, ABISELECT(8,4), "S12191C1.s12191c1f1");
  }
}
static Arrange_To_Call_Me vS12191C1(Test_S12191C1, "S12191C1", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

